[#25] Use go aliases

Change []byte type to interop.*aliasName*
types in contracts where it is suitable to
improve the readability of the contracts.

Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
Pavel Karpy 2021-03-04 22:21:49 +03:00 committed by Leonard Lyubich
parent 91c2612d08
commit 508369be75
9 changed files with 41 additions and 40 deletions

View file

@ -80,7 +80,7 @@ func irList() []common.IRNode {
}
func currentEpoch() int {
netmapContractAddr := storage.Get(ctx, netmapKey).([]byte)
netmapContractAddr := storage.Get(ctx, netmapKey).(interop.Hash160)
return contract.Call(netmapContractAddr, "epoch", contract.ReadOnly).(int)
}
@ -143,7 +143,7 @@ func Emit() bool {
return true
}
func Vote(epoch int, candidates [][]byte) {
func Vote(epoch int, candidates []interop.PublicKey) {
index := index()
name := name()

View file

@ -64,7 +64,7 @@ func init() {
token = CreateToken()
}
func Init(owner interop.Hash160, addrNetmap, addrContainer []byte) {
func Init(owner, addrNetmap, addrContainer interop.Hash160) {
if !common.HasUpdateAccess(ctx) {
panic("only owner can reinitialize contract")
}
@ -162,7 +162,7 @@ func NewEpoch(epochNum int) bool {
it := storage.Find(ctx, []byte{}, storage.KeysOnly)
for iterator.Next(it) {
addr := iterator.Value(it).([]byte) // it MUST BE `storage.KeysOnly`
addr := iterator.Value(it).(interop.Hash160) // it MUST BE `storage.KeysOnly`
if len(addr) != 20 {
continue
}

View file

@ -13,11 +13,11 @@ const (
)
type IRNode struct {
PublicKey []byte
PublicKey interop.PublicKey
}
// InnerRingInvoker returns public key of inner ring node that invoked contract.
func InnerRingInvoker(ir []IRNode) []byte {
func InnerRingInvoker(ir []IRNode) interop.PublicKey {
for i := 0; i < len(ir); i++ {
node := ir[i]
if runtime.CheckWitness(node.PublicKey) {
@ -33,7 +33,7 @@ func InnerRingInvoker(ir []IRNode) []byte {
//
// Address of smart contract is received from storage by key.
func InnerRingListViaStorage(ctx storage.Context, key interface{}) []IRNode {
sc := storage.Get(ctx, key).([]byte)
sc := storage.Get(ctx, key).(interop.Hash160)
return InnerRingList(sc)
}
@ -47,7 +47,7 @@ func InnerRingList(sc interop.Hash160) []IRNode {
// keys by invoking netmap contract, which scripthash stored in the contract
// storage by the key `key`.
func InnerRingMultiAddressViaStorage(ctx storage.Context, key interface{}) []byte {
sc := storage.Get(ctx, key).([]byte)
sc := storage.Get(ctx, key).(interop.Hash160)
return InnerRingMultiAddress(sc)
}

View file

@ -1,6 +1,7 @@
package common
import (
"github.com/nspcc-dev/neo-go/pkg/interop"
"github.com/nspcc-dev/neo-go/pkg/interop/binary"
"github.com/nspcc-dev/neo-go/pkg/interop/crypto"
"github.com/nspcc-dev/neo-go/pkg/interop/native/ledger"
@ -13,7 +14,7 @@ type Ballot struct {
ID []byte
// Public keys of already voted inner ring nodes.
Voters [][]byte
Voters []interop.PublicKey
// Height of block with the last vote.
Height int
@ -62,7 +63,7 @@ func Vote(ctx storage.Context, id, from []byte) int {
}
if found < 0 {
voters := [][]byte{from}
voters := []interop.PublicKey{from}
newCandidates = append(newCandidates, Ballot{
ID: id,
Voters: voters,

View file

@ -60,7 +60,7 @@ func init() {
ctx = storage.GetContext()
}
func Init(owner interop.Hash160, addrNetmap, addrBalance, addrID []byte) {
func Init(owner, addrNetmap, addrBalance, addrID interop.Hash160) {
if !common.HasUpdateAccess(ctx) {
panic("only owner can reinitialize contract")
}
@ -89,18 +89,18 @@ func Migrate(script []byte, manifest []byte) bool {
return true
}
func Put(container, signature, publicKey []byte) bool {
func Put(container []byte, signature interop.Signature, publicKey interop.PublicKey) bool {
offset := int(container[1])
offset = 2 + offset + 4 // version prefix + version size + owner prefix
ownerID := container[offset : offset+25] // offset + size of owner
containerID := crypto.SHA256(container)
neofsIDContractAddr := storage.Get(ctx, neofsIDContractKey).([]byte)
neofsIDContractAddr := storage.Get(ctx, neofsIDContractKey).(interop.Hash160)
multiaddr := common.InnerRingMultiAddressViaStorage(ctx, netmapContractKey)
if !runtime.CheckWitness(multiaddr) {
if !isSignedByOwnerKey(container, signature, ownerID, publicKey) {
// check keys from NeoFSID
keys := contract.Call(neofsIDContractAddr, "key", contract.ReadOnly, ownerID).([][]byte)
keys := contract.Call(neofsIDContractAddr, "key", contract.ReadOnly, ownerID).([]interop.PublicKey)
if !verifySignature(container, signature, keys) {
panic("put: invalid owner signature")
}
@ -153,7 +153,7 @@ func Delete(containerID, signature []byte) bool {
if !runtime.CheckWitness(multiaddr) {
// check provided key
neofsIDContractAddr := storage.Get(ctx, neofsIDContractKey).([]byte)
keys := contract.Call(neofsIDContractAddr, "key", contract.ReadOnly, ownerID).([][]byte)
keys := contract.Call(neofsIDContractAddr, "key", contract.ReadOnly, ownerID).([]interop.PublicKey)
if !verifySignature(containerID, signature, keys) {
panic("delete: invalid owner signature")
@ -213,8 +213,8 @@ func SetEACL(eACL, signature []byte) bool {
panic("setEACL: container does not exists")
}
neofsIDContractAddr := storage.Get(ctx, neofsIDContractKey).([]byte)
keys := contract.Call(neofsIDContractAddr, "key", contract.ReadOnly, ownerID).([][]byte)
neofsIDContractAddr := storage.Get(ctx, neofsIDContractKey).(interop.Hash160)
keys := contract.Call(neofsIDContractAddr, "key", contract.ReadOnly, ownerID).([]interop.PublicKey)
if !verifySignature(eACL, signature, keys) {
panic("setEACL: invalid eACL signature")
@ -247,8 +247,8 @@ func EACL(containerID []byte) extendedACL {
// attach corresponding public key if it was not revoked from neofs id
neofsIDContractAddr := storage.Get(ctx, neofsIDContractKey).([]byte)
keys := contract.Call(neofsIDContractAddr, "key", contract.ReadOnly, ownerID).([][]byte)
neofsIDContractAddr := storage.Get(ctx, neofsIDContractKey).(interop.Hash160)
keys := contract.Call(neofsIDContractAddr, "key", contract.ReadOnly, ownerID).([]interop.PublicKey)
for i := range keys {
key := keys[i]
@ -434,14 +434,14 @@ func getEACL(ctx storage.Context, cid []byte) extendedACL {
return binary.Deserialize(data.([]byte)).(extendedACL)
}
return extendedACL{val: []byte{}, sig: []byte{}, pub: []byte{}}
return extendedACL{val: []byte{}, sig: interop.Signature{}, pub: interop.PublicKey{}}
}
func walletToScripHash(wallet []byte) []byte {
return wallet[1 : len(wallet)-4]
}
func verifySignature(msg, sig []byte, keys [][]byte) bool {
func verifySignature(msg []byte, sig interop.Signature, keys []interop.PublicKey) bool {
for i := range keys {
key := keys[i]
if crypto.ECDsaSecp256r1Verify(msg, key, sig) {
@ -469,7 +469,7 @@ func getOwnerByID(ctx storage.Context, id []byte) []byte {
return nil
}
func isSignedByOwnerKey(msg, sig, owner, key []byte) bool {
func isSignedByOwnerKey(msg []byte, sig interop.Signature, owner []byte, key interop.PublicKey) bool {
if !isOwnerFromKey(owner, key) {
return false
}
@ -477,7 +477,7 @@ func isSignedByOwnerKey(msg, sig, owner, key []byte) bool {
return crypto.ECDsaSecp256r1Verify(msg, key, sig)
}
func isOwnerFromKey(owner []byte, key []byte) bool {
func isOwnerFromKey(owner []byte, key interop.PublicKey) bool {
ownerSH := walletToScripHash(owner)
keySH := contract.CreateStandardAccount(key)
@ -508,7 +508,7 @@ func getContainerSizeEstimation(key, cid []byte) containerSizes {
// isStorageNode looks into _previous_ epoch network map, because storage node
// announce container size estimation of previous epoch.
func isStorageNode(key interop.PublicKey) bool {
netmapContractAddr := storage.Get(ctx, netmapContractKey).([]byte)
netmapContractAddr := storage.Get(ctx, netmapContractKey).(interop.Hash160)
snapshot := contract.Call(netmapContractAddr, "snapshot", contract.ReadOnly, 1).([]storageNode)
for i := range snapshot {

View file

@ -85,7 +85,7 @@ func init() {
}
// Init set up initial inner ring node keys.
func Init(owner interop.PublicKey, args [][]byte) bool {
func Init(owner interop.PublicKey, args []interop.PublicKey) bool {
if !common.HasUpdateAccess(ctx) {
panic("only owner can reinitialize contract")
}
@ -141,7 +141,7 @@ func InnerRingCandidates() []common.IRNode {
}
// InnerRingCandidateRemove removes key from the list of inner ring candidates.
func InnerRingCandidateRemove(key []byte) bool {
func InnerRingCandidateRemove(key interop.PublicKey) bool {
if !runtime.CheckWitness(key) {
panic("irCandidateRemove: you should be the owner of the public key")
}
@ -164,7 +164,7 @@ func InnerRingCandidateRemove(key []byte) bool {
}
// InnerRingCandidateAdd adds key to the list of inner ring candidates.
func InnerRingCandidateAdd(key []byte) bool {
func InnerRingCandidateAdd(key interop.PublicKey) bool {
if !runtime.CheckWitness(key) {
panic("irCandidateAdd: you should be the owner of the public key")
}
@ -200,7 +200,7 @@ func OnNEP17Payment(from interop.Hash160, amount int, data interface{}) {
}
caller := runtime.GetCallingScriptHash()
if !common.BytesEqual(caller, []byte(gas.Hash)) {
if !common.BytesEqual(caller, interop.Hash160(gas.Hash)) {
panic("onNEP17Payment: only GAS can be accepted for deposit")
}
@ -267,7 +267,7 @@ func Withdraw(user []byte, amount int) bool {
// Cheque sends gas assets back to the user if they were successfully
// locked in NeoFS balance contract.
func Cheque(id, user []byte, amount int, lockAcc []byte) bool {
func Cheque(id []byte, user interop.Hash160, amount int, lockAcc []byte) bool {
irList := getInnerRingNodes(ctx, innerRingKey)
threshold := len(irList)/3*2 + 1
@ -307,7 +307,7 @@ func Cheque(id, user []byte, amount int, lockAcc []byte) bool {
}
// Bind public key with user's account to use it in NeoFS requests.
func Bind(user []byte, keys [][]byte) bool {
func Bind(user []byte, keys []interop.PublicKey) bool {
if !runtime.CheckWitness(user) {
panic("binding: you should be the owner of the wallet")
}
@ -325,7 +325,7 @@ func Bind(user []byte, keys [][]byte) bool {
}
// Unbind public key from user's account
func Unbind(user []byte, keys [][]byte) bool {
func Unbind(user []byte, keys []interop.PublicKey) bool {
if !runtime.CheckWitness(user) {
panic("unbinding: you should be the owner of the wallet")
}
@ -344,7 +344,7 @@ func Unbind(user []byte, keys [][]byte) bool {
// InnerRingUpdate updates list of inner ring nodes with provided list of
// public keys.
func InnerRingUpdate(chequeID []byte, args [][]byte) bool {
func InnerRingUpdate(chequeID []byte, args []interop.PublicKey) bool {
if len(args) < minInnerRingSize {
panic("irUpdate: bad arguments")
}

View file

@ -29,7 +29,7 @@ func init() {
ctx = storage.GetContext()
}
func Init(owner interop.Hash160, addrNetmap, addrContainer []byte) {
func Init(owner, addrNetmap, addrContainer interop.Hash160) {
if !common.HasUpdateAccess(ctx) {
panic("only owner can reinitialize contract")
}
@ -57,7 +57,7 @@ func Migrate(script []byte, manifest []byte) bool {
return true
}
func AddKey(owner []byte, keys [][]byte) bool {
func AddKey(owner []byte, keys []interop.PublicKey) bool {
if len(owner) != 25 {
panic("addKey: incorrect owner")
}
@ -92,7 +92,7 @@ addLoop:
return true
}
func RemoveKey(owner []byte, keys [][]byte) bool {
func RemoveKey(owner []byte, keys []interop.PublicKey) bool {
if len(owner) != 25 {
panic("removeKey: incorrect owner")
}

View file

@ -59,7 +59,7 @@ func init() {
// Init function sets up initial list of inner ring public keys and should
// be invoked once at neofs infrastructure setup.
func Init(owner interop.Hash160, keys [][]byte) {
func Init(owner interop.Hash160, keys []interop.PublicKey) {
if !common.HasUpdateAccess(ctx) {
panic("only owner can reinitialize contract")
}
@ -106,7 +106,7 @@ func Multiaddress() []byte {
return multiaddress(getIRNodes(ctx))
}
func UpdateInnerRing(keys [][]byte) bool {
func UpdateInnerRing(keys []interop.PublicKey) bool {
multiaddr := Multiaddress()
if !runtime.CheckWitness(multiaddr) {
panic("updateInnerRing: this method must be invoked by inner ring nodes")
@ -152,7 +152,7 @@ func AddPeer(nodeInfo []byte) bool {
return true
}
func UpdateState(state int, publicKey []byte) bool {
func UpdateState(state int, publicKey interop.PublicKey) bool {
if len(publicKey) != 33 {
panic("updateState: incorrect public key")
}
@ -324,7 +324,7 @@ func addToNetmap(ctx storage.Context, n storageNode) []netmapNode {
return netmap
}
func removeFromNetmap(ctx storage.Context, key []byte) []netmapNode {
func removeFromNetmap(ctx storage.Context, key interop.PublicKey) []netmapNode {
var (
netmap = getNetmapNodes(ctx)
newNetmap = []netmapNode{}

View file

@ -28,7 +28,7 @@ func OnNEP17Payment(from interop.Hash160, amount int, data interface{}) {
}
}
func Init(owner interop.Hash160, addrNetmap []byte) {
func Init(owner, addrNetmap interop.Hash160) {
if !common.HasUpdateAccess(ctx) {
panic("only owner can reinitialize contract")
}