Proposing Hardfork 0.20.0 “Velocity”
In Monday’s @steemitblog post we announced the impending adoption of Hardfork 0.19.0 by the Witnesses. We are happy to announce that this transition occurred successfully and all Steem users are now posting to the new-and-improved Steem Blockchain! All Steem rewards are now being distributed to content creators based directly on how much Steem Power they have (i.e. a linear relationship). It is no longer the case that a user’s influence is exponentially related to the amount of Steem Power they hold, making the Steemiverse a more fair and equal place.
Another Successful Hardfork
HF19 marks our 18th successful hardfork. While we have a deep respect for all the great projects in the blockchain sector, we are proud of the unique attributes of the Steem Blockchain which enable us to upgrade its features, and make it more valuable, so rapidly and safely. As far as we know, we are the only project to intentionally and successfully navigate a hardfork without creating an additional blockchain, let alone 18 hardforks! Thanks again to all the Witnesses who helped make that happen. Now that we’ve successfully implemented HF19, it’s time to propose the next Hardfork, codenamed “VELOCITY.”
Proposing Steem Velocity 0.20.0 as the Next Fork
In our 2017 Growth Plan posted 2 months ago we listed our 3 priorities: Communities, Effortless Onboarding, and a Mobile Application. We are extremely happy with our progress on all fronts. Our team of world-class developers have been working around the clock on all of these features and so we are excited to begin revealing the fruits of their labor with 0.20.0. The focus of this hardfork is on improving the process of account creation and reducing the friction involved in onboarding millions of new users.
This proposal addresses some on-chain issues to support signup improvements on Steemit.com and other sites to bring more users into the Steem ecosystem. As with the proposal for Steem Equality, these changes go together. Please view the proposal as a whole rather than individual parts. This is a complete rework of how account creation currently works on Steem, designed to help streamline the onboarding process for all Steem developers and improve the scalability of the Steem Ecosystem.
Burning STEEM for Account Creation to Prevent Abuse
A significant practical problem we have experienced with account creation is automated abuse of the signup process to yield free STEEM to attackers. This increases the average cost of legitimate account creation, making the Steem Protocol more expensive and less attractive to developers and potential partners. Presently, each new account is required to be funded by the account creator with initial Steem Power. The original reason for this was to give each account the requisite minimum Steem Power needed to transact on the blockchain. However, a side effect is that when a user fully powers down, they are temporarily locked out of their account. People need to be able to cash out without being at risk of losing access to their account.
The current system also incentivizes attackers creating multiple accounts in order to acquire free STEEM, which again increases the overall cost of maintaining the protocol. To solve this problem, we propose a new method of burning STEEM (i.e. destroying the tokens and removing them from the token supply) on each account creation and crediting the account with permanent minimum bandwidth instead of providing Steem Power to the new account. This will reduce incentives to abuse the steemit.com signup system and will prevent users from temporarily preventing themselves from transacting after powering down in full.
Discounted Account Creation
One of the key areas limiting growth of Steem is the cost of creating accounts. We want to grow Steem to at least to size of Reddit, hopefully larger. Reddit currently has 234 million unique users a month. Let's assume that if they have a 50% retention rate (quite generous), then they would have signed up 468 million accounts. If we wanted to do the same then it would cost 93.6 million STEEM ($187.2 million at the current price) and 13.5 billion Steem Power in delegations. The current STEEM supply is only 250 million STEEM. With the stake that Steemit has, it would take nearly 12 years for us to create those accounts and undelegate Steem Power continuously to reach those numbers. Simply put, it does not scale and if we want to grow to become the disruptive technology that we all know Steem is, we need to remove this barrier.
We want to add a daily quota of discounted accounts. These accounts can be paid for with a combination of STEEM, bandwidth, and mining. Yes, mining. We believe that the ability to mine an account into creation was a fantastic feature of our hybrid proof of work system that was lost when we removed proof of work. Mining will use Litecoin's scrypt algorithm as it is battle tested. This will only be used for creating accounts through the discount system and not for block production.
The level of discount will be dynamic based on current demand to prevent all of the accounts from being created instantly. Witnesses will vote on the daily quota so that we can scale this system alongside our growth. This system will run in parallel to existing account creation.
Remove Account Creation with Delegated Steem Power
The original intent of this feature was to allow bulk account creation without account creators spending a lot of STEEM. Discounted account creation solves this in other ways and does it better, it makes sense to remove this feature. Accounts will still be able to delegate Steem Power to others, just not as an integrated part of account creation.
Remove Vote Dust Threshold
The vote dust threshold was added last summer as a countermeasure to automated spam of extremely small votes. While it served an important purpose at the time, the feature interferes with the ability for new Steem users to participate in the community and build a following. The dust votes did not impact rewards significantly, but were taking up valuable space in the blockchain. The true issue was in the bandwidth algorithm, which has been updated to prevent this attack. Because accounts will now be created with 0 SP, their initial votes will not be worth anything. Removing this threshold will allow those accounts to interact with others on the blockchain while they establish themselves in our community.
End User Impact
We understand that this change is nuanced and has many moving parts, but we believe the end implementation will be simple to use. As mentioned previously, end users will not need to fully understand this system to use Steem and only those interested in creating accounts will be affected. Below is an example of what creating an account would look like under this system.
We expect the majority of accounts to be created by Steemit and our partners cheaply using stake. The account creation process will appear similar to what it is today with a fee and proof of work field. To create an account via stake, all the creator needs to do is not include a fee or a proof of work. If the creating account does not have enough stake they will need to include an adequate proof of work or STEEM fee to cover the difference. We will provide APIs and tools to calculate how much of a fee is necessary. To create an account without a creator, no creator will be specified in the operation and will include a proof of work adequate to cover the entire fee. If the dynamic cost is too high, regular account creation will be an option. To end users, this will appear identical to what it is today and only affects developers wishing to sign up new users.
Steem Velocity is going to be key to bringing millions of users to the Steem ecosystem. Communities and our mobile application are on their way. Development is proceeding well and 0.20.0 will be paramount to getting us prepared for those launches and opening the floodgates for the millions of new users that will get to experience Steem in the next year. We are as devoted as ever to the vision of Steem and are excited that we can continue to partner with you, the community, to make Steem as great as it can be.
Thank you for reading and Steem On!
- Team Steemit
Out of all the feedback from the Steem Equality proposal, technical details was one of the most common themes. Below are some technical details for the features proposed above for those that are interested.
Dynamic Fee Algorithm
The fee algorithm is just a supply curve. It simulates an active market by setting a price depending on the supply of an asset. In this case, those assets are account creation tokens and resource credits. Account creation tokens will be a consensus construct to track the supply of accounts that can be created at a discount. Resource credits will represent stake days that can be spent on account creation and are non-transferrable. Resource credits accrue for everybody at a stake-weighted rate and are non-consensus. Account creation tokens are tracked as consensus state and are printed at a rate specified by the witnesses. They are only bought when an account is created and are destroyed on use. They can pool up to two days worth of the quota to allow for burst account creation.
The supply curve we will use for the fee algorithm is a rational function in the form . defines a known point on the curve.
We define the account creation credit supply curve using the following curve:
- is the current supply of account creation tokens.
- is the daily rate that account creation tokens are created. This will be witness votable.
- is the maximum number of resource credits allocatable due to stake.
- is a resource credit overprovision ratio. is 10% overprovisioned. This defines what the maximum size of the burst supply can be. We propose a value of 0.1.
Using these values the price of an account creation credit when there are one day's worth of credits available () will be of the burst resource credit pool. We will cap the supply of to which will create a lower bound of the price at .
The supply curve for the burst resource credits is defined using the following curve:
- is the current supply of burst resource credits. will be capped at .
- is the base fee to create one account with pure STEEM. This is defined by the witnesses using the existing account creation fee.
As a sanity check we can calculate the price of one account when and .
And because we know the minimum price of an account in resource credits we know that the minimum price in STEEM will be .
For the proof of work dynamic fee we will define the price in hashes. The value of each work is the expected number of hashes to achieve a work with specific difficulty. The equation becomes the same as the resource credits for STEEM except that becomes the base number of hashes for an account, which will be defined by a witness vote.
Per Satoshi Pricing
Having an instantaneous price for a specific supply is good, but we actually have a continuous supply as tokens are bought. Each satoshi is listed in the market at a different price as defined by the supply curve and needs to be bought at the respective price. We can calculate this using a definite integral, however the solution to our supply curves contains a natural logarithm, which is difficult to compute using integer math. Instead, we will use the following approximation.
This is a trapezoidal approximation of the integral. Because our supply curve is concave up this approximation always overestimates, which reduces risk of exploitation. The change in supply should be small enough per transaction that the error is minimal.
Fee As Softfork
We want to keep all of the dynamic fees and resource credits as non-consensus logic in the witness plugin. This necessitates that the meeting of a fee is non-consensus. Having the funds in an account must continue to be consensus. As a countermeasure, the account creation token supply will be consensus. This way, in the worst case scenario, if a witness is compromised, the number of accounts that can be created will be limited to the supply of account creation credits.
Non-production Soft Fork
Currently in Steem, soft forks can only occur when a block is being produced. Once a transaction has been included in a block, it is in. Unless others disagree with the block on a consensus level, it cannot be revoked. Usually, this only deals with soft rejecting of transactions and it cannot be known which transactions were rejected for this reason. We have an algorithm to extend this premise and secure the blockchain further. Normally, blocks are a binary accept or reject. We want to introduce the concept of subjective reject. This is a block that a node wants to reject, but would not be rejected based on consensus. When given an opportunity to produce, the witness will produce on the last accepted block, but it willing to switch to fork containing a subjectively rejected block. So long as all witnesses are using the same soft fork rules, these forks will never occur. They exist to protect the blockchain against a misbehaving witness, as misbehaving will cause your block to be dropped and the block reward to be forfeited. There is nothing preventing witnesses from doing this today. This will simply formalize this logic in our release that will help protect the blockchain from misbehaving witnesses. This change is the most intrusive to the core blockchain logic as it changes the fork resolution rules. Due to this fact, we will not ship this change in 0.20.0, but in a later release.