Releases: nspcc-dev/neo-go
Hyalinization
Bugs, terrestrial arthropods with at least six legs. Sometimes we don't notice them, sometimes we ignore them, but they do exist and there are times when they need to be dealt with in one way or another. Most of the bugs fixed in this release have a little less legs than proper insects, they're far from being as critical as the ones fixed in the previous release and yet we consider them annoying enough to warrant this new version of NeoGo to be published. We don't want to see our users fighting these pesky creatures in the wild, better update and have a troublefree experience.
If you're not affected by #2815 (requests for verbose transaction data and application logs failed for some specific mainnet transaction(s)) you may leave the DB as is with this upgrade, if you want it to be solved then please resynchronize.
Behaviour changes:
- "loadtx" VM CLI command now uses transaction system fee value as the default GAS limit for the context, unless --gas is used (previously it wasn't limited, #2816)
- SendRawTransaction RPC client method will now always return transaction hash, even if error occured, this also affects Actor APIs and allows to handle some specific errors (like transaction already present in the mempool) in more appropriate way (#2817)
- Actor and NotaryActor Wait() wrapper methods now handle "already exists" and "already on chain" errors as non-errors, waiting (if needed) and returning proper results (#2817)
Improvements:
- reworked network discoverer/connection manager that has a better picture of the network (especially if it's a small one), doesn't try to make additional connections (even when having less than MinPeers of them) when there are no more real addresses to connect to, establishes stable connections faster in containerized environments and does more connection attempts when MinPeers setting is not satisfied, but there are potential candidates (#2811)
- VM invocation stack handling microoptimization (#2812)
- load* VM CLI commands now accept --gas parameter to set the amount of GAS to be used in this context (#2816)
- better logging during state reset process (#2813)
- subscription-based transaction waiter now handles already accepted transactions faster (~immediately vs waiting for block timeout previously, #2817)
- WSClient can return more specific error on websocket handshake failure if it's provided by server (#2821)
- new MaxWebSocketClients configuration option for the RPC server to control the number of allowed websocket clients, missing or 0 value make the server use the default of 64 which is compatible with the previous behavior (you can use old configurations if you don't care about this option, #2821)
Bugs fixed:
- occasional "loadgo" VM CLI test failures because of timeout (#2810)
- websocket waiter test instability (#2809)
- websocket event unsubscriptions could lead to node deadlock in rare circumstances (#2809)
- exception handler could use improper evaluation stack in some cases (#2812)
- pointer stack items were not handled correctly in "protected" serialization mode leading to inability to deserialize these items back (#2816)
- state reset functionality not working for big chains like mainnet (#2813)
Funambulation
An emergency release fixing mainnet incompatibility at block 2504320 leading to inability to process block 2504813. A couple of other less severe bugs got fixed as well. Unfortunately, this release requires complete resynchronization for mainnet, other networks can use old DBs.
Improvements:
- only transactions requested by the consensus process are forwarded to it now slightly improving performance in some networked scenarios (#2788)
- a complete set of simple array unwrappers in the unwrap library (#2792)
- RPC binding generator can handle simple arrays now with configuration file provided (#2792)
- more user-friendly error messages in some cases (#2797, #2802, #2804)
Bugs fixed:
- DB was not properly closed after state reset (#2791)
- VM stack handling problem leading to lost items after return from call to another contract (#2800)
- "istack" command panic in the VM CLI (#2800)
- failure to decode incorrect contract from ContractManagement state leading to failure to start the node, it'll be ignored now similar to how C# node treats this (#2802)
- subscription to execution events failed if no "state" filter was used along with "container" (#2804)
- Actor using WSClient could deadlock in the transaction waiter during unsubscription (#2804)
Underestimation
It wasn't long since the previous release until a juicy set of features and optimisations came on board. So we've decided to change our release plan and supply one more 3.4.0 compatible version. It comes up with a massive suite of network P2P and broadcast improvements. We've carefully investigated message sending timeouts on benchmarks, reworked the broadcast logic and significantly reduced delays in message sending and the amount of useless traffic between our nodes. For smart-contract developers and RPC client users several new features were added. These are automatic RPC bindings generator, poll-based and websocket-based transactions awaiting and an extended websocket client subscriptions interface. For better debugging experience we've improved state related functionality of VM CLI and added an ability to reset chain state to a particular height.
An important dBFT initialization bug that caused timestamp-related errors on block addition was fixed. Also, those who use NeoGo node with EnableCORSWorkaround setting may want to update the node to be able to handle websocket requests with Origin set in the header. The users of websocket RPC client subscription mechanism are welcomed to move from deprecated subscriptions API to the extended one. Finally, we are kindly asking our users to have a look at our roadmap file where deprecated code removal schedule is attached.
This version is fully compatible with C# node 3.4.0 and does not require resynchronization on upgrade. This time for sure, the next release is planned to be compatible with 3.5.0.
New features:
- logarithmic gossip fan-out, new
BroadcastFactor
application setting and adaptive peer requests are added to optimise broadcasting process (#608, #2678, #2743) - Prometheus histograms with handling time are added for P2P commands (#2750) and RPC calls (#2784)
- transaction awaiting is added to RPC clients (#2740, #2749)
- RPC bindings generator (#2705) is added for both safe (#2766) and state-changing (#2769, #2778) methods with initial iterator support (#2783)
- the ability to reset chain state to a particular height is added (#2576, #2773)
Behaviour changes:
- Aspidochelone fork block for NeoFS sidechain mainnet configuration is rescheduled (#2754, #2776)
- RPC server will now handle any Origin in websocket connection when EnableCORSWorkaround setting is on (#2772, #2724)
- WS RPC client subscriptions API is extended to accept custom subscriber channels, old subscriptions API is marked as deprecated (#2756, #2764)
Improvements:
- network code refactoring (#2742)
- network packets sending is now limited in time (#2738)
- broadcast messages will be sent concurrently to each peer (#2741)
- ping messages are broadcast using the common broadcast logic (#2742)
- transactions requested by dBFT will be accepted on demand only (#2746, #2748, nspcc-dev/dbft#63)
- VM CLI's state-based functionality improvements (extended signers and arguments parsing, enabled logging) and additional commands (
loadtx
,loaddeployed
,jump
) (#2729, #2606, #2740) - incoming P2P transactions are now processed concurrently and buffer for inventory hashes is reusable (#2755)
GetData
andGetBlocksByIndex
replies are now batched on a TCP-level (#2757)- optimisation of incoming P2P transactions and blocks filtering are introduced (#2758, #2759)
- batch size of broadcast transactions hashes is adjusted (#2760)
- peer reconnections logic is improved,
GetAddr
messages are sent more often (#2761, #2745) - documentation for wallet configuration file is clarified (#2763)
- Koblitz curve implementation of btcd/btcec was replaced with decred/secp256k1 due to GitHub security warning (#2781)
NOT
opcode for Bool emission is now used to reduce resulting script cost (#2762)
Bugs fixed:
Transliteration
A small update mostly interesting for people building/testing smart contracts with NeoGo. It contains long-awaited VM CLI update that allows to use blockchain state and complete set of interops, additional helper functions for smart contracts and notification checking code (for upcoming 3.5.0 protocol changes). Node operators using EnableCORSWorkaround (that is still not recommended, but available) also may want to update to be able to handle pre-flight CORS requests.
This version is compatible with C# node 3.4.0 and does not require resynchronization on upgrade. The next release is planned to be compatible with 3.5.0.
New features:
- address conversion helpers for smart contracts (#2698)
- interop helper to call specific version of a contract (#2695)
- notifications are now checked for manifest compliance, a warning is logged in case on detected inconsistencies (#2710)
- VM CLI can now use blockchain state DB (including historic states) to run code with a complete set of interops and contracts available; additional commands were added to it to inspect storage and generated events (#2723)
Behavior changes:
- type assertion with two return values in Go contracts can't be compiled now (it never worked properly, #2718)
- RPC server will now handle pre-flight CORS requests (via OPTIONS methods) when EnableCORSWorkaround setting is on (#2724)
- all transaction-generating CLI commands were unified to accept gas/sysgas/out/force parameters, ask for confirmation and be able to save transaction into a file; this affects wallet claim and candidate-related commands mostly (#2731)
Improvements:
- smartcontract.Builder API was extended with Len method (#2691)
- NNS example contract adjustments for better DNS compatibility (#2679)
- documentation updates (#2708, #2722, #2726, #2728)
- compiler now emits code to explicitly cast runtime.Notify() parameters to appropriate types (#2720)
- CLI tests repackaging (#2725)
- NeoFS sidechain configurations for mainnet and testnet (#2730)
Bugs fixed:
Simplification
Version 0.99.3 brings with it most of the planned refactoring changes to the RPC client. dApp backend code can be greatly simplified in many cases by using new APIs (old ones are still available for transition period of about one-two releases more). We also have some updates for CLI and compiler and a number of bug fixes.
This version is compatible with C# node 3.4.0 and does not require resynchronization on upgrade. The next release is planned to be compatible with 3.5.0 (if it's to be released around currently planned dates).
New features:
- native contract RPC wrappers (#2643, #2646, #2650, #2666, #2665)
- NEP-11 RPC wrappers (#2651)
- invoker interface extension with session-based iterators support (#2650)
- notary Actor greatly simplifying creation of notary-assisted transactions via RPC client (#2665)
- historic smart contract calls can now be made via CLI (#2683)
Behavior changes:
- calculatenetworkfee RPC can handle paid attributes (NeoGo extensions) and invalid contract signatures now, it won't return an error for them (#2658)
- graceful node shutdown on SIGTERM (#2660)
- wallet balance commands now require at least 0.99.1 NeoGo version (or
compatible C# node) used by the RPC server (#2667)
Improvements:
- build system corrections (#2641, #2684)
- additional types in
unwrap
(#2650, #2651) - session iterator consistency check in
unwrap
(#2650) - multitransfers in NEP-17 RPC wrapper (#2653)
- extended transaction validity time in CLI wallet commands (#2653)
- reference counter optimization in VM (#2659)
- RPC Actor API can have default (used for all transactions) attributes and callbacks now (#2665)
- neptoken RPC package can now provide wallet.Token data (#2667)
- NEP-11 balance commands can now work without direct token hash specification or previous token import (#2667)
- support for offline signing in CLI (#2668)
- compiler can optimize out unused global variables now (#2624)
- private keys are now cleaned up from memory when they're no longer needed, additional Account APIs added to reduce direct interactions with private keys (#2672)
- updated linter settings, some code cleanup (#2674)
- more documentation and examples for new RPC APIs (#2681)
- refactored state-changing methods of NEP-11/NEP-17 RPC wrappers into a separate structure to simplify reusing them in higher-level code (#2681)
- simplified rpcclient historic API (#2686)
Bugs fixed:
- compiler panic on empty package list (#2645)
- compiler not allowed to use unnamed parameters in exported methods (#2648)
- compiler allowed to export multireturn functions (#2648)
- compiler panic on nil method receiver in the compiled code (#2649)
- compiler panic on variable initialization from multireturn call (#2644)
- potential lockups or panics on node shutdown (#2652)
- contract manifest not checked for correctness in bindings generation CLI command (#2656)
- SignTx wallet Account API could lead to inconsistent result in some cases (#2665)
- wallet Account API allowed to sign with locked accounts (#2665)
- potential panic in keys.WIFDecode on some inputs (#2672)
Recalibration
This is a 3.4.0-compatible (tested for mainnet and testnet) update to NeoGo that implements all of the required protocol changes, adds a lot of new RPC client interfaces and provides additional service management functions. This is also the first version to support the recently released Go 1.19. Support for Go 1.16 is removed at the same time, so you need Go 1.17+ to build NeoGo now.
With this version you can turn on/off, restart or reconfigure internal node services like RPC or Oracle without full node shutdown/startup. Node operators can send an appropriate Unix signal and that'll do the job. At the same time node operators must resynchronize their nodes when updating to 0.99.2 due to native contract state change.
A number of RPC client's methods are now deprecated (but still available to simplify transition), please explore new APIs, try them and leave feedback in #2597 if any. We expect new APIs to better fit the needs of various backend RPC client use cases while allowing to remove some repetitive code from applications at the same time. This release only contains generic NEP-17 call wrapper, so it doesn't cover all of the things currently provided by the old client API, but this will be fixed in future releases.
New features:
- signal-based configuration and service reloads (#2612)
- new APIs in smartcontract package to convert Go types into NEP-14 parameters (#2621, #2632)
- invoker package to deal with invocations via RPC in various contexts (mostly useful for read-only and/or historic calls when used directly, #2621)
hasMethod
method in the ContractManagement native contract (#2598, #2619, #2640)- actor package that helps in creating and sending transactions to the network via RPC using the same set of signers (can be used directly, but mostly intended to be used by higher-order contract wrappers, #2632, #2637)
- unwrap package in the RPC client that checks for execution results and
converts returned stack items to expected Go types (can be used directly, but more useful when being used by upper-layer contract wrappers, #2638) - nep17 RPC client package for simple remote access to NEP-17 contract methods via RPC, both safe and state-changing (#2642)
Behavior changes:
- smartcontract.Params type and (*Parameter).TryParse APIs were removed completely as unused and not useful (#2621)
- compiler now rejects unnamed parameter for exported methods (but they didn't work properly anyway, #2601)
- restored deploy-time out of bounds script checks (#2538, #2619)
- dynamic scripts (like entry scripts) no longer can emit notifications (#2613)
- db dump and db restore CLI commands now reject
--debug
option (it was ignored previously, #2625)
Improvements:
- manifest correctness check during compilation (#2601)
- more robust CalledByEntry scope check (#2613)
- a check for excessive arguments in CLI (#2625)
- better help messages for CLI commands (#2625)
- Go 1.19 support (#2634)
- saved transactions created via CLI (
--out
) now use the maximum possible ValidUntilBlock values (#2632) - RPC server now returns more data about NeoGo-specific protocol extensions in
getversion
reply (#2632)
Bugs fixed:
- NEP-6 wallet version was wrong wrt the standard and C# implementation (#2633)
- smart contract invocations from the CLI didn't compensate for interactive prompt wait time which could lead to transaction expiration before it was sent (#2632)
- Oracle native contract's
finish
method reentrancy problem (#2639)
Parametrization
We're updating NeoGo to push out a number of significant updates as well as make it compatible with 3.3.1 version of C# node. The most prominent changes are RPC sessions for iterators returned from invoke* calls, initial bits of RPC client refactoring and support for darwin-arm64 and linux-arm64 platforms. A number of internal changes are less visible from outside, but are also important for future evolution of the code base.
Node operators must resynchronize their nodes to get fully compatible state (which is confirmed to be compatible with 3.3.1 for current mainnet up to block 1932677 and T5 testnet up to block 475938). RPC client users, please review the changes carefully and update your code wrt refactorings made as well as iterator session support.
Subsequent releases will also change RPC client and associated code, we want to make it easier to use as well as extend its functionality (see #2597 for details, comments and suggestions are welcome). 0.99.2 is expected to be released somewhere in August with 3.4.0 C# node compatibility.
New features:
getcandidates
RPC method to get full list of registered candidates and their voting status (#2587)- wallet configuration file support to simplify using CLI non-interactively, use
--wallet-config
option instead of--wallet
if needed (#2559) - session-based JSON-RPC iterator API for both server and client with
traverseiterator
andterminatesession
calls; notice that the default server behavior (SessionEnabled: false
) is compatible with NeoGo 0.99.0, iterators are expanded the way they were previously, only when sessions are enabled they're returned by the server to the client (#2555) interop
package now provides helper methods for properHash160
,Hash256
and other type comparisons in smart contracts (#2591)smartcontract.Builder
type to assist with entry script creation as well as a set of CreateXXXScript functions for simple cases (#2610)
Behavior changes:
- 3.3.1-compatible order of ABI methods for the native NeoToken contract which affects LedgerContract state (#2539)
getnextvalidators
RPC was reworked to be compatible with C# node, if you rely on Active flag from the old response or full candidate list please usegetcandidates
method (#2587)--account
parameter forcontract manifest add-group
CLI command was changed to--address
(short-a
is still the same) for better consistency with other commands (#2559)- (*WSClient).GetError won't return an error in case the connection was closed with (*WSClient).Close
getnepXXbalances
RPCs now return decimals, symbol and token name data along with asset hash (#2581)- Ledger.GetBlock will now return state root hash for chains that use StateRootInHeader extension (#2583)
request.RawParams
type is gone (but it likely wasn't used anway), if needed use[]interface{}
directly (#2585)RawParams
field ofrequest.Raw
was renamed toParams
(#2585)vm.State
type moved to a package of its own (vm/vmstate
) to avoid importing whole VM where only State type is needed (#2586)MaxStorageKeyLen
andMaxStorageKeyLen
definitions moved fromcore/storage
toconfig/limits
package simplifying their usage (#2586)vm.InvocationTree
type moved intovm/invocations
(#2586)storage.Operation
type moved intostorage/dboper
package (#2586)rpc/server
package moved toservices/rpcsrv
(#2609)rpc/client
package moved torpcclient
(#2609)network/metrics
package moved toservices/metrics
(#2609)rpc/request
andrpc/response
packages were merged underneorpc
,request.Raw
isneorpc.Request
now, whileresponse.Raw
isneorpc.Response
(#2609)rpc.Config
type was moved toconfig.RPC
(#2609)subscriptions.NotificationEvent
type moved tostate.ContainedNotificationEvent
(#2609)subscriptions.NotaryRequestEvent
type moved toresult.NotaryRequestEvent
(#2609)
Improvements:
- new
make
targets to build NeoGo binaries locally or using Docker environment (#2537, #2541) - more detailed client-side error on JSON-RPC WebSocket connection closure (#2540)
- various node's micro-optimizations both for CPU usage and memory allocations (#2543)
- new Wallet method that allows to save it in pretty format (#2549)
- massive test code refactoring along with some core packages restructuring (#2548)
- transaction package fuzz-test (#2553)
- simplified client-side Error structure, more predefined errors for comparisons, refactored server side of RPC error handling (#2544)
- more effective entry scripts for parameterless function invocations via RPC (#2558)
- internal services now can start/stop properly independent of other node functionality (#2566, #2580)
- all configurations now use 'localhost' instead of 127.0.0.1 (#2577)
- documented JSON behavior for enumerations which deviates from C# node slightly (#2579)
- better error messages in the CLI for invocations (#2574)
- compiler can inline methods now (#2583)
interface{}()
conversions are supported by the compiler now (although they don't change values, #2583)- server-side code moved out of common RPC packages completely (#2585, #2586)
- metrics and DB configurations moved to config and dbconfig packages (#2586)
- calling methods on returned values is now possible in Go smart contracts (#2593)
- NNS contract now cleans up old entries in case a domain is registered again after expiration (#2599)
- GetMPTData P2P messages (from P2PStateExchangeExtensions) can now be processed even if KeepOnlyLatestState is enabled (#2600)
- builds and regular tests for MacOS (#2602, #2608)
- internal
blockchainer.Blockchainer
is finally gone, simplifying some dependencies (#2609) - updated CLI
--version
output format to conform with NeoFS tooling style (#2614)
Bugs fixed:
- dBFT update: increase the number of nodes that respond to RecoveryRequest (#2546, nspcc-dev/dbft#59)
- invalid block height estimation for historic calls (#2556)
- Signature parameter to RPC invocations was expected in hex format instead of base64 (#2558)
- missing data in RPC server error logs in some cases (#2560)
- potential deadlock in consensus node before the dBFT process is started (#2567)
- dBFT update: ChangeView messages were not correctly transmitted in RecoveryResponse messages (#2569, nspcc-dev/dbft#60)
- dBFT update: ChangeView messages from newer views were not correctly processed by outdated node (#2573, nspcc-dev/dbft#61)
- RPC server restarts via SIGHUP could lead to server not starting at all in very rare case (#2582)
- inlined code couldn't have multiple
return
statements (#2594) - empty list of transactions is now returned instead of
null
ingetblock
RPC responses when block doesn't contain transactions, the same way C# node does (#2607) - candidate registration didn't invalidate committee cache leading to state differences for T5 testnet (#2615)
Overextrapolation
A big NeoGo upgrade that is made to be compatible with C# node version 3.3.0. All of the protocol changes are implemented there with the main one being the Aspidochelone hardfork that will happen on mainnet soon. Compatibility is confirmed for current T5 testnet and mainnet, but this version requires a resynchronization so schedule your updates accordingly.
But it's not just about the protocol changes, this release introduces an ability to perform historic invocations via RPC for nodes that store old MPT data. Using invokefunctionhistoric
you can perform some invocation with the chain state at the given height, retreiving old balances, ownership data or anything else you might be interested in.
Please also pay attention to configuration files used by your node, mainnet ones must have Aspidochelone hardfork enabled at height 1730000 to be compatible and T5 testnet enables it at height 210000. T5 testnet is different from T4, it uses different magic number, different seed nodes and different protocol configuration settings. 0.99.0 won't work for T4 testnet, please use 0.98.5 for it.
New features:
- new methods in native contracts:
- System.Runtime.GetAddressVersion syscall (#2443)
- StartWhenSynchronized option for RPC server (defaults to the old behaviour, #2445)
- historic RPC invocations (invokefunctionhistoric, invokescripthistoric and invokecontractverifyhistoric APIs, #2431)
- protocol hardforks, with Aspidochelone being the first supported (#2469, #2519, #2530, #2535)
- MODMUL and MODPOW VM instructions (#2474)
- ability to get connection closure error from WSClient (#2510)
- isolated contract calls with state rollback on exception (#2508)
- vote and candidate state change events in the NEO contract (#2523)
- immutable compound types in VM (#2525)
Behavior changes:
- ContractManagement deploy and update methods now require AllowCall flag (#2402)
- GetStorageItems* APIs are no longer available in dao package, use Seek* (#2414)
- committee candidates are now checked against the Policy contract block list (#2453)
- getCandidates NEO method returns no more than 256 results now (#2465)
- EQUAL checks are limited to 64K of data in VM now irrespective of the number of elements compared (#2467)
- Create[Standard/Multisig]Account prices were raised to avoid DoS attacks (#2469)
- System.Runtime.GetNotifications syscall costs 16 times more GAS now (#2513)
- System.Runtime.GetRandom syscall now costs more and uses more secure seed (#2519)
Improvements:
- better messages for some CLI commands (#2411, #2405, #2455)
- fixes and extensions for example contracts (#2408)
- better neotest documentation (#2408)
- internal tests now use neotest framework more extensively (#2393)
- neotest can now be used for benchmark code and has more multi-validator chain methods (#2393)
- big (>64 bit) integers can now be used for RPC calls (#2413)
- no error is logged now when notary-assisted transaction is already in the mempool (it's not an error, #2426)
- T5 testnet with more aggressive protocol parameters (#2457)
- destroyed contracts are blocked now (#2462)
- JSONization errors for invoke* RPCs are now returned in exception field of the answer (#2461)
- typos, grammar and spelling fixes in documentation, comments and messages (#2441, #2442)
- faster RPC client initialization (#2468)
- RPC processing errors use ERROR log severity now only if there is a server-side error occurred (2484)
- increased server-side websocket message limit to fit any request (#2507)
- invalid PrepareRequest now doesn't require other nodes to be alive to send ChangeView (#2512)
- updated YAML library dependency (#2527)
- notary subsystem compatibility fixes, using new IDs and options (#2380)
- minor performance improvements (#2531)
Bugs fixed:
- websocket-based RPCs were not counted in Prometheus metrics (#2404)
- input data escaping missing for RPC log messages (#2404)
- compiler panic in notification checking code (#2408)
- missing 'hash' field in the debug data (#2427)
- debug data used relative paths that are not compatible with neo-debugger (#2427)
- getversion RPC method wasn't compatible with C# implementation (#2435, #2448)
- old BaseExecFee and StoragePrice values could be used by transactions in the same block with transactions that change any of them (#2432)
- context initialization race in dbft (#2439)
- some stateroot data functions used incorrect keys in the DB (#2446)
- voter reward data could not be deleted in NEO contract in some cases (#2454)
- the maximum number of HTTPS oracle redirections is limited to 2 (and only using HTTPS) for C# compatibility (#2456, #2389)
- maximum number of contract updates wasn't limited leading to overflow (#2462)
- incorrect interop signature for getCandidates NEO contract method (#2465)
- next instruction validitiy check is performed now before instruction pointer move to be compatible with C# implementation (#2475)
- concurrent map access in Seek leading to panic (#2495, #2499)
- insecure password reads (#2480)
- minor VM reference counting fixes (#2498, #2502, #2525)
- panic during serialization of transaction with empty script (#2485)
- 'exception' field was missing in the invoke* RPC call output when there is no exception which differed from C# node behaviour (#2514)
- interop interfaces used incompatible (wrt C# node) type string in JSON (#2515)
- minor genesis block state differences wrt C# implementation (#2532)
- incompatible (wrt C#) method offset check (#2532)
Neutralization
An urgent update to fix the same security issue that was fixed in 3.1.0.1 C# node release. Please upgrade as soon as possible, resynchronization is not needed for mainnet.
Bugs fixed:
- GAS emission now happens after NEO transfer is finished (#2488)
Mesmerization
An urgent release to fix incompatibility with mainnet at block 1528989. The actual pair of problems leading to inability to process this block occurred earilier than that, so to fix this you need to resynchronize your node. Fixed node is confirmed to have identical state as 3.1.0 C# node up to block 1529810.
Bugs fixed: