From e850d4fc78f9f2005b6dd1088f7548fd75e520b9 Mon Sep 17 00:00:00 2001 From: Alex Vanin Date: Tue, 20 Apr 2021 17:34:48 +0300 Subject: [PATCH] [#74] neofs: Remove unused code All ballots and voting methods are gone. Multi signature checks are used in all contracts. Default global config values are also removed. Configuration must be provided by initialization script. Signed-off-by: Alex Vanin --- common/ir.go | 13 ----- common/vote.go | 109 ---------------------------------------- neofs/neofs_contract.go | 29 +---------- 3 files changed, 2 insertions(+), 149 deletions(-) diff --git a/common/ir.go b/common/ir.go index 73002ab..cdb9a14 100644 --- a/common/ir.go +++ b/common/ir.go @@ -6,25 +6,12 @@ import ( "github.com/nspcc-dev/neo-go/pkg/interop/native/ledger" "github.com/nspcc-dev/neo-go/pkg/interop/native/neo" "github.com/nspcc-dev/neo-go/pkg/interop/native/roles" - "github.com/nspcc-dev/neo-go/pkg/interop/runtime" ) type IRNode struct { PublicKey interop.PublicKey } -// InnerRingInvoker returns public key of inner ring node that invoked contract. -func InnerRingInvoker(ir []IRNode) interop.PublicKey { - for i := 0; i < len(ir); i++ { - node := ir[i] - if runtime.CheckWitness(node.PublicKey) { - return node.PublicKey - } - } - - return nil -} - // InnerRingNodes return list of inner ring nodes from state validator role // in side chain. func InnerRingNodes() []IRNode { diff --git a/common/vote.go b/common/vote.go index 309da2a..4dad794 100644 --- a/common/vote.go +++ b/common/vote.go @@ -1,120 +1,11 @@ package common import ( - "github.com/nspcc-dev/neo-go/pkg/interop" - "github.com/nspcc-dev/neo-go/pkg/interop/native/crypto" - "github.com/nspcc-dev/neo-go/pkg/interop/native/ledger" - "github.com/nspcc-dev/neo-go/pkg/interop/native/std" - "github.com/nspcc-dev/neo-go/pkg/interop/storage" "github.com/nspcc-dev/neo-go/pkg/interop/util" ) -type Ballot struct { - // ID of the voting decision. - ID []byte - - // Public keys of already voted inner ring nodes. - Voters []interop.PublicKey - - // Height of block with the last vote. - Height int -} - -const voteKey = "ballots" - -const blockDiff = 20 // change base on performance evaluation - -func InitVote(ctx storage.Context) { - SetSerialized(ctx, voteKey, []Ballot{}) -} - -// Vote adds ballot for the decision with specific 'id' and returns amount -// on unique voters for that decision. -func Vote(ctx storage.Context, id, from []byte) int { - var ( - newCandidates []Ballot - candidates = getBallots(ctx) - found = -1 - blockHeight = ledger.CurrentIndex() - ) - - for i := 0; i < len(candidates); i++ { - cnd := candidates[i] - - if blockHeight-cnd.Height > blockDiff { - continue - } - - if BytesEqual(cnd.ID, id) { - voters := cnd.Voters - - for j := range voters { - if BytesEqual(voters[j], from) { - return len(voters) - } - } - - voters = append(voters, from) - cnd = Ballot{ID: id, Voters: voters, Height: blockHeight} - found = len(voters) - } - - newCandidates = append(newCandidates, cnd) - } - - if found < 0 { - voters := []interop.PublicKey{from} - newCandidates = append(newCandidates, Ballot{ - ID: id, - Voters: voters, - Height: blockHeight}) - found = 1 - } - - SetSerialized(ctx, voteKey, newCandidates) - - return found -} - -// RemoveVotes clears ballots of the decision that has been accepted by -// inner ring nodes. -func RemoveVotes(ctx storage.Context, id []byte) { - var ( - newCandidates []Ballot - candidates = getBallots(ctx) - ) - - for i := 0; i < len(candidates); i++ { - cnd := candidates[i] - if !BytesEqual(cnd.ID, id) { - newCandidates = append(newCandidates, cnd) - } - } - - SetSerialized(ctx, voteKey, newCandidates) -} - -// getBallots returns deserialized slice of vote ballots. -func getBallots(ctx storage.Context) []Ballot { - data := storage.Get(ctx, voteKey) - if data != nil { - return std.Deserialize(data.([]byte)).([]Ballot) - } - - return []Ballot{} -} - // BytesEqual compares two slice of bytes by wrapping them into strings, // which is necessary with new util.Equal interop behaviour, see neo-go#1176. func BytesEqual(a []byte, b []byte) bool { return util.Equals(string(a), string(b)) } - -func InvokeID(args []interface{}, prefix []byte) []byte { - for i := range args { - arg := args[i].([]byte) - prefix = append(prefix, arg...) - } - - return crypto.Sha256(prefix) -} diff --git a/neofs/neofs_contract.go b/neofs/neofs_contract.go index d1d01ea..9f9bb08 100644 --- a/neofs/neofs_contract.go +++ b/neofs/neofs_contract.go @@ -52,14 +52,12 @@ type ( ) const ( - defaultCandidateFee = 100 * 1_0000_0000 // 100 Fixed8 Gas candidateFeeConfigKey = "InnerRingCandidateFee" version = 3 - alphabetKey = "alphabet" - candidatesKey = "candidates" - cashedChequesKey = "cheques" + alphabetKey = "alphabet" + candidatesKey = "candidates" publicKeySize = 33 @@ -416,8 +414,6 @@ func InitConfig(args [][]byte) bool { panic("initConfig: bad arguments") } - setConfig(ctx, candidateFeeConfigKey, defaultCandidateFee) - for i := 0; i < ln/2; i++ { key := args[i*2] val := args[i*2+1] @@ -475,27 +471,6 @@ func addNode(lst []common.IRNode, n common.IRNode) ([]common.IRNode, bool) { return lst, true } -// rmNodeByKey returns slice of nodes without node with key 'k', -// slices of nodes 'add' with node with key 'k' and bool flag, -// that set to false if node with a key 'k' does not exists in the slice 'lst'. -func rmNodeByKey(lst, add []common.IRNode, k []byte) ([]common.IRNode, []common.IRNode, bool) { - var ( - flag bool - newLst = []common.IRNode{} // it is explicit declaration of empty slice, not nil - ) - - for i := 0; i < len(lst); i++ { - if common.BytesEqual(k, lst[i].PublicKey) { - add = append(add, lst[i]) - flag = true - } else { - newLst = append(newLst, lst[i]) - } - } - - return newLst, add, flag -} - // multiaddress returns multi signature address from list of IRNode structures // with m = 2/3n+1. func multiaddress(n []common.IRNode) []byte {