Zephyranthes
We're rolling out a large set of updates including all of Neo 3.7.4 protocol changes: native contracts update functionality and extended native contract APIs united under the upcoming Cockatrice hardfork. For smart contract developers an ability to generate smart contract bindings with dynamic hash is supported as well as a number of useful extensions for unwrap
package, compatible NNS smart contract RPC binding and a lot of other handy enhancements. This release also includes a couple of severe regression bug fixes affecting the node state. As a bonus of fixing a wide range of failing tests, we've refactored the node services start and shutdown procedures to make it more stable. This version drops support for Go 1.19 and requires 1.20+ to build (with Go 1.22 supported).
Notice that this release requires full node resynchronization for both mainnet and testnet nodes. Please pay special attention to the Cockatrice hardfork schedule and check your configurations. It should be configured for 3967000 of T5 testnet and 5450000 of mainnet. To ensure compatibility your node must be configured appropriately.
New features:
- native contracts update functionality bound to hardforks (#3402, #3444)
- Cockatrice hardfork planned for 5450000 block of mainnet and 3967000 block of T5 testnet (#3402, #3448, #3402, #3446)
CommitteeChanged
events are emitted by NeoToken native contract starting from Cockatrice hardfork (#3351, #3448)getCommitteeAddress
method of NeoToken native contract is available starting from Cockatrice hardfork (#3362, #3402)keccak256
method of CryptoLib native contract is available starting from Cockatrice hardfork (#3301, #3402)- dynamic contract hash support for smart contract bindings (#3405)
- support
StringCompressed
API forcrypto.PublicKey
(#3408) - support
Copy
API fortransaction.Transaction
andpayload.P2PNotaryRequest
(#3407) - extend
verifyWithECDsa
method of native CryptoLib contract with Keccak256 hasher starting from Cockatrice and add an example of custom Koblitz-based and Keccak256-based transaction witness verification (#3425) - autogenerated
nativehashes
package (#3402, #3431) - introduce
unwrap.Exception
type for better RPC invocation result exceptions detection (#3438)
Behavior changes:
- Neo Name Service smart contract RPC binding follows the official N3 implementation (#3291)
- clear LastGasPerVote NeoToken account info on unvoting (#3349)
- return fault exception (if any) in
unwrap
RPC client helpers (#3356) - move P2PNotary designation role out of P2PSigExtensions (#3452)
Improvements:
- support
smartcontract.Convertible
interface as RPC Actor and Invoker call parameters (#3297) - allow to import multisignature account into wallet without WIF and password specified (#3293)
- upgrade go-ordered-json dependency to avoid possible node state incompatibility issues caused by smart contract manifest marshalling (#3331, #3333)
- Go 1.22 support, bump minimum required Go version up to Go 1.20 (#3336)
- a number of dependent libraries are updated to the fresh versions (#3338, #3418)
- improve error message of
System.Crypto.CheckMultisig
interop API handler (#3374) - upgrade dBFT library to v0.2.0 (#3371, #3413)
- increase
ValidUntilBlock
value for transactions generated by CLI commands (#3376) - documentation updates (#3375, #3382)
- let default Notary Actor options be customizable (#3394)
- extend
getversion
RPC response with RPC server settings (#3386) - make errors related to wallet opening more detailed (#3389)
- adjust error messages of
setExecFeeFactor
andsetStoragePrice
methods of native PolicyContract (#3406) - make neotest chain constructor options customizable (#3404)
- format improvements for CLI commands description (#3410)
- make state dumps comparator script more verbose (#3411)
- refactor storage
Get
implementation for BoltDB (#3441) - add
updatecounter
field to the resulting items ofgetnativecontracts
RPC API call (#3439)
Bugs fixed:
- node panic on committee missing from node configuration (#3294)
- autogenerated RPC bindings do not follow Go naming convention (#3299)
- a batch of failing tests is fixed (#3306, #3313, #3321, #3332, #3337, #3335, #3344, #3340, #3350, #3355, #3364, #3368, #3377, #3393, #3397, #3392, #3398, #3400)
- outdated minimum required Go version of boilerplate contract generated by
neo-go contract init
(#3318) - outdated address used as an example in RPC client documentation (#3327)
- ungraceful node services shutdown procedure (#3307)
- logging data race on node services shutdown (#3307)
- Map parameter support is missing from RPC server handlers (#3329)
- smart contract storage iterator prefix wasn't copied while iterating over values (#3336)
- RPC error with -511 code (insufficient funds) returned on
sendrawtransaction
RPC request should cover multiple cases of sender's insufficient funds (#3360, #3361) - reentrancy possibility for Notary deposit withdrawal (#3357)
- null
findstorage
RPC response in case of missing storage items (#3385) - uninitialized named return variables in compiler (#3401)
- wrong debug sequence points after
JUMP*
instructions shortening by compiler (#3412) - corrupted genesis block record and application log caused by improper Conflicts attribute processing (#3437)
- false positive DB-based blocked accounts detection in native PolicyContract leaded to invalid committee computations and reward distribution made by NeoToken (#3443)