forked from TrueCloudLab/frostfs-contract
[#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 <alexey@nspcc.ru>
This commit is contained in:
parent
086b4c632c
commit
e850d4fc78
3 changed files with 2 additions and 149 deletions
13
common/ir.go
13
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 {
|
||||
|
|
109
common/vote.go
109
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)
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue