Skip to content

Comprehension

Compare
Choose a tag to compare
@roman-khimov roman-khimov released this 17 Mar 13:43
· 6392 commits to master since this release

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)