native: don't register standby validators on initialization

C# doesn't do that since neo-project/neo#1762.
This commit is contained in:
Roman Khimov 2020-08-10 17:51:46 +03:00
parent 6e252fbaae
commit fb97ea9458
4 changed files with 9 additions and 25 deletions

View file

@ -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 {

View file

@ -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
}

View file

@ -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]))

View file

@ -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": {