forked from TrueCloudLab/frostfs-contract
[#101] *: update storage after voting
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
4248424a44
commit
bf83ed9a4f
2 changed files with 47 additions and 49 deletions
|
@ -95,6 +95,12 @@ func AddKey(owner []byte, keys []interop.PublicKey) {
|
||||||
panic("incorrect owner")
|
panic("incorrect owner")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for i := range keys {
|
||||||
|
if len(keys[i]) != interop.PublicKeyCompressedLen {
|
||||||
|
panic("incorrect public key")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ctx := storage.GetContext()
|
ctx := storage.GetContext()
|
||||||
notaryDisabled := storage.Get(ctx, notaryDisabledKey).(bool)
|
notaryDisabled := storage.Get(ctx, notaryDisabledKey).(bool)
|
||||||
|
|
||||||
|
@ -114,37 +120,30 @@ func AddKey(owner []byte, keys []interop.PublicKey) {
|
||||||
indirectCall = common.FromKnownContract(
|
indirectCall = common.FromKnownContract(
|
||||||
ctx,
|
ctx,
|
||||||
runtime.GetCallingScriptHash(),
|
runtime.GetCallingScriptHash(),
|
||||||
containerContractKey,
|
containerContractKey)
|
||||||
)
|
|
||||||
|
if indirectCall {
|
||||||
|
threshold := len(alphabet)*2/3 + 1
|
||||||
|
id := invokeIDKeys(owner, keys, []byte("add"))
|
||||||
|
|
||||||
|
n := common.Vote(ctx, id, nodeKey)
|
||||||
|
if n < threshold {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
common.RemoveVotes(ctx, id)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
multiaddr := common.AlphabetAddress()
|
multiaddr := common.AlphabetAddress()
|
||||||
common.CheckAlphabetWitness(multiaddr)
|
common.CheckAlphabetWitness(multiaddr)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := range keys {
|
|
||||||
if len(keys[i]) != interop.PublicKeyCompressedLen {
|
|
||||||
panic("incorrect public key")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ownerKey := append([]byte{ownerKeysPrefix}, owner...)
|
ownerKey := append([]byte{ownerKeysPrefix}, owner...)
|
||||||
for i := range keys {
|
for i := range keys {
|
||||||
stKey := append(ownerKey, keys[i]...)
|
stKey := append(ownerKey, keys[i]...)
|
||||||
storage.Put(ctx, stKey, []byte{1})
|
storage.Put(ctx, stKey, []byte{1})
|
||||||
}
|
}
|
||||||
|
|
||||||
if notaryDisabled && !indirectCall {
|
|
||||||
threshold := len(alphabet)*2/3 + 1
|
|
||||||
id := invokeIDKeys(owner, keys, []byte("add"))
|
|
||||||
|
|
||||||
n := common.Vote(ctx, id, nodeKey)
|
|
||||||
if n < threshold {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
common.RemoveVotes(ctx, id)
|
|
||||||
}
|
|
||||||
|
|
||||||
runtime.Log("key bound to the owner")
|
runtime.Log("key bound to the owner")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,6 +158,12 @@ func RemoveKey(owner []byte, keys []interop.PublicKey) {
|
||||||
panic("incorrect owner")
|
panic("incorrect owner")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for i := range keys {
|
||||||
|
if len(keys[i]) != interop.PublicKeyCompressedLen {
|
||||||
|
panic("incorrect public key")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ctx := storage.GetContext()
|
ctx := storage.GetContext()
|
||||||
notaryDisabled := storage.Get(ctx, notaryDisabledKey).(bool)
|
notaryDisabled := storage.Get(ctx, notaryDisabledKey).(bool)
|
||||||
|
|
||||||
|
@ -173,24 +178,7 @@ func RemoveKey(owner []byte, keys []interop.PublicKey) {
|
||||||
if len(nodeKey) == 0 {
|
if len(nodeKey) == 0 {
|
||||||
panic("invocation from non inner ring node")
|
panic("invocation from non inner ring node")
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
multiaddr := common.AlphabetAddress()
|
|
||||||
common.CheckAlphabetWitness(multiaddr)
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := range keys {
|
|
||||||
if len(keys[i]) != interop.PublicKeyCompressedLen {
|
|
||||||
panic("incorrect public key")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ownerKey := append([]byte{ownerKeysPrefix}, owner...)
|
|
||||||
for i := range keys {
|
|
||||||
stKey := append(ownerKey, keys[i]...)
|
|
||||||
storage.Delete(ctx, stKey)
|
|
||||||
}
|
|
||||||
|
|
||||||
if notaryDisabled {
|
|
||||||
threshold := len(alphabet)*2/3 + 1
|
threshold := len(alphabet)*2/3 + 1
|
||||||
id := invokeIDKeys(owner, keys, []byte("remove"))
|
id := invokeIDKeys(owner, keys, []byte("remove"))
|
||||||
|
|
||||||
|
@ -200,6 +188,17 @@ func RemoveKey(owner []byte, keys []interop.PublicKey) {
|
||||||
}
|
}
|
||||||
|
|
||||||
common.RemoveVotes(ctx, id)
|
common.RemoveVotes(ctx, id)
|
||||||
|
} else {
|
||||||
|
multiaddr := common.AlphabetAddress()
|
||||||
|
if !runtime.CheckWitness(multiaddr) {
|
||||||
|
panic("invocation from non inner ring node")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ownerKey := append([]byte{ownerKeysPrefix}, owner...)
|
||||||
|
for i := range keys {
|
||||||
|
stKey := append(ownerKey, keys[i]...)
|
||||||
|
storage.Delete(ctx, stKey)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -100,8 +100,18 @@ func Put(epoch int, peerID []byte, value []byte) {
|
||||||
}
|
}
|
||||||
|
|
||||||
id := storageID(epoch, peerID)
|
id := storageID(epoch, peerID)
|
||||||
key := getReputationKey(reputationCountPrefix, id)
|
if notaryDisabled {
|
||||||
|
threshold := len(alphabet)*2/3 + 1
|
||||||
|
|
||||||
|
n := common.Vote(ctx, id, nodeKey)
|
||||||
|
if n < threshold {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
common.RemoveVotes(ctx, id)
|
||||||
|
}
|
||||||
|
|
||||||
|
key := getReputationKey(reputationCountPrefix, id)
|
||||||
rawCnt := storage.Get(ctx, key)
|
rawCnt := storage.Get(ctx, key)
|
||||||
cnt := 0
|
cnt := 0
|
||||||
if rawCnt != nil {
|
if rawCnt != nil {
|
||||||
|
@ -113,17 +123,6 @@ func Put(epoch int, peerID []byte, value []byte) {
|
||||||
key[0] = reputationValuePrefix
|
key[0] = reputationValuePrefix
|
||||||
key = append(key, convert.ToBytes(cnt)...)
|
key = append(key, convert.ToBytes(cnt)...)
|
||||||
storage.Put(ctx, key, value)
|
storage.Put(ctx, key, value)
|
||||||
|
|
||||||
if notaryDisabled {
|
|
||||||
threshold := len(alphabet)*2/3 + 1
|
|
||||||
|
|
||||||
n := common.Vote(ctx, id, nodeKey)
|
|
||||||
if n < threshold {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
common.RemoveVotes(ctx, id)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get method returns list of all stable marshaled DataAuditResult structures
|
// Get method returns list of all stable marshaled DataAuditResult structures
|
||||||
|
|
Loading…
Reference in a new issue