From fb97ea94584170eaa7736a5887a54a23997ddefa Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Mon, 10 Aug 2020 17:51:46 +0300 Subject: [PATCH] native: don't register standby validators on initialization C# doesn't do that since neo-project/neo#1762. --- pkg/core/native/native_gas.go | 9 ++++----- pkg/core/native/native_neo.go | 8 +------- pkg/core/native_neo_test.go | 15 ++------------- pkg/rpc/server/server_test.go | 2 ++ 4 files changed, 9 insertions(+), 25 deletions(-) diff --git a/pkg/core/native/native_gas.go b/pkg/core/native/native_gas.go index add761dc4..75b158e8e 100644 --- a/pkg/core/native/native_gas.go +++ b/pkg/core/native/native_gas.go @@ -8,7 +8,6 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/interop" "github.com/nspcc-dev/neo-go/pkg/core/state" "github.com/nspcc-dev/neo-go/pkg/crypto/hash" - "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/smartcontract" "github.com/nspcc-dev/neo-go/pkg/util" ) @@ -73,7 +72,7 @@ func (g *GAS) Initialize(ic *interop.Context) error { if g.nep5TokenNative.getTotalSupply(ic.DAO).Sign() != 0 { return errors.New("already initialized") } - h, _, err := getStandbyValidatorsHash(ic) + h, err := getStandbyValidatorsHash(ic) if err != nil { return err } @@ -103,13 +102,13 @@ func (g *GAS) OnPersist(ic *interop.Context) error { return nil } -func getStandbyValidatorsHash(ic *interop.Context) (util.Uint160, []*keys.PublicKey, error) { +func getStandbyValidatorsHash(ic *interop.Context) (util.Uint160, error) { vs := ic.Chain.GetStandByValidators() s, err := smartcontract.CreateMultiSigRedeemScript(len(vs)/2+1, vs) if err != nil { - return util.Uint160{}, nil, err + return util.Uint160{}, err } - return hash.Hash160(s), vs, nil + return hash.Hash160(s), nil } func chainOnPersist(fs ...func(*interop.Context) error) func(*interop.Context) error { diff --git a/pkg/core/native/native_neo.go b/pkg/core/native/native_neo.go index 43253bcaa..66430b673 100644 --- a/pkg/core/native/native_neo.go +++ b/pkg/core/native/native_neo.go @@ -136,7 +136,7 @@ func (n *NEO) Initialize(ic *interop.Context) error { return errors.New("already initialized") } - h, vs, err := getStandbyValidatorsHash(ic) + h, err := getStandbyValidatorsHash(ic) if err != nil { return err } @@ -147,12 +147,6 @@ func (n *NEO) Initialize(ic *interop.Context) error { return err } - for i := range vs { - if err := n.RegisterCandidateInternal(ic, vs[i]); err != nil { - return err - } - } - return nil } diff --git a/pkg/core/native_neo_test.go b/pkg/core/native_neo_test.go index 71df775e0..250c9195f 100644 --- a/pkg/core/native_neo_test.go +++ b/pkg/core/native_neo_test.go @@ -62,21 +62,10 @@ func TestNEO_Vote(t *testing.T) { require.NoError(t, neo.VoteInternal(ic, h, candidates[i])) } - // First 3 validators must be the ones we have voted for. + // We still haven't voted enough validators in. pubs, err = neo.GetValidatorsInternal(bc, ic.DAO) require.NoError(t, err) - for i := 1; i < sz; i++ { - require.Equal(t, pubs[i-1], candidates[i]) - } - - var ok bool - for _, p := range bc.GetStandByValidators() { - if pubs[sz-1].Equal(p) { - ok = true - break - } - } - require.True(t, ok, "last validator must be stand by") + require.Equal(t, bc.GetStandByValidators(), pubs) // Register and give some value to the last validator. require.NoError(t, neo.RegisterCandidateInternal(ic, candidates[0])) diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 8c45b8ac4..18ea335fe 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -451,6 +451,7 @@ var rpcTestCases = map[string][]rpcTestCase{ result: func(*executor) interface{} { return &[]result.Validator{} }, + /* preview3 doesn't return any validators until there is a vote check: func(t *testing.T, e *executor, validators interface{}) { var expected []result.Validator sBValidators := e.chain.GetStandByValidators() @@ -467,6 +468,7 @@ var rpcTestCases = map[string][]rpcTestCase{ assert.ElementsMatch(t, expected, *actual) }, + */ }, }, "getversion": {