From 41956032579e59465b99dacf7ab1768da71860e9 Mon Sep 17 00:00:00 2001 From: Evgeniy Stratonikov Date: Fri, 5 Mar 2021 13:13:31 +0300 Subject: [PATCH] native: add `NeoFSAlphabet` node role --- pkg/core/native/designate.go | 12 ++++++++++-- pkg/core/native_designate_test.go | 8 ++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/pkg/core/native/designate.go b/pkg/core/native/designate.go index 490376e92..385faaee3 100644 --- a/pkg/core/native/designate.go +++ b/pkg/core/native/designate.go @@ -31,6 +31,7 @@ type Designate struct { rolesChangedFlag atomic.Value oracles atomic.Value stateVals atomic.Value + neofsAlphabet atomic.Value notaries atomic.Value // p2pSigExtensionsEnabled defines whether the P2P signature extensions logic is relevant. @@ -61,6 +62,7 @@ type Role byte const ( RoleStateValidator Role = 4 RoleOracle Role = 8 + RoleNeoFSAlphabet Role = 16 RoleP2PNotary Role = 128 ) @@ -75,7 +77,8 @@ var ( ) func (s *Designate) isValidRole(r Role) bool { - return r == RoleOracle || r == RoleStateValidator || (s.p2pSigExtensionsEnabled && r == RoleP2PNotary) + return r == RoleOracle || r == RoleStateValidator || + r == RoleNeoFSAlphabet || (s.p2pSigExtensionsEnabled && r == RoleP2PNotary) } func newDesignate(p2pSigExtensionsEnabled bool) *Designate { @@ -120,6 +123,9 @@ func (s *Designate) PostPersist(ic *interop.Context) error { if err := s.updateCachedRoleData(&s.stateVals, ic.DAO, RoleStateValidator); err != nil { return err } + if err := s.updateCachedRoleData(&s.neofsAlphabet, ic.DAO, RoleNeoFSAlphabet); err != nil { + return err + } if s.p2pSigExtensionsEnabled { if err := s.updateCachedRoleData(&s.notaries, ic.DAO, RoleP2PNotary); err != nil { return err @@ -166,7 +172,7 @@ func (s *Designate) hashFromNodes(r Role, nodes keys.PublicKeys) util.Uint160 { } var script []byte switch r { - case RoleOracle: + case RoleOracle, RoleNeoFSAlphabet: script, _ = smartcontract.CreateDefaultMultiSigRedeemScript(nodes.Copy()) case RoleP2PNotary: script, _ = smartcontract.CreateMultiSigRedeemScript(1, nodes.Copy()) @@ -206,6 +212,8 @@ func (s *Designate) getCachedRoleData(r Role) *roleData { val = s.oracles.Load() case RoleStateValidator: val = s.stateVals.Load() + case RoleNeoFSAlphabet: + val = s.neofsAlphabet.Load() case RoleP2PNotary: val = s.notaries.Load() } diff --git a/pkg/core/native_designate_test.go b/pkg/core/native_designate_test.go index aabce2a99..8e85e74c5 100644 --- a/pkg/core/native_designate_test.go +++ b/pkg/core/native_designate_test.go @@ -99,6 +99,14 @@ func TestDesignate_DesignateAsRoleTx(t *testing.T) { bc.setNodesByRole(t, true, native.RoleStateValidator, pubs) bc.getNodesByRole(t, true, native.RoleStateValidator, bc.BlockHeight()+1, 1) + t.Run("neofs", func(t *testing.T) { + priv, err := keys.NewPrivateKey() + require.NoError(t, err) + pubs = keys.PublicKeys{priv.PublicKey()} + bc.setNodesByRole(t, true, native.RoleNeoFSAlphabet, pubs) + bc.getNodesByRole(t, true, native.RoleNeoFSAlphabet, bc.BlockHeight()+1, 1) + }) + } func TestDesignate_DesignateAsRole(t *testing.T) {