github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/CHANGELOG.md (about)

     1  # Changelog
     2  
     3  This document outlines major changes between releases.
     4  
     5  ## 0.105.1 "Enumeration" (12 Jan 2024)
     6  
     7  This is another v3.6.2-compatible release that fixes mainnet state difference at
     8  block 4688591. It is confirmed to have the same state up to 4723K height (which
     9  is current), but to get proper mainnet state you need to resynchronize your node
    10  from the genesis. T5 testnet state is not affected (at least up to the current
    11  3323K height), thus DB resynchronisation may be skipped for testnet nodes.
    12  
    13  Improvements:
    14   * better network services logging (#3287, #3290)
    15  
    16  Bugs fixed:
    17   * state difference at block 4688591 of N3 mainnet caused by difference at
    18     characters escaping during manifest's `Extra` field JSON serialisation (#3286)
    19  
    20  ## 0.105.0 "Designation" (29 Dec 2023)
    21  
    22  We're rolling out an update for NeoGo nodes that contains a number of user-facing
    23  API improvements for RPC web-socket notification subsystem, CLI utility, wallet
    24  related packages and not only. Try out our new `--await` CLI option for those
    25  commands that relay transactions to the network to automatically wait for the
    26  on-chain transaction execution result. Subscribe for new block headers with
    27  extended RPC notification subsystem interface. Use contract-based accounts
    28  provided by `wallet` package and `neotest` framework to sign transactions. These
    29  and a set of other improvements are available to our users while this release is
    30  staying compatible with 3.6.2 version of C# node.
    31  
    32  This version also delivers a bug fix for consensus node panic caused by improper
    33  native NeoToken cache initialisation. Moreover, there's a set of RPC server side
    34  improvements, thus, we recommend to upgrade both consensus and RPC nodes to
    35  provide more stable consensus node functioning and extended user APIs functionality.
    36  No database resynchronisation is needed.
    37  
    38  New features:
    39   * block headers RPC web-socket subscription (#3252)
    40   * --await option to synchronize on transaction execution for CLI commands (#3265)
    41   * partial session-based RPC iterator unwrapping (#3274)
    42   * contract-based transaction signers in neotest framework (#3233)
    43   * AMD64 release binaries for macOS (#3251)
    44   * complex contract signature schemes in wallet.Account (#3256)
    45  
    46  Behavior changes:
    47   * basic RPC subscription filter validity checks are implemented on both RPC
    48     client and RPC server sides (#3258)
    49   * filter of notary request event RPC subscription is extended with `type` field
    50     (#3236)
    51   * if available, use block headers RPC web-socket subscription for transaction
    52     awaiting via `waiter` package API (#3283)
    53  
    54  Improvements:
    55   * add smart contract storage limits to interop utilities (#3232)
    56   * extend ZKP examples documentation with additional links to PoT ceremony
    57     response files (#3234)
    58   * support Go types in VM emitter API (#3237)
    59   * documentation update (#3239, #3242, #3246)
    60   * BoltDB (go.etcd.io/bbolt) dependency upgrade (#3250)
    61   * CLI code refactoring (#2682)
    62   * extend wallet package to work with byte slice based wallets (#3255)
    63   * export RPC client side transaction awaiting functionality via `waiter` package
    64     (#3265, #3283)
    65  
    66  Bugs fixed:
    67   * remove stale `updatehistory` section of `getnativecontracts` RPC response (#3240)
    68   * immediately check RPC client initialisation on access to blocks RPC subscription
    69     API (#3257, #3261)
    70   * fix CN panic caused by unexpected call to native NeoToken cache (#3253)
    71   * make "automatically generated" warning of all automatically generated files
    72     follow the standard (#3280)
    73  
    74  ## 0.104.0 "Globalization" (27 Nov 2023)
    75  
    76  We're updating NeoGo to push out a number of useful updates and protocol
    77  extensions as well as make it compatible with 3.6.2 version of C# node. The most
    78  invasive behaviour changes are VM-level protocol constraints imposed on the size
    79  of serialized stackitems and `NativeActivation` node setting removal. This version
    80  also delivers a set of smaller useful changes in the interoperability layer and
    81  native contract functionality including System.Runtime.CurrentSigners interop,
    82  `strLen` StdLib method and PolicyContract-based transaction attributes pricing
    83  as far as a user-facing `canceltx` CLI command and community-requested
    84  `--relative-path` CLI option.
    85  
    86  Node operators must resynchronize their nodes to get fully compatible state
    87  (which is confirmed to be compatible with 3.6.2 for current mainnet up to
    88  block 4483627 and T5 testnet up to block 3078762). Please, ensure your node
    89  configuration doesn't contain `NativeActivations` protocol configuration section
    90  as this logic is hidden under Hardforks starting from the current release.
    91  
    92  New features:
    93  * System.Runtime.CurrentSigners interop allowing to get signers of the currently
    94    loaded transaction (#3058)
    95  * `strLen` method to native StdLib contract (#3208)
    96  * transaction attributes pricing regulation via native PolicyContract (#3155)
    97  * `canceltx` CLI command as an alternative to unsupported `canceltransaction` RPC
    98    request (#3223, #3214)
    99  
   100  Behaviour changes:
   101  * reduce maximum allowed stackitem.Item size (#3185)
   102  * restrict maximum allowed NEF file size and prohibit large contracts deployment (#3186)
   103  * bind `NativeActivations` node setting to the `Hardforks` setting (#3212)
   104  * introduce serialization limit to stackitem.Item and fail large contracts deploy
   105    wrt this setting (#3218)
   106  * add customizable `MaxRequestBodyBytes` and `MaxRequestHeaderBytes` RPC server
   107    configuration setting (#3221)
   108  
   109  Improvements:
   110  * provide more detailed error on attempt to read non-existent service wallet
   111    provided via node configuration file (#3210)
   112  * optimize emit of imported code for autogenerated RPC bindings (#3215)
   113  * documentation update (#3203, #3222)
   114  * add `--relative-path` CLI flag allowing to override configuration-specific relative
   115    paths (#3206)
   116  * update code owners (#3216, @fyrchik will live in our hearts forever)
   117  
   118  Bugs fixed:
   119  * unify messages of RPC errors according to the RPC errors NEP (#3199)
   120  * limit maximum allowed number ad depth of transaction signers and witnesses per
   121    RPC request that accept transaction (#3207, #3221)
   122  * forbid unknown fields usage in the node configuration file (#3209)
   123  * enable hardfork-dependant code starting exactly from the block height specified
   124    in the node configuration (#3211)
   125  * require Notary native deposit to be valid for at least one subsequent block after
   126    deposit transaction acceptance (#3211)
   127  * deduplicate unnamed event types for autogenerated RPC bindings and make the
   128    binding generation order strictly defined and stable (#3215, #3220)
   129  * do not panic on trying to compile an import cycle (#3215)
   130  * state difference at block 3002333 of T5 testnet caused by difference at characters
   131    escaping during manifest's `Extra` field JSON serialisation (#3225)
   132  * properly start node services that depend on native RoleManagement contract data
   133    with genesis `Roles` protocol configuration setting specified (#3229)
   134  
   135  ## 0.103.1 "Verification" (09 Nov 2023)
   136  
   137  An urgent 3.6.0-compatible version that contains a hotfix for the bug that
   138  prevents node from starting from the existing database every new dBFT epoch.
   139  Also, the release includes a bugfix that fails any non-zero NEO and GAS
   140  roundtrips from accounts with zero balance.
   141  
   142  Although the DB format and storage states were not affected by this release,
   143  the node resynchronization is still recommended for those who want to keep
   144  correct application logs. Resynchronization can be skipped if you're ok with
   145  wrong application logs for some transactions (e.g. CN doesn't care, and RPC node
   146  cares a lot).
   147  
   148  Bugs fixed:
   149  * properly initialize cache of native NeoToken contract every new dBFT epoch (#3187)
   150  * forbid non-zero NEO and GAS roundtrips from accounts with zero balance (#3191)
   151  
   152  ## 0.103.0 "Backwardation" (20 Oct 2023)
   153  
   154  A minor 3.6.0-compatible version of NeoGo with new salty ZKP-related
   155  functionality, a large batch of deprecated APIs removal and an experimental
   156  genesis block extension. Build Groth-16 circuits, generate proofs and deploy
   157  verification contracts easily with the new end-to-end ZKP example and `zkpbinding`
   158  NeoGo API. Setup node roles via the node configuration starting from the genesis
   159  block without any painful multisignature transaction forming and invoke any
   160  custom script in the genesis-level transaction with the new `Genesis` protocol
   161  configuration extension. And don't forget to move from deprecated RPC client
   162  APIs, as a lot of them have been removed.
   163  
   164  New node configuration format is finally adapted and the deprecated configuration
   165  sections are permanently removed according to the schedule. Pay attention to the
   166  `SecondsPerBlock` protocol configuration section that was replaced by
   167  `TimePerBlock`, a set of node and services address- and port- related configuration
   168  section that were replaced by the new `Addresses` format, direct `UnlockWallet`
   169  consensus configuration that was replaced by a separate `Consensus` section and
   170  a set of node-specific protocol configurations that were moved under a separate
   171  `P2P` section.
   172  
   173  This release fixes a set of bugs including a vulnerability introduced by changes
   174  in the transaction conflicts storage scheme implemented in #3061 (a part of
   175  0.102.0 release). With the patch presented, it's impossible to uncontrollably
   176  pollute the storage with malicious conflicting records. 
   177  
   178  This version is fully compatible with C# node 3.6.0. However, it requires
   179  complete resynchronization on upgrade due to the database storage scheme changes.
   180  
   181  New features:
   182  * API for Groth-16 verification contracts autogeneration and end-to-end example for
   183    proving and verifying statements on NeoGo (#3043, #3146)
   184  * introduce genesis protocol extensions: default node roles designation and genesis
   185    transactions (#3168)
   186  
   187  Behaviour changes:
   188  * a lot of deprecated functionality is dropped: RPC client old APIs, shared
   189    Notifications channel of WebSocket client, SecondsPerBlock protocol
   190    configuration, old way of services and node address and port configuration, old
   191    P2P related application settings configuration, direct UnlockWallet consensus
   192    configuration, direct node-specific protocol configuration (#3150)
   193  * database scheme is changed by new way of storing the transaction conflicting
   194    records (#3138) 
   195  
   196  Improvements:
   197  * NeoFS SDK dependency upgrade (#3129)
   198  * gnark and gnark-crypto dependencies upgrade (#3145, #3162, #3163)
   199  * introduce timeout restriction for BoltDB opening (#3148)
   200  * bump code coverage uploading action version (#3153)
   201  * Go 1.21 support, bump minimum required Go version up to Go 1.19 (#3157)
   202  * upgrade golang.org/x/net version (#3158)
   203  * add protocol hardforks configuration to the `getversion` RPC response (#3160)
   204  * format autogenerated smart contract bindings with accordance to standard `go fmt` rules (#3164)
   205  * add "DO NOT EDIT" warning to the autogenerated smart contract bindings (#3167)
   206  
   207  Bugs fixed:
   208  * avoid race between `getnextblockvalidators` RPC call handler and blockchain's
   209    block handler routine, significantly refactor native validators caching scheme
   210    (#3110)
   211  * do not panic on failed NeoFS oracle requests (#3129)
   212  * enable Notary subsystem in NeoFS mainnet configuration (#3136)
   213  * reorganize storage scheme for transaction conflicting records to avoid possible attack (#3138)
   214  * properly deserialize wildcard trusts field of smart contract manifest (#3140)
   215  * use more strict GAS limit for transaction network fee calculation via RPC call (#3141)
   216  * avoid WebSocket client request blocking (#3142)
   217  * properly emit big uint64 constants during smart contract compilation (#3147)
   218  * avoid race access to the node version by tests (#3149)
   219  * make FindStorage* RPC client APIs to be always compatible with NeoC# RPC server (#3166)
   220  
   221  ## 0.102.0 "Aberration" (06 Sep 2023)
   222  
   223  Long-awaited feature-packed 3.6.0-compatible version of NeoGo with all the
   224  appropriate protocol updates and a set of tasty improvements and bug
   225  fixes. Groth16 ZKP proof checks are there for contract developers as well as
   226  new opcodes. A huge number of improvements went into the RPC server and
   227  client, new RPCs, improved contract binding generator and standardized
   228  extended error codes make developing dApps much easier.
   229  
   230  Users of smart contract utilities and RPC-related Prometheus metrics are
   231  advised to take a look at the deprecated APIs removal schedule
   232  (ROADMAP.md). This version was delayed for quite some time (waiting for 3.6),
   233  so the next minor release (0.103.0) will remove a substantial amount of
   234  compatibility code. It's expected to be released in November with 3.6 protocol
   235  compatibility (3.7 cycle is likely to require more time).
   236  
   237  This is also the first version that drops support for Go 1.17 and requires
   238  1.18+ to build (with Go 1.20 supported). Using generics in smart contracts is
   239  not supported yet, but some elements of this support can be implemented in
   240  future versions.
   241  
   242  Mainnet and testnet node operators, please pay attention to the Basilisk
   243  hardfork schedule and check your configurations. It will happen at block
   244  2680000 for T5 testnet and 4120000 for mainnet. To ensure compatibility your
   245  node must be configured appropriately. This version requires DB
   246  resynchronization, so schedule your updates accordingly.
   247  
   248  New features:
   249   * ZKP proof checking support via CryptoLib native contract (operations with
   250     BLS12-381 curve points) (#2940, #3042)
   251   * System.Storage.Find interop now support "Backwards" flag to iterate in the
   252     opposite direction (#2952)
   253   * `util ops` CLI utility that pretty-prints VM script (#2965)
   254   * `notarypool_unsorted_tx` Prometheus metric for notary-enabled nodes (#2696)
   255   * `CloseNotificationChannelIfFull` WSClient option allowing the client to
   256     close notification channel on overflow (#2988)
   257   * autogenerated RPC bindings for contract events and conversion code from
   258     stackitem.Item to structure (#3008, #3035, #3036, #3087)
   259   * event type inference from contract code (#3008)
   260   * dynamic contract hashes support for RPC bindings (#3012)
   261   * "Basilisk" protocol hardfork support (#3056, #3080, #3086, #3104)
   262   * ABORTMSG and ASSERTMSG VM opcodes (#3066)
   263   * standardized RPC error codes (#3063)
   264   * `findstorage` and `findstoragehistoric` RPC support (#3099)
   265   * `getstoragehistoric` RPC support (#3099)
   266   * `getrawnotarypool` and `getrawnotarytransaction` RPC (#3098)
   267  
   268  Behaviour changes:
   269   * deprecated `FromAddress` smart contract helper is dropped from the `util`
   270     interop package (#2941)
   271   * a number of deprecated RPC-related Prometheus counters are permanently
   272     removed (#2941)
   273   * NEP-2 account label will be asked on account import via CLI (#2889)
   274   * hashes and states of native contracts are now accessible via native
   275     ContractManagement API (#2991)
   276   * `serv_node_version` gauge Prometheus metric is marked as deprecated and
   277     replaced by `neogo_version` and `server_id` (#3009)
   278   * strict contract script check is back with Basilisk hardfork, it was
   279     previously removed in 0.101.3 for 3.5 protocol compatibility (#3056)
   280   * JSON number deserialization (via StdLib.jsonDeserialize) changes with
   281     Basilisk hardfork allowing for more precision and handling more corner
   282     cases (#3080)
   283   * notification type errors are treated as fatal after Basilisk hardfork,
   284     before it they're just logged (#3086)
   285   * NULL and non-UTF8 items are not allowed for String event types (#3086)
   286   * `Conflicts` and `NotValidBefore` transaction attributes are no longer NeoGo
   287     extensions, they can be used on regular networks (#2962)
   288  
   289  Improvements:
   290   * documentation and example improvements (#2945, #2972, #2979, #3020, #3084,
   291     #3099, #3114, #3116, #3119, #3121)
   292   * `getproof` and `verifyproof` RPC API support in RPC client (#2942)
   293   * Go 1.20 support, bump minimum required Go version up to Go 1.18 (#2908)
   294   * faster state reset process (#2819)
   295   * optimized voting data storage scheme for NEO contract (#2892, #2893)
   296   * NeoFS SDK dependency upgrades (#2995, #3032)
   297   * special exported error returned in case of WSClient disconnection (#3000)
   298   * automatic guessing of contract and manifest filenames for `contract
   299     compile` CLI command and `loadnef` VM CLI command (#3013)
   300   * support for pushing stackitem.Convertible objects via VM script emitter (#3016)
   301   * economic adjustment for ranking of transactions with `Conflicts` attribute (#3031)
   302   * `google.golang.org/grpc` dependency upgrade fixing high severity security
   303     vulnerability (#3055, gRPC is only used to communicate with NeoFS nodes in
   304     the oracle service)
   305   * enforce default RPC server values when it's used as an independent package
   306     (not a part of node) (#3107)
   307   * unwrap.Nothing function for RPC clients (#3117)
   308   * address and reverse hash display in opcode dumps (#3115)
   309  
   310  Bugs fixed:
   311   * invalid peer port type returned by `getpeers` RPC response (#2914)
   312   * invalid data source for `mempool_unsorted_tx` Prometheus metric (#2969)
   313   * dBFT library upgrade fixing the ability of a single node to speed up the
   314     process of new blocks creation for the whole network (#3018,
   315     nspcc-dev/dbft#75)
   316   * failing CALLT instructions in VM CLI for loaded NEF files (#3020)
   317   * missing signers check for on-chain conflicting transactions (#3061)
   318   * incorrect sequence point boundaries in debug data (#3074)
   319   * compiler panic on encountering generic code (#3041)
   320   * potential pooled fallback notary transaction changes (#3108)
   321   * lost LastGasPerVote value on NEO state deserialization for non-voting
   322     accounts (#3122)
   323  
   324  ## 0.101.4 "Yarborough" (01 Aug 2023)
   325  
   326  Another one 3.5.0-compatible version that is aimed to fix T5 testnet state
   327  difference that has happened at block 2336911 which leads to inability to process
   328  new blocks since 2418703. The issue is fixed by allowing JSON numbers
   329  unmarshalling from scientific notation to Integer stackitem. Maximum parsing
   330  precision for such numbers is currently restricted by 53 bits. This is a
   331  temporary C#-compatible solution that is likely to change in the future versions
   332  when an appropriate C# node bug is fixed (neo-project/neo#2879).
   333  
   334  A set of minor bug fixes is included as well to flush some of the long-awaited
   335  changes that were blocked by the 0.102.0 release delay (caused by v3.6.0 C# node
   336  release delay). In particular, invalid headers returned by an RPC server for
   337  error responses, invalid format of incremental dumps created by CLI and deadlock
   338  on unhealthy RPC server shutdown. Long-awaited `--config-file` CLI option to
   339  start the node providing a single configuration file is added.
   340  
   341  T5 testnet chain requires a complete resynchronization for this version. Mainnet
   342  chain resynchronization is recommended, but not required.
   343  
   344  New features:
   345   * `--config-file` CLI option allowing to start the node with a single configuration file (#3014)
   346  
   347  Improvements:
   348   * blockchain Notary and Oracle services documentation improvement (#2972)
   349   * BoltDB (`go.etcd.io/bbolt`) dependency upgrade that fixes a number of Windows-related issues (#3034)
   350  
   351  Bugs fixed:
   352   * panic on node start with invalid configuration (#2968)
   353   * deadlock on unhealthy RPC server shutdown (#2966)
   354   * improper WSClient notification channels managing after disconnection (#2980)
   355   * missing Prometheus metric initialisation on node start (#2992)
   356   * invalid initialisation of native contracts cache (#2994)
   357   * incorrect way of incremental DB dumps creation (#3047)
   358   * Notary contract is allowed to be a sender of main Notary request transaction (#3065)
   359   * discrepancy in signer's witness scope parsing on the RPC server side (#3060)
   360   * Invoker calling API isn't allowed to accept nil parameter (#3067)
   361   * contract RPC Client unwrapper helper can't handle missing contract case (#3072)
   362   * JSON numbers can't be unmarshalled to stackitem from scientific notation (#3073)
   363   * invalid content-type header returned by RPC server on error responses (#3075)
   364  
   365  ## 0.101.3 "Yuckiness" (08 Jul 2023)
   366  
   367  Yet another 3.5.0-compatible emergency version that removes scrupulous
   368  instructions check of smart contract's script on contract deployment or update.
   369  Presence of this check leads to the known T5 testnet state incompatibility
   370  (since 1670095) which causes inability to process new blocks (since 2272533).
   371  It should be noted that the corresponding check was accidentally removed from
   372  the reference C# node implementation way back in neo-project/neo#2266 and added
   373  again in neo-project/neo#2849 which is planned to be a part of the upcoming
   374  3.6.0 C# node release. Thus, changes made in the presented 0.101.3 release will
   375  be reverted afterwards and strict contract script check will be present in the
   376  next 3.6.0-compatible version of NeoGo node.
   377  
   378  T5 testnet chain requires a complete resynchronization for this version. Mainnet
   379  chain resynchronization is recommended.
   380  
   381  Bugs fixed:
   382  
   383   * extra strict contract script check on contract deployment or update is
   384     removed (#3052)
   385  
   386  ## 0.101.2 "Excavation" (29 Jun 2023)
   387  
   388  One more (and unexpected one!) 3.5.0-compatible version that fixes a VM bug
   389  leading to mainnet state incompatibility (since 3672783) which in turn leads
   390  to inability to process new blocks (since 3682290).
   391  
   392  Mainnet chain needs to be resynchronized for this version.
   393  
   394  Improvements:
   395   * documentation updates (#3029, #2990, #2981)
   396  
   397  Bugs fixed:
   398   * incorrect handling of empty Any-type parameter for RPC invocations (#2959)
   399   * incorrect state rollbacks in case of exception during cross-contract call
   400     when the call is made from non-TRYing context (#3046)
   401  
   402  ## 0.101.1 "Shallowness" (17 Mar 2023)
   403  
   404  Another 3.5.0-compatible version that delivers important bug fixes and
   405  provides a new API to be used by NeoFS. An upgrade is recommended, the DB
   406  doesn't need to be resynchronized.
   407  
   408  New features:
   409   * internal RPC client for deeply integrated applications like NeoFS (#2916)
   410  
   411  Improvements:
   412   * documentation updates (#2879, #2880, #2893, #2917, #2920, #2936)
   413   * code style, spelling and updated linter fixes (#2884, #2922, #2933)
   414   * NEP-2 import password can be provided via config file now (#2887)
   415   * custom stack item deserialization limit is available via public APIs now (#2904)
   416   * RPC client endpoint can be retrieved via public API (#2915)
   417   * dependency updates (#2919, #2929)
   418   * WSClient now copies filter parameters to Subscribe* and Receive* methods
   419     improving code safety (#2937)
   420  
   421  Bugs fixed:
   422   * name parameter ignored for wallet import command (#2887)
   423   * incorrect RPC binding code generated for Any return type (#2918)
   424   * memory leak on active peer disconnection (#2924)
   425   * consensus process deadlock (#2930)
   426   * dBFT deadlock in "committed at previous view" scenario (#2935)
   427   * panic in RPC waiter code (#2938)
   428  
   429  ## 0.101.0 "Shortness" (13 Jan 2023)
   430  
   431  This release delivers an important fix for block execution application logs
   432  and requires a resynchronization, therefore it's 0.101.0 (even though it's
   433  also 3.5.0-compatible). It fixes some other minor problems as well (the other
   434  most notable change probably is in the compiler), so we recommend upgrading.
   435  
   436  Improvements:
   437   * updated golang.org/x/* dependencies (#2854)
   438   * CLI help and required flags handling fixes (#2852)
   439   * transfer data storage optimization (#2865)
   440   * network's magic number is stored (and checked against the config on
   441     startup) in the DB now, reducing potential for node operator errors (#2867)
   442  
   443  Bugs fixed:
   444   * in rare cases nodes could request an invalid number of blocks from peers
   445     leading to disconnect (#2846)
   446   * outdated documentation fixes (#2860, #2876)
   447   * application logs for blocks that contained GAS spends for transaction fees
   448     contained (and returned from getapplicationlog RPC) incorrect (off by one)
   449     values for amount in Transfer events; transaction application logs were not
   450     affected by this, but data returned to RPC event subscribers could
   451     potentially be (#2865)
   452   * findstates RPC returned an error instead of an empty data set for valid
   453     contracts that have no data (unlike C# node, #2866)
   454   * miscompiled shadowed range loop variable definition (#2871)
   455   * missing (compared to C# node) explicit (even though null) 'exception' field
   456     in the getapplicationlog RPC output from server (#2872)
   457  
   458  ## 0.100.1 "Chaptalization" (28 Dec 2022)
   459  
   460  This is a tiny update that 99.99% of users can easily skip. The reason for
   461  this release is the need to fix compatibility with the NeoFS mainnet
   462  sidechain and have some stable version to be used there. In any other case it
   463  can be ignored, but if you still decide to upgrade you don't need to
   464  resynchronize.
   465  
   466  Behaviour changes:
   467   * Aspidochelone fork is made to include ContractManagement native contract
   468     deploy/update methods call flags change, initially it was an unconditional
   469     part of 0.99.0 NeoGo release (or 3.2.0 C# version), but this behavior is
   470     incompatible with the NeoFS mainnet sidechain; the change to the fork logic
   471     does not affect any other public networks (mainnet/testnet) and any new
   472     networks that have Aspidochelone enabled since block 0 (#2848)
   473  
   474  Improvements:
   475   * more robust NEP-11 divisibility check in the RPC server code (#2841)
   476   * microoptimization for some debug log messages (#2842)
   477   * additional fuzz tests for integer serialization and script parsing code (#2851)
   478  
   479  ## 0.100.0 "Centuplication" (08 Dec 2022)
   480  
   481  A 3.5.0-compatible version of NeoGo with all the appropriate protocol updates
   482  and a number of other changes. The most notable ones are configuration
   483  updates. New features and some long-standing inconsistencies required for some
   484  changes and this release brings them with it. Old configurations are still
   485  supported and will work the same way (except for one minor exception in
   486  VerifyBlocks that is only supposed to be used for tests/development), but we'd
   487  like to highlight that all of the old settings will be removed in ~6 months,
   488  so please review these updates and update your configurations. For public
   489  networks the best way to go is to take the new versions from the "config"
   490  directory and then adjust for particular scenario if needed.
   491  
   492  This release requires a complete resynchronization due to native contract
   493  changes, so please schedule your updates appropriately.
   494  
   495  New features:
   496   * System.Runtime.LoadScript syscall (and appropriate smart contract interops)
   497     allowing to load/run dynamic code (#2719)
   498   * PUSHT/PUSHF VM instructions allowing for simpler/cheaper booleans (#2770)
   499   * ContractManagement native contract was extended with ID->hash mappings and
   500     `getContractById` and `getContractHashes` methods (#2702, #2837)
   501   * LogLevel application configuration option that can be changed on SIGHUP
   502     (#2831)
   503   * additional type data generated by the compiler that then can be used by the
   504     RPC bindings (SDK/contract wrapper) generator, this allows for complex
   505     types (structures/arrays/maps) to be easily represented/handled in
   506     contract-specific RPC code (#2828)
   507   * multiaddress listeners for all services and P2P, this changes the old
   508     Address/Port (and AnnouncedPort for P2P) configuration scheme to more
   509     generic Addresses list, the old configuration is still supported, but is
   510     deprecated and will be removed in future node versions (#2827, #2839)
   511  
   512  Behaviour changes:
   513   * Aspidochelone fork block for NeoFS sidechain mainnet configuration is
   514     rescheduled again (#2823, #2830)
   515   * Blockchain's GetHeaderHash() method now accepts uint32 for parameter
   516     (#2814)
   517   * pre-0.97.3 and pre-0.99.0 deprecated compatibility fields and logic were
   518     dropped from the result.Version (`getversion` RPC result) structure (#2786)
   519   * SecondsPerBlock protocol configuration variable was replaced with
   520     TimePerBlock allowing for sub-second precision, SecondsPerBlock is still
   521     supported, but will eventually be removed (#2829)
   522   * AttemptConnPeers, BroadcastFactor, DialTimeout, ExtensiblePoolSize,
   523     MaxPeers, MinPeers, PingInterval, PingTimeout, ProtoTickInterval settings
   524     were moved into the new P2P section, timing parameters now use Duration
   525     type allowing for more human-friendly values in many cases, old parameters
   526     are still supported, but will eventually be removed (#2827)
   527   * consensus (dBFT) is configured as a separate service now that can be
   528     enabled/disabled (and can work in "watch only" mode without a wallet), the
   529     old direct "UnlockWallet" specification in "ApplicationConfiguration" is
   530     still supported, but is deprecated and will be removed in future versions
   531     (#2832)
   532   * GarbageCollectionPeriod, KeepOnlyLatestState, RemoveUntraceableBlocks,
   533     SaveStorageBatch and VerifyBlocks settings were moved from
   534     ProtocolConfiguration to ApplicationConfiguration; old configurations are
   535     still supported, except for VerifyBlocks which is replaced by
   536     SkipBlockVerification with inverted meaning (and hence an inverted default)
   537     for security reasons; this also affects NewBlockchain and neotest APIs
   538     (#2833)
   539  
   540  Improvements:
   541   * more user-friendly error and help messages in some cases (#2824, #2834)
   542   * faster node startup time and smaller memory footprint for networks with
   543     lots (1-2M+) of blocks (#2814)
   544   * minor documentation fixes (#2834, #2838)
   545  
   546  Bugs fixed:
   547   * transactions with system fee or more than MaxBlockSystemFee are no longer
   548     accepted into the mempool, preventing a form a network-wide DoS (#2826)
   549   * deprecated WSClient subscription methods not working correctly when filters
   550     are being used (#2836)
   551  
   552  ## 0.99.7 "Hyalinization" (23 Nov 2022)
   553  
   554  Bugs, terrestrial arthropods with at least six legs. Sometimes we don't notice
   555  them, sometimes we ignore them, but they do exist and there are times when
   556  they need to be dealt with in one way or another. Most of the bugs fixed in
   557  this release have a little less legs than proper insects, they're far from
   558  being as critical as the ones fixed in the previous release and yet we
   559  consider them annoying enough to warrant this new version of NeoGo to be
   560  published. We don't want to see our users fighting these pesky creatures in
   561  the wild, better update and have a troublefree experience.
   562  
   563  If you're not affected by #2815 (requests for verbose transaction data and
   564  application logs failed for some specific mainnet transaction(s)) you may
   565  leave the DB as is with this upgrade, if you want it to be solved then please
   566  resynchronize.
   567  
   568  Behaviour changes:
   569   * "loadtx" VM CLI command now uses transaction system fee value as the
   570     default GAS limit for the context, unless --gas is used (previously it
   571     wasn't limited, #2816)
   572   * SendRawTransaction RPC client method will now always return transaction
   573     hash, even if error occured, this also affects Actor APIs and allows to
   574     handle some specific errors (like transaction already present in the
   575     mempool) in more appropriate way (#2817)
   576   * Actor and NotaryActor Wait() wrapper methods now handle "already exists"
   577     and "already on chain" errors as non-errors, waiting (if needed) and
   578     returning proper results (#2817)
   579  
   580  Improvements:
   581   * reworked network discoverer/connection manager that has a better picture of
   582     the network (especially if it's a small one), doesn't try to make additional
   583     connections (even when having less than MinPeers of them) when there are no
   584     more real addresses to connect to, establishes stable connections faster in
   585     containerized environments and does more connection attempts when MinPeers
   586     setting is not satisfied, but there are potential candidates (#2811)
   587   * VM invocation stack handling microoptimization (#2812)
   588   * load* VM CLI commands now accept --gas parameter to set the amount of GAS
   589     to be used in this context (#2816)
   590   * better logging during state reset process (#2813)
   591   * subscription-based transaction waiter now handles already accepted
   592     transactions faster (~immediately vs waiting for block timeout previously,
   593     #2817)
   594   * WSClient can return more specific error on websocket handshake failure if
   595     it's provided by server (#2821)
   596   * new MaxWebSocketClients configuration option for the RPC server to control
   597     the number of allowed websocket clients, missing or 0 value make the server
   598     use the default of 64 which is compatible with the previous behavior (you
   599     can use old configurations if you don't care about this option, #2821)
   600  
   601  Bugs fixed:
   602   * occasional "loadgo" VM CLI test failures because of timeout (#2810)
   603   * websocket waiter test instability (#2809)
   604   * websocket event unsubscriptions could lead to node deadlock in rare
   605     circumstances (#2809)
   606   * exception handler could use improper evaluation stack in some cases (#2812)
   607   * pointer stack items were not handled correctly in "protected" serialization
   608     mode leading to inability to deserialize these items back (#2816)
   609   * state reset functionality not working for big chains like mainnet (#2813)
   610  
   611  ## 0.99.6 "Funambulation" (16 Nov 2022)
   612  
   613  An emergency release fixing mainnet incompatibility at block 2504320 leading
   614  to inability to process block 2504813. A couple of other less severe bugs got
   615  fixed as well. Unfortunately, this release requires complete resynchronization
   616  for mainnet, other networks can use old DBs.
   617  
   618  Improvements:
   619   * only transactions requested by the consensus process are forwarded to it
   620     now slightly improving performance in some networked scenarios (#2788)
   621   * a complete set of simple array unwrappers in the unwrap library (#2792)
   622   * RPC binding generator can handle simple arrays now with configuration file
   623     provided (#2792)
   624   * more user-friendly error messages in some cases (#2797, #2802, #2804)
   625  
   626  Bugs fixed:
   627   * DB was not properly closed after state reset (#2791)
   628   * VM stack handling problem leading to lost items after return from call to
   629     another contract (#2800)
   630   * "istack" command panic in the VM CLI (#2800)
   631   * failure to decode incorrect contract from ContractManagement state leading
   632     to failure to start the node, it'll be ignored now similar to how C# node
   633     treats this (#2802)
   634   * subscription to execution events failed if no "state" filter was used along
   635     with "container" (#2804)
   636   * Actor using WSClient could deadlock in the transaction waiter during
   637     unsubscription (#2804)
   638  
   639  ## 0.99.5 "Underestimation" (11 Nov 2022)
   640  
   641  It wasn't long since the previous release until a juicy set of features and
   642  optimisations came on board. So we've decided to change our release plan and
   643  supply one more 3.4.0 compatible version. It comes up with a massive suite
   644  of network P2P and broadcast improvements. We've carefully investigated message
   645  sending timeouts on benchmarks, reworked the broadcast logic and significantly
   646  reduced delays in message sending and the amount of useless traffic between our
   647  nodes. For smart-contract developers and RPC client users several new features
   648  were added. These are automatic RPC bindings generator, poll-based and
   649  websocket-based transactions awaiting and an extended websocket client
   650  subscriptions interface. For better debugging experience we've improved state
   651  related functionality of VM CLI and added an ability to reset chain state to a
   652  particular height.
   653  
   654  An important dBFT initialization bug that caused timestamp-related errors on
   655  block addition was fixed. Also, those who use NeoGo node with
   656  EnableCORSWorkaround setting may want to update the node to be able to handle
   657  web-socket requests with Origin set in the header. The users of websocket RPC
   658  client subscription mechanism are welcomed to move from deprecated subscriptions
   659  API to the extended one. Finally, we are kindly asking our users to have a look
   660  at our roadmap file where deprecated code removal schedule is attached.
   661  
   662  This version is fully compatible with C# node 3.4.0 and does not require
   663  resynchronization on upgrade. This time for sure, the next release is planned
   664  to be compatible with 3.5.0.
   665  
   666  New features:
   667   * logarithmic gossip fan-out, new `BroadcastFactor` application setting and
   668     adaptive peer requests are added to optimise broadcasting process (#608,
   669     #2678, #2743)
   670   * Prometheus histograms with handling time are added for P2P commands (#2750)
   671     and RPC calls (#2784)
   672   * transaction awaiting is added to RPC clients (#2740, #2749)
   673   * RPC bindings generator (#2705) is added for both safe (#2766) and
   674     state-changing (#2769, #2778) methods with initial iterator support (#2783)
   675   * the ability to reset chain state to a particular height is added (#2576,
   676     #2773)
   677  
   678  Behaviour changes:
   679   * Aspidochelone fork block for NeoFS sidechain mainnet configuration is
   680     rescheduled (#2754, #2776)
   681   * RPC server will now handle any Origin in websocket connection when
   682     EnableCORSWorkaround setting is on (#2772, #2724)
   683   * WS RPC client subscriptions API is extended to accept custom subscriber
   684     channels, old subscriptions API is marked as deprecated (#2756, #2764)
   685  
   686  Improvements:
   687   * network code refactoring (#2742)
   688   * network packets sending is now limited in time (#2738)
   689   * broadcast messages will be sent concurrently to each peer (#2741)
   690   * ping messages are broadcast using the common broadcast logic (#2742)
   691   * transactions requested by dBFT will be accepted on demand only (#2746, #2748,
   692     nspcc-dev/dbft#63)
   693   * VM CLI's state-based functionality improvements (extended signers and
   694     arguments parsing, enabled logging) and additional commands (`loadtx`,
   695     `loaddeployed`, `jump`) (#2729, #2606, #2740)
   696   * incoming P2P transactions are now processed concurrently and buffer for
   697     inventory hashes is reusable (#2755)
   698   * `GetData` and `GetBlocksByIndex` replies are now batched on a TCP-level
   699     (#2757)
   700   * optimisation of incoming P2P transactions and blocks filtering are introduced
   701     (#2758, #2759)
   702   * batch size of broadcast transactions hashes is adjusted (#2760)
   703   * peer reconnections logic is improved, `GetAddr` messages are sent more
   704     often (#2761, #2745)
   705   * documentation for wallet configuration file is clarified (#2763)
   706   * Koblitz curve implementation of btcd/btcec was replaced with decred/secp256k1
   707     due to GitHub security warning (#2781)
   708  * `NOT` opcode for Bool emission is now used to reduce resulting script
   709    cost (#2762)
   710  
   711  Bugs fixed:
   712   * failing tests cleanup on Windows (#2736)
   713   * race in CLI test (#2765)
   714   * invalid conversion of PublicKey smart contract parameter to emitable (#2739)
   715   * initialize dBFT's context with previous block's timestamp on view 0 (#2753,
   716     #2752, nspcc-dev/dbft#64)
   717  
   718  ## 0.99.4 "Transliteration" (07 Oct 2022)
   719  
   720  A small update mostly interesting for people building/testing smart contracts
   721  with NeoGo. It contains long-awaited VM CLI update that allows to use
   722  blockchain state and complete set of interops, additional helper functions for
   723  smart contracts and notification checking code (for upcoming 3.5.0 protocol
   724  changes). Node operators using EnableCORSWorkaround (that is still not
   725  recommended, but available) also may want to update to be able to handle
   726  pre-flight CORS requests.
   727  
   728  This version is compatible with C# node 3.4.0 and does not require
   729  resynchronization on upgrade. The next release is planned to be compatible
   730  with 3.5.0.
   731  
   732  New features:
   733   * address conversion helpers for smart contracts (#2698)
   734   * interop helper to call specific version of a contract (#2695)
   735   * notifications are now checked for manifest compliance, a warning is logged
   736     in case on detected inconsistencies (#2710)
   737   * VM CLI can now use blockchain state DB (including historic states) to run
   738     code with a complete set of interops and contracts available; additional
   739     commands were added to it to inspect storage and generated events (#2723)
   740  
   741  Behavior changes:
   742   * type assertion with two return values in Go contracts can't be compiled now
   743     (it never worked properly, #2718)
   744   * RPC server will now handle pre-flight CORS requests (via OPTIONS methods)
   745     when EnableCORSWorkaround setting is on (#2724)
   746   * all transaction-generating CLI commands were unified to accept
   747     gas/sysgas/out/force parameters, ask for confirmation and be able to save
   748     transaction into a file; this affects wallet claim and candidate-related
   749     commands mostly (#2731)
   750  
   751  Improvements:
   752   * smartcontract.Builder API was extended with Len method (#2691)
   753   * NNS example contract adjustments for better DNS compatibility (#2679)
   754   * documentation updates (#2708, #2722, #2726, #2728)
   755   * compiler now emits code to explicitly cast runtime.Notify() parameters to
   756     appropriate types (#2720)
   757   * CLI tests repackaging (#2725)
   758   * NeoFS sidechain configurations for mainnet and testnet (#2730)
   759  
   760  Bugs fixed:
   761   * panic on node shutdown (#2689)
   762   * panic on inlined append() compilation (#2716)
   763  
   764  ## 0.99.3 "Simplification" (09 Sep 2022)
   765  
   766  Version 0.99.3 brings with it most of the planned refactoring changes to the
   767  RPC client. dApp backend code can be greatly simplified in many cases by
   768  using new APIs (old ones are still available for transition period of about
   769  one-two releases more). We also have some updates for CLI and compiler and a
   770  number of bug fixes.
   771  
   772  This version is compatible with C# node 3.4.0 and does not require
   773  resynchronization on upgrade. The next release is planned to be compatible
   774  with 3.5.0 (if it's to be released around currently planned dates).
   775  
   776  New features:
   777   * native contract RPC wrappers (#2643, #2646, #2650, #2666, #2665)
   778   * NEP-11 RPC wrappers (#2651)
   779   * invoker interface extension with session-based iterators support (#2650)
   780   * notary Actor greatly simplifying creation of notary-assisted transactions
   781     via RPC client (#2665)
   782   * historic smart contract calls can now be made via CLI (#2683)
   783  
   784  Behavior changes:
   785   * calculatenetworkfee RPC can handle paid attributes (NeoGo extensions) and
   786     invalid contract signatures now, it won't return an error for them (#2658)
   787   * graceful node shutdown on SIGTERM (#2660)
   788   * wallet balance commands now require at least 0.99.1 NeoGo version (or
   789     compatible C# node) used by the RPC server (#2667)
   790  
   791  Improvements:
   792   * build system corrections (#2641, #2684)
   793   * additional types in `unwrap` (#2650, #2651)
   794   * session iterator consistency check in `unwrap` (#2650)
   795   * multitransfers in NEP-17 RPC wrapper (#2653)
   796   * extended transaction validity time in CLI wallet commands (#2653)
   797   * reference counter optimization in VM (#2659)
   798   * RPC Actor API can have default (used for all transactions) attributes and
   799     callbacks now (#2665)
   800   * neptoken RPC package can now provide wallet.Token data (#2667)
   801   * NEP-11 balance commands can now work without direct token hash
   802     specification or previous token import (#2667)
   803   * support for offline signing in CLI (#2668)
   804   * compiler can optimize out unused global variables now (#2624)
   805   * private keys are now cleaned up from memory when they're no longer needed,
   806     additional Account APIs added to reduce direct interactions with private
   807     keys (#2672)
   808   * updated linter settings, some code cleanup (#2674)
   809   * more documentation and examples for new RPC APIs (#2681)
   810   * refactored state-changing methods of NEP-11/NEP-17 RPC wrappers into a
   811     separate structure to simplify reusing them in higher-level code (#2681)
   812   * simplified rpcclient historic API (#2686)
   813  
   814  Bugs fixed:
   815   * compiler panic on empty package list (#2645)
   816   * compiler not allowed to use unnamed parameters in exported methods (#2648)
   817   * compiler allowed to export multireturn functions (#2648)
   818   * compiler panic on nil method receiver in the compiled code (#2649)
   819   * compiler panic on variable initialization from multireturn call (#2644)
   820   * potential lockups or panics on node shutdown (#2652)
   821   * contract manifest not checked for correctness in bindings generation CLI
   822     command (#2656)
   823   * SignTx wallet Account API could lead to inconsistent result in some cases
   824     (#2665)
   825   * wallet Account API allowed to sign with locked accounts (#2665)
   826   * potential panic in keys.WIFDecode on some inputs (#2672)
   827  
   828  ## 0.99.2 "Recalibration" (12 Aug 2022)
   829  
   830  This is a 3.4.0-compatible (tested for mainnet and testnet) update to NeoGo
   831  that implements all of the required protocol changes, adds a lot of new RPC
   832  client interfaces and provides additional service management functions. This
   833  is also the first version to support the recently released Go 1.19. Support
   834  for Go 1.16 is removed at the same time, so you need Go 1.17+ to build NeoGo
   835  now.
   836  
   837  With this version you can turn on/off, restart or reconfigure internal node
   838  services like RPC or Oracle without full node shutdown/startup. Node operators
   839  can send an appropriate Unix signal and that'll do the job. At the same time
   840  node operators must resynchronize their nodes when updating to 0.99.2 due to
   841  native contract state change.
   842  
   843  A number of RPC client's methods are now deprecated (but still available to
   844  simplify transition), please explore new APIs, try them and leave feedback in
   845  #2597 if any. We expect new APIs to better fit the needs of various backend
   846  RPC client use cases while allowing to remove some repetitive code from
   847  applications at the same time. This release only contains generic NEP-17 call
   848  wrapper, so it doesn't cover all of the things currently provided by the
   849  old client API, but this will be fixed in future releases.
   850  
   851  New features:
   852   * signal-based configuration and service reloads (#2612)
   853   * new APIs in smartcontract package to convert Go types into NEP-14
   854     parameters (#2621, #2632)
   855   * invoker package to deal with invocations via RPC in various contexts
   856     (mostly useful for read-only and/or historic calls when used directly,
   857     #2621)
   858   * `hasMethod` method in the ContractManagement native contract (#2598, #2619,
   859     #2640)
   860   * actor package that helps in creating and sending transactions to the
   861     network via RPC using the same set of signers (can be used directly, but
   862     mostly intended to be used by higher-order contract wrappers, #2632, #2637)
   863   * unwrap package in the RPC client that checks for execution results and
   864     converts returned stack items to expected Go types (can be used directly,
   865     but more useful when being used by upper-layer contract wrappers, #2638)
   866   * nep17 RPC client package for simple remote access to NEP-17 contract
   867     methods via RPC, both safe and state-changing (#2642)
   868  
   869  Behavior changes:
   870   * smartcontract.Params type and (*Parameter).TryParse APIs were removed
   871     completely as unused and not useful (#2621)
   872   * compiler now rejects unnamed parameter for exported methods (but they
   873     didn't work properly anyway, #2601)
   874   * restored deploy-time out of bounds script checks (#2538, #2619)
   875   * dynamic scripts (like entry scripts) no longer can emit notifications
   876     (#2613)
   877   * db dump and db restore CLI commands now reject `--debug` option (it was
   878     ignored previously, #2625)
   879  
   880  Improvements:
   881   * manifest correctness check during compilation (#2601)
   882   * more robust CalledByEntry scope check (#2613)
   883   * a check for excessive arguments in CLI (#2625)
   884   * better help messages for CLI commands (#2625)
   885   * Go 1.19 support (#2634)
   886   * saved transactions created via CLI (`--out`) now use the maximum possible
   887     ValidUntilBlock values (#2632)
   888   * RPC server now returns more data about NeoGo-specific protocol extensions
   889     in `getversion` reply (#2632)
   890  
   891  Bugs fixed:
   892   * NEP-6 wallet version was wrong wrt the standard and C# implementation
   893     (#2633)
   894   * smart contract invocations from the CLI didn't compensate for interactive
   895     prompt wait time which could lead to transaction expiration before it was
   896     sent (#2632)
   897   * Oracle native contract's `finish` method reentrancy problem (#2639)
   898  
   899  ## 0.99.1 "Parametrization" (28 Jul 2022)
   900  
   901  We're updating NeoGo to push out a number of significant updates as well as
   902  make it compatible with 3.3.1 version of C# node. The most prominent changes
   903  are RPC sessions for iterators returned from invoke* calls, initial bits of
   904  RPC client refactoring and support for darwin-arm64 and linux-arm64
   905  platforms. A number of internal changes are less visible from outside, but
   906  are also important for future evolution of the code base.
   907  
   908  Node operators must resynchronize their nodes to get fully compatible state
   909  (which is confirmed to be compatible with 3.3.1 for current mainnet up to
   910  block 1932677 and T5 testnet up to block 475938). RPC client users, please
   911  review the changes carefully and update your code wrt refactorings made as
   912  well as iterator session support.
   913  
   914  Subsequent releases will also change RPC client and associated code, we want
   915  to make it easier to use as well as extend its functionality (see #2597 for
   916  details, comments and suggestions are welcome). 0.99.2 is expected to be
   917  released somewhere in August with 3.4.0 C# node compatibility.
   918  
   919  New features:
   920   * `getcandidates` RPC method to get full list of registered candidates and
   921     their voting status (#2587)
   922   * wallet configuration file support to simplify using CLI non-interactively,
   923     use `--wallet-config` option instead of `--wallet` if needed (#2559)
   924   * session-based JSON-RPC iterator API for both server and client with
   925     `traverseiterator` and `terminatesession` calls; notice that the default
   926     server behavior (`SessionEnabled: false`) is compatible with NeoGo 0.99.0,
   927     iterators are expanded the way they were previously, only when sessions are
   928     enabled they're returned by the server to the client (#2555)
   929   * `interop` package now provides helper methods for proper `Hash160`,
   930     `Hash256` and other type comparisons in smart contracts (#2591)
   931   * `smartcontract.Builder` type to assist with entry script creation as well
   932     as a set of CreateXXXScript functions for simple cases (#2610)
   933  
   934  Behavior changes:
   935   * 3.3.1-compatible order of ABI methods for the native NeoToken contract
   936     which affects LedgerContract state (#2539)
   937   * `getnextvalidators` RPC was reworked to be compatible with C# node, if you
   938     rely on Active flag from the old response or full candidate list please use
   939     `getcandidates` method (#2587)
   940   * `--account` parameter for `contract manifest add-group` CLI command was
   941     changed to `--address` (short `-a` is still the same) for better
   942     consistency with other commands (#2559)
   943   * (*WSClient).GetError won't return an error in case the connection was
   944     closed with (*WSClient).Close
   945   * `getnepXXbalances` RPCs now return decimals, symbol and token name data
   946     along with asset hash (#2581)
   947   * Ledger.GetBlock will now return state root hash for chains that use
   948     StateRootInHeader extension (#2583)
   949   * `request.RawParams` type is gone (but it likely wasn't used anway), if
   950     needed use `[]interface{}` directly (#2585)
   951   * `RawParams` field of `request.Raw` was renamed to `Params` (#2585)
   952   * `vm.State` type moved to a package of its own (`vm/vmstate`) to avoid
   953     importing whole VM where only State type is needed (#2586)
   954   * `MaxStorageKeyLen` and `MaxStorageKeyLen` definitions moved from
   955     `core/storage` to `config/limits` package simplifying their usage (#2586)
   956   * `vm.InvocationTree` type moved into `vm/invocations` (#2586)
   957   * `storage.Operation` type moved into `storage/dboper` package (#2586)
   958   * `rpc/server` package moved to `services/rpcsrv` (#2609)
   959   * `rpc/client` package moved to `rpcclient` (#2609)
   960   * `network/metrics` package moved to `services/metrics` (#2609)
   961   * `rpc/request` and `rpc/response` packages were merged under `neorpc`,
   962     `request.Raw` is `neorpc.Request` now, while `response.Raw` is
   963     `neorpc.Response` (#2609)
   964   * `rpc.Config` type was moved to `config.RPC` (#2609)
   965   * `subscriptions.NotificationEvent` type moved to
   966     `state.ContainedNotificationEvent` (#2609)
   967   * `subscriptions.NotaryRequestEvent` type moved to
   968     `result.NotaryRequestEvent` (#2609)
   969  
   970  Improvements:
   971   * new `make` targets to build NeoGo binaries locally or using Docker
   972     environment (#2537, #2541)
   973   * more detailed client-side error on JSON-RPC WebSocket connection closure
   974     (#2540)
   975   * various node's micro-optimizations both for CPU usage and memory
   976     allocations (#2543)
   977   * new Wallet method that allows to save it in pretty format (#2549)
   978   * massive test code refactoring along with some core packages restructuring
   979     (#2548)
   980   * transaction package fuzz-test (#2553)
   981   * simplified client-side Error structure, more predefined errors for
   982     comparisons, refactored server side of RPC error handling (#2544)
   983   * more effective entry scripts for parameterless function invocations via RPC
   984     (#2558)
   985   * internal services now can start/stop properly independent of other node
   986     functionality (#2566, #2580)
   987   * all configurations now use 'localhost' instead of 127.0.0.1 (#2577)
   988   * documented JSON behavior for enumerations which deviates from C# node
   989     slightly (#2579)
   990   * better error messages in the CLI for invocations (#2574)
   991   * compiler can inline methods now (#2583)
   992   * `interface{}()` conversions are supported by the compiler now (although
   993     they don't change values, #2583)
   994   * server-side code moved out of common RPC packages completely (#2585, #2586)
   995   * metrics and DB configurations moved to config and dbconfig packages (#2586)
   996   * calling methods on returned values is now possible in Go smart contracts
   997     (#2593)
   998   * NNS contract now cleans up old entries in case a domain is registered again
   999     after expiration (#2599)
  1000   * GetMPTData P2P messages (from P2PStateExchangeExtensions) can now be
  1001     processed even if KeepOnlyLatestState is enabled (#2600)
  1002   * builds and regular tests for MacOS (#2602, #2608)
  1003   * internal `blockchainer.Blockchainer` is finally gone, simplifying some
  1004     dependencies (#2609)
  1005   * updated CLI `--version` output format to conform with NeoFS tooling style
  1006     (#2614)
  1007  
  1008  Bugs fixed:
  1009   * dBFT update: increase the number of nodes that respond to RecoveryRequest
  1010     (#2546, nspcc-dev/dbft#59)
  1011   * invalid block height estimation for historic calls (#2556)
  1012   * Signature parameter to RPC invocations was expected in hex format instead
  1013     of base64 (#2558)
  1014   * missing data in RPC server error logs in some cases (#2560)
  1015   * potential deadlock in consensus node before the dBFT process is started
  1016     (#2567)
  1017   * dBFT update: ChangeView messages were not correctly transmitted in
  1018     RecoveryResponse messages (#2569, nspcc-dev/dbft#60)
  1019   * dBFT update: ChangeView messages from newer views were not correctly
  1020     processed by outdated node (#2573, nspcc-dev/dbft#61)
  1021   * RPC server restarts via SIGHUP could lead to server not starting at all in
  1022     very rare case (#2582)
  1023   * inlined code couldn't have multiple `return` statements (#2594)
  1024   * empty list of transactions is now returned instead of `null` in `getblock`
  1025     RPC responses when block doesn't contain transactions, the same way C# node
  1026     does (#2607)
  1027   * candidate registration didn't invalidate committee cache leading to state
  1028     differences for T5 testnet (#2615)
  1029  
  1030  ## 0.99.0 "Overextrapolation" (03 Jun 2022)
  1031  
  1032  A big NeoGo upgrade that is made to be compatible with C# node version
  1033  3.3.0. All of the protocol changes are implemented there with the main one
  1034  being the Aspidochelone hardfork that will happen on mainnet
  1035  soon. Compatibility is confirmed for current T5 testnet and mainnet, but this
  1036  version requires a resynchronization so schedule your updates accordingly.
  1037  
  1038  But it's not just about the protocol changes, this release introduces an
  1039  ability to perform historic invocations via RPC for nodes that store old MPT
  1040  data. Using `invokefunctionhistoric` you can perform some invocation with the
  1041  chain state at the given height, retreiving old balances, ownership data or
  1042  anything else you might be interested in.
  1043  
  1044  Please also pay attention to configuration files used by your node, mainnet
  1045  ones must have Aspidochelone hardfork enabled at height 1730000 to be
  1046  compatible and T5 testnet enables it at height 210000. T5 testnet is different
  1047  from T4, it uses different magic number, different seed nodes and different
  1048  protocol configuration settings. 0.99.0 won't work for T4 testnet, please
  1049  use 0.98.5 for it.
  1050  
  1051  New features:
  1052   * new methods in native contracts:
  1053     - getTransactionVMState and getTransactionSigners in LedgerContract (#2417,
  1054       #2447, #2511)
  1055     - murmur32 in CryptoLib (#2417)
  1056     - getAllCandidates and getCandidateVote in NeoToken (#2465)
  1057   * System.Runtime.GetAddressVersion syscall (#2443)
  1058   * StartWhenSynchronized option for RPC server (defaults to the old behaviour,
  1059     #2445)
  1060   * historic RPC invocations (invokefunctionhistoric, invokescripthistoric and
  1061     invokecontractverifyhistoric APIs, #2431)
  1062   * protocol hardforks, with Aspidochelone being the first supported (#2469,
  1063     #2519, #2530, #2535)
  1064   * MODMUL and MODPOW VM instructions (#2474)
  1065   * ability to get connection closure error from WSClient (#2510)
  1066   * isolated contract calls with state rollback on exception (#2508)
  1067   * vote and candidate state change events in the NEO contract (#2523)
  1068   * immutable compound types in VM (#2525)
  1069  
  1070  Behavior changes:
  1071   * ContractManagement deploy and update methods now require AllowCall flag
  1072     (#2402)
  1073   * GetStorageItems* APIs are no longer available in dao package, use Seek*
  1074     (#2414)
  1075   * committee candidates are now checked against the Policy contract block list
  1076     (#2453)
  1077   * getCandidates NEO method returns no more than 256 results now (#2465)
  1078   * EQUAL checks are limited to 64K of data in VM now irrespective of the
  1079     number of elements compared (#2467)
  1080   * Create[Standard/Multisig]Account prices were raised to avoid DoS attacks
  1081     (#2469)
  1082   * System.Runtime.GetNotifications syscall costs 16 times more GAS now (#2513)
  1083   * System.Runtime.GetRandom syscall now costs more and uses more secure seed
  1084     (#2519)
  1085  
  1086  Improvements:
  1087   * better messages for some CLI commands (#2411, #2405, #2455)
  1088   * fixes and extensions for example contracts (#2408)
  1089   * better neotest documentation (#2408)
  1090   * internal tests now use neotest framework more extensively (#2393)
  1091   * neotest can now be used for benchmark code and has more multi-validator
  1092     chain methods (#2393)
  1093   * big (>64 bit) integers can now be used for RPC calls (#2413)
  1094   * no error is logged now when notary-assisted transaction is already in the
  1095     mempool (it's not an error, #2426)
  1096   * T5 testnet with more aggressive protocol parameters (#2457)
  1097   * destroyed contracts are blocked now (#2462)
  1098   * JSONization errors for invoke* RPCs are now returned in exception field of
  1099     the answer (#2461)
  1100   * typos, grammar and spelling fixes in documentation, comments and messages
  1101     (#2441, #2442)
  1102   * faster RPC client initialization (#2468)
  1103   * RPC processing errors use ERROR log severity now only if there is a
  1104     server-side error occurred (2484)
  1105   * increased server-side websocket message limit to fit any request (#2507)
  1106   * invalid PrepareRequest now doesn't require other nodes to be alive to send
  1107     ChangeView (#2512)
  1108   * updated YAML library dependency (#2527)
  1109   * notary subsystem compatibility fixes, using new IDs and options (#2380)
  1110   * minor performance improvements (#2531)
  1111  
  1112  Bugs fixed:
  1113   * websocket-based RPCs were not counted in Prometheus metrics (#2404)
  1114   * input data escaping missing for RPC log messages (#2404)
  1115   * compiler panic in notification checking code (#2408)
  1116   * missing 'hash' field in the debug data (#2427)
  1117   * debug data used relative paths that are not compatible with neo-debugger
  1118     (#2427)
  1119   * getversion RPC method wasn't compatible with C# implementation (#2435,
  1120     #2448)
  1121   * old BaseExecFee and StoragePrice values could be used by transactions in
  1122     the same block with transactions that change any of them (#2432)
  1123   * context initialization race in dbft (#2439)
  1124   * some stateroot data functions used incorrect keys in the DB (#2446)
  1125   * voter reward data could not be deleted in NEO contract in some cases
  1126     (#2454)
  1127   * the maximum number of HTTPS oracle redirections is limited to 2 (and only
  1128     using HTTPS) for C# compatibility (#2456, #2389)
  1129   * maximum number of contract updates wasn't limited leading to overflow (#2462)
  1130   * incorrect interop signature for getCandidates NEO contract method (#2465)
  1131   * next instruction validitiy check is performed now before instruction
  1132     pointer move to be compatible with C# implementation (#2475)
  1133   * concurrent map access in Seek leading to panic (#2495, #2499)
  1134   * insecure password reads (#2480)
  1135   * minor VM reference counting fixes (#2498, #2502, #2525)
  1136   * panic during serialization of transaction with empty script (#2485)
  1137   * 'exception' field was missing in the invoke* RPC call output when there is
  1138     no exception which differed from C# node behaviour (#2514)
  1139   * interop interfaces used incompatible (wrt C# node) type string in JSON
  1140     (#2515)
  1141   * minor genesis block state differences wrt C# implementation (#2532)
  1142   * incompatible (wrt C#) method offset check (#2532)
  1143  
  1144  ## 0.98.5 "Neutralization" (13 May 2022)
  1145  
  1146  An urgent update to fix the same security issue that was fixed in 3.1.0.1 C#
  1147  node release. Please upgrade as soon as possible, resynchronization is not
  1148  needed for mainnet.
  1149  
  1150  Bugs fixed:
  1151   * GAS emission now happens after NEO transfer is finished (#2488)
  1152  
  1153  ## 0.98.4 "Mesmerization" (11 May 2022)
  1154  
  1155  An urgent release to fix incompatibility with mainnet at block 1528989. The
  1156  actual pair of problems leading to inability to process this block occurred
  1157  earilier than that, so to fix this you need to resynchronize your node. Fixed
  1158  node is confirmed to have identical state as 3.1.0 C# node up to block
  1159  1529810.
  1160  
  1161  Bugs fixed:
  1162   * StdLib itoa() implementation emitted uppercase letters instead of lowercase
  1163     (#2478)
  1164   * StdLib jsonDeserialize() implementation couldn't handle properly integers
  1165     larger than 64-bit signed (#2478)
  1166  
  1167  ## 0.98.3 "Liquidation" (07 May 2022)
  1168  
  1169  This is a hotfix release to fix t4 testnet incompatibility at block
  1170  1589202. The actual problem was found and fixed during 0.99.0 development
  1171  cycle, but 0.99.0 is expected to be incompatible with t4 testnet. This release
  1172  allows to continue working with it as well as mainnet (and contains some other
  1173  fixes for known problems). It does not require resynchronizing a node.
  1174  
  1175  Improvements:
  1176   * double call to `WSClient.Close()` method won't cause a panic (#2420)
  1177  
  1178  Bugs fixed:
  1179   * Rules scope considered as invalid in binary representation (#2452)
  1180   * incorrect compressed P2P message could lead to panic (#2409)
  1181   * notary-assisted transaction could be in inconsistent state on the Notary
  1182     node (#2424)
  1183   * WSClient panics if request is made after connection breakage (#2450)
  1184   * Rules scope JSON representation wasn't compatible with C# implementation
  1185     (#2466)
  1186   * JSONized Rules scope could only contain 15 conditions instead of 16 (#2466)
  1187  
  1188  ## 0.98.2 "Karstification" (21 Mar 2022)
  1189  
  1190  We've decided to release one more 3.1.0-compatible version bringing all of the
  1191  new features and bug fixes (along with complete support for Windows platform)
  1192  made before going into full 3.2.0 compatibility. It's important for us to give
  1193  you more stable and flexible environment for the ongoing hackathon. Contract
  1194  bindings generator might be very useful for anyone operating with already
  1195  deployed contracts written in other languages, while the node itself can now
  1196  be configured for lightweight operation, keeping only the data relevant for
  1197  the past MaxTraceableBlocks, no more and no less. Current public networks
  1198  don't benefit from it yet with their large MaxTraceableBlocks setting, but
  1199  they're growing every day and it's just a matter of time when this feature
  1200  will start making a difference. And sorry, but this release is again faster
  1201  than the previous one.
  1202  
  1203  We recommend updating, but if your node is not public and you don't
  1204  specifically want to play with new things brought by it you might as well wait
  1205  for the next one. It requires resynchronization and 0.99.0 will do too because
  1206  of planned protocol changes.
  1207  
  1208  New features:
  1209   * protocol extension allowing to change the number of validators in existing
  1210     network (#2334)
  1211   * MPT garbage collection mechanism allowing to store a set of latest MPTs,
  1212     RemoveUntraceableBlocks setting now activates it by default unless
  1213     KeepOnlyLatestState is used (#2354, #2360)
  1214   * NEP-11/NEP-17 transfer data garbage collection (#2363)
  1215   * Go bindings generator based on contract manifests (#2349, #2359)
  1216  
  1217  Behavior changes:
  1218   * some RPC client functions for divisible NEP-11 changed signatures using
  1219     slice of bytes now instead of strings for IDs (#2351)
  1220   * heavily refactored storage and dao package interfaces (#2364, #2366)
  1221   * support for Go 1.18 added, 1.15 dropped (#2369)
  1222  
  1223  Improvements:
  1224   * additional CLI tests (#2341)
  1225   * `defer` statement is now compiled more effectively (#2345)
  1226   * `defer` statement can be used in conditional branches now (#2348)
  1227   * new tests for divisible NEP-11 contract (#2351)
  1228   * all tests failing on Windows platform are fixed (#2353)
  1229   * RPC functions now accept integers larger than 2^64 from strings (#2356)
  1230   * 10-35%% improvement in bulk block processing speed (node synchronization)
  1231     depending on machine and configuration (#2364)
  1232   * reworked VM CLI fixing Windows incompatibility and UTF-8 bugs (#2365)
  1233   * incompletely signed transaction JSONs now also contain hash (#2368)
  1234   * RPC clients can now safely be used from multiple threads (#2367)
  1235   * additional tests for node startup sequences (#2370)
  1236   * customizable notary service fee for Notary extension (#2378)
  1237   * signers passed into RPC methods can now contain rules (#2384)
  1238   * compiler tests now take less time (#2382)
  1239   * some fuzzing tests added (#2399)
  1240  
  1241  Bugs fixed:
  1242   * test execution result wasn't checked for CLI invocations that saved
  1243     transaction into file (#2341)
  1244   * exception stack wasn't properly cleared during CALL processing in VM (#2348)
  1245   * incorrect contract used in RPC client's GetOraclePrice (#2378)
  1246   * oracle service could be tricked by redirects into going to local hosts when
  1247     this was disabled (#2383)
  1248   * `invoke*` RPC functions could be used to trigger OOM with specially crafted
  1249     scripts (#2386)
  1250   * some edge-cased integer conversions were not exactly matching the behavior
  1251     of C# node in VM (#2391)
  1252   * HASKEY instruction wasn't working for byte arrays (#2391)
  1253   * specially-crafterd JSONPath filters for oracle requests could trigger OOM
  1254     (#2372)
  1255   * ENDFINALLY opcode before ENDTRY could lead to VM panic (#2396)
  1256   * IsScriptCorrect function could panic on specially-crafted inputs (#2397)
  1257  
  1258  ## 0.98.1 "Immunization" (31 Jan 2022)
  1259  
  1260  Bug fixes, interesting optimizations, divisible NEP-11 example and a big
  1261  compiler update --- everything you wanted to find in this NeoGo update. It
  1262  requires chain resynchronization, but this resynchronization will be faster
  1263  than ever.
  1264  
  1265  One thing should also be noted, even though this release is 3.1.0-compatible,
  1266  it is known to have a different state for testnet after block 975644, but it's
  1267  not a NeoGo fault, it'll be fixed in the next C# node release. The root cause
  1268  is well-known and is not considered to be critical compatibility-wise.
  1269  
  1270  New features:
  1271   * support for reading the wallet from stdin in CLI (where it's possible, #2304)
  1272   * new CLI command for wallet password change (#2327)
  1273   * `getstateroot` support in RPC client (#2328)
  1274   * divisible NEP-11 example (#2333)
  1275   * helper script to compare node states via RPC (#2339)
  1276  
  1277  Behavior changes:
  1278   * zero balance is explicitly printed now for token-specific NEP-17 balance
  1279     requests from CLI (#2315)
  1280   * pkg/interop (used by smart contracts) is a separate Go module now (#2292,
  1281     #2338)
  1282   * smart contracts must be proper Go packages now (#2292, #2326)
  1283  
  1284  Improvements:
  1285   * optimized application log storage (#2305)
  1286   * additional APIs in `neotest` framework (#2298, #2299)
  1287   * CALLT instruction is now used by the compiler where appropriate leading to
  1288     more optimized code (#2306)
  1289   * DB seek improvements increasing chain processing speed by ~27% (#2316, #2330)
  1290   * updated NeoFS dependencies (#2324)
  1291   * optimized emitting zero-length arrays in `emit` package used to construct
  1292     scripts (#2299)
  1293   * native contract tests refactored using generic contract testing framework (#2299)
  1294   * refactored internal Blockchainer interfaces, eliminating unnecessary
  1295     dependencies and standardizing internal service behavior (#2323)
  1296   * consensus process now always receives incoming transactions which might be
  1297     helpful for accepting conflicting (wrt local pool) transactions or when the
  1298     memory pool is full (#2323)
  1299   * eliminated queued block networked re-requests (#2329)
  1300   * better error reporting and parameter handling in FindStates RPC client
  1301     method (#2328)
  1302   * invoke* RPCs now also return notifications generated during execution (#2331)
  1303   * it's possible to get storage changes from the result of invoke* RPCs (#2331)
  1304   * better transfer data storage scheme resulting in faster getnep* RPC
  1305     processing (#2330)
  1306   * dropped deprecated `loader` package from compiler dependencies moving to
  1307     updated x/tools interface (#2292)
  1308  
  1309  Bugs fixed:
  1310   * incorrect handling of missing user response in CLI (#2308)
  1311   * improper primary node GAS distribution in notary-enabled networks (#2311)
  1312   * excessive trailing spaces in the VM CLI output (#2314)
  1313   * difference in JSON escaping wrt C# node leading to state difference for
  1314     testnet at block 864762 (#2321)
  1315   * potential panic during node shutdown in the middle of state jump (#2325)
  1316   * wrong parameters for `findstates` call in RPC client (#2328)
  1317   * improper call flags in Notary contract `withdraw` method (#2332)
  1318   * incorrect ownerOf signature for divisible NEP-11 contracts (#2333)
  1319   * missing safeness check for overloaded methods in the compiler (#2333)
  1320  
  1321  ## 0.98.0 "Zincification" (03 Dec 2021)
  1322  
  1323  We've implemented all of Neo 3.1.0 protocol changes in this release (and
  1324  features like NEP-11 transfer tracker), but as usual it's not the only thing
  1325  it contains. If you're developing contracts in Go you might be interested in
  1326  contract testing framework this release brings with it, which allows you to
  1327  write automated tests in Go. You can also build a node for Windows now and
  1328  most of functionality works there (but some known problems still exist, so
  1329  this port is considered to be experimental for now). As usual there were some
  1330  optimizations made in various components as well as bug fixes.
  1331  
  1332  There are also some things removed in this release, that is BadgerDB and
  1333  RedisDB support, this will allow us to optimize better for LevelDB and BoltDB
  1334  in future. Notice also that this release requires full node resynchronization.
  1335  
  1336  New features:
  1337   * optional signer scope parameter for deploy command (#2213)
  1338   * interop packages extended with Abort() function and useful constants (#2228)
  1339   * notary subsystem now allows to have multiple multisignature signers as well
  1340     as combining simple notary-completed accounts with multisignature ones (#2225)
  1341   * configurable method overloading for the compiler (#2217)
  1342   * initial support for the Windows platform (#2239, #2265, #2267, #2264,
  1343     #2283, #2288)
  1344   * contract testing framework (#2229, #2262)
  1345   * `Rules` witness scope (#2251)
  1346   * PACKMAP/PACKSTRUCT opcodes and UNPACK extension (#2252)
  1347   * NEP-11 transfer tracking with RPC API (#2266)
  1348   * support for structure field slicing in the compiler (#2280)
  1349   * invoked contract tracing for invoke* RPCs (#2270, #2291)
  1350  
  1351  Behavior changes:
  1352   * BadgerDB and RedisDB are no longer available for DB backend (#2196)
  1353   * GetNEP17Transfers() RPC client method now works with Uint160 parameter
  1354     instead of address (#2266)
  1355  
  1356  Improvements:
  1357   * compiler optimizations (#2205, #2230, #2232, #2252, #2256)
  1358   * output fees as proper decimals in the CLI (#2214)
  1359   * private network created from Makefile now uses dynamic IP addresses (#2224)
  1360   * various minor optimizations across whole codebase (#2193, #2243, #2287, #2290)
  1361   * `util convert` command now also handles base64 representations of script
  1362     hashes (#2237)
  1363   * unified "unknown transaction" RPC responses (#2247)
  1364   * faster state switch when using P2P state synchronization extension (#2201)
  1365   * better logging for oracle errors (#2275)
  1366   * updated NeoFS client library dependency (#2276)
  1367  
  1368  Bugs fixed:
  1369   * getproof RPC API didn't handle destroyed contracts correctly (#2215)
  1370   * invokefunction RPC returned error if no parameters were passed (#2220)
  1371   * incorrect handling of empty MPT batch (#2235)
  1372   * incoming block queue using more memory than it should, up to OOM condition
  1373     on stuck node (#2238)
  1374   * panic on peer disconnection in rare cases (#2240)
  1375   * panic on password read failure (#2244)
  1376   * miscompiled functions using `defer` and returning no values (#2255)
  1377   * oracle responses processed not using request witnesses (#2261)
  1378   * CreateTxFromScript() RPC client method incorrectly handled CustomContracts
  1379     and CreateTxFromScript sender scopes (#2272)
  1380   * potential OOM during synchronization on systems with slow disks (#2271)
  1381   * incorrect oracle peer configuration in the default private network (#2278)
  1382   * compiler error processing functions using defer and inlined calls (#2282)
  1383   * node that is simultaneously a CN and Oracle node could create invalid
  1384     oracle response transactions (#2279)
  1385   * incorrect GetInvocationCounter() result in some cases (#2270)
  1386  
  1387  ## 0.97.3 "Exception" (13 Oct 2021)
  1388  
  1389  This updated version of NeoGo is made to be compatible with Neo 3.0.3 bringing
  1390  with it all corresponding protocol changes and bug fixes so that you can use
  1391  it on public testnet and mainnet. It also brings with it a complete
  1392  experimental P2P state exchange extension for private networks as well as
  1393  additional optimizations. This is the first version requiring at least Go 1.15
  1394  to compile, so make sure your Go is up to date if you're not using pre-built
  1395  binaries. Protocol updates and bug fixes made in this release require a
  1396  resynchronization on upgrade.
  1397  
  1398  We also make a final call on Badger and Redis DB issue #2130, if there are no
  1399  active users of them, support for both will be removed in the next release.
  1400  
  1401  New features:
  1402   * MaxConnsPerHost RPC client option (#2151)
  1403   * P2P state exchange extension (#2019)
  1404   * transaction-related CLI commands now show calculated fees before
  1405     sending transaction to RPC node and ask for confirmation (#2180)
  1406   * test invocations are now possible for partially-signed transactions stored
  1407     in JSON format (used for manual signing by multiple parties, #2179)
  1408   * `getstate` and `findstates` RPC to retrieve historic state data (#2207)
  1409  
  1410  Behavior changes:
  1411   * added support for Go 1.17, dropped Go 1.14 (#2135, #2147)
  1412   * blocking native contracts is no longer possible in Policy contract (#2155)
  1413   * `getversion` RPC call now also returns protocol configuration data (#2161,
  1414     #2202)
  1415   * NEF files now have Source field that can be specified in contract's
  1416     metadata (#2191)
  1417   * notification events from contracts in subscription service now also contain
  1418     container (transaction usually) hash (#2192)
  1419   * out of bounds exceptions can be catched in contracts now for PICKITEM and
  1420     SETITEM VM instructions (#2209)
  1421  
  1422  Improvements:
  1423   * reduced number of memory allocations in some places (#2136, #2141)
  1424   * VM optimizations (#2140, #2148)
  1425   * notary subsystem documentation (#2139)
  1426   * documentation fixes (#2162)
  1427   * VM CLI now allows to dump slots (#2164)
  1428   * better IPv6 checks in example NNS contract and `getAllRecords` method (#2166)
  1429   * updated linters (#2177)
  1430   * Migrate methods renamed into Update in examples (#2183)
  1431   * old (no longer available) interop function names removed (#2185)
  1432   * optimized processing of voting NEO transfers (#2186)
  1433   * configuration parameters specified in seconds no longer use (improper)
  1434     time.Duration type (#2194)
  1435   * better error message for conflicting transactions (#2199)
  1436   * open wallet in read-only mode if not changing it (#2184)
  1437   * optimized header requests in P2P communication (#2200)
  1438   * compiler now checks for method existence if it's specified as safe in
  1439     metadata (#2206)
  1440  
  1441  Bugs fixed:
  1442   * incorrect CustomGroups witness scope check (#2142)
  1443   * empty leaf values were ignored for MPT calculcations (#2143)
  1444   * lower-case hexadecimal in block header JSON output (differing from C# node,
  1445     #2165)
  1446   * `getblockheader` RPC result missing `Nonce` and `Primary` fields (#2165)
  1447   * return empty list of unverified transactions for `getrawmempool` RPC
  1448     instead of null (C# node never returns null, #2165)
  1449   * return empty list of NEF tokens in JSON format instead of null which C#
  1450     node never returns (#2165)
  1451   * races in some tests (#2173)
  1452   * parameter context JSON serialization/deserialization incompatiblity with C#
  1453     node leading to interoperability problems (#2171)
  1454   * transfers of 0 GAS or NEO were not possible (#2169)
  1455   * incorrect ContentTypeNotSupported oracle response transaction handling (#2178)
  1456   * JSON escaping differences with C# implementation (#2174)
  1457   * NEO balance update didn't save LastUpdatedBlock before GAS distribution
  1458     leading to problems in transactions with recursive NEO transfers (#2181)
  1459   * panic in CLI transfer command when missing destination address (#2211)
  1460   * multiple blank identifiers in function/method were misinterpreted by the
  1461     compiler (#2204)
  1462   * `getnep17transfers` used uint32 for internal time processing which is not
  1463     enough for ms-precision N3 timestamps (#2212)
  1464   * PICKITEM instruction could fail on attempt to get an item with long key
  1465     from map (#2209)
  1466  
  1467  ## 0.97.2 "Dissipation" (18 Aug 2021)
  1468  
  1469  We're rolling out an update for NeoGo nodes that mostly concentrates on
  1470  performance. We've tweaked and tuned a lot of code while staying compatible
  1471  with N3 mainnet and testnet. At the same time we're gradually introducing
  1472  changes required for our P2P state exchange extension and this affected DB
  1473  format, so you'll need to resynchronize on update. This update is not
  1474  mandatory though, 0.97.1 is still perfectly valid for N3 networks.
  1475  
  1476  Note also that we're discussing removal of Badger and Redis databases support
  1477  in future releases, so if you're interested in them take a look at #2130.
  1478  
  1479  Behavior changes:
  1480   * address blocking in Policy contract now also blocks calls to contracts with
  1481     blocked addresses (#2132)
  1482  
  1483  Improvements:
  1484   * numerous memory and CPU optimizations across whole codebase (#2108, #2112,
  1485     #2117, #2118, #2122, #2123, #2128, #2114, #2133)
  1486   * preliminary work for P2P state exchange extension (#2119)
  1487   * `util convert` command now also detects public keys and converts them to
  1488     script hash/address (#2125)
  1489  
  1490  Bugs fixed:
  1491   * key decoding functions could accept some additional data even though only
  1492     key is expected to be present (#2125)
  1493   * conflicting dummy transactions could stay in the DB even with block removal
  1494     enabled (#2134)
  1495  
  1496  ## 0.97.1 "Gasification" (06 Aug 2021)
  1497  
  1498  We're updating NeoGo to make it compatible with the latest protocol changes
  1499  made in 3.0.2 version of C# node. But that's not the only thing we do, this
  1500  release also fixes one important bug, improves node's performance and adds CLI
  1501  support to add group signatures to manifests.
  1502  
  1503  It requires resynchronization on upgrade.
  1504  
  1505  New features:
  1506   * `contract manifest add-group` command to add group signatures to contract
  1507     manifest (#2100)
  1508  
  1509  Behavior changes:
  1510   * GAS contract no longer has Refuel method, it could be used as DOS
  1511     amplification tool for attacks on network and there is no way to securely
  1512     fix it (#2111)
  1513  
  1514  Improvements:
  1515   * memory store optimizations leading to substantial single-node TPS
  1516     improvements (#2102)
  1517   * various micro-optimizations across the board both for CPU usage and memory
  1518     allocations (#2106, #2113)
  1519   * optimized transaction decoding (#2110)
  1520  
  1521  Bugs fixed:
  1522   * ping messages created with wrong value used for node's height (#2115)
  1523  
  1524  ## 0.97.0 "Ventilation" (02 Aug 2021)
  1525  
  1526  This is an official 3.0.0-compatible release that is ready to be used both for
  1527  mainnet and testnet. Technically, 0.96.0 and 0.96.1 are compatible too, but
  1528  they need an updated configuration to work on mainnet while this version has
  1529  it covered.
  1530  
  1531  We keep improving our node and this release is not just a repackage of
  1532  something older, so DB format changes require a resynchronization if you're
  1533  upgrading from 0.96.X.
  1534  
  1535  Behavior changes:
  1536   * updated configuration for mainnet (#2103)
  1537  
  1538  Improvements:
  1539   * documentation for contract configuration file (#2097)
  1540   * significant change to NEP-17 tracking code, it shouldn't affect valid
  1541     NEP-17 tokens, but now we store a little less data in the DB and get more
  1542     from token contracts when needed (for `getnep17balances` RPC for
  1543     example); this change is required for our future state exchange protocol
  1544     extension (#2093)
  1545   * improved block processing speed on multicore systems (#2101)
  1546   * JSON deserialization now has the same limits as binary, but this doesn't
  1547     affect any valid code (#2105)
  1548  
  1549  Bugs fixed:
  1550   * potential deadlocks in notary-enabled nodes (#2064)
  1551   * wallet files not truncated properly on key removal (#2099)
  1552  
  1553  ## 0.96.1 "Brecciation" (23 Jul 2021)
  1554  
  1555  New CLI commands, updated dependencies and some bugs fixed --- you can find
  1556  all of this in the new NeoGo release. It's compatible with 0.96.0 (except for
  1557  multisignature contexts, but you're not likely to be using them) and
  1558  confirmed to have proper RC4 testnet state up to 15K blocks (but 0.96.0 is
  1559  fine wrt this too). At the same time we recommend to resynchronize the chain
  1560  if you're using LevelDB or BoltDB, both databases were updated.
  1561  
  1562  New features:
  1563   * `query candidates`, `query committee` and `query height` CLI commands
  1564     (#2090)
  1565   * `GetStateHeight` RPC client call support (#2090)
  1566  
  1567  Behavior changes:
  1568   * `wallet candidate getstate` command was renamed to `query voter`, now it
  1569     also prints the key voted for and handles addresses with 0 balance without
  1570     spitting errors (#2090)
  1571  
  1572  Improvements:
  1573   * `query tx` now outputs signer address along with script hash (#2082)
  1574   * updated many of node's dependencies including BoltDB and LevelDB, there are
  1575     no radical changes there, mostly just some fixes improving stability (#2087)
  1576   * better error messages in some places (#2089, #2091)
  1577  
  1578  Bugs fixed:
  1579   * `query tx` command wasn't providing correct results if used with C# RPC
  1580     node (#2082)
  1581   * watch-only node (with a key, but not elected to participating in consensus)
  1582     could panic on receiving a number of Commit messages (#2083)
  1583   * `getstateheight` RPC call produced result in different format from C# node
  1584     (#2090)
  1585   * JSON representation of multisignature signing context wasn't compatible
  1586     with C# implementation (#2092)
  1587  
  1588  ## 0.96.0 "Aspiration" (21 Jul 2021)
  1589  
  1590  We're updating NeoGo to support RC4 changes, there are some incompatible ones
  1591  so this version can't be used with RC3 networks/chains (RC3 testnet is
  1592  still available, please use 0.95.4 for it). This release was checked for RC4
  1593  testnet compatibility and has the same state as C# for the first 5K blocks.
  1594  
  1595  No significant protocol changes are expected now as we're moving to final N3
  1596  release, but we'll keep updating the node fixing bugs (if any), improving
  1597  performance and introducing NeoGo-specific features.
  1598  
  1599  New features:
  1600   * "System.Runtime.GetNetwork" system call (#2043)
  1601   * ContentTypeNotSupported oracle return code and content type configuration
  1602     for Oracle service (#2042)
  1603   * block header have "Nonce" field again which is used for
  1604     "System.Runtime.GetRandom" system call (#2066)
  1605   * import from incremental chain dumps (#2061)
  1606   * configurable initial (from the genesis block) GAS supply (#2078)
  1607   * "query tx" CLI command to check for transaction status (#2070)
  1608  
  1609  Behavior changes:
  1610   * verification GAS limits were increased (#2055)
  1611   * SQRT price reduced (#2071)
  1612   * binary deserialization is now limited to 2048 (MaxStackSize) items (#2071)
  1613   * notary deposit is stored now as serialized stack item (#2071)
  1614   * testnet and mainnet configuration updates (#2077, #2079, #2081)
  1615  
  1616  Improvements:
  1617   * faster stack item binary and JSON serialization (#2053)
  1618   * faster Storage.Find operation (#2057)
  1619   * additional documentation for public network CNs (#2068)
  1620   * better code reuse for native contract's data serialization (#2071, see new
  1621     stackitem.Convertible interface)
  1622   * some types from state package renamed to remove "State" word (#2075)
  1623   * util.ArrayReverse helper moved to package of its own with additional
  1624     helpers (#2075)
  1625  
  1626  Bugs fixed:
  1627   * nested structure cloning could lead to OOM (#2054, #2071)
  1628   * addresses were not accepted for witness accounts in RPC calls (#2072)
  1629   * POW instruction could take unknown amount of time to complete for big
  1630     parameters (#2060)
  1631   * oracle contract could accept invalid user data (#2071)
  1632   * EQUAL for deeply nested structures could never complete (#2071)
  1633   * arrays and structures were limited to 1024 items (#2071)
  1634   * oracle fallback transactions could try using outdated ValidUntilBlock value
  1635     (#2074)
  1636   * oracle node starting from genesis block tried to process all requests from
  1637     the chain instead of only working with current ones (#2074)
  1638   * some tests used non-unique/wrong temporary files and directories (#2076)
  1639  
  1640  ## 0.95.4 "Yatter" (09 Jul 2021)
  1641  
  1642  Making a fully compliant Neo node is not easy, there are lots of minuscule
  1643  details that could be done in a little different way where both ways are
  1644  technically correct but at the same time just different which is enough to
  1645  create some interoperability problems. We've seen that with Legacy node
  1646  implementation where we were functionally complete with 0.74.0 release but
  1647  some fixes kept coming up to the most recent 0.78.3 version. It was a bit
  1648  easier with Legacy because we already had some years-long chains to test the
  1649  node against while N3 is a completely new territory.
  1650  
  1651  So we'd like to thank all RC3 hackathon participants as well as all other
  1652  people playing with N3 RC3 network, your joint efforts gave enough material
  1653  to keep us busy fixing things for some time. The chain moving forward hit more
  1654  and more edge cases with every block and this is actually very helpful, we saw
  1655  a lot of things that could be improved in our node and we improved them.
  1656  
  1657  Now we're releasing 0.95.4 with all of these fixes which is still
  1658  RC3-compatible and it's stateroot-compatible with C# implementation up to 281K
  1659  blocks. Please resynchronize to get identic testnet state. And most likely
  1660  that's the last RC3-compatible release as we're moving forward to the official
  1661  3.0.0 release of C# version NeoGo will be updated with appropriate changes
  1662  (some of which are not compatible with RC3).
  1663  
  1664  New features:
  1665   * 'sysgas' parameter for invocation and transfer CLI commands to manually add
  1666     some system fee GAS (#2033)
  1667  
  1668  Behavior changes:
  1669   * contract calls are now checked against specified permissions by the
  1670     compiler (#2025)
  1671   * stack items with nesting levels of 10 and more won't be serialized to JSON
  1672     for purposes like including them into RPC call reply (#2045)
  1673  
  1674  Improvements:
  1675   * AddHeaders() with multiple headers added at the same time now works with
  1676     StateRootInHeader option (#2028)
  1677   * cached GAS per vote value leads to substantially improved block processing
  1678     speed (#2032)
  1679   * failed native NEP-17 transfers now still re-save the old value to the
  1680     storage making state dumps compatible with C# (#2034)
  1681   * refactored and renamed some stackitem package functions, added proper error
  1682     values in all cases (#2045)
  1683   * RPC calls (and application logs) can now return real serialization errors
  1684     if there are any (previously all errors were reported as "recursive
  1685     reference", #2045)
  1686   * better tests (#2039, #2050)
  1687  
  1688  Bugs fixed:
  1689   * wrong onNEP11Payment name in contract configuration examples (#2023)
  1690   * missing permission sections in contract configuration examples (#2023)
  1691   * buffer stack item deserialization created byte string (#2026)
  1692   * Extra contract manifest field serialization was reworked to match C#
  1693     implementation more closely (#2021)
  1694   * wildcard permission in manifest allowed any methods, while it shouldn't
  1695     (#2030)
  1696   * group permission in manifest worked incorrectly for a set of groups (#2030)
  1697   * call flags were JSONized in incompatible way (#2041)
  1698   * MPT update left branch nodes with 1 child in some cases (#2034, #2047)
  1699   * JSON marshalling code for stack items detected item recursion in some cases
  1700     where no actual recursion was present (#2045)
  1701   * binary serialization code for stack items could overwrite old errors in
  1702     some cases (#2045)
  1703   * binary serialization code for stack items wasn't ensuring maximum size
  1704     limit during serialization which could lead to OOM (#2045)
  1705   * batched MPT update create excessive extension nodes for the last child of
  1706     branch node in some cases (#2047)
  1707   * in some cases "TCP accept error" was logged during node shutdown (#2050)
  1708   * contract updating code was updating caches before they should've been
  1709     updated (#2050)
  1710   * INVERT/ABS/NEGATE unary operations were not copying their arguments (#2052)
  1711  
  1712  ## 0.95.3 "Yuppification" (17 Jun 2021)
  1713  
  1714  One more N3 RC3-compatible release that fixes testnet state difference at
  1715  block 151376. Please resynchronize to get proper testnet state.
  1716  
  1717  Behavior changes:
  1718   * NEP2-related functions in `crypto/keys` package changed a bit to allow
  1719     Scrypt parameters overriding, standard parameters are available via
  1720     `NEP2ScryptParams` function (#2001)
  1721  
  1722  Improvements:
  1723   * better unit test stability (#2011, #2001)
  1724   * updated neofs-api-go dependency (with support for TLS-enabled NeoFS node
  1725     connections, #2003)
  1726   * removed annoying token matching warning (#2018)
  1727  
  1728  Bugs fixed:
  1729   * state mismatch resulting from different committee candidate sorting (#2017)
  1730  
  1731  ## 0.95.2 "Echolocation" (10 Jun 2021)
  1732  
  1733  This is another N3 RC3-compatible release and it's better in its RC3
  1734  compatiblity than the previous one because we've fixed some state mismatches
  1735  wrt C# implementation that were found on testnet. It is confirmed to have the
  1736  same state up to 126K height (which is current), but to get proper state you
  1737  need to resynchronize your node from the genesis.
  1738  
  1739  New features:
  1740   * RPC notification subsystem was extended to support notary pool events, so
  1741     clients can now react on request additions (#1984)
  1742   * compiler now checks notification event name length to fit into the limit
  1743     (#1989)
  1744   * compiler now also checks for runtime.Notify() calls from Verify method
  1745     (which won't work anyway, #1995)
  1746  
  1747  Improvements:
  1748   * codegeneration improvements removing some unnecessary store/loads and type
  1749     conversions (#1881, #1879)
  1750   * additional MPT tests added ensuring compatibility with C# implementation
  1751     (#1993)
  1752   * additional consistency check added to prevent node running with native
  1753     contracts differing from the ones saved in DB (#2010)
  1754  
  1755  Bugs fixed:
  1756   * `calculatenetworkfee` RPC result used format different from C# node (#1998)
  1757   * `CALLT` opcode was missing any price leading to wrong GAS calculations and
  1758     different state wrt C# node (#2004)
  1759   * '+' character was emitted directly by `jsonSerialize` method which is fine
  1760     wrt JSON itself, but differs from C# node behavior leading to node state
  1761     difference (#2006)
  1762   * NEO self-transfers were not checking the amount transferred (they didn't
  1763     change balance, but they succeeded) leading to state difference wrt C#
  1764     implementation (#2007)
  1765  
  1766  ## 0.95.1 "Shiftiness" (31 May 2021)
  1767  
  1768  Bringing NeoGo up to date with N3 RC3 changes this release also improves
  1769  compiler and CLI a bit.
  1770  
  1771  This release is mostly compatible with 0.95.0, but you need to resynchronize
  1772  your chains to have proper stateroot data and to make new methods available to
  1773  contracts. At the same time there won't be long-term support provided for it,
  1774  just as with all previous previews and RC.
  1775  
  1776  New features:
  1777   * base58CheckEncode/base58CheckDecode methods in StdLib native contract
  1778     (#1977, #1979)
  1779   * getAccountState method in NeoToken native contract (#1978, #1986)
  1780   * custom contracts and groups can now be specified for witness scopes in
  1781     invocations from CLI (#1973)
  1782  
  1783  Improvements:
  1784   * local variable handling was refactored in the compiler, removing some
  1785     duplicate code and improving robustness (#1921)
  1786   * CLI help now describes how "unvote" can be done (#1985)
  1787  
  1788  Bugs fixed:
  1789   * boolean parameters to function invocations via RPC were not processed
  1790     correctly (#1976)
  1791   * VM CLI used too restrictive default call flags for loaded scripts (#1981)
  1792   * IPv6 check in NNS contract was out of date wrt C# implementation (#1969)
  1793  
  1794  ## 0.95.0 "Sharpness" (17 May 2021)
  1795  
  1796  This version mostly implements N3 RC2 protocol changes (and is fully
  1797  RC2-compatible), but also brings NEP-11 CLI support and small improvements for
  1798  node operators.
  1799  
  1800  Please note that this release is incompatible with 0.94.1 and there won't be
  1801  long-term support provided for it.
  1802  
  1803  New features:
  1804   * CLI command for NEP-17 transfers now accepts `data` parameter for the
  1805     transfer (#1906)
  1806   * contract deployment CLI comand now also accepts `data` parameter for
  1807     `_deploy` method (#1907)
  1808   * NEP-11 and NEP-17 transfers from CLI can now have multiple signers (#1914)
  1809   * `System.Runtime.BurnGas` interop was added to burn some GAS as well as
  1810     `refuel` GAS contract method to add GAS to current execution environment
  1811     (#1937)
  1812   * port number announced via P2P can now differ from actual port node is bound
  1813     to if new option is used (#1942)
  1814   * CLI now supports full set of NEP-11 commands, including balance and
  1815     transfers (#1918)
  1816   * string split, memory search and compare functions added to stdlib (#1943)
  1817   * MaxValidUntilBlockIncrement can now be configured (#1963)
  1818  
  1819  Behavior changes:
  1820   * `data` parameter is now passed in a different way to NEP-17 RPC client
  1821     methods (#1906)
  1822   * default (used if nothing else specified) signer scope is now
  1823     `CalledByEntry` in CLI and RPC (#1909)
  1824   * `SignAndPushInvocationTx` RPC client method now adds as many signatures as
  1825     it can with the wallet given which in some cases allows CLI to create
  1826     complete transaction without going through multisignature procedure (#1912)
  1827   * `getversion` RPC call now returns network magic number in `network` field
  1828     (#1927)
  1829   * RoleManagement native contract now emits `Designation` event in
  1830     `designateAsRole` method (#1938)
  1831   * `System.Storage.Find` syscall now strips full prefix given when
  1832     `FindRemovePrefix` option is used (#1941)
  1833   * LT, LE, GT, GE VM opcodes now accept Null parameters (#1939)
  1834   * `features` field was re-added to contract manifests, though it's not
  1835     currently used (#1944)
  1836   * node will reread TLS certificates (if any configured) on SIGHUP (#1945)
  1837   * contract trusts are now expressed with permission descriptors in manifest
  1838     (#1946)
  1839   * NEP-11 transfers now also support `data` parameter (#1950)
  1840   * N3 RC2 testnet magic differs from N2 RC1 testnet (#1951, #1954)
  1841   * stdlib encoding/decoding methods now only accept inputs no longer than 1024
  1842     bytes (#1943)
  1843   * `System.Iterator.Create` interop was removed with all associated logic (#1947)
  1844   * `Neo.Crypto.CheckSig` and `Neo.Crypto.CheckMultisig` interops were renamed
  1845     to `System.Crypto.CheckSig` and `System.Crypto.CheckMultisig` (#1956)
  1846   * oracle requests now use Neo-specific JSONPath implementation (#1916)
  1847   * native NNS contract was removed and replaced by non-native version (#1965)
  1848  
  1849  Improvements:
  1850   * RPC errors reported by server are now more verbose for `submitblock`,
  1851     `sendrawtransaction` calls (#1899)
  1852   * all CLI commands that accept addresses now also accept hashes and vice
  1853     versa (#1905)
  1854   * code cleanup based on a number of static analysis tools (#1908, #1958)
  1855   * CLI implementation refactoring (#1905, #1911, #1914, #1915, #1918)
  1856   * only one state validator now sends complete stateroot message normally
  1857     (#1953)
  1858   * oracle HTTPS requests are now sent with User-Agent header (#1955)
  1859   * stdlib `itoa` and `atoi` methods can now be called with one parameter
  1860     (#1943)
  1861   * oracle nodes are no longer on extensible payload whitelist (#1948)
  1862   * extensible message pool is now per-sender with configurable size (#1948)
  1863   * `static-variables` field support for debugger as well as debug data for
  1864     `init` and `_deploy` functions (#1957)
  1865   * user documentation for configuration options (#1968)
  1866  
  1867  Bugs fixed:
  1868   * `getproof` RPC request returned successful results in some cases where it
  1869     should fail
  1870   * `Transfer` events with invalid numbers were not rejected by NEP-17 tracking
  1871     code (#1902)
  1872   * boolean function parameters were not accepted by `invokefunction` RPC call
  1873     implementation (#1920)
  1874   * potential races in state validation service (#1953)
  1875   * single state validator couldn't ever complete stateroot signature (#1953)
  1876   * SV vote resending was missing (#1953)
  1877   * SV vote messages used invalid (too big) ValidBlockEnd increment (#1953)
  1878   * memory leak in state validation service (#1953)
  1879   * NEP-6 wallets have `isDefault` field, not `isdefault` (#1961)
  1880  
  1881  ## 0.94.1 "Channelization" (08 Apr 2021)
  1882  
  1883  This is the second and much improved N3 RC1-compatible release. We've mostly
  1884  focused on documentation and examples with this release, so there is a number
  1885  of updates in this area including oracle contract example and NEP-11 NFT
  1886  contract example. At the same time proper testnet network revealed some
  1887  implementation inconsistencies between NeoGo and C# especially in oracle and
  1888  state validation services, so there are fixes for them also.
  1889  
  1890  Protocol-wise this release is compatible with 0.94.0, but MPT structures have
  1891  changed and there are known state change differences for N3 RC1 testnet, so
  1892  you need to do full node resynchronization on update from 0.94.0. Some SDK
  1893  APIs have changed also improving developer experience, but they may affect
  1894  your code. We don't plan to make more of RC1-compatible releases (the protocol
  1895  has slightly changed already since the release).
  1896  
  1897  New features:
  1898   * RPC (*Client).GetDesignatedByRole method to easily get node lists from
  1899     RoleManagement contract (#1855)
  1900   * `calculatenetworkfee` RPC method support (#1858)
  1901   * RPC client now has additional methods for NEP-11 contracts and specifically
  1902     for NNS native contract (#1857)
  1903   * contract deployment from multisig addresses (#1886)
  1904  
  1905  Behavior changes:
  1906   * node roles for RoleManagement contract were moved into separate package
  1907     (#1855)
  1908   * NotaryVerificationPrice constant was moved into package of its own (#1855)
  1909   * testnet configuration now has proper N3 RC1 testnet magic (#1856)
  1910   * crypto.Verifiable interface was removed, now any hash.Hashable thing can be
  1911     verified (and signed, #1859)
  1912   * Network field was dropped from transaction.Transaction, block.Header,
  1913     payload.Extensible, state.MPTRoot, payload.P2PNotaryRequest and
  1914     network.Message, it was needed for proper hash calculations before recent
  1915     protocol changes (even though this field is not a part of serialized
  1916     representation of any of these elements), but now it's only used to
  1917     sign/verify data and doesn't affect hashing which allowed to simplify
  1918     interface here (#1859)
  1919   * RPC server now returns `StateRootInHeader` option in its `getversion`
  1920     request answers if it's used by the network (#1862)
  1921   * NNS record types were moved to separate package (#1857)
  1922   * MaxStorageKeyLen and MaxStorageValueLen constants were moved to storage
  1923     package from core (#1871)
  1924   * oracle service now accepts complete URL for other nodes RPC services (#1877)
  1925  
  1926  Improvements:
  1927   * RPC (*Client).AddNetworkFee method is now more informative in some error
  1928     case (#1852)
  1929   * proper NEP-17 support in unit test contract (#1852)
  1930   * documentation updates for examples and services (#1854, #1890)
  1931   * syscall number is now printed for failed syscalls (#1874)
  1932   * better logging (#1883, #1889)
  1933   * Oracle native contract interop documentation extended (#1884)
  1934   * Oracle native contract interop extended with return codes and constants (#1884)
  1935   * oracle smart contract example (#1884)
  1936   * NEP-11 NFT smart contract example (#1891)
  1937  
  1938  Bugs fixed:
  1939   * node could simultaneously try to connect to the same peer multiple times in
  1940     some cases (#1861)
  1941   * uniqueness is enforced now for other node addresses provided by peers (#1861)
  1942   * stateroot message hash wasn't calculated the same way as in C# (#1859)
  1943   * state validation service P2P messages were not signed properly (#1859)
  1944   * state.MPTRoot structure JSON representation was different from C# one (#1859)
  1945   * stateroot messages generated by state validation service were not setting
  1946     proper message category (#1866)
  1947   * block persistence caches were flushed too early by MPT-managing code (#1866)
  1948   * validated stateroot data overwrote local one which lead to node not
  1949     functioning after restart if states were different (#1866)
  1950   * peers delivering P2P message with validated stateroot differing from local
  1951     one were disconnected (#1866)
  1952   * state dump comparing script was using old Ledger native contract ID (#1869)
  1953   * candidate registration check was made in different way from C# in native
  1954     NEO contract leading to different execution results for erroneous voting
  1955     transactions (#1869)
  1956   * state change dumps were different from C# node for erroneous voting
  1957     transactions even though contract's state was the same (#1869)
  1958   * arguments were not completely removed from stack in erroneous
  1959     Runtime.Notify calls leading to different stack state with C#
  1960     implementation (#1874)
  1961   * in case contract failed execution with THROW the node didn't print the
  1962     message from the contract properly (#1874)
  1963   * `getproof` RPC call output was not strictly compliant with C#
  1964     implementation (#1871)
  1965   * MPT node serialization and some constants were out of date wrt C#
  1966     implementation (#1871)
  1967   * native NEP-17 contracts could use stale balance data in some cases (#1876)
  1968   * state validation service could lock the system during shutdown, preventing
  1969     proper node exit (#1877)
  1970   * state validation and oracle services were started before node reaching full
  1971     synchronization which could lead to excessive useless traffic (#1877)
  1972   * some native contract calls in function arguments could be miscompiled
  1973     (#1880)
  1974   * oracle service was accepting http URLs instead of https (#1883)
  1975   * neofs URIs were subject to host validation in oracle service even though
  1976     there is no host there (#1883)
  1977   * neofs URI scheme was differing from C# implementation (#1883)
  1978   * no default value was used for NeoFS request timeout if it's not specified
  1979     in the configuration (#1883)
  1980   * oracle response code was marshalled as integer into JSON (#1884)
  1981   * MPT could grow in memory unbounded (#1885)
  1982   * Storage.Find results could differ from C# in some cases (#1888)
  1983  
  1984  ## 0.94.0 "Tsessebe" (19 Mar 2021)
  1985  
  1986  N3 RC1-compatible release is here. We've implemented all Neo protocol changes
  1987  (including state validation service and NeoFS support for oracles) and are
  1988  ready for testnet launch now, so that you could play with new native
  1989  contracts, VM instructions and other goodies RC1 brings with it. Some
  1990  usability improvements and documentation updates also went into this release
  1991  as well as a number of fixes stabilizing Notary subsystem (which is
  1992  NeoGo-specific protocol extension).
  1993  
  1994  Please note that this release is incompatible with 0.93.0. We do plan to make
  1995  an update soon (with more examples and documentation), but there won't be
  1996  long-term support provided, Neo N3 is still on its way to mainnet (although
  1997  RC1 and testnet are major milestones on this route).
  1998  
  1999  New features:
  2000   * Compiler:
  2001     - ellipsis support for append() to non-byte slices (#1750)
  2002     - NEP-11 standard conformance check (#1722)
  2003     - onNEP*Payable compliance checks (#1722)
  2004   * you can pass files as contract arguments now with `filebytes` CLI parameter
  2005     (#1762)
  2006   * CLI now supports specifying addresses everywhere script hashes are accepted
  2007     (#1758)
  2008   * System.Contract.CreateMultisigAccount interop function (#1763)
  2009   * SQRT and POW VM instructions (#1789, #1796)
  2010   * new NeoFSAlphabet node role added to RoleManagement contract (#1812)
  2011   * node can serve as state validator node (#1701)
  2012   * oracles now support NeoFS (#1484, #1830)
  2013   * CLI can be used to dump wallet's public keys (#1811)
  2014   * storage fee, candidate register price and oracle request price can now be
  2015     adjusted by committee (#1818, #1850)
  2016   * native contracts can now be versioned (#1827)
  2017   * RPC client was extended with price getters for native contracts (#1838)
  2018  
  2019  Behavior changes:
  2020   * NFTs no longer have "description" field (#1751)
  2021   * P2P Notary service configuration moved to ApplicationConfiguration section
  2022     (#1747)
  2023   * native contract methods requiring write permission in call flags now also
  2024     require read permission (#1777, #1837)
  2025   * System.Contract.Call interop function now requires state read permission
  2026     (#1777)
  2027   * NeoGo no longer supports Go 1.13 (#1791)
  2028   * native contract calls are now contract version aware (#1744)
  2029   * interop wrappers for smart contracts now use `int` type for all integers
  2030     (#1796)
  2031   * MaxTransactionsPerBlock, MaxBlockSize, MaxBlockSystemFee settings are now a
  2032     part of node configuration and no longer are available in Policy contract
  2033     (#1759, #1832)
  2034   * storage items can no longer be constant (#1819)
  2035   * state root handling is now conformant with C# implementation (with state
  2036     validators and vote/stateroot messages, #1701)
  2037   * blocks no longer have ConsensusData section, primary index is now a part of
  2038     the header (#1792, #1840, #1841)
  2039   * `wallet multisign sign` command was renamed to `wallet sign`, it now works
  2040     not just for multisignature contract signing, but also for multiple regular
  2041     signers as well as contract verification signing
  2042   * conversion interops were moved to StdLib native contract (#1824)
  2043   * crypto interops (except basic `CheckSig` and `CheckMultiSig`) were moved to
  2044     CryptoLib native contract (#1824)
  2045   * PACK, UNPACK and CONVERT instructions now cost more (#1826)
  2046   * some native contract types were adjusted (#1820)
  2047   * native Neo's `getCommittee` and `getNextBlockValidators` methods now cost
  2048     less (#1828)
  2049   * block/transaction/payload hashing and signing scheme has changed (#1829,
  2050     #1839)
  2051   * signing context is now serialized to JSON using base64 for data (#1829)
  2052   * System.Contract.IsStandard interop was removed (#1834)
  2053   * notifications are no longer allowed for safe contract methods (#1837)
  2054  
  2055  Improvements:
  2056   * verification script are now allowed to make contract calls (#1751)
  2057   * extensible payloads now have the same size limit as other P2P messages
  2058     (#1751)
  2059   * error logging is more helpful now in some cases (#1747, #1757)
  2060   * function inlining support in compiler for internal intrinsics, interop
  2061     refactoring (#1711, #1720, #1774, #1785, #1804, #1805, #1806, #1796, #1809)
  2062   * documentation updates (#1778, #1843)
  2063   * `sendrawtransaction` and `submitblock` RPC calls now return more detailed
  2064     information about errors for failed submissions (#1773)
  2065   * NeoGo now supports Go 1.16 (#1771, #1795)
  2066   * NEP-17 transfer tracking was optimized to avoid some DB accesses (#1782)
  2067   * interop wrappers added for SIGN/ABS/MAX/MIN/WITHIN instructions (#1796)
  2068  
  2069  Bugs fixed:
  2070   * `designateAsRole` method returned value while it shouldn't (#1746)
  2071   * deleting non-existent key could lead to node panic during MPT calculation
  2072     (#1754)
  2073   * some invalid IPv4 were accepted by name service contract (#1741)
  2074   * some legitimate IPv6 addresses were rejected by name service (#1741)
  2075   * compiler: append() to byte array produced wrong results for bytes with
  2076     >0x80 values (#1750)
  2077   * wrong notary-signed transaction size in notifications leading to client
  2078     disconnects (#1766)
  2079   * CALLT wasn't checking permission to read states and make calls in call
  2080     flags (#1777)
  2081   * proper escaping wasn't done in some cases on VM stack item conversion to
  2082     JSON (#1794)
  2083   * improper network fee calculation for complex multi-signed transactions in
  2084     some cases (#1797)
  2085   * importing package with the same name as compiled one could lead to
  2086     incorrect compiler behavior (#1808)
  2087   * boolean values were emitted as integers by compiler leading to some
  2088     comparison failures (#1822)
  2089   * `invokecontractverify` wasn't calculating proper GAS price of verification
  2090     using contract (#1825)
  2091   * ContractManagement contract wasn't returning NULL value from `getContract`
  2092     method if contract is missing (#1851)
  2093  
  2094  ## 0.93.0 "Hyperproduction" (12 Feb 2021)
  2095  
  2096  This is a 3.0.0-preview5 compatible release with important protocol changes,
  2097  improved smart contract interop interface for native contracts (it's much
  2098  easier now to use them) and complete Notary subsystem which is a NeoGo
  2099  experimental protocol extension for P2P signature collection.
  2100  
  2101  Please note that this release is incompatible with 0.92.0 and there are no
  2102  plans for long-term support of it, Neo 3 is still changing and improving.
  2103  
  2104  The release is tested with preview5 testnet data (and one of testnet CNs is
  2105  already a neo-go node) up to 48K blocks and it has exactly the same storage
  2106  data except for the Ledger contract that technically can differ between nodes
  2107  (it's not a part of state proper), and in case of neo-go it's intentionally
  2108  different (but this doesn't affect contract's functionality and state roots
  2109  compatibility).
  2110  
  2111  New features:
  2112   * "ProtocolNotSupported" oracle response code (#1630)
  2113   * POPITEM VM opcode (#1670)
  2114   * CALLT VM opcode and contract tokens support (#1673)
  2115   * extensible P2P payloads (#1667, #1674, #1706, #1709)
  2116   * contract method overloading (#1689)
  2117   * oracle module (#1427, #1703)
  2118   * NNS native contract (#1678, #1712, #1721)
  2119   * complete P2P Notary subsytem (experimental protocol extension, use only on
  2120     private networks, #1658, #1726)
  2121   * Ledger native contract (#1696)
  2122   * `getblockheadercount` RPC call (#1718)
  2123   * native contract wrappers for Go smart contracts (#1702)
  2124   * `getnativecontracts` RPC call (#1724)
  2125  
  2126  Behavior changes:
  2127   * VM CLI now supports and requires manifests to properly work with NEF files
  2128     (#1642)
  2129   * NEP-17-related CLI commands now output GAS balance as floating point numbers
  2130     (#1654)
  2131   * `--from` parameter can be omitted now for NEP-17 CLI transfers, the default
  2132     wallet address will be used in this case (#1655)
  2133   * native contracts now use more specific types for methods arguments (#1657)
  2134   * some native contract names and IDs have changed (#1622, #1660)
  2135   * NEF file is stored now in contract's state instead of script only which
  2136     also affects RPC calls and ContractManagement's interface
  2137   * call flag definitions were moved to a package of their own (#1647)
  2138   * callback syscalls were removed (#1647)
  2139   * calling a contract now requires specifying allowed flags (and `CallEx`
  2140     syscall was removed, #1647)
  2141   * iterator/enumerator `Concat` calls were removed (#1656)
  2142   * `System.Enumerator.*` syscalls were removed (#1656)
  2143   * `System.Storage.Find` interface was reworked (#1656)
  2144   * NEF file format was changed merging compiler and version fields, adding
  2145     reserved fields and tokens (#1672)
  2146   * registering as committee/validator candidate now costs 1000 GAS (#1684)
  2147   * dbft now uses extensible P2P payloads (#1667)
  2148   * contract hashing scheme was changed now including names in the mix (#1686)
  2149   * GAS fees JSON marshalling was changed to plain integers (#1687, #1723)
  2150   * native methods requiring committee signature now fail the script instead of
  2151     returning `false` (#1695)
  2152   * native ContractManagement contract now has two `deploy` methods, with
  2153     additional data and without it (#1693)
  2154   * updated contract manifest now can't change contract's name (#1693)
  2155   * default values of native contracts were moved to storage from code (#1703)
  2156   * blocked accounts now store empty string instead of `01` byte (#1703)
  2157   * testnet magic number was changed for preview5 (#1709, #1715)
  2158   * `onPayment` method was renamed to `onNEP17Payment` (#1712)
  2159   * manifests are stored and accessed as stack items instead of JSON (#1704)
  2160   * zero-length "Headers" packet is a protocol error now (#1716)
  2161   * `getstorage` RPC call now uses base64 instead of hex for input/output
  2162     (#1717)
  2163   * state dumper and comparer now use base64 instead of hex (#1717)
  2164   * deployed contracts and manifests are now checked for correctness (#1729)
  2165   * transaction scripts are now checked for correctness before execution
  2166     (#1729)
  2167  
  2168  Improvements:
  2169   * default VM interop prices were adjusted (#1643)
  2170   * batched MPT updates (#1641)
  2171   * you can use `-m` now for manifest parameter of contract deploying command
  2172     (#1690)
  2173   * transaction cosigners can be specified with addresses now (#1690)
  2174   * compiler documentation was updated (#1690)
  2175  
  2176  Bugs fixed:
  2177   * oracle response transaction can't be correctly evicted from the mempool
  2178     (#1668)
  2179   * the node left with zero peers didn't initiate reconnections to seeds in rare
  2180     cases (#1671)
  2181   * native contracts supposed to check for committee witness in fact checked
  2182     for validators witness (#1679)
  2183   * it was allowed for contracts to have non-bool `verify` methods (#1689)
  2184   * previous proposal reuse could lead to empty blocks accepted even if there
  2185     are transactions in the mempool (#1707)
  2186   * NEO contract's `getCommittee` method name was misspelled (#1708)
  2187   * CLI wasn't correctly handling escape sequences (#1727)
  2188   * init and deploy methods could be misoptimized leading to execution failures
  2189     (#1730)
  2190   * NEP-17 contract example was missing `onNEP17Payment` invocation (#1732)
  2191   * missing state read privilege could lead to transaction failures for
  2192     transfers from CLI or when using native contract wrappers (#1734, #1735)
  2193   * some native contract methods had different parameter names and return
  2194     output types (#1736)
  2195  
  2196  ## 0.92.0 "Fermentation" (28 Dec 2020)
  2197  
  2198  NeoGo project is closing year 2020 with 3.0.0-preview4 compatible release that
  2199  also has much improved performance, a lot of updates to compiler and SDK and
  2200  some experimental protocol extensions. This release also is the most tested
  2201  release of NeoGo ever, we've reached 83% code coverage (Neo 2.x only has
  2202  66%).
  2203  
  2204  Please note that this release is incompatible with 0.91.0 and there are no
  2205  plans for long-term support of it, Neo 3 is still changing and improving.
  2206  
  2207  Protocol-wise this release is tested with preview4 testnet (including working
  2208  in consensus with C# nodes) and it is compatible with it even though there are
  2209  some known storage change mismatches between NeoGo and C# (functionally the
  2210  contents is the same, this mismatch is caused by JSON handling differences and
  2211  needs to be addressed at the protocol level).
  2212  
  2213  New features:
  2214   * "high priority" transaction attribute (#1341)
  2215   * "oracle response" transaction attribute (#1407, #1520, #1573)
  2216   * new GAS distribution and committee update scheme (#1364, #1529, #1518,
  2217     #1542, #1549, #1636, #1639)
  2218   * oracle native contract (#1409, #1432, #1474, #1476, #1521, #1528, #1548,
  2219     #1556, #1625)
  2220   * designation native contract (#1451, #1504, #1519)
  2221   * support for `_deploy` method (#1452, #1466)
  2222   * `MaxTraceableBlocks` parameter can now be configured (#1520)
  2223   * `KeepOnlyLatestState` configuration option to drop old MPT data (#1553)
  2224   * `StateRootInHeader` configuration option to include state root data in the
  2225     header (it's a protocol extension, so use with care, #1500)
  2226   * NEP-5 was replaced by NEP-17 (#1558, #1574, #1617, #1636)
  2227   * `RemoveUntraceableBlocks` configuration option to perform old (unreachable)
  2228     block and transaction purging (#1561)
  2229   * stable deployed contract hashes (#1555, #1616, #1628)
  2230   * `Safe` method flag for contract manifests (#1597, #1607)
  2231   * native Management contract to deploy/update/destroy contracts (#1610,
  2232     #1624, #1636)
  2233   * Compiler/SDK:
  2234     - base58 encoding/decoding interops for smart contracts (#1350, #1375)
  2235     - you can use aliases now when importing interop packages (#397)
  2236     - `+=` operator is now supported for strings (#1351)
  2237     - `switch` without statement support (#1355)
  2238     - `make()` support for maps and slices using basic types (#1352)
  2239     - `copy()` support for byte slices (#1352, #1383)
  2240     - `iota` support (#1361)
  2241     - support for basic function literals (#1343)
  2242     - new variable initialization is now supported in `if` statements (#1343)
  2243     - `defer` is now supported (#1343)
  2244     - `recover()` support for exception handling (#1343, #1383)
  2245     - `delete()` support (#1391)
  2246     - `util.Remove()` function is added for smart contracts to remove elements
  2247       from slice (#1401)
  2248     - `interop` package now provides specific type aliases like Hash160/Hash256
  2249       for smart contracts to use (it affects generated manifests, #1375, #1603)
  2250     - variables and function calls support in struct and slice literals (#1425)
  2251     - atoi/itoa encoding/decoding interops for smart contracts (#1530, #1533)
  2252     - contracts specifying NEP-17 as supported standard are now checked for
  2253       interface compliance (#1373)
  2254     - `contract.CallEx` function is now available to contracts that allows
  2255       specifying flags for contract called (#1598)
  2256   * CLI:
  2257     - support for array parameters in invocations (#1363, #1367)
  2258     - contract addresses can now be imported into wallet (#1362)
  2259     - deploying/invoking from multisignature accounts (#1461)
  2260   * RPC:
  2261     - `getcommittee` RPC call (#1416)
  2262     - limits and paging are now supported for `get*transfers` calls (#1419)
  2263     - `getunclaimedgas` RPC call now also supports passing address as a
  2264       parameter (#1418)
  2265     - `getcontractstate` now also accepts addresses, IDs and names (for native
  2266       contracts, #1426)
  2267     - batched JSON-RPC requests support (#1514)
  2268     - `invokecontractverify` RPC call to run verification scripts (#1524)
  2269   * P2P notaries subsystem (configurable `P2PSigExtensions` protocol extension,
  2270     use with care):
  2271     - optional `NotValidBefore` transaction attribute (#1490)
  2272     - optional `Conflicts` transaction attribute (#1507)
  2273     - native Notary contract (#1557, #1593)
  2274     - notary request P2P payload (#1582)
  2275  
  2276  Behavior changes:
  2277   * converting items to boolean now fail for strings of bytes longer than 32
  2278     (#1346)
  2279   * consensus messages now use uint8 field for validator indexes (#1350)
  2280   * maximum possible try-catch nesting is now limited to 16 levels (#1347)
  2281   * maximum manifest size increased to 64K (#1365, #1555)
  2282   * required flags changed for many interop functions (#1362)
  2283   * compiler no longer generates code to log `panic()` message (#1343)
  2284   * `GetBlock`, `GetTransaction` and similar interop functions now return
  2285     pointers to structures (#1375)
  2286   * calling script hash now also is accounted for by CheckWitness interop
  2287     (#1435, #1439)
  2288   * CLI is using `--address` parameter everywhere it's needed (some commands
  2289     used `--addr` previously (#1434)
  2290   * VM now restricts comparable byte array size to 64K (#1433)
  2291   * `FeeOnly` witness scope was renamed to `None` (#1450)
  2292   * `getvalidators` RPC call was renamed to `getnextblockvalidators` (#1449)
  2293   * `emit.Opcode` is now `emit.Opcodes`, allowing for variadic specification of
  2294     opcodes (#1452)
  2295   * `CalculateNetworkFee` was moved to `fee.Calculate` (#1467)
  2296   * fault exception string is now returned for failed invocations (#1462)
  2297   * `runtime.GetInvocationCounter` no longer errors (#1455)
  2298   * `invoke*` RPC calls now also return `transaction` field (#1418)
  2299   * `getversion` RPC call now also returns network magic number (#1489)
  2300   * RPC calls now return data in base64 instead of hex (#1489, #1525, #1537)
  2301   * blocked accounts interface and storage was changed in Policy contract (#1504)
  2302   * voting fee is lower now (#1510)
  2303   * blocks are now processed with two execution triggers, `OnPersist` and
  2304     `PostPersist`, `getapplicationlog` RPC call was updated to support passing
  2305     trigger type (#1515, #1531, #1619)
  2306   * storage fee formula has changed (#1517)
  2307   * `MaxValidUntilBlockIncrement` is now 5760 instead of 2102400 (#1520)
  2308   * Policy contract no longer saves default values during initialization
  2309     (#1535)
  2310   * opcode pricing was changed and now it's adjustable (#1538, #1615)
  2311   * contracts no longer have `IsPayable` (see NEP-17) and `HasStorage` (they
  2312     all have it by default now) features (#1544)
  2313   * notification size is restricted now (#1551)
  2314   * unsolicited `addr` messages are now treated as errors (#1562)
  2315   * native contracts no longer have `name()` methods, it is now a part of
  2316     manifest (#1557)
  2317   * transaction fees, invocation GAS counters and unclaimed GAS values are now
  2318     returned as strings with floating point values from RPC calls (#1566,
  2319     #1572, #1604)
  2320   * NEF format was changed (#1555)
  2321   * `engine.AppCall()` interop was renamed to `contract.Call()` (#1598)
  2322   * call flags were renamed (#1608)
  2323   * deploying contract now costs at minimum 10 GAS and MaxGasInvoke
  2324     configuration was adjusted to account for that (the fee is configurable by
  2325     the committee, #1624, #1635)
  2326  
  2327  Improvements:
  2328   * a lot of new tests added (#1335, #1339, #1341, #1336, #1378, #1452, #1508,
  2329     #1564, #1567, #1583, #1584, #1587, #1590, #1591, #1595, #1602, #1633,
  2330     #1638)
  2331   * a number of optimizations across all node's components applied (#1342,
  2332     #1347, #1337, #1396, #1398, #1403, #1405, #1408, #1428, #1421, #1463,
  2333     #1471, #1492, #1493, #1526, #1561, #1618)
  2334   * smartcontract package now provides function to create simple majority
  2335     multisignature contract (in addition to BFT majority, #1341)
  2336   * `AddNetworkFee()` now supports contract addresses (#1362)
  2337   * error handling and help texts for CLI wallet commands (#1434)
  2338   * compiler emitting short jump instructions if possible (#805, #1488)
  2339   * compiler emitting jump instructions with embedded conditions where possible
  2340     (#1351)
  2341   * transaction retransmission mechanism added to mempool (#1536)
  2342   * parallel block fetching (#1568)
  2343   * Binary and Runtime interops refactored to separate packages (#1587)
  2344   * message broadcasts now finish successfully if the message is sent to 2/3 of
  2345     peers (#1637)
  2346  
  2347  Bugs fixed:
  2348   * TRY opcode implementation was not allowing for 0 offsets (#1347)
  2349   * compiler wasn't dropping unused elements returned from calls (#683)
  2350   * MEMCPY with non-zero destination index was not working correctly (#1352)
  2351   * asset transfer from CLI didn't work (#1354)
  2352   * specifying unknown DB type in configuration file induced node crash (#1356)
  2353   * address specifications in configuration file didn't work correctly (#1356)
  2354   * RPC server wasn't processing hashes with "0x" prefix in parameters (#1368)
  2355   * incorrect context unloding on exception handling (#1343)
  2356   * attempt to get committee only returned validators if there was no voting on
  2357     chain (#1370)
  2358   * block queue could be attacked with wrong blocks to cause OOM (#1374)
  2359   * token sale example wasn't checking witness correctly (#1379)
  2360   * structure methods were added to generated manifests (#1381)
  2361   * type conversions in `switch` and `range` statements were compiled as
  2362     function calls (#1383)
  2363   * RPC server result format wasn't conforming to C# implementation for
  2364     `getapplicationlog` and `invoke*` (#1371, #1387)
  2365   * subslicing non-byte slices was miscompiled (it's forbidden now, #1401)
  2366   * potential deadlock in consensus subsystem (#1410)
  2367   * race in peer connection closing method (#1378)
  2368   * race in MPT calculation functions (#1378)
  2369   * possible panic on shutdown (#1411)
  2370   * block-level `getapplicationlog` result had block hash in it (#1413)
  2371   * fail CN execution if wrong password is provided in the configuration
  2372     (#1419)
  2373   * tx witness check didn't account for GAS properly when several witnesses are
  2374     used (#1439)
  2375   * map keys longer than 64 bytes were allowed (#1433)
  2376   * unregistered candidate with zero votes wasn't removed (#1445)
  2377   * standard contract's network fee wasn't calculated correctly (#1446)
  2378   * witness checking wasn't taking into account transaction size fee (#1446)
  2379   * sending invalid transaction from the CLI wasn't prevented in some cases
  2380     (#1448, #1479, #1604)
  2381   * `System.Storage.Put` wasn't accounting for new key length in its GAS price
  2382     (#1458)
  2383   * blocks can't have more than 64K transactions (#1454)
  2384   * Policy native contract wasn't limiting some values (#1442)
  2385   * MerkleBlock payload wasn't serialized/deserialized properly (#1454, #1591)
  2386   * partial contract updates were not always possible (#1460)
  2387   * potential panic on verification with incorrect signature size (#1467)
  2388   * CLI attempted to save transaction when it wasn't requested (#1467)
  2389   * VM allowed to create bigger integers than it should support (#1464)
  2390   * some protocol limits were not enforced (#1469)
  2391   * iterating over storage items could produce incorrect KV pairs when using
  2392     LevelDB or BadgerDB (#1478)
  2393   * stale transaction were not deleted from the mempool (#1480)
  2394   * node panic during block processing with BoltDB (#1482)
  2395   * node that failed to connect to seeds on startup never attempted to
  2396     reconnect to them again (#1486, #1592)
  2397   * compiler produced incorrect code for if statements using function calls
  2398     (#1479)
  2399   * invocation stack size check wasn't performed in some cases (#1492)
  2400   * incorrect code produced by the compiler when assigning slices returned from
  2401     functions to new variables (#1495)
  2402   * websocket client closing connection on new events (#1494)
  2403   * minor `getrawtransaction`/`gettransactionheight` and NEP5-related RPC
  2404     implementation incompatibilities (#1543, #1550)
  2405   * VM CLI breakpoint wasn't stopping before the instruction (#1584)
  2406   * VM CLI was incorrectly processing missing parameter error (#1584)
  2407   * wallet conversion wasn't performed correctly (#1590)
  2408   * node didn't return all requested blocks in response to `getblocks` P2P
  2409     requests (#1595)
  2410   * CN didn't request transactions properly from its peers in some cases
  2411     (#1595)
  2412   * incorrect manifests generated for some parameter types (#1599)
  2413   * incorrect code generated when no global variables are present, but there
  2414     are some global constants (#1598)
  2415   * native contract invocations now set proper calling script hash (#1600)
  2416   * byte string and buffer VM stack items conversion to JSON differed from C#
  2417     (#1609)
  2418   * when mempool is full new transaction's hash could still be added into it
  2419     even if it is to be rejected afterwards (#1621)
  2420   * CN wasn't always performing timestamp validation correctly (#1620)
  2421   * incorrect stack contents after execution could stop block processing
  2422     (#1631)
  2423   * `getapplicationlog` RPC call handler wasn't validating its parameters
  2424     properly, potentially leading to node crash (#1636)
  2425   * a peer could be connected twice in rare circumstances (#1637)
  2426   * missing write timeout could lead to broadcasting stalls (#1637)
  2427  
  2428  ## 0.91.0 "Ululation" (18 August 2020)
  2429  
  2430  We've updated NeoGo for 3.0.0-preview3 compatibility implementing all the
  2431  appropriate protocol changes as well as improving NeoGo-specific
  2432  components. This release brings with it significant changes for smart
  2433  contracts, both in terms of Neo protocol changes (no more there is a single
  2434  entry point! execution environment has also changed in lots of ways) and Go
  2435  smart contract compiler updates and fixes.
  2436  
  2437  Please note that this release is incompatible with 0.90.0 and there will be no
  2438  long-term support provided for it, Neo 3 is still changing and
  2439  improving. If you have any wallets used with 0.90.0 release you'll need to
  2440  regenerate them from private keys because of changes to verification scripts
  2441  that also changed hashes and addresses.
  2442  
  2443  But nonetheless it is tested to be compatible with preview3 testnet for up to
  2444  68K of blocks in terms of storage changes, with neo-debugger for debug data
  2445  produced by the compiler and with consensus process for heterogeneous setups
  2446  (like 2 neo-go CNs with 2 C# CNs).
  2447  
  2448  New features:
  2449   * secp256k1 signature checks added to interop functions
  2450     (Neo.Crypto.VerifyWithECDsaSecp256k1 and
  2451     Neo.Crypto.CheckMultisigWithECDsaSecp256k1 syscalls,
  2452     crypto.ECDsaSecp256k1Verify and crypto.ECDSASecp256k1CheckMultisig interop
  2453     functions, #918)
  2454   * RIPEMD160 hash added to interop functions (Neo.Crypto.RIPEMD160 syscall,
  2455     crypto.RIPEMD160 interop function, #918, #1193)
  2456   * "NotFound" P2P message (#1135, #1333)
  2457   * base64 encoding/decoding interop functions (binary.Base64Encode and
  2458     binary.Base64Decode, #1187)
  2459   * new contract.GetCallFlags interop (System.Contract.GetCallFlags syscall)
  2460     implemented (#1187)
  2461   * it is possible now to create iterators and enumerators over primitive VM
  2462     types in smart contracts (#1218)
  2463   * runtime.Platform interop (System.Runtime.Platform syscall) is now available
  2464     to smart contracts in Go (#1218)
  2465   * storage.PutEx interop (System.Storage.PutEx syscall) is now available to
  2466     smart contracts in Go (#1221)
  2467   * exceptions support in VM (#885)
  2468   * CLI conversion utility functions for addresses/hashes/etc (#1207, #1258)
  2469   * multitransfer transactions now can be generated with RPC client or CLI
  2470     (#940, #1260)
  2471   * System.Callback.* syscalls for callback creation and execution (callback.*
  2472     interop functions, #1197)
  2473   * MPT implementation was added (#1235)
  2474   * Policy native contract now also contains MaxBlockSystemFee setting (#1195)
  2475   * getting blocks by indexes via P2P is now supported (#1192)
  2476   * limited pointer support was added to the compiler (#1247)
  2477   * voting support in CLI (#1206, #1286)
  2478  
  2479  Behavior changes:
  2480   * crypto.ECDsaVerify interop function was renamed to
  2481     crypto.ECDsaSecp256r1Verify now that we have support for secp256k1 curve
  2482     (#918)
  2483   * many RPC requests/responses changed names used for data fields (#1169)
  2484   * runtime.Notify interop function now requires a mandatory UTF8 name
  2485     parameter (#1052) and this name can be used to filter notifications (#1266)
  2486   * sendrawtransaction and submitblock RPC calls now return a hash instead of
  2487     boolean value in case of success (#1216)
  2488   * System.Runtime.Log syscall now only accepts valid UTF8 strings no longer
  2489     than 1024 bytes (#1218)
  2490   * System.Storage.Put syscall now limits keys to 64 bytes and values to 1024
  2491     bytes (#1221)
  2492   * PUSHA instruction now works with relative code offset (#1226)
  2493   * EQUAL instruction no longer does type conversions, so that values of
  2494     different types are always unequal (#1225)
  2495   * verification scripts now can't use more than 0.5 GAS (#1202)
  2496   * contracts no longer have single entry point, rather they export a set of
  2497     methods with specific offsets. Go smart contract compiler has been changed
  2498     accordingly to add all exported (as in Go) methods to the manifest
  2499     (but with the first letter being lowercased to match NEP-5 expectations,
  2500     #1228). Please also refer to examples changes to better see how it affects
  2501     contracts, manifests and configuration files (#1296)
  2502   * native contracts are now called via Neo.Native.Call syscall (#1191)
  2503   * compressed P2P payloads now also contain their uncompressed size (#1212,
  2504     #1255)
  2505   * NEF files now use double SHA256 for checksums (#1203)
  2506   * VM's map keys and contract methods now can only contain valid UTF-8 strings
  2507     (#1198)
  2508   * stack items now can be converted to/from JSON natively (without
  2509     smartcontract.ContractParameters intermediate) which is now used for
  2510     invoke* RPC calls and application execution logs (#1242, #1317)
  2511   * invoking Policy native contracts now requires AllowsStates (to get
  2512     settings) or AllowModifyStates (to change setting) flags (#1254)
  2513   * Transaction now has Signers field unifying Sender (the first Signer) and
  2514     Cosigners, a Signer can have FeeOnly or any other regular witness scope
  2515     (#1184)
  2516   * verification scripts no longer have access to blockchain's state (#1277)
  2517   * governance scheme was changed to delegated committee-based one. The number
  2518     of validators is now specified with ValidatorsCount configuration option,
  2519     standby validators are no longer being registered by default (#867, #1300)
  2520   * Go 1.13+ is now required to build neo-go (#1281)
  2521   * public contract methods now always return some value and this is being
  2522     checked by the VM (#1196, #1331, #1332)
  2523   * runtime interop package now exports triggers as proper constants rather
  2524     than functions (#1299)
  2525   * RPC client no longer has SetWIF/WIF methods that didn't do anything useful
  2526     anyway (#1328)
  2527  
  2528  Improvements:
  2529   * Neo.Crypto.CheckMultisigWithECDsaSecp256r1 syscall is now available via
  2530     crypto.ECDSASecp256r1CheckMultisig interop function (#1175)
  2531   * System.Contract.IsStandard syscall now also checks script's container (#1187)
  2532   * syscalls no longer have allowed triggers limitations (#1205)
  2533   * better testing coverage (#1232, #1318, #1328)
  2534   * getrawmempool RPC call now also supports verbose parameter (#1182)
  2535   * VMState is no longer being stored as a string for application execution
  2536     results (#1236)
  2537   * manifest now contains a list of supported standards (#1204)
  2538   * notifications can't be changed now by a contract after emitting them
  2539     (#1199)
  2540   * it is possible to call other contracts from native contracts now (#1271)
  2541   * getnep5transfers now supports timing parameters (#1289)
  2542   * smartcontract package now has CreateDefaultMultiSigRedeemScript that should
  2543     be used for BFT-compliant "m out of n" multisignature script generation
  2544     (#1300)
  2545   * validators are always sorted now (standby validators were not previously,
  2546     #1300)
  2547   * debug information now contains all file names (#1295)
  2548   * compiler now accepts directory to compile a package, only one file could be
  2549     passed previously (#1295)
  2550   * some old no longer used functions and structures were removed (#1303)
  2551   * contract inspection output was improved for new Neo 3 VM instructions (#1231)
  2552   * ping P2P message handling was changed to trigger block requests (#1326)
  2553  
  2554  Bugs fixed:
  2555   * inability to transfer NEO/GAS from deployed contract's address (#1180)
  2556   * System.Blockchain.GetTransactionFromBlock syscall didn't pick all of its
  2557     arguments from the stack in some error cases (#1187)
  2558   * System.Contract.CallEx syscall didn't properly check call flags (#1187)
  2559   * System.Blockchain.GetContract and System.Contract.Create syscalls returned
  2560     an interop interface instead of plain well-defined structure (#1187)
  2561   * System.Contract.Update syscall's manifest checks were improved, return
  2562     value was fixed (#1187)
  2563   * getnep5balances and getnep5transfers RPC calls now support addresses in
  2564     their parameters (#1188)
  2565   * rare panic during node's shutdown (#1188)
  2566   * System.Runtime.CheckWitness, System.Runtime.GetTime syscalls are only allowed to be called with
  2567     AllowStates flag (#1218)
  2568   * System.Runtime.GasLeft syscall result for test VM mode was wrong (#1218)
  2569   * getrawtransaction RPC call now also returns its VM state after execution
  2570     (#1183)
  2571   * getnep5balances and getnep5transfers RPC calls now correctly work for
  2572     migrated contracts (#1188, #1239)
  2573   * compiler now generates correct code for global variables from multiple
  2574     files (#1240)
  2575   * compiler now correctly supports exported contracts and variables in
  2576     packages (#1154)
  2577   * compiler no longer confuses functions with the same name from different
  2578     packages (#1150)
  2579   * MaxBlockSize policy setting was not enforced (#1254)
  2580   * missing scope check for signers (#1244)
  2581   * compiler now properly supports init() functions (#1253, #1295)
  2582   * getvalidators RPC call now returns zero-length array of validators when
  2583     there are no registered candidates instead of null value (#1300)
  2584   * events were not added to the debug data (#1311, #1315)
  2585   * RPC client's BalanceOf method was lacking account parameter (#1323)
  2586   * VM CLI debugging commands didn't really allow to step through the contract
  2587     (#1328)
  2588   * recovery message decoding created incorrect PrepareRequest payload that
  2589     lead to consensus failures (#1334)
  2590  
  2591  ## 0.90.0 "Tantalization" (14 July 2020)
  2592  
  2593  The first Neo 3 compatible release of neo-go! We've targeted to make it
  2594  compatible with preview2 release of Neo 3, so it only contains features
  2595  available there, but at the same time this makes the node more useful until we
  2596  have some more up to date reference version. It's a completely different
  2597  network, so almost everything has changed and it's hard to describe it with
  2598  the same level of details we usually do (but we'll provide them for subsequent
  2599  releases where the changeset is going to be lower in size). Please note that
  2600  this is a preview-level release and there won't be long-term support provided
  2601  for it, Neo 3 is evolving and the next release won't be compatible with this
  2602  one.
  2603  
  2604  Main Neo 3 features in this release:
  2605   * no UTXO
  2606   * native contracts
  2607   * new VM
  2608   * scoped witnesses for transaction
  2609   * updated interop/syscalls set
  2610   * contract manifests
  2611   * more efficient P2P protocol
  2612  
  2613  Things that have also changed:
  2614   * transaction format
  2615   * block format
  2616   * address format
  2617   * wallets
  2618   * RPC protocol
  2619   * notification subsystem
  2620   * executable format output for compiler
  2621  
  2622  Compatibility level of this neo-go release:
  2623   * identical storage changes compared to C# node for 378K blocks of preview2
  2624     testnet
  2625   * debugging info produced is compatible with preview2-compatible neo-debugger
  2626   * running consensus nodes in heterogeneous setup is possible (2 neo-go CNs
  2627     with 2 C# CNs, for example)
  2628  
  2629  Changes specific to neo-go:
  2630   * some CLI parameters like wallet path or RPC endpoint URL have been unified
  2631     across all commands and thus have changed in some of them (refer to CLI
  2632     help for details)
  2633   * as an extension we support post-preview2 cosigners parameter for
  2634     invokefunction RPC calls (see neo-project/neo-modules#260)
  2635   * Go compiler now supports comparisons with nil properly
  2636   * we no longer provide bootstrapping 6k block dump for private networks, you
  2637     have 30000000 GAS right in the genesis block and it's not hard to make use
  2638     of it (see
  2639     [neo-go-sc-wrkshp](https://github.com/nspcc-dev/neo-go-sc-wrkshp) for an
  2640     example of how to use it)
  2641   * we have a conversion tool for your old Neo 2 wallets (`wallet convert`
  2642     command), so you can reuse keys on Neo 3 networks
  2643   * util.Equals interop function may not function the way you expect it to due
  2644     to Neo VM changes, it still is an EQUAL opcode though. This interop may be
  2645     removed in the future.
  2646  
  2647  ## Older versions
  2648  
  2649  Please refer to the [master-2.x branch
  2650  CHANGELOG](https://github.com/nspcc-dev/neo-go/tree/master-2.x/CHANGELOG.md)
  2651  for versions prior to 0.90.0 (that are Neo 2 compatible, unlike 0.90.0+ that
  2652  are Neo 3 compatible).