rpc: support InitialGasDistribution response from old Neo-Go nodes

https://github.com/nspcc-dev/neo-go/pull/2435 breaks compatibility
between newer RPC clients and older RPC servers with the following
error:
```
failed to get network magic: json: cannot unmarshal string into Go struct field Protocol.protocol.initialgasdistribution of type int64
```

This behaviour is expected, but we can't allow this radical change.
Thus, the following solution is implemented:
1. RPC server responds with proper non-stringified
   InitialGasDistribution value. The value represents an integral
   of fixed8 multiplied by the decimals.
2. RPC client is able to distinguish older and newer responses. For
   older one the stringified value without decimals part is
   expected. For newer responses the int64 value with decimal part
   is expected.

The cludge will be present in the code for a while until nodes of
version <=0.98.3 become completely absolete.
This commit is contained in:
Anna Shaleva 2022-04-26 12:32:06 +03:00
parent c042c5bb63
commit 9862b40f2c
9 changed files with 316 additions and 14 deletions

View file

@ -536,7 +536,7 @@ func (s *Server) getVersion(_ request.Params) (interface{}, *response.Error) {
}
cfg := s.chain.GetConfig()
return result.Version{
return &result.Version{
Magic: s.network,
TCPPort: port,
Nonce: s.coreServer.ID(),