diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ea86689a..f42203b86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,121 @@ This document outlines major changes between releases. +## 0.51.0 "Confirmation" (17 Oct 2019) + +With over a 100 commits made since 0.50.0 release 0.51.0 brings with it full +block verification, improved and fixed transaction verifications, +implementation of most of interop functions and VM improvements. Block +verification is an important milestone on the road to full consensus node +support and it required implementing a lot of other associated functionality. + +New features: + * CHECKSIG, VERIFY and CHECKMULTISIG instructions in VM (#269) + * witness verification logic for transactions (#368) + * NEWMAP, HASKEY, KEYS and VALUES instructions, support for Map type in + PICKITEM, SETITEM, REMOVE, EQUAL, ARRAYSIZE (#359) + * configurable transaction verification on block addition (#415, #418) + * contract storage and support for VM to call contracts via APPCALL/TAILCALL + (#417) + * support for Interop type in VM (#417) + * VM now has stepInto/stepOver/stepOut method implementations for debugging + matching neo-vm behavior (#187) + * storage support for contracts (#418) + * added around 90% of interop functions (#418) + * Invocation TX processing now really does invoke contracts using internal VM + (#418) + * blocks are now completely verified when added to the chain (if not + configured otherwise; #12, #418) + +Behavior changes: + * full block verification is now enabled for all network types + * block's transaction verification enabled for privnet setups, mainnet and + testnet don't have it enabled + +Technical improvements: + * GetVarIntSize and GetVarStringSize were removed from the io package (use + GetVarSize instead; #408) + * OVER implementation was optimized to not pop the top element from the stack + (#406, part of #196 work) + * vm.VM was extended with HasFailed() method to check its state (previously + external VM users couldn't do it; #411) + * redesigned input block queue mechanism, now it's completely moved out of + the Blockchain, which only accepts the next block via AddBlock() (#414) + * unpersisted blocks are now fully available with the Blockchain (thus we + have symmetry now in AddBlock/GetBlock APIs; #414, #366) + * removed duplicating batch structures from BoltDB and Redis code, now all of + them use the same batch as MemoryStore does (#414) + * MemoryStore was exporting its mutex for no good reason, now it's hidden + (#414) + * storage layer now returns ErrKeyNotFound for all DBs in appropriate + situations (#414) + * VM's PopResult() now doesn't panic if there is no result (#417) + * VM's Element now has a Value() method to quickly get the item value (#417) + * VM's stack PushVal() method now accepts uint8/16/32/64 (#417, #418) + * VM's Element now has TryBool() method similar to Bool(), but without a + panic (for external VM users; #417) + * VM has now completely separated instruction read and execution phases + (#417) + * Store interface now has Delete method (#418) + * Store tests were reimplemented to use one test set for all Store + implementations, including LevelDB that was not tested at all previously + (#418) + * Batch interface doesn't have Len method now as it's not used at all (#418) + * New*FromRawBytes functions were renamed to New*FromASN1 in the keys + package, previous naming made it easy to confuse them with functions + operating with NEO serialization format (#418) + * PublicKey's IsInfinity method is exported now (#418) + * smartcontract package now has CreateSignatureRedeemScript() matching C# + code (#418) + * vm package now has helper functions + IsSignatureContract/IsMultiSigContract/IsStandardContract matching C# code + (#418) + * Blockchain's GetBlock() now returns full block with transactions (#418) + * Block's Verify() was changed to return specific error (#418) + * Blockchain's GetTransationResults was renamed into GetTransactionResults + (#418) + * Blockchainer interface was extended with GetUnspentCoinState, + GetContractState and GetScriptHashesForVerifying methods (#418) + * introduced generic MemCacheStore that is used now for write caching + (including temporary stores for transaction processing) and batched + persistence (#425) + +Bugs fixed: + * useless persistence failure message printed with no error (#409) + * persistence error message being printed twice (#409) + * segmentation fault upon receival of message that is not currently handled + properly (like "consensus" message; #409) + * BoltDB's Put for a batch wasn't copying data which could lead to data + corruption (#409) + * APPEND instruction applied to struct element was not copying it like neo-vm + does (#405, part of #196 work) + * EQUAL instruction was comparing array contents, while it should've compared + references (#405, part of #196 work) + * SUBSTR instruction was failing for out of bounds length parameters while it + should've truncated them to string length (#406, part of #196 work) + * SHL and SHR implementations had no limits, neo-vm restricts them to + -256/+256 (#406, part of #196 work) + * minor VM state mismatches with neo-vm on failures (#405, #406) + * deadlock on Blockchain init when headers pointer is not in sync with the + hashes list (#414) + * node failed to request blocks when headers list was exactly one position + ahead of block count (#414) + * TestRPC/getassetstate_positive failed occasionally (#410) + * panic on block verification with no transactions inside (#415) + * DutyFlag check in GetScriptHashesForVerifying was not done correctly (#415) + * default asset expiration for assets created with Register TX was wrong, now + it matches C# code (#415) + * Claim transactions needed specific GetScriptHashesForVerifying logic to + be verified correctly (#415) + * VerifyWitnesses wasn't properly sorting hashes and witnesses (#415) + * transactions referring to two outputs of some other transaction were + failing to verify (#415) + * wrong program dumps (#295) + * potential data race in logging code (#418) + * bogus port check during handshake (#432) + * missing max size checks in NEWARRAY, NEWSTRUCT, APPEND, PACK, SETITEM + (#427, part of #373) + ## 0.50.0 "Consolidation" (19 Sep 2019) The first release from the new team focuses on bringing all related diff --git a/ROADMAP.md b/ROADMAP.md index 1a4c29596..6fe1cc016 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -3,14 +3,11 @@ This defines approximate plan of neo-go releases and key features planned for them. -## Version 0.51.0 (mid-October 2019) -* VM compabitibility with neo-vm for all JSON-based tests in neo-vm -* further refactoring the code -* block verification -* implementing missing protocol messages - ## Version 0.60.0 (mid-November 2019) * consensus node +* finish work on VM compabitibility with neo-vm for all JSON-based tests in neo-vm +* implementing missing protocol messages +* improve wallet implementation ## Version 1.0 (2020, aligned with NEO 3.0 release) * full NEO 3.0 support