neo-go/docs/stateroots.md
2021-04-07 21:42:26 +03:00

1.8 KiB

NeoGo state validation

NeoGo supports state validation using N3 stateroots and can also act as state validator (run state validation service).

All NeoGo nodes always calculate MPT root hash for data stored by contracts, unlike in Neo Legacy this behavior can't be turned off. They also process stateroot messages broadcasted through the network and save validated signatures from them if state root hash specified there matches the one signed by validators (or shouts loud in the log if it doesn't, because it should be the same).

State validation service

The service is configured as StateRoot subsection of ApplicationConfiguration section in your node config.

Parameters:

  • Enabled: boolean value, enables/disables the service, true for service to be enabled
  • UnlockWallet: service's wallet configuration:
    • Path: path to NEP-6 wallet.
    • Password: password for the account to be used by state validation node.

Example

  StateRoot:
    Enabled: true
    UnlockWallet:
      Path: "/path/to/stateroot.wallet.json"
      Password: "knowyouare"

Operation

To run state validation service on your network you need to:

  • set state validation node keys in RoleManagement contract
  • configure and run appropriate number of state validation nodes with keys specified in RoleManagement contract

StateRootInHeader option

NeoGo also supports protocol extension to include state root hashes right into header blocks. It's not compatible with regular Neo N3 state validation service and it's not compatible with public Neo N3 networks, but you can use it on private networks if there is a need to.

The option is StateRootInHeader and it's specified in ProtocolConfiguration section, set it to true and run your network with it (whole network needs to be configured this way then).