result: drop pre-0.99.0 compatibility code

0.99.0 is too old already.
This commit is contained in:
Roman Khimov 2022-11-10 16:49:38 +03:00
parent 7f8a79ffaa
commit 8324a247d3
4 changed files with 3 additions and 100 deletions

1
go.mod
View file

@ -2,7 +2,6 @@ module github.com/nspcc-dev/neo-go
require ( require (
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e
github.com/coreos/go-semver v0.3.0
github.com/davecgh/go-spew v1.1.1 github.com/davecgh/go-spew v1.1.1
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1
github.com/google/uuid v1.2.0 github.com/google/uuid v1.2.0

2
go.sum
View file

@ -84,8 +84,6 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=

View file

@ -2,11 +2,7 @@ package result
import ( import (
"encoding/json" "encoding/json"
"fmt"
"strings"
"github.com/coreos/go-semver/semver"
"github.com/nspcc-dev/neo-go/pkg/config"
"github.com/nspcc-dev/neo-go/pkg/config/netmode" "github.com/nspcc-dev/neo-go/pkg/config/netmode"
"github.com/nspcc-dev/neo-go/pkg/encoding/fixedn" "github.com/nspcc-dev/neo-go/pkg/encoding/fixedn"
) )
@ -75,39 +71,8 @@ type (
StateRootInHeader bool `json:"staterootinheader,omitempty"` StateRootInHeader bool `json:"staterootinheader,omitempty"`
ValidatorsHistory map[uint32]int `json:"validatorshistory,omitempty"` ValidatorsHistory map[uint32]int `json:"validatorshistory,omitempty"`
} }
// versionUnmarshallerAux is an auxiliary struct used for Version JSON unmarshalling.
versionUnmarshallerAux struct {
TCPPort uint16 `json:"tcpport"`
WSPort uint16 `json:"wsport,omitempty"`
Nonce uint32 `json:"nonce"`
UserAgent string `json:"useragent"`
Protocol protocolUnmarshallerAux `json:"protocol"`
}
// protocolUnmarshallerAux is an auxiliary struct used for Protocol JSON unmarshalling.
protocolUnmarshallerAux struct {
AddressVersion byte `json:"addressversion"`
Network netmode.Magic `json:"network"`
MillisecondsPerBlock int `json:"msperblock"`
MaxTraceableBlocks uint32 `json:"maxtraceableblocks"`
MaxValidUntilBlockIncrement uint32 `json:"maxvaliduntilblockincrement"`
MaxTransactionsPerBlock uint16 `json:"maxtransactionsperblock"`
MemoryPoolMaxTransactions int `json:"memorypoolmaxtransactions"`
ValidatorsCount byte `json:"validatorscount"`
InitialGasDistribution json.RawMessage `json:"initialgasdistribution"`
CommitteeHistory map[uint32]int `json:"committeehistory,omitempty"`
P2PSigExtensions bool `json:"p2psigextensions,omitempty"`
StateRootInHeader bool `json:"staterootinheader,omitempty"`
ValidatorsHistory map[uint32]int `json:"validatorshistory,omitempty"`
}
) )
// latestNonBreakingVersion is a latest NeoGo revision that keeps older RPC
// clients compatibility with newer RPC servers (https://github.com/nspcc-dev/neo-go/pull/2435).
var latestNonBreakingVersion = *semver.New("0.98.5")
// MarshalJSON implements the json marshaller interface. // MarshalJSON implements the json marshaller interface.
func (v *Version) MarshalJSON() ([]byte, error) { func (v *Version) MarshalJSON() ([]byte, error) {
aux := versionMarshallerAux{ aux := versionMarshallerAux{
@ -137,7 +102,7 @@ func (v *Version) MarshalJSON() ([]byte, error) {
// UnmarshalJSON implements the json unmarshaller interface. // UnmarshalJSON implements the json unmarshaller interface.
func (v *Version) UnmarshalJSON(data []byte) error { func (v *Version) UnmarshalJSON(data []byte) error {
var aux versionUnmarshallerAux var aux versionMarshallerAux
err := json.Unmarshal(data, &aux) err := json.Unmarshal(data, &aux)
if err != nil { if err != nil {
return err return err
@ -158,36 +123,7 @@ func (v *Version) UnmarshalJSON(data []byte) error {
v.Protocol.P2PSigExtensions = aux.Protocol.P2PSigExtensions v.Protocol.P2PSigExtensions = aux.Protocol.P2PSigExtensions
v.Protocol.StateRootInHeader = aux.Protocol.StateRootInHeader v.Protocol.StateRootInHeader = aux.Protocol.StateRootInHeader
v.Protocol.ValidatorsHistory = aux.Protocol.ValidatorsHistory v.Protocol.ValidatorsHistory = aux.Protocol.ValidatorsHistory
if len(aux.Protocol.InitialGasDistribution) == 0 { v.Protocol.InitialGasDistribution = fixedn.Fixed8(aux.Protocol.InitialGasDistribution)
return nil
}
if strings.HasPrefix(v.UserAgent, config.UserAgentWrapper+config.UserAgentPrefix) {
ver, err := userAgentToVersion(v.UserAgent)
if err == nil && ver.Compare(latestNonBreakingVersion) <= 0 {
err := json.Unmarshal(aux.Protocol.InitialGasDistribution, &v.Protocol.InitialGasDistribution)
if err != nil {
return fmt.Errorf("failed to unmarshal InitialGASDistribution into fixed8: %w", err)
}
return nil
}
}
var val int64
err = json.Unmarshal(aux.Protocol.InitialGasDistribution, &val)
if err != nil {
return fmt.Errorf("failed to unmarshal InitialGASDistribution into int64: %w", err)
}
v.Protocol.InitialGasDistribution = fixedn.Fixed8(val)
return nil return nil
} }
func userAgentToVersion(userAgent string) (*semver.Version, error) {
verStr := strings.Trim(userAgent, config.UserAgentWrapper)
verStr = strings.TrimPrefix(verStr, config.UserAgentPrefix)
ver, err := semver.NewVersion(verStr)
if err != nil {
return nil, fmt.Errorf("can't retrieve neo-go version from UserAgent: %w", err)
}
return ver, nil
}

View file

@ -89,11 +89,7 @@ func TestVersion_MarshalUnmarshalJSON(t *testing.T) {
t.Run("Go node response", func(t *testing.T) { t.Run("Go node response", func(t *testing.T) {
t.Run("old RPC server", func(t *testing.T) { t.Run("old RPC server", func(t *testing.T) {
actual := &Version{} actual := &Version{}
require.NoError(t, json.Unmarshal([]byte(responseFromGoOld), actual)) require.Error(t, json.Unmarshal([]byte(responseFromGoOld), actual))
expected := new(Version)
*expected = *v
expected.UserAgent = "/NEO-GO:0.98.2/"
require.Equal(t, expected, actual)
}) })
t.Run("new RPC server", func(t *testing.T) { t.Run("new RPC server", func(t *testing.T) {
actual := &Version{} actual := &Version{}
@ -111,29 +107,3 @@ func TestVersion_MarshalUnmarshalJSON(t *testing.T) {
}) })
}) })
} }
func TestVersionFromUserAgent(t *testing.T) {
type testCase struct {
success bool
cmpWithBreaking int
}
var testcases = map[string]testCase{
"/Neo:3.1.0/": {success: false},
"/NEO-GO:0.98.7": {success: true, cmpWithBreaking: 1},
"/NEO-GO:0.98.7-pre-12344/": {success: true, cmpWithBreaking: 1},
"/NEO-GO:0.98.6/": {success: true, cmpWithBreaking: 1},
"/NEO-GO:0.98.6-pre-123/": {success: true, cmpWithBreaking: 1},
"/NEO-GO:0.98.5/": {success: true, cmpWithBreaking: 0},
"/NEO-GO:0.98.5-pre-12345/": {success: true, cmpWithBreaking: -1},
"/NEO-GO:123456": {success: false},
}
for str, tc := range testcases {
ver, err := userAgentToVersion(str)
if tc.success {
require.NoError(t, err)
require.Equal(t, ver.Compare(latestNonBreakingVersion), tc.cmpWithBreaking, str)
} else {
require.Error(t, err)
}
}
}