diff --git a/go.mod b/go.mod index b0296ed26..ab267f25a 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,6 @@ module github.com/nspcc-dev/neo-go require ( 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/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 github.com/google/uuid v1.2.0 diff --git a/go.sum b/go.sum index 16af10655..41edc8073 100644 --- a/go.sum +++ b/go.sum @@ -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-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= 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/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= diff --git a/pkg/neorpc/result/version.go b/pkg/neorpc/result/version.go index cbcde6aed..39e792b06 100644 --- a/pkg/neorpc/result/version.go +++ b/pkg/neorpc/result/version.go @@ -2,11 +2,7 @@ package result import ( "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/encoding/fixedn" ) @@ -75,39 +71,8 @@ type ( StateRootInHeader bool `json:"staterootinheader,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. func (v *Version) MarshalJSON() ([]byte, error) { aux := versionMarshallerAux{ @@ -137,7 +102,7 @@ func (v *Version) MarshalJSON() ([]byte, error) { // UnmarshalJSON implements the json unmarshaller interface. func (v *Version) UnmarshalJSON(data []byte) error { - var aux versionUnmarshallerAux + var aux versionMarshallerAux err := json.Unmarshal(data, &aux) if err != nil { return err @@ -158,36 +123,7 @@ func (v *Version) UnmarshalJSON(data []byte) error { v.Protocol.P2PSigExtensions = aux.Protocol.P2PSigExtensions v.Protocol.StateRootInHeader = aux.Protocol.StateRootInHeader v.Protocol.ValidatorsHistory = aux.Protocol.ValidatorsHistory - if len(aux.Protocol.InitialGasDistribution) == 0 { - 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) + v.Protocol.InitialGasDistribution = fixedn.Fixed8(aux.Protocol.InitialGasDistribution) 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 -} diff --git a/pkg/neorpc/result/version_test.go b/pkg/neorpc/result/version_test.go index 04ae74db9..d0388cca0 100644 --- a/pkg/neorpc/result/version_test.go +++ b/pkg/neorpc/result/version_test.go @@ -89,11 +89,7 @@ func TestVersion_MarshalUnmarshalJSON(t *testing.T) { t.Run("Go node response", func(t *testing.T) { t.Run("old RPC server", func(t *testing.T) { actual := &Version{} - require.NoError(t, json.Unmarshal([]byte(responseFromGoOld), actual)) - expected := new(Version) - *expected = *v - expected.UserAgent = "/NEO-GO:0.98.2/" - require.Equal(t, expected, actual) + require.Error(t, json.Unmarshal([]byte(responseFromGoOld), actual)) }) t.Run("new RPC server", func(t *testing.T) { 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) - } - } -}