Neo SPCC has published an updated version of its Go node for RC3. The v0.95.2 update fixes state mismatches discovered on TestNet and adds a number of new tests and features.
The Neo blockchain uses Merkle Patricia trees to determine state correctness. MPT roots provide a useful tool for detecting unintended differences in behavior between different node implementations.
State differences can occur for a variety of reasons. Each node in the P2P network receives the same block, but the way the data is parsed or executed in its implementation of NeoVM could differ. In NeoGo’s case, the bugs responsible for incorrect state fell into the latter category: a missing price on the CALLT opcode leading to incorrect GAS calculations, lack of a balance check on NEO self-transfers, and differences in JSON handling with regard to the C# implementation all contributed to the errors.
Following the new update, NeoGo nodes are confirmed to have correct state against the core C# implementation for the full height of the N3 TestNet chain. Additional MPT tests included in the C# implementation have also been ported to ensure compatibility.
Another notable improvement is the extension of the RPC notification subsystem with subscriptions for the notary service events. Though not currently part of the core implementation, this protocol is useful for optimizing multisig transactions. The new feature allows NeoGo clients to react to new notary payloads.
Alongside node updates, the new release also provides additional compiler checks for notification events and runtime notify calls from the Verify method. Code generation improvements in the compiler also seek to optimize smart contracts by removing unnecessary storage use and type conversions.
The latest version of NeoGo can be downloaded at the following link: