Releases: steemit/steem
Steem Simplicity 0.17.0
Steem Simplicity 0.17.0 Release Notes
The hardfork is schedule for Tue, 21 March 2017 15:00:00 UTC (11:00:00 EDT)
All witnesses should update to 0.17.0
Note: Witnesses running 0.16.0
may need to resync due to bug fixes with the block log. Witnesses running 0.16.X
should only need to reindex.
Overview
This Hardfork is about simplifying the comment subsystem both for end users but also technically to improve performance now and into the future.
Remove Posting Rate Limit.
Posting rewards are no longer penalized for posting more than 4 times in 24 hours. Originally this was implemented to reduce the impact of bots posting junk content. Ultimately it ended up hurting legitimate authors.
The comment depth limit has been increased to 255.
The limitation was created to make UI design easier. Many changes we are making are to do right by the blockchain and have the UI adapt. Each UI can and should choose how deep of comments they want to display and can actively reject comments that are deeper than the limit they wish to display. The soft limit is 255 with a hard limit of 64k. 64k was chosen as a limit because the depth is stored on each comment object. This allows us to use a 16 bit field and 64k should be more than enough depth for anybody. (Reddit has a limit of 10,000)
Comments can now be permanently edited.
We are adapting a new model of imposing as few restrictions in consensus code as possible and having witness actively reject transaction for both rate limiting and security. There is a soft freeze of 7 days that will be lifted with a non-consensus operation. This custom operation still needs to implemented, but will be included in 0.17.1. The operation will be a plugin op in the witness plugin that will inform a witness to accept edits for the next T minutes.
Comments are now paid out independent of their discussion.
Paying out discussions as a whole was a design decision to make displaying discussions by total_children_rshares2
easier. It also made sense to do this with multiple payout windows. This tight coupling ultimately has proven unnecessary. Removing restrictions on depth and editing makes this idea antiquated.
All comments are paid out 7 days after creation and there is no longer a second payout window.
99% of votes are cast in the first 7 days after creation. This elimates the need for a second payout to accumulate value to a post and simplifies logic significantly.
There is now a comment reward fund separate from posts.
We want discussion to be incentivized. Currently, comments are only claiming 2% of the content rewards and there are more comments than posts. Comments will receive 38% of the content reward fund. This change should incentivize commenting, engaging in, and curating discussions.
All payouts now look at the prior 30 days of payouts to determine the share of the reward rather than the current pending rshares.
The reason for this change is twofold. 1. Looking at a 30 day decaying window reduces variance in payout due to small changes in vote densities. 2. On votes we are currently updating the comment the vote is on, every comment in the tree up to the root, and the global property object. With this algorithm we only need to update the comment, significantly reducing the amount of time spent processing votes. With this change, payouts will initially dip and then ramp up over the next 30 days until the reward fun reaches a steady state.
Reward Balance
Rewards will now go into a separate reward balance that must be claimed before they can be used.
Comment Reward Beneficiaries
All content can now specify beneficiaries to receive a part of their author rewards. The beneficiaries are specified in the extension field of the comment_options_operation
and is a sorted vector (by account name) of account name, weight pairs. The beneficiaries can only be specified once and must be specified before any votes are cast on the comment. Most apps are already adding a comment_options_operation
in the transaction that creates the comment, so this should not be much of a challenge to add to existing apps
Delegated Steem Power
Steem Power can now be delegated to other accounts. This transfers content voting rights and bandwidth allocation but not witness voting rights. Delegations come in to effect immediately, both when increasing and decreasing a delegation. However, Steem Power being returned by decreasing or removing a delegation has a one week delay in limbo before it is returned to the owner. This is to prevent a satoshi of Steem Power from being able to vote on the same content twice.
Accounts cannot power down Steem Power that is being delegated, nor can they delegate Steem Power that is being powered down.
Accounts can be created with a smaller fee and an initial Steem Power delegation.
Instead of paying the entire account creation fee with Steem, creators can now pay a smaller fee (30x less) and delegate some Steem Power for 30 days. The exact amount is 5 * min_fee + STEEM_POWER == 150 * min_fee
. You can pay any combination of STEEM and Steem Power along that curve (so long as the minimum fee is paid).
The witness voted STEEM fee is now the minimum required STEEM fee for delegation. Witnesses should reduce their fee by 30x when the hardfork goes live to preserve the same required fee for an all STEEM account creation.
PoW is being removed.
PoW has been broken for a long time. Very few people pay attention to it. It is dominated by the same few people and is providing very little value to Steem. Instead of investing even more time fixing it, we have decided to remove it entirely.
NTP is disabled by default
There is an option, enable-ntp
that can be set to true in the config file to enable ntp in steemd. All node operators should begin using ntpd as we will be removing ntp from steemd in a future release.
Steem 0.16.3
Steem 0.16.3 Release Notes
This release is not a consensus altering release.
This release only affects API serving nodes and read-only nodes.
-Fixed an issue on read only node locks that prevented nodes from starting correctly.
-Fixed an issue that could allow truncation of content within a UTF-8 character.
-FC now warns when API calls take longer than 0.75 seconds and logs an error when they take longer than 1 second. This is to help debug API calls that may break contract with the write node of holding their read locks for no more than 1 second.
Steem 0.16.2
Steem 0.16.2 Release Notes
This release is not a consensus altering release.
This release only affects API serving nodes and read-only nodes.
- Chainbase has been updated with some defensive coding on locks. By default lock checking is compiled in but disabled at runtime. Enabling/Disabling lock checking at compile time can be specified by using the
CHAINBASE_CHECK_LOCKING=[ON/OFF]
cmake flag. Enabling lock checking at runtime can be done with the--check-locks
command line argument (lock checking at runtime will not work if it is not compiled in). - Fixed some issues with locks that could cause undefined locking behavior between read and write nodes if the write node was producing a block.
- Fixed an error in some API calls that could crash a read only node. This could not cause a write node to halt and the underlying bug did not effect write nodes. As such, block producing nodes are not affected by this bug.
- Added API calls,
database_api:: get_tags_used_by_author
,follow_api:: get_reblogged_by
, andfollow_api:: get_blog_authors
. - The
discussion_query
object has a field for truncating comment body length. - Improvements to
get_state
when returning popular tags and truncating comment bodies when only content summaries are needed. As a result, state objects have reduced in size significantly.
Steem 0.16.1
The is a stability and soft forking build.
There are two changes in particular that witnesses should upgrade for. These are both related to security of the blockchain and/or security of individual nodes.
- A new bandwidth algorithm has been implemented that more accurately saves bandwidth used over time and prevents abuse by sending two transactions in the same block. Along with this change, the soft fork that was preventing two transactions from the same account from being present in a block has been lifted.
- Fixed asset deserialization error that could result in a div0 DoS.
The rest are optimizations or non-forking bug fixes.
- Blocks are no longer saved in the memory mapped file once written to the block log.
- Various stability improvements in the block log and fork database.
- Nodes now require their peers to report a Chain ID and will actively reject connections that don't. All nodes running 0.16.0 report their Chain ID.
- steemd now periodically reports how much free memory in the memory mapped file remains.
- The Database API now has a method,
get_ops_in_block
which returns all operations contained in a block. Full account history must be enabled for all operations to be returned. - Custom operations that have only a required posting authority show up in account history.
- The Equihash PoW will no longer display egregious error messages in the
account_by_key
plugin and accounts created through Equihash mining will be able to be looked up by key in the CLI Wallet. - The author reward virtual op will display the entirety of the comment's permlink.
- Properties contained in the witness schedule object are properly mirrored when contained in other objects.
- Tag filtering has been improved and much of the display logic has been moved to Steemit.com
Steem 0.16.0
Steem 0.16.0 Release Notes
Hardfork is scheduled for 2016/12/06 16:00:00 UTC (11:00:00 EST)
All witnesses should now upgrade.
Please see the following blog posts for the high level changes.
https://steemit.com/steem/@steemitblog/final-review-of-steem-economic-changes
https://steemit.com/steem/@steemitblog/steem-0-16-0-official-release
Technical Notes
Steem 0.16.0 is using Chainbase as its underlying database. The format of the block log and chain database are different than 0.15.0. You will need to resync your node. We recommend witnesses do the resync on a node other than their block producing node and copy the resulting shared memory file. For this to work you will need to run the same binary for both nodes as different compilers and operating systems can generate different memory layouts of the shared memory file.
There are a few new config file and command line options that are new to this release.
shared-file-size
specifies the size of the shared memory file. For full nodes we recommend 32G and for consensus nodes, 10-12G should be sufficient. You can and should over provision your file as running out of space will currently crash steemd. If you specify a larger shared file size than currently exists, steemd will grow the shared file size to the desired size. Shrinking of the shared file is not supported.
shared-file-dir
specifies the directory to save the shared file in. By default this is witness_node_data_dir/blockchain
.
flush
will specify a target number of blocks to process before flushing the chain database to disk. This is needed on Linux machines and a value of 100000 is recommended. It is not needed on OS X, but can be used if desired.
read-only
will launch steemd in read only mode. This is recommended for dedicated API nodes.
read-forward-rpc
will allow a read node to forward write requests to a write node. This is primarily used for propagating transactions from the CLI wallet to a write node. This connects to the same rpc endpoint used by the CLI wallet and other applications.
There is a new plugin, account_by_key
which maintains a reverse lookup index of accounts by the key on their authority. This is needed by the witness plugin for displaying information about the accounts associated with the keys in your wallet. This is not needed for consensus.
For those running steemd on linux there are several virtual memory configuration options we recommend. The Linux virtual memory writes dirty pages of the shared file out to disk more often than is optimal which results in steemd being slowed down by redundant IO operations. These settings were chosen to optimize reindex time.
echo 75 | sudo tee /proc/sys/vm/dirty_background_ratio
echo 1000 | sudo tee /proc/sys/vm/dirty_expire_centisecs
echo 80 | sudo tee /proc/sys/vm/dirty_ratio
echo 30000 | sudo tee /proc/sys/vm/dirty_writeback_centisecs
Steem 0.15.0
Hardfork is scheduled for 2016/11/08 16:00:00 UTC (11:00:00 EST)
Documentation changes
- Change structure and update content of documentation / README.md #487
- Move list of seed nodes to its own file #487
- Update list of seed nodes #505
Functionality changes
- Add new API calls get_discussions_by_blog(), get_discussions_by_comments()
- Add first_reblogged_by field to get_state reply
- Record both SBD and STEEM post payouts in author_reward_operation
- Add ability to mine to debug_node #519
- Expose get_dev_key() function analogous to the get_dev_key binary in debug_node_api #519
Bugfixes
- Fix bug resulting in multicore mining attempting to mine the same nonces on each core #525
- Transactions downloaded from the network were not always verified when using checkpoints
- Hardfork to forbid long account names in authorities #465
- Hardfork to forbid using non-existing account names in authorities #465
- Update mining stats display to provide correct information for pow2 mining #282
- Fix bugs preventing creation of testnets #519
- Convert machine-length integer in chain state to fixed-length integer #485
Architecture changes
- Various changes to how Dockerfiles build and run the code
- Remove some unused code #511
- Remove unused ENABLE_CONTENT_PATCHING compile-time constant #510
- Update newplugin.py for new internal API #506
Steem 0.14.0-Shared DB Preview Release
This release is for testers looking to run Steem nodes based upon the new Shared Memory database. It should be fully compatible with the latest Steem release and should not introduce any hard forks. We would like some block producers and seed nodes to run with this release, but the vast majority should not. Witnesses please coordinate amongst yourself to determine who will be the tester.
The purpose of this release is to tag a stable version for testers.
Key Benefits:
- Faster Startup and Shutdown Times
- Less Frequent need to reindex due to database corruption
- Operate more efficiently on nodes with less RAM
Steem 0.14.3 Pre-release
This is a pre-release for Steem 0.14.3. This release includes bug fixes and a soft fork.
Documentation changes
- Change structure and update content of documentation / README.md #487
- Move list of seed nodes to its own file #487
- Update list of seed nodes #505
Functionality changes
- Add new API calls get_discussions_by_blog(), get_discussions_by_comments()
- Add first_reblogged_by field to get_state reply
- Record both SBD and STEEM post payouts in author_reward_operation
- Add ability to mine to debug_node #519
- Expose get_dev_key() function analogous to the get_dev_key binary in debug_node_api #519
Bugfixes
- Fix bug resulting in multicore mining attempting to mine the same nonces on each core #525
- Transactions downloaded from the network were not always verified when using checkpoints
- Softfork to forbid long account names in authorities #465
- Softfork to forbid using non-existing account names in authorities #465
- Update mining stats display to provide correct information for pow2 mining #282
- Fix bugs preventing creation of testnets #519
- Convert machine-length integer in chain state to fixed-length integer #485
Architecture changes
Steem 0.14.2
Patch Notes for Steem 0.14.2
Hardfork is scheduled for Tue, 20 Sep 2016 15:00:00 UTC
Updates from 0.14.1
This release fixes some bugs found in 0.14.1 related to canceling withdraw from savings and declining voting rights.
Escrow
Added operations pertaining to escrow. Details on how to use the operations can be found in steem_operations.hpp:229
escrow_transfer_operation
escrow_approve_operation
escrow_dispute_operation
escrow_release_operation
Vote Balancing
We have reverted the changes to vote balancing from 0.14.0. Voting power and vote weights are unaffected in this release.
Savings
Added time locked savings accounts. A user can place Steem and Steem Dollars into time locked savings balances. Funds can be withdrawn from these balances after a three day delay. The point of this addition is to mitigate loss from hacked and compromised account. The max a user can lose instantaneously is the sum of what the hold in liquid balances. Assuming an account can be recovered quickly, loss in such situations can be kept to a minimum. steem_operations.hpp:868
transfer_to_savings_operation
transfer_from_savings_operation
cancel_transfer_from_savings_operation
Steem Dollar Stability
Added functionality to aid in the stability of Steem Dollars. Starting when Steem Dollars are 2% of the market cap, a portional of content rewards will be awarded as Steem instead of Steem Dollars. The rate at which Steem Dollars are printed is 50% of the reward at 2% or less market cap and 0% at 5% or more market cap, linearly extrapolated from 2%-5% market cap. So, at 3.5% market cap content rewards will be 25% Steem Dollars, 25% Steem, and 50% Steem Power.
When Steem Dollars reach 10% of the market cap, the price feed will jump off the peg to keep Steem Dollars at 10% of the market cap and will return to the peg when the reported price feed goes below 10%. Witnesses should still report the real dollar value of Steem for their price feed. The median price feed is automatically capped regardless of what witnesses report.
"null" Account Balances
Balances of the null account and zeroed every block. Because any funds in the null account are inaccesible, they are removed every block and
the dynamic global property object is updated to reflect the actual totals. This will remove funds from the supply, slowing the rate of inflation.
Challenge Authority
Fixed a bug where an account's active authority could not be challenged. Subsequently, because there is no way of addressing the challenge through steemit.com, we have disabled the operation entirely for the moment as it could be an attack vector against users that do not know how to use the cli wallet. The operation will be enabled at a later time when steemit.com can more elegantly handle challenge scenarios.
Custom Binary Operation
Added a custom binary operation. The semmantics are the same as the custom json operation, but with a binary payload. The json deserialization has a non-trivial cost associated with it. This operation will allow for binary deserialization of plugin operations and should improve overall performance of plugins that chose to use it. steem_operations.hpp:491
custom_binary_operation
Decline Voting Rights
An account can chose to decline their voting rights after a 30 day delay. This includes voting on content and witnesses. The voting rights cannot be acquired again once they have been declined. This is only to formalize a smart contract between certain accounts and the community that currently only exists as a social contract. steem_operations.hpp:897
decline_voting_rights_operation
Witness Block Production
Witnesses that miss a block and have not produced in the last 24 hours worth of blocks will automatically have their signing key removed and will no longer be scheduled for block production. To be eligible to produce blocks again, set the the signing key using the witness update operation. This should increase overall participation level, specifically on witnesses that are getting scheduled on the time share slot and are no longer wanting to be scheduled. Consequently, if a witness does not want to produce blocks anymore, they can set their signing key to ""
and will no longer be scheduled for block production.
Post Edits
Posts are now editable up to the second payout when they are archived.
Misc
Added database api and cli wallet calls for getting vesting withdraw routes on an account.
Fixed a bug that was preventing votes from being completely removed from a post.
Increased the irreversible block threshold to 75%.
Removed legacy PoW operation from witness plugin.
Various code cleanup and added error messages. Some changes to help with building on Windows.
FC
Fixed an issue serializing enumerations that caused an unknown string to serialize to the first enumeration type. This was causing some undefined behavior in various API calls that should now be resolved by throwing an exception when an unknown enumeration type is encountered.
Steem 0.14.1
Patch Notes for Steem 0.14.1
Hardfork is scheduled for Tue, 20 Sep 2016 15:00:00 UTC
Escrow
Added operations pertaining to escrow. Details on how to use the operations can be found in steem_operations.hpp:229
escrow_transfer_operation
escrow_approve_operation
escrow_dispute_operation
escrow_release_operation
Vote Balancing
We have reverted the changes to vote balancing from 0.14.0. Voting power and vote weights are unaffected in this release.
Savings
Added time locked savings accounts. A user can place Steem and Steem Dollars into time locked savings balances. Funds can be withdrawn from these balances after a three day delay. The point of this addition is to mitigate loss from hacked and compromised account. The max a user can lose instantaneously is the sum of what the hold in liquid balances. Assuming an account can be recovered quickly, loss in such situations can be kept to a minimum. steem_operations.hpp:868
transfer_to_savings_operation
transfer_from_savings_operation
cancel_transfer_from_savings_operation
Steem Dollar Stability
Added functionality to aid in the stability of Steem Dollars. Starting when Steem Dollars are 2% of the market cap, a portional of content rewards will be awarded as Steem instead of Steem Dollars. The rate at which Steem Dollars are printed is 50% of the reward at 2% or less market cap and 0% at 5% or more market cap, linearly extrapolated from 2%-5% market cap. So, at 3.5% market cap content rewards will be 25% Steem Dollars, 25% Steem, and 50% Steem Power.
When Steem Dollars reach 10% of the market cap, the price feed will jump off the peg to keep Steem Dollars at 10% of the market cap and will return to the peg when the reported price feed goes below 10%. Witnesses should still report the real dollar value of Steem for their price feed. The median price feed is automatically capped regardless of what witnesses report.
"null" Account Balances
Balances of the null account and zeroed every block. Because any funds in the null account are inaccesible, they are removed every block and
the dynamic global property object is updated to reflect the actual totals. This will remove funds from the supply, slowing the rate of inflation.
Challenge Authority
Fixed a bug where an account's active authority could not be challenged. Subsequently, because there is no way of addressing the challenge through steemit.com, we have disabled the operation entirely for the moment as it could be an attack vector against users that do not know how to use the cli wallet. The operation will be enabled at a later time when steemit.com can more elegantly handle challenge scenarios.
Custom Binary Operation
Added a custom binary operation. The semmantics are the same as the custom json operation, but with a binary payload. The json deserialization has a non-trivial cost associated with it. This operation will allow for binary deserialization of plugin operations and should improve overall performance of plugins that chose to use it. steem_operations.hpp:491
custom_binary_operation
Decline Voting Rights
An account can chose to decline their voting rights after a 30 day delay. This includes voting on content and witnesses. The voting rights cannot be acquired again once they have been declined. This is only to formalize a smart contract between certain accounts and the community that currently only exists as a social contract. steem_operations.hpp:897
decline_voting_rights_operation
Witness Block Production
Witnesses that miss a block and have not produced in the last 24 hours worth of blocks will automatically have their signing key removed and will no longer be scheduled for block production. To be eligible to produce blocks again, set the the signing key using the witness update operation. This should increase overall participation level, specifically on witnesses that are getting scheduled on the time share slot and are no longer wanting to be scheduled. Consequently, if a witness does not want to produce blocks anymore, they can set their signing key to ""
and will no longer be scheduled for block production.
Post Edits
Posts are now editable up to the second payout when they are archived.
Misc
Added database api and cli wallet calls for getting vesting withdraw routes on an account.
Fixed a bug that was preventing votes from being completely removed from a post.
Increased the irreversible block threshold to 75%.
Removed legacy PoW operation from witness plugin.
Various code cleanup and added error messages. Some changes to help with building on Windows.
FC
Fixed an issue serializing enumerations that caused an unknown string to serialize to the first enumeration type. This was causing some undefined behavior in various API calls that should now be resolved by throwing an exception when an unknown enumeration type is encountered.