Crowd sourced TESTNET evalution for STEEM
High Level structure of the document:
gandalf 1:54 PM
Try to stay up to date with the code on the github. Testing is not trivial. And it's needed not only when hardforks come. ( https://steemit.com/@gtg)
TODO: Clear problem defintion
Problem specificiation
Unlike other public blockchains, STEEM blockchain is the first blockchain to interact with end users who are not necessarily tech savvy or traders. This blockchain creates value by incentivicing content creators. To keep the platform running frequent changes to the code base is required to meet the ever changing demands in terms of bug fixes, prevent ways of abusing the platform & add new features. While the core blockchain consisting of the consensus (DPoS), storing/capturing the state etc are mature, the plugins which adds additional functionalities for the end users to interact with the blockchains in evolving at an unprecedented pace. The plugins which are changing includes, rc_plugin (Resource credits + Turing Compelete), reputation, SMT (new tokens, smart contracts) support etc. The amount of changes at this enormity are perhaps unprecedented in the history of blockchains and thus, end to end testing is needed to ensure maximum code coverage and crush the obvious bugs and gremlins.
This section will define the solution
TODO: Add more points from witness testaments (refer @timcliff's post
https://steemit.com/witness-update/@reggaemuffin/witness-statement-for-reggaemuffin-proposing-hardfork-adoption-requirements
TODO: Add more points from community feedback
@yuriks2000
@quochuy - has a script (?) to take the state snapshot
@gtg
It's useful for big infrastructure, for example, if I have 5 edge nodes on prod running v0.20.4
and I wan't to switch them ASAP to replayed version of v0.20.5
then I shutdown one of them, lets say edge5
and start --replay
(because I don't need --resync
since I had already valid block_log
). After catching up with HEAD block (replay to last block in log, then sync to current HEAD) I shut down edge5
and make a copy of state, that is: block_log
, block_log.index
and shared_memory.bin
. I start edge5
back up, shutdown edge4
, copy state file there and start edge4
back up with the new version and new state.
"A blockchain is a Distributed OpenLedger of records, contracts & Transactions between multiple partieis."
An ideal TESTNET must sync Records, Contracts & Transactions in real time thus replicating the state of the MAINNET.
Further this can be summarized as state transfer from one distributed state machine to another resulting in invocation of various autmatic transctions and virtual operations. In a real world scenario, this will not be possible and we will have device elaborate mechanisms to mimic real world interactions.
List down the transaction types that can be invoked with a tool similar to Tinman. For these cases, including a periodic sync of state from the MAINNET to the TESTNET can be done with Tinman. Further mimicing the user interaction, reaching the TPS that we can expect on the MAINNET etc are going to be the challenges. If we are syncing from the MAINNET it will not be possible sync the current Resource Credits (or earlier bandwidth data). We will be able to get the posts. For the interactions on the posts we will need to device a mechanism and invite the community.
Stake holders will be here. This will be generally "we"
References
Since there are changes to bandwidth, here is a trick to test the replay