diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f202cff1..e6eabc065 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,844 +2,65 @@ This document outlines major changes between releases. -## 0.74.0 "Comprehension" (17 Mar 2020) - -Functionally complete NEO 2.0 node implementation, this release can be used as -a drop-in replacement for C# node in any setting. It features full RPC -functionality support and full set of wallet operations. As usual, there -also was a number of bugs fixed, the node stability improved and some great -optimizations were also done (especially concentrated around DB interactions), -so even though this release has more functionality than ever (and it stores a -lot more chain data than ever) it at the same time imports blocks faster than -the previous one. - -Of course we will make additional maintenance releases for NEO 2.0 when -needed, but following this release we'll concentrate more on NEO 3.0 features -and catching up with recent community developments around that. - -New features: - * WIF and NEP2 keys import/export into/from the wallet (#685) - * multisig accounts import into the wallet (#685) - * additional key generation for existing wallets (#685) - * support for `break` and `continue` statements in the compiler (#678) - * `getblocksysfee` RPC method support (#341) - * `getapplicationlog` RPC method support (#500, #754) - * `getclaimable` RPC method support (#694) - * gas claiming support in wallet CLI (#694) - * asset transfer commands in wallet CLI (#694, #706) - * `getrawmempool` RPC method support (#175) - * RPC client support for all methods implemented in neo-go's server (#586, - #715, #694, #723, #750) - * `getblockheader` RPC method support (#722) - * `getnep5balances` and `getnep5transfers` RPC methods support (#498, #751) - * `gettransactionheight` RPC method support (#713) - * `submitblock` RPC method support (#344) - * `getvalidators` RPC method support (#714) - * support for `switch` `fallthrough` statements in the compiler (#628) - * a set of `NEP5*` methods added to RPC client for convenient NEP5 contract - calls (#728, #764) - * NEP tokens balance querying and transfers support for CLI (#728, #757) - * `getunclaimed` RPC method support (#712) - * contract import was added to the wallet CLI command set (#757) - * key removal added to the wallet CLI command set (#757) - * https support for RPC server (#702) - -Behaviour changes: - * gas parameter for deployment no longer specifies full gas to be added into - the transaction, it now only specifies the network fee part while system - fee part is computed automatically based on contract's metadata (#747) - * contract deployment and invocation from CLI is now integrated with the - wallet subsystem, WIF parameter support was dropped (#747) - * wallet subcommands were renamed, `create` became `init` and - `create-account` became simple `create` (#757) - * DB format was changed several times during this release cycle, so please - resynchronize your chains - -Improvements: - * improved and extended `wallet` package (#685, #694, #706, #728, #757) - * refactored RPC package (dividing it into smaller subpackages, #510, #689) - * `GroupInputsByPrevHash` is no longer tied to `Transaction`, allowing its - wider use (#696) - * more efficient `transaction.InOut` type is used for `References` (#696, - #733) - * RPC client's `SendToAddress` was renamed to `TransferAsset` to better - reflect its purpose (#686) - * P2P server's graceful shutdown with connection closing (#691) - * broadcasted transaction batching was added improving network efficiency - (#681) - * dropped duplicating `rpc.StackParamType` in favor of improved - `smartcontract.ParamType` (#690, #706) - * trigger types moved to their own `trigger` package (#690) - * all Go packages were moved from github.com/CityOfZion to - github.com/nspcc-dev where they technically already reside since August - 2019 (#710) - * NEP5 balances and transfers tracking was added to Blockchain (#723, #748) - * optimized transaction inputs/outputs/results verification (#743) - * `SpentCoin` and `UnspentCoin` structures were merged and moved into `state` - package (#743) - * `AddVerificationHash` method was added to `Transaction` to simplify - attributes management (#752) - -Bugs fixed: - * `getpeers` RPC request was not returning unconnected and bad peers (#676) - * RPC client was not reporting real error from the answer in case of HTTP - error (#676) - * potential race in `Seek` implementation for `MemoryStore` (#693) - * improper handling of more than 64K branching points in the compiler (#687) - * Enrollment transactions verification didn't check for validator key (#696) - * Claim transaction witness check might miss some hashes from Inputs (#696) - * double Claim verification was missing (#696) - * network fee calculation was completely broken (#696) - * mempool's `Remove` might drop wrong transaction (#697) - * missing double claim verification for mempool transactions (#697) - * server deadlock upon reaching connection limit (#691) - * wrong logic short-circuiting by compiler in complex conditions (#699, #701) - * `AddHeaders` method was not verifying headers in any way (#703) - * missing Claim amount verification (#694) - * bogus error returned from `GetValidators` when processing transfers to - (yet) unexisting accounts (#694) - * Claim and Miner transactions network fee was wrong (#694) - * negative outputs were allowed in transactions, but shouldn't (#694) - * smart contract invocation CLI command failed to process some parameters - correctly (#719) - * fatal error on concurrent access to `Blockchain` internal variable (#720) - * Invocation transactions missed some decoding checks (#718) - * it was allowed to have fractional GAS in Invocation transactions (which is - interpreted as system fee), but it shouldn't (#718) - * system fee calculation for Invocation transactions was incorrect (#718) - * `Transaction` JSON unmarshalling was processing Outputs and Witnesses - incorrectly (#706) - * panic on server shutdown in case it's not fully started yet (#721) - * `sendrawtransaction` RPC method implementation was not following error - codes convention (#724) - * interop implementations were using wrong byte order for returned hashes - leading to storage state differences at mainnet's block 2025204 (#727) - * `getblock` verbose response format was not following official documentation - (#734) - * contract deployment could fail with no error returned (#736) - * max contract description limit was wrong, leading to deployment failures - (#735) - * compiler didn't properly clean up stack on `return` or `break` in some - situations (#731) - * deadlock in discovery service (#741) - * missing dynamic `APPCALL` support (#740) - * `EQUAL` opcode implementation was not comparing different stack item types - correctly (#745, #749) - * RPC error on contract invocation when Hash160 is being passed into it - (#758) - * absent any ping timeouts configuration the node was constantly pinging its - neighbours (#680) - * contract's state migration was not done properly (#760) - * db import with state dump was not saving dumps correctly on interruption - and was now resuming writes to dump files correctly after restart (#761) - * incomplete State transaction verification (#767) - * missing Owner signature check for Register transaction (#766) - * incomplete Issue transaction verification and mempool conflicts check - (#765) - -## 0.73.0 "Cotransduction" (19 Feb 2020) - -This is the first release than can successfully operate as a Testnet CN -bringing with it fixed voting system implementation, policying support and -other related fixes. It also contains RPC improvements and updates to the -compiler. - -New features: - * Go smart contracts can now use variables for struct fields initialization - (#656) - * for range loops support in the compiler (#658) - * subslicing support for `[]byte` type (#654) - * block's storage changes dump support similar to NeoResearch's storage audit - (#649) - * `gettxout` RPC method support (#345) - * `getcontractstate` RPC method support (#342) - * `getstorage` RPC method support (#343) - * GetChangeAddress function in the wallet (#682) - * basic policying was implemented allowing to configure - MaxTransactionsPerBlock, MaxFreeTransactionsPerBlock, - MaxFreeTransactionSize and FeePerExtraByte (#682) - -Behaviour changes: - * consensus process now only start when server sees itself synchronized with - the rest of the network (see (*Server).IsInSync method, #682) - * default testnet and mainnet configurations now contain policer settings - identical to default SimplePolicy C# plugin (#682), privnet is not changed - -Improvements: - * keys.PublicKey now has Cmp method available (#661) - * core now exports UtilityTokenID and GoverningTokenID functions (#682) - * miner transactions generated by consensus process now properly set outputs - based on block's transactions fees (#682) - * (*Blockchain).`IsLowPriority` now takes fee (Fixed8) as an input (#682) - * mempool's GetVerifiedTransactions and TryGetValue now also return - transaction's fee - * DBFT logging was improved - * keys package no longer has Signature methods, they were replaced with more - useful GetScriptHash (#682) - -Bugs fixed: - * compiler produced wrong code if there was some data containing byte 0x62 in - the program (#630) - * answer to the `getblock` RPC method was not following the specification in - multiple places (#659) - * State transaction's descriptors were not encoded/decoded correctly (#661) - * keys.PublicKeys slice was not decoded properly (#661) - * 'Registered' descriptor of State transaction was not decoded correctly - (#661) - * voting processing and validators election was fixed to follow C# - implementation (#661, #512, #664, #682) - * deadlock in network subsystem on disconnect (#663) - * RPC answers with transactions were not following the specification in fields - names (#666) - * segmentation fault when checking references of bad transactions (#671) - * `getassetstate` and `getrawtransaction` RPC methods were not returning - error properly when missing asset or transaction (#675) - * consensus RecoveryMessage encoding/decoding wasn't correct (#679) - * DBFT was not reinitialized after successful chain update with the new block - received from other peers (#673) - * DBFT timer was extended too much, not following the C# implementation (#682) - -## 0.72.2 "Confabulation" (11 Feb 2020) - -Bugfix and small refactoring release, though it's the first one to include -improved CHECKMULTISIG implementation that is ~20% faster. - -Improvements: - * parallel CHECKMULTISIG implementation improving this instruction speed by - around 20% (#548) - * bytecode emitting functions moved to separate package, avoiding old - duplicate code and improving testing (#449, #534, #642) - * AppCall interop now accepts variable number of arguments (#651) - * more logging at info level from consensus subsystem, following neo-cli - behaviour - -Bugs fixed: - * compiler-emitted integers were using wrong format (#642) - * FreeGasLimit configuration set to zero was not really disabling gas limits - (#652) - * stale disconnected peers could cause networking subsystem deadlock (#653) - * transaction reverification (on new block processing) could lead to - blockchain deadlock for non-standard verification contracts (#655) - -## 0.72.1 "Contextualization" (07 Feb 2020) - -Exactly one bug fixed relative to the 0.72.0: - * testnet synchronization failed at block 713985 because of wrong - notification generated by the invocation transaction (#650) - -## 0.72.0 "Crystallization" (06 Feb 2020) - -Starting at the end of the year 2019 we've spent a lot of effort to -stress-test our node with transaction load and this allowed us to uncover -some problems in various parts of the system. This release addresses all of -them and brings with it updated networking, consensus and mempool components -that can handle quite substantial transaction traffic and successfully produce -new blocks while being stressed. There are also important updates in VM that -fix incompatibilities with C# node and interesting improvements in compiler -based on our experience porting neofs smart contract to Go. - -New features: - * `dump` command for wallet to dump it (replaced non-functional `open` - command, #589) - * support for single-node consensus setup (#595) - * ping/pong P2P messages are now supported with PingInterval and PingTimeout - configuration options (#430, #610, #627, #639) - * VM now fully supports calculating GAS spent during execution (#424, #648) - * Fixed8 type now supports YAML marshalling (#609) - * RPC invoke* calls can now be GAS-limited with MaxGasInvoke configuration - option (#609) - * gas limit for free invocation transactions can now be configured with - FreeGasLimit option which default to 10.0 for mainnet and testnet (#609) - * new compiler interop VerifySignature to verify ECDSA signatures (#617) - * compiler now supports loops with single condition (no init/post, #618) - * memory pool size is now configurable with MemPoolSize option which defaults - to 50000 for all configurations (#614) - * support for variables in slice literals in the compiler (#619) - * support for map literals in the compiler (#620) - * AppCall interop function (#621) - * `string` to `[]byte` conversion was implemented in the compiler (#622) - * Docker images now contain a dump of 1600 blocks for single-node setups and - one can choose which dump to use for restore with ACC environment variable - (#625) - * switch statement support in the compiler (#626) - * panic support in the compiler (#629) - -Behaviour changes: - * NEP2Decrypt function in keys package now returns a pointer to PrivateKey - rather than a WIF-encoded string (#589) - * DecryptAccount function in wallet package was moved to Decrypt method of - Account (#589) - * logging was moved from logrus to zap which changed messages format a little - (#284, #598) - * Block, BlockBase and Header structures were moved into their own `block` - package (#597) - * MemPool was moved into its own `mempool` package (#597) - * Sign method of PrivateKey no longer returns an error (#604) - * wallet is now compatible with C# node wallets (#603) - * consensus service now gets its keys from the wallet file instead of - plain-text WIF in the configuration (#588) - * `image` Makefile target was updated to nspccdev repo (#625) - * serializing invalid Transaction structures (that have no Data) is now - forbidden (#640) - * Item is no longer exposed by the mempool package (#647) - -Improvements: - * better testing of keys, wallet, compiler and mempool packages (#589, #568, - #647) - * smart use of previous proposal for block generation after dBFT's ChangeView - (#591) - * peer-server interaction refactored (#606) - * peer message queues were introduced with different priorities reducing - delays in consensus messages delivery and improving unicast communication - (#590, #615, #639) - * more efficient code generated by the compiler in some cases (#626, #629, - #637) - * mempool redesign leading to better performance (#647), it also doesn't - store unverified transactions now - -Bugs fixed: - * consensus service was not really requesting transactions from peers when it - was missing some locally (#602) - * build failing with newer rfc6979 package (#592) - * wrong integer serialization/deserialization in VM leading to - inconsistencies in state with C# node (#501/#605) - * consensus service was not processing node election results to - enable/disable dBFT (#603) - * in some cases peers were not unregistered after disconnect (#606) - * different execution results with C# node because of missing invocation fee - calculations (#607) - * RPC server now properly returns the amount of gas spent during execution - for invoke* calls (#609) - * FromAddress interop was translated improperly by the compiler (#621) - * compiler emitting wrong integers (#624) - * EOF errors on recovery consensus messages decoding (#632) - * wrong handling of assignments to underscore variable in the compiler (#631) - * wrong answers to getunspents/getaccountstate RPC requests for unknown - addresses (#633) - * multiple dBFT issues leading to consensus stalls, attempts to add wrong - block to the chain, message processing using wrong height and other - problems (#635, #641) - * duplicate connections were not detected before the handshake completion - which can happen too late (#639) - * attempts to connect to peer that has already connected to node (#639) - * unregistration of connected addresses (#639) - * ArrayReverse function was not copying arrays of size 1 (#644) - * race in transaction verification/addition to the mempool leading to - potential double spends (#647) - * wrong concurrent attempts to add new block to the chain (#647) - * blocks were not relayed properly by non-consensus nodes (#647) - * mempool memory leak (#647) - * missing reverification after block acceptance for transactions in mempool - (#647) - -## 0.71.0 "Celebration" (30 Dec 2019) - -Version 0.71.0 ends the year 2019 of neo-go development with a solid release -that adds support for pprof, implements all missing interoperability -functions, improves performance and as usual fixes some bugs. This is also the -first release with a test coverage of more than 60% which is a significant -milestone in our trend to improve code quality and testing. Back in August -2019 when NSPCC had started neo-go developement the project only had a -coverage of 45% and even though a lot of code has been added since we're -improving this metrics with every release. - -New features: - * pprof support (disabled by default, #536) - * compiler now supports assignments to an element of slice using variable - index (#564) - * hashed 4-byte IDs support for SYSCALL instruction (#565) - * remainder ('%') operator support in compiler (#563) - * Neo.Witness.GetVerificationScript and Neo.InvocationTransaction.GetScript - interop functions (#421) - * Neo.Iterator.*, Neo.Enumerator.* and Neo.Storage.Find interops (#422) - * tuple return support in compiler (#562) - * `getblocks` P2P command implementation (#577) - -Behaviour changes: - * `Monitoring` config section changed its name to `Prometheus` because of - pprof addition (#536) - * `db dump` command now also writes the block number zero by default to - comply with ImportBlocks format (#582) - * `skip` parameter was renamed to `start` in the `db dump` command (#582) - * `db restore` now skips the genesis block in the dump if starting to import - into the new DB and if this block matches the one generated on blockchain - init (#582) - -Improvements: - * VM optimizations (#558, #559, #565, #572) - * top block caching in core to improve dApps performance (#572) - * transaction's TXType can now be JSON-unmarshalled (#575) - * `crypto` package no longer exports AES functions (#579) - * merkle tree functions and structures were moved into the `hash` package - (#579) - * base58 functionality was moved into its own package from `crypto` (#579) - * `Uint160DecodeAddress` and `AddressFromUint160` functions were moved out of - `crypto` into their own package (#579) - * `address` package now can be configured to use different prefixes (#579) - -Bugs fixed: - * wrong INVERT instruction behaviour for converted values (#561) - * wrong DUP behaviour when the next instruction doesn't convert the value - (#561) - * OVER and PICK implementations didn't properly duplicate stack items (#561) - * PICKITEM instruction failed to duplicate picked items (#561) - * `getblock` RPC call was not answering with full hex-encoded block (#575) - * base58.CheckDecode was decoding values with leading zeroes in a wrong way - (#579) - * decoding wrong public key could succeed (#579) - * consensus payload verification was inconsistent with other verification - code (#555) - * DB dump was using wrong format in release 0.70.1 (#582) - * DB restorer was not properly counting skipped blocks which could lead to - bogus error being reported (#582) - * the DB was not closed properly on error during DB restore (#582) - * NPE in consensus (#583) - -## 0.70.1 "Centrifugation" (16 Dec 2019) - -Release 0.70.1 brings no new functionality focusing on internal node -improvements instead. Some bugs were fixed, refactoring was done and -performance was improved substantially. - -Behaviour changes: - * as with the previous release, this one changes the database format, so you - need to resynchronize your nodes - * code testing will fail if you're not to checkout submodules (we have one - with neo-vm tests, #543) - -Improvements: - * "inv" command handling was changed to not ask peers of the items we already - have (#533) - * numerous optimizations across the whole system (#535, #546, #547, #545, - #549, #550, #553, #554, #556, #557) - * compiler no longer outputs errors by itself, passing them programmatically - instead via its API (#457) - * VM opcodes were moved into their own package allowing wider reuse (#538) - * `compiler` package was moved one level up from `pkg/vm/compiler` to - `pkg/compiler` (#538) - * proper script trigger constants were added (#509) - * consensus payloads are now properly signed and this signature is being - checked (#544) - * Uint160/Uint256 types were made more consistent and having an explicit - LE/BE suffix for conversion functions (#314) - * a separate layer based on storage.Store with state item-specific functions - was created (#517, #334) - * ReadBytes/WriteBytes in io package were renamed into - ReadVarBytes/WriteVarBytes to more accurately describe them and be more - consistent with C# implementation (#545) - * io package was refactored to add type-specific read/write methods to its - structures and remove generic (slow) ReadLE/WriteLE (#553, #554) - * a simple tx performance benchmark was added (#551) - -Bugs fixed: - * consensus could start and stall with not-yet-connected peers (#532) - * nil pointer dereference in PrepareResponse and PrepareRequest messages - handling (#532) - * fatal error because of locking problems in mempool (#535) - * missing error handling in compiler emitter functions (#297) - * wallet opening command now hides the password printed into it (#539) - * storage was updated improperly when several transactions in one block were - touching the same keys, leading to subsequent transactions failures (#542) - * application execution results were not saved in full (#517) - * mempool transaction verification was wrong (#557) - -## 0.70.0 "Constellation" (29 Nov 2019) - -This is a long-awaited and exciting release implementing a full Neo -consensus node that you can run your own neo-go private net with! It also -brings with it serious improvements in contract handling, you can now not -only compile, but also deploy and invoke contracts with neo-go. - -New features: - * systemd unit file for deployment (#326) - * claim transactions processing was added (#489) - * Consensus payloads decoding/encoding (#431) - * `getunspents` method is RPC server (#473) - * updated docker-compose environment for privnet setup (#497, #529) - * client-side `getunspents` RPC method support (#511) - * contract deployment from the CLI (#474) - * enrollment and state transactions processing (#508) - * `Neo.Blockchain.GetValidators` interop support (#420) - * `invokefunction` RPC method support in the server (#347) - * `testinvokefunction` command in the CLI to do test invocations via - `invokefunction` RPC method (#521) - * consensus node support (#507, #525) - * server-side `invoke` RPC method support (#346) - * `testinvoke` CLI command to invoke contracts via `invoke` RPC method (#527) - * `getheaders` P2P message processing (#529) - * relaying was added for transactions coming from P2P network (#529) - * `invoke` and `invokefunction` commands to invoke deployed script and send an - invocation transaction to the network (#531) - -Behavior changes: - * db dump/restore format is now compatible with NGD chain dumps (#466) - * smart contracts now have a new configuration format that is used to deploy - them (#511) - * `testinvoke` CLI command was renamed to `testinvokescript` (#521) - -Improvements: - * `core.Blockchainer` interface now has a `Close` method (#485) - * `util.Uint256Size` is now public (#490) - * `io` package now has generic functions for array - serialization/deserialization (#490) - * `util.Uint256` now supports `io.Serializable` interface (#495) - * `smartcontract.ParamType` type now supports `io.Serializable` interface - (#495) - * `vm.ByteArrayItem` now uses hex representation when being marshalled into - JSON (#499) - * `io` serialization/deserialization for arrays is now restricted in elements - count (#503, #505) - * `core.AccountState` now stores all UTXOs for the account (#504) - * interop functions got some testing coverage (#492) - * rpc client now implements `CalculateInputs` method via `getunspents` call - for transaction building (#511) - * `transaction.NewInvocationTX` now accepts a gas parameter for the - corresponding transaction field (#511) - * `rpc.StackParamType` now supports YAML marshaling/unmarshaling - * `rpc` package now has more fine-grained methods for transaction building - (#511, #531) - * `Blockchain` now stores and updates validators list (#508) - * blockchain state management refactored (#508) - * `rpc` invocation parameter management reworked (#513) - * `util` test coverage improved (#515) - * `invokescript` tests were added to the `rpc` package (#521) - * `crypto/keys` and `crypto/hash` packages test coverage improved (#516) - -Bugs fixed: - * blockchain not persisting the latest changes on exit (#485) - * db dump/restore commands incorrectly handled `skip` parameter (#486) - * vm failed to serialize duplicating non-reference elements (#496) - * improper smartcontract notifications handling (#453) - * nondeterministic `GetReferences` interop behaviour leading to contract - failures (#454) - * writing message to the peer could be interleaved with other messages - leading to garbage being sent (#503, #506) - * inability to process block with previously relayed transaction (#511) - * decoding transaction with invalid type didn't return an error (#522) - * attempts to reconnect to the node with the same ID (#507) - * peer disconnects during handshake because of code race (#529) - * useless header requests from peers with low height (#529) - * wrong header hashes initialization from the DB in case there are 2000*N + 1 - blocks in the chain (#529) - -## 0.62.0 "Commotion" (07 Nov 2019) - -Release 0.62.0 finishes one very important work some pieces of which were -gradually rolled out in previous releases --- it integrates all neo-vm project -JSON-based tests for NEO 2.0 C# VM and runs them successfully against neo-go -VM. There are also important bug fixes based on mainnet nodes deployment -experience and additional configuration options. - -New Features: - * implemented `Runtime.Serialize` and `Runtime.Deserialize` syscalls (#419) - * new configuration option -- `AttemptConnPeers` to set the number of - connections that the node will try to establish when it goes below the - MinPeers setting (#478) - * `LogPath` configuration parameter to write logs into some file and not to - stdout (#460), not enabled by default - * `Address` configuration parameter to specify the address to bind to (#460), - not enabled by default - -Behavior changes: - * mainnet configuration now has correct ports specified (#478) - * multiple connections to the same peer are disallowed now (as they are in C# - node (#478)) - * the default MaxPeers setting was increased to 100 for mainnet and testnet - configurations and limited to 10 for privnet (#478) - -Improvements: - * implemented missing VM constraints: stack item number limitation (#462) and - integer size checks (#484, #373) - * added a framework to run JSON-based neo-vm tests for C# VM and fixed all - remaining incompabitibilities (#196) - * added wallet unit tests (#475) - * network.Peer's NetAddr method was split into RemoteAddr and PeerAddr (#478) - * `MakeDirForFile` function was added to the `io` package (#470) - -Bugs fixed: - * RPC service responded with block height to `getblockcount` request which - differs from C# interpretation of `getblockcount` (#471) - * `getbestblockhash` RPC method response was not adding leading `0x` prefix - to the hash, while C# node does it - * inability to correctly handshake clients on the server side (#458, #480) - * data race in `Server` structure fields access (#478) - * MaxPeers configuration setting was not working properly (#478) - * useless DB reads (that failed in some cases) on persist attempt that didn't - persist anything (#481) - * current header height was not stored in the DB when starting a new - blockchain which lead to node failures on restart (#481) - * crash on node restart if no header hashes were written into the DB (#481) - -## 0.61.0 "Cuspidation" (01 Nov 2019) - -New features: - * Prometheus support for monitoring (#441) - * `neo-go contract invoke` now accepts endpoint parameter (`--endpoint` or - `-e`) to specify RPC node to be used for invocation (#363) - * RPC server now supports `invokescript` method (#348) - * minimum peers number can now be configured (#468) - * configured CORS workaround implemented in the RPC package (#469) - -Behavior changes: - * `neo-go contract inspect` now expects avm files in input, but can also - compile Go code with `-c` parameter (previously is was done by default), - `inspect` subcommand was removed from `neo-go vm` (it dumped avm files in - previous release) (#463) - * the default minimum peers was reduced to 3 for privnet setups to avoid - useless reconnections to only 4 available nodes - * RPC service now has its own section in configuration, update your - configurations (#469) - -Improvements: - * VM.Load() now clears the state properly, making VM reusable after the Run() - (#463) - * Compile() in compiler package no longer accepts Options, they were not used - previously anyway (#463) - * invocation stack depth is now limited in the VM (#461) - * VM got new State() method to get textual state description (#463) - * vm's Stack structure can now be marshalled into JSON (#463) - -Bugs fixed: - * race in discoverer part of the server (#445) - * RPC server giving improper (not JSON) respons to unimplemented API requests - (#463) - -## 0.60.0 "Cribration" (25 Oct 2019) - -Release 0.60.0 brings with it an implementation of all NEO 2.0 VM opcodes, -full support for transaction relaying, improved logging, a bunch of fixes and -an updated project logo. - -New features: - * blocks dumping from DB to file and restoring from file to DB (#436) - * new logo (#444) - * implemented `getdata` message handling (#448) - * issue tx processing (#450) - * CALL_I, CALL_E, CALL_ET, CALL_ED, CALL_EDT implementation in the VM (#192) - -Internal improvements: - * codestyle fixes (#439, #443) - * removed spurious prints from all the code, now everything is passed/logged - correctly (#247) - -Bugs fixed: - * missing max size limitation in CAT and PUSHDATA4 opcodes implementation - (#435) - * wrong interpretation of missing unspent coin state when checking for double - spend (#439) - * panic on successive node starts when no headers were saved in the DB (#440) - * NEWARRAY/NEWSTRUCT opcodes didn't copy operands for array<->struct - conversions - * deadlock in MemPool on addition (#448) - * transactions were not removed from the MemPool when processing new signed - block (#446) - * wrong contract property constants leading to storage usage failures (#450) - -## 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 -development effort into one codebase, refactoring things, fixing some -long-standing bugs and adding new functionality. This release merges two -radically different development branches --- `dev` and `master` that were -present in the project (along with all associated pull requests) and also -brings in changes made to the compiler in the neo-storm project. - -New features: - * configurable storage backends supporting LevelDB, in-memory DB (for - testing) and Redis - * BoltDB support for storage backend - * updated and extended interop APIs (thanks to neo-storm) - -Notable behavior changes: - * the default configuration for privnet was changed to use ports 20331 and - 20332 so that it doesn't clash with the default dockerized neo-privnet - setups - * the default configuration path was changed from `../config` to `./config`, - at this stage it makes life a bit easier for development, later this will - be changed to some sane default for production version - * VM CLI now supports type inference for `run` parameters (you don't need to - specify types explicitly in most of the cases) and treats `operation` - parameter as mandatory if anything is passed to `run` - -VM improvements: - * added implementation for `EQUAL`, `NZ`, `PICK`, `TUCK`, `XDROP`, `INVERT`, - `CAT`, `SUBSTR`, `LEFT`, `RIGHT`, `UNPACK`, `REVERSE`, `REMOVE` - * expanded tests - * better error messages for different erroneous code - * implemented item conversions following neo-vm behavior: array to/from - struct, bigint to/from boolean, anything to bytearray and anything to - boolean - * improved compatibility with neo-vm (#394) - -Technical improvements: - * switched to Go 1.12+ - * gofmt, golint (#213) - * fixed and improved CircleCI builds - * removed internal rfc6969 package (#285) - * refactored util/crypto/io packages, removed a lot of duplicating code - * updated READMEs and user-level documents - * update Makefile with useful targets - * dropped internal base58 implementation (#355) - * updated default seed lists for mainnet and testnet from neo-cli - -Bugs fixed: - * a lot of compiler fixes from neo-storm - * data access race in memory-backed storage backend (#313) - * wrong comparison opcode emitted by compiler (#294) - * decoding error in `publish` transactions (#179) - * decoding error in `invocation` transactions (#173) - * panic in `state` transaction decoding - * double VM run from CLI (#96) - * non-constant time crypto (#245) - * APPEND pushed value on the stack and worked for bytearrays (#391) - * reading overlapping hash blocks from the DB leading to blockchain state - neo-go couldn't recover from (#393) - * codegen for `append()` wasn't type-aware and emitted wrong code (#395) - * node wasn't trying to reconnect to other node if connection failed (#390) - * stricly follow handshare procedure (#396) - * leaked connections if disconnect happened before handshake completed (#396) - -### Inherited unreleased changes - -Some changes were also done before transition to the new team, highlights are: - * improved RPC testing - * implemented `getaccountstate`, `validateaddress`, `getrawtransaction` and - `sendrawtransaction` RPC methods in server - * fixed `getaccountstate` RPC implementation - * implemented graceful blockchain shutdown with proper DB closing - -## 0.45.14 (not really released, 05 Dec 2018) - -This one can technically be found in the git history and attributed to commit -fa1da2cb917cf4dfccbe49d44c5741eec0e0bb65, but it has no tag in the repository -and so can't count as a properly released thing. Still it can be marked as a -point in history with the following changes relative to 0.44.10: - * switched to Go modules for dependency management - * various optimizations for basic structures like Uin160/Uint256/Fixed8 - * improved testing - * added support for `invoke` method in RPC client - * implemented `getassetstate` in RPC server - * fixed NEP2Encrypt and added tests - * added `NewPrivateKeyFromRawBytes` function to the `wallet` package - -## 0.44.10 (27 Sep 2018) - -This is the last one tagged in the repository, so it's considered as the last -one properly released before 0.50+. Releases up to 0.44.10 seem to be made in -automated fashion and you can find their [changes on -GitHub](https://github.com/nspcc-dev/neo-go/releases). +## 0.90.0 "Tantalization" (14 July 2020) + +The first Neo 3 compatible release of neo-go! We've targeted to make it +compatible with preview2 release of Neo 3, so it only contains features +available there, but at the same time this makes the node more useful until we +have some more up to date reference version. It's a completely different +network, so almost everything has changed and it's hard to describe it with +the same level of details we usually do (but we'll provide them for subsequent +releases where the changeset is going to be lower in size). Please note that +this is a preview-level release and there won't be long-term support provided +for it, Neo 3 is evolving and the next release won't be compatible with this +one. + +Main Neo 3 features in this release: + * no UTXO + * native contracts + * new VM + * scoped witnesses for transaction + * updated interop/syscalls set + * contract manifests + * more efficient P2P protocol + +Things that have also changed: + * transaction format + * block format + * address format + * wallets + * RPC protocol + * notification subsystem + * executable format output for compiler + +Compatibility level of this neo-go release: + * identical storage changes compared to C# node for 378K blocks of preview2 + testnet + * debugging info produced is compatible with preview2-compatible neo-debugger + * running consensus nodes in heterogeneous setup is possible (2 neo-go CNs + with 2 C# CNs, for example) + +Changes specific to neo-go: + * some CLI parameters like wallet path or RPC endpoint URL have been unified + across all commands and thus have changed in some of them (refer to CLI + help for details) + * as an extension we support post-preview2 cosigners parameter for + invokefunction RPC calls (see neo-project/neo-modules#260) + * Go compiler now supports comparisons with nil properly + * we no longer provide bootstrapping 6k block dump for private networks, you + have 30000000 GAS right in the genesis block and it's not hard to make use + of it (see + [neo-go-sc-wrkshp](https://github.com/nspcc-dev/neo-go-sc-wrkshp) for an + example of how to use it) + * we have a conversion tool for your old Neo 2 wallets (`wallet convert` + command), so you can reuse keys on Neo 3 networks + * util.Equals interop function may not function the way you expect it to due + to Neo VM changes, it still is an EQUAL opcode though. This interop may be + removed in the future. + +## Older versions + +Please refer to the [master-2.x branch +CHANGELOG](https://github.com/nspcc-dev/neo-go/tree/master-2.x/CHANGELOG.md) +for versions prior to 0.90.0 (that are Neo 2 compatible, unlike 0.90.0+ that +are Neo 3 compatible). diff --git a/ROADMAP.md b/ROADMAP.md index 4b6d23d12..2966217eb 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -7,12 +7,8 @@ functionality. ## Versions 0.7X.Y (as needed) * Neo 2.0 support (bug fixes, minor functionality additions) -## Version 0.90.0 (June 2020) -* Neo 3.0 features preview (compatible with v3.0.0-preview2) - -## Version 0.91.0 (July/August 2020) -* Neo 3.0 features preview (more up to date version, will probably sync with -the next C# implementation preview release) +## Version 0.91.0 (August 2020) +* Neo 3.0-preview3 compatible version. ## Version 1.0 (2020, aligned with NEO 3.0 release) * full NEO 3.0 support