# Feeds & Moderation

## Running a Node

Running a node gives you full access to the DeSo firehose. Access to every profile, post, follow, creator coin trade, etc... But what can you do with all this power?

### **Running your own feed**

When you run a node, it starts with a blank global feed and an "Admin" panel that you can use to start adding posts to it.\
\
All of the same tools that the [Diamond](https://github.com/deso-protocol/docs/blob/main/diamondapp.com) team uses to manage their global feed are now available to you to manage a feed of your own. Essentially, running a DeSo node allows you to expose your own "view" of the firehose of content. \
\
[Diamond](https://diamondapp.com) exposes all of the crypto-related content, but when you run your own node you have full control to surface whatever content speaks to you.\
\
What will you do with your feed? Here are some ideas for feeds that we think would be popular:

* **A feed for every country and every language.** Isn't it weird that people all over the world consume information curated predominantly by the US? \
  \
  How much does an engineer working in Silicon Valley really know about what people in other countries want to see, or what features they want?\
  \
  In the past, we were stuck with this model because US companies built a data network effect that entrenched them, even in non-US countries.\
  \
  But DeSo can break this status quo because all of its data is open and the barrier to entry to starting a competitive feed is virtually zero.\
  \
  For the first time, people who actually live in a country can curate a feed for their people, no matter how large or small their country is.\
  \
  And this applies to every country that succumbed too quickly to the network effects of the Silicon Valley tech companies. By lowering the barrier to entry to creating a feed, and opening up the data firehose to anyone, we think DeSo has the potential to bring international social media products to a whole new level.\

* **The politics-focused feed.** It is entirely possible to create a node that prioritizes political content. Imagine a feed where all the posts from the top political figures are highlighted.\
  \
  You could even imagine segmenting the firehose into two feeds: a "red" feed and a "blue" feed that's dedicated to each political party.\

* **The sports-focused feed.** Wouldn't it make sense for someone to operate a feed that just highlights all of the best sports content from the best sports influencers?\
  \
  So many people are interested in this content, and we think it deserves its own feed.\

* **The NSFW feed.** Not all platforms will show NSFW content in their feed, for example because their user-base is too mainstream. This bias against NSFW content is even stronger with incumbent social media companies.\
  \
  Yet there are so many talented adult influencers on the DeSo blockchain, with thousands of followers, who are posting every day. It's about time they had their own feed dedicated to them.

We're just scratching the surface here — it's now up to you, the community, to figure out how best to display the DeSo firehose.\
\
Reddit pioneered the concept of a "subreddit," but the problem with a subreddit is that every time one is created, it has to solve a "chicken and egg" problem with regard to its content.\
\
If nobody is posting, then the subreddit has no content — but without content, nobody will start posting.\
\
DeSo basically takes the subreddit concept to the next level by solving the "content" part of the equation for everyone. When you run a node, you don't need to bootstrap content because you have full access to the DeSo content.\
\
All you need to do is curate it in some interesting way and you'll have created value for anyone who visits your node.

### Add social to your platform

Suppose you're a platform with millions of users like Coinbase or Robinhood, or even traditional media companies like ESPN. Your users would probably love it if you could integrate a social component into your products — but you can't because Twitter and Facebook don't allow it.\
\
They [closed down their APIs](https://theverge.com/2018/8/16/17699626/twitter-third-party-apps-streaming-api-deprecation) a long time ago because they realized that third-party integrations eat into their ad revenue. Every user who engages on a third-party platform is a user who's engaging less on Twitter and Facebook.

With DeSo, you don't need to build a billion-user data moat in order to be able to add social features to your platform.\
\
All you need to do is run a DeSo node, and use its API to expose whatever content you want. Suddenly, with just one engineer's worth of effort, any major platform can spin up a social product that's adjacent to its core business.\
\
Moreover, it's possible that the best feeds will come from existing publishers that have already built a competency in a particular area.\
\
For example, ESPN might be the best entity to run the sports-focused feed because of their relationships and connections, and now they can.

### Analysis tools

Building the best analysis tools requires access to the best data, and running a node is the best way to get full access to the DeSo firehose.\
\
Until now, the DeSo nodes have had to set up rate limits to avoid having our machines get overloaded.\
\
But now, because DeSo is a blockchain that allows anyone to run a full copy of the platform, anyone who wants to build analytics tools can simply run a node and query it in whatever way they want.

### Invent your own features

When you run a node, you have the flexibility to expose the DeSo content in whatever way most resonates with your users.\
\
We recommend starting with the frontend source code provided by the DeSo Foundation, but if you wanted to, you could even build a whole new frontend with totally different features than what the "default" node gives you.\
\
If you feel like DeSo ecosystem is missing a feature, like dark mode, paid messages, or better filtering for spam for example, now you can build it and run your own node to back it.

### Making Money on Your Node

Incentives are key to making DeSo truly decentralized in the long run. It's not sufficient that nodes be runnable by the community, they must be _profitable_ to run as well. Many cryptocurrencies struggle with this, and even Bitcoin and Ethereum nodes are still largely run by volunteers.\
\
DeSo is truly unique in this regard, however, because the social features it introduces give node operators incentives that other blockchains don't have.

The above being said, there are several ways that DeSo node operators can earn a profit:

* **Promoted content.** Because running a node comes with the ability to have a social media product with minimal marginal effort, every node operator has an opportunity to amass and monetize the reach that comes from curating a popular feed.\
  \
  This can be as simple as showing promoted posts that partners pay the node operator to pin to their feed.\

* **Trading fees.** Anyone who runs a node can modify their frontend to add trading fees on every creator coin trade, which go to the node operator's wallet. By doing this, any node operator basically doubles as a crypto exchange.\

* **Other transaction fees.** Any transaction users complete on one's node can be augmented to contain a small fee that goes to the node operator. Thus there should eventually arise an efficient market for node operator fees that are high enough to justify operating a node.

The above mechanisms don't even factor in profits that could be derived from augmenting the DeSo feature set.\
\
For example, if someone creates an app experience for DeSo that is significantly better than alternatives, they could even charge a monthly subscription fee or some other premium to cover costs.

### How to Run a Node

Running a node currently requires a modest amount of technical know-how. For full instructions on how to run a node, check out this GitHub repository:

* [https://github.com/deso-protocol/run](https://github.com/deso-protocol/run)

Once a node is running, it syncs all of the blocks from its peers, as well as the transactions in the "mempool," which have yet to be mined into a block.\
\
Every node comes with an Admin panel with a Network tab that allows you to monitor the node's sync state.

![](https://2518439156-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjtaOFcYRNwtiQWQDqI%2Fsync%2F50a21a0810995a8c83f6e654cf3fc46a83293238.png?generation=1632716732331646\&alt=media)

Once your node is synced, you have access to the full firehose of DeSo data in real-time!\
\
Below are some tips on how to take full advantage of your node.

* Go to your Admin tab and watch the unfiltered feed update as your node syncs. It's like a time machine!
* Try to whitelist some posts in the Admin tab and see that they've made their way onto your global feed.
* Read through the flags available in the [dev.env](https://github.com/deso-protocol/run/blob/main/dev.env) file. You can adjust these flags however you want, but note that we strongly recommend keeping your node in read-only mode for now. Turning read-only mode off could cause users who visit your node to make transactions that are not ultimately confirmed.
* Set `ADMIN_PUBLIC_KEYS` to your public key so that the Admin tab is only visible to your username.
* Set `SUPER_ADMIN_PUBLIC_KEYS` to your public key so that the Super Admin tab is only visible to your username.
* Whitelist some posts and verify that they show up on the global feed.
* Deploy your node on any cloud provider with a static IP to make it accessible to anyone on the internet.
* Set a `PASSWORDS_FILE` if you want to restrict read access to your node.
* Add an `SSL_CERT_DIR` and `SSL_DOMAIN` using a letsencrypt cert in order to protect your node with HTTPS.
* Set the `TWILIO*` flags to allow new users to get some starter $DESO.
* Set a `SUPPORT_EMAIL` so your users can contact you if they run into trouble.
* Play with the logging verbosity by increasing `GLOG_V`.

### Managing Your Feed

To manage your feed, start by navigating to the Admin tab as shown below.\
\
The Admin tab shows the full firehose of posts in real-time, with a button next to each one that allows you to add it to the global feed. \
\
These are all the same tools that the [Diamond](https://diamondapp.com) mods have, now at your fingertips through the power of decentralization.

![](https://2518439156-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjtaOFcYRNwtiQWQDqI%2F-Mk5zzF_hKAP4fkHTSab%2F-Mk6-1vIjAZU__FSX_r3%2Fimage-deso-2%20\(8\)%20\(1\)%20\(2\)%20\(2\)%20\(2\)%20\(2\).png?alt=media\&token=60ea9adb-e163-4126-949c-494c95dba8b8)

You can also add any post from anyone's profile to the global feed simply by hitting the dropdown at the top-right of the post.\
\
You can also pin posts to your feed, which is a good way of communicating announcements to your user base.

![](https://2518439156-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjtaOFcYRNwtiQWQDqI%2F-Mk5Pc2sPcQbclGOfN3E%2F-Mk5t9kZGi1Wgtn8Pu2z%2Fimage-deso-2%20\(3\).png?alt=media\&token=00417b73-b06f-4bba-8638-9b8f18cccc85)

When you run a node, you act as a moderator and have a variety of superpowers that help you manage spam and harmful content.

* **Blacklisting** a profile removes it everywhere except peoples' wallet pages. This makes it so that anyone who was holding the blacklisted profile can sell out of their holdings.\

* **Graylisting** a profile removes it from the leaderboard, removes it from search, removes its comments from threads, and removes its posts from the Admin panel.\

* **Whitelisting** a profile makes that user's posts show up on the global feed automatically with some frequency (currently it allows five posts per day).\

* Finally, a mod can allow a phone number to be re-used to claim starter $DESO. This is useful for various testing situations.

![](https://2518439156-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjtaOFcYRNwtiQWQDqI%2F-Mk53TZjK3a-7zsg8-uU%2F-Mk54dJ9rOIY_pVr7Tb6%2Fimage-deso%20\(4\).png?alt=media\&token=d70b5a8e-0d87-4faa-8327-3ac45346ee8e)

When you've set your public key as an `ADMIN_PUBLIC_KEY`, the Admin tab becomes visible only to you. This is a critical step in securing your node. Not doing this would make it so that all your users can add posts to the global feed.

### Super Admin Public Keys

Within the Admin Panel, there is a `Super` tab that is only accessible by Super Admins. Super Admin can manage user verification and $DESO purchasing behavior from the `Super` tab.

#### Username Verification

Super Admins can grant verification badges (on their node) to a user by putting the username in the `Grant Verification Badge` input box and then clicking `Verify`.\
\
Similarly, a Super Admin can revoke verification by putting the username in the `Remove Verification Badge` and then clicking `Remove`.

![](https://2518439156-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjtaOFcYRNwtiQWQDqI%2F-Mk53TZjK3a-7zsg8-uU%2F-Mk54hKOL1-Yp0hB6lLh%2Fverify-users-image-deso.png?alt=media\&token=b536f087-07ea-4760-8545-1e19195329e9)

#### Buy $DESO Management

Any node can sell $DESO if they set the following flags appropriately.\
\
Super Admins can set two values in the `Super` tab to manage the price at which $DESO is sold on their node: `USD-to-DeSo Reserve Price`and `Buy DeSo Fee Rate`.

![](https://2518439156-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjtaOFcYRNwtiQWQDqI%2F-Mk53TZjK3a-7zsg8-uU%2F-Mk54lwGk9RXmfcVQ41R%2Fbuy-deso-settings-3.png?alt=media\&token=61faa621-3834-43b1-b75d-5903b3318f74)

**USD-to-DeSo Reserve Price**

This is the minimum price at which you are willing to sell $DESO on your node. If the price retrieved from exchange APIs is lower than this amount, your node will sell $DESO at this reserve price instead of the API price.\
\
Additionally, the price in the right sidebar will appear as reserve price in the event that the price from the API dips below the reserve price.\


**Buy DeSo Fee Rate**

This is a percentage-based fee applied to all $DESO purchased on your node. If the current price of $DESO in USD is $100 and the `Buy DeSo Fee Rate` is 5%, the buyer will pay $105 per $DESO and the node operator has earned $5 net.\
\
For more details on configuring your node to sell $DESO, please read the section titled `Sell $DESO on your node`.\


### Sell $DESO on your node

To simplify the onboarding experience for new users on your node, you can sell $DESO for Bitcoin directly to users. To configure your node to sell $DESO, please set the following flags:

* `BUY_DESO_SEED`: This is a seed phrase for the public key that contains $DESO that you will sell to users. As with all seed phrases, keep this secret and share it with nobody. Take extra precautions to not commit it to version control and quickly move funds if this seed is ever compromised.
  * You will need to deposit $DESO to the public key for this seed phrase. All $DESO purchases on your node will send $DESO from this wallet.
* `BUY_DESO_BTC_ADDRESS`: This is a Bitcoin address you control. When users purchased $DESO with Bitcoin, the Bitcoin will arrive at this address.

### How Users Login

When a user logs in on your node, they have the ability to sign in with their DeSo identity, without having to re-enter their seed phrase.\
\
Once a user signs in, your node can sign transactions on their behalf with varying levels of approval required depending on what kind of permission the user granted.\
\
This creates a login mechanism for node operators that is as easy for users as "login with Facebook," but it unlocks a wallet in addition to a user's identity.

### Node FAQ

Answers to common questions and issues about running your own node:

#### What are the minimum requirements for syncing a node?

We recommend having a machine with at least 32GB of RAM and 350GB of storage (as at 21 July 2021). If TXIndex is disabled, then you need about 200GB in total. The Blockchain DB takes up about 90 GB, and the TXIndex takes up 160 GB. THe DB+TXindex size grows by about 50GB a month currently.

#### How do I configure SSL?

There is an example SSL configuration in `nginx.dev`.

#### How do I use the BlockCypher API?

BlockCypher will help prevent double-spends in the mempool. You can signup for a [BlockCypher](https://www.blockcypher.com) account on the BlockCypher website. BlockCypher does offer a free amount of API calls.

Once you have signed up for an account you may copy a token from the [tokens](https://accounts.blockcypher.com/tokens) section of the dashboard.

You will copy this token in your `dev.env` file as the value for `BLOCK_CYPHER_API_KEY`.

#### What type of records do I use with custom domains?

You must create two seperate **A** type domain records.

Both records should point to the IP address of your node.

**Example DNS Records:**

| Hostname          | Type | TTL | Priority | Content     |
| ----------------- | ---- | --- | -------- | ----------- |
| node.`DOMAIN`.com | A    | 299 |          | `IPADDRESS` |
| api.`DOMAIN`.com  | A    | 299 |          | `IPADDRESS` |

If you do not create both records you will be unable to use a custom domain.

#### Can my node write back to the mainnet?

Yes! Every transaction is broadcast to all other nodes on the network, and should eventually be mined into a block.

#### What does Twilio provide to my node?

Twilio provides an SMS API that allows you to confirm user phone numbers and thus send them currency from your seed wallet set inside the `dev.env` file. If you do not have this set users will be unable to verify a phone number.
