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 {