Following the latest influx of new users, I decided to write a series of introductory posts about Steemit: from basic netiquette up to more complex issues, like economics and consensus. Since the topic with the highest amount of fog around it seems to be the one related to witnesses, I will start with this one.
What Is A Witness In The Steemit Ecosystem?
A witness is a person (or a group of persons) operating a special type of server software, called witness node.
What Does A Witness Node?
A witness node processes transactions on the Steem blockchain. Before going into more details, it's very important to understand how the Steemit site works.
First of all, there is a frontend, or the HTML layer that you see. But that's the only similarity with a regular website. Instead of making requests to a centralized database server, the HTML layer makes requests to a de-centralized structure of nodes. It pulls the data you see (articles, comments, votes and balances) and displays it. But it also pushes the data you add to the blockchain (articles, comments, votes, transactions).
How does this data ends up in the blockchain?
Well, once a basic object is formatted (let's say an article, with author, date and a lot of other meta-data, that you don't usually see) it is broadcasted to the list of witness nodes. Each witness node then take turns and packs the transactions contained in a specific block, and then validates the block adding it to the blockchain.
The block age in Steem is 3 seconds. That means that a block contains transactions broadcasted and validated within a timeframe of 3 seconds.
How many transactions can you squeeze in 3 seconds? Well, according to the creators of the technology, you can do tens of thousands. At the moment of writing this article, the average number is around 10 transactions per block (so 10 transactions every 3 seconds). But 3-4 months ago, the number was way lower, probably 3-4 transactions per block.
Once a block is packed, it is then pushed by the witness who validated it and added to the blockchain. There's also a bit of other magic that happens after that, but for the sake of simplicity, let's assume that once a witness validates a block, it becomes set in stone, it's part of the blockchain that is mirrored across the entire ecosystem of nodes in the Steemit network. It can't be changed. And it's viewable by everybody.
What Are The Top 19 Witnesses Doing?
This structure needs a core of dedicated witnesses which have enough technical skills and adherence to the project, that they won't miss any blocks.
The top 19 witnesses are producing 57 blocks per hour, which means around 1368 blocks per day. They are producing a block almost every minute.
What Are The Runner-up (Top 50) Witnesses Doing?
If you do the math, you'll see that in a day there are 28,880 blocks to be produced. Out of these blocks, top 19 witnesses are producing 25,840. Who produces the remaining 3040 blocks? The runner-up witnesses. The remaining blocks are distributed amongst them based on their overall ranking.
A witness in the 40th position produces around 35 blocks per day, whereas a witness in the 25th position produces around 45 blocks per day.
They also act as a backup. If a top 19 witness has a problem, the next available runner-up witness will be promoted to the top 19.
What Are The Backup Witnesses Doing?
They do pretty much the same the same thing, but they produce just 3-4 of blocks per day.
What Happens If A Witness Fails To Process A Block?
The transactions contained in that block are lost. Forever.
It's That All They're Doing?
Nope. Witnesses are also adjusting a few network properties, the most important one being the price feed. The witnesses are broadcasting a special type of transaction, in which they wrap up information like:
- their APR for SBD (interest for holding SBD)
- their price for STEEM
- the cost for joining Steemit (yes, there is a cost for joining Steemit, that's why you get already something in your wallet after you join, that amount is paid now by Steemit INC).
How Should I Vote For Witnesses?
Now that you understand that witnesses are literally creating the network as we speak, you should have a clearer criteria for voting them. Here are my suggestions:
- look at the amount of blocks missed* and compare that with the overall activity and account age. Make an average. Some witness have a few thousands of blocks missed, but they are witnesses for more than a year, so losing blocks at this time interval is normal, especially during hardforks or upgrades.
- make sure the person / persons have the technical ability to maintain and debug that witness node, read their post and do your research about them
- look at their witness thread. Each witness is required to publish at least weekly a witness update, with a short follow up of their activities. Here's mine, as an example.
- look at their price feeds and other blockchain props and understand if they're at least around and publishing their price feed and other props
- see if they are involved in the community, either at a technical level, by providing tools, libraries or apps, or at the content producing level, by interacting, engaging and maintaining a positive vibe in the community
[*] All this technical data can be seen in this live witness list.
I Have A Headache Just Trying To Understand All This, Can I Delegate My Vote To Somebody Else?
Yes. Find a user you trust and delegate your witness voting power. In Steemit terms, that is calling "setting a proxy" for your votes, and you can find this form at the bottom of the witness voting page. Looks something like this:
I think that's enough for now. If you have questions, ask ahead. If I missed something or there's something wrong, I'll be happy to adjust.
Also, if you think others will benefit from this post, feel free to share.
For the Steemit ecosystem I created a free tool for checking your potential rewards at steem.supply.