[#446] morph/client: Use on-chain source of alphabet nodes

Signed-off-by: Alex Vanin <alexey@nspcc.ru>
This commit is contained in:
Alex Vanin 2021-03-11 13:48:17 +03:00 committed by Alex Vanin
parent 58119e6065
commit 861307b192

View file

@ -1,8 +1,6 @@
package client package client
import ( import (
"crypto/elliptic"
"github.com/nspcc-dev/neo-go/pkg/core/native" "github.com/nspcc-dev/neo-go/pkg/core/native"
"github.com/nspcc-dev/neo-go/pkg/core/native/nativenames" "github.com/nspcc-dev/neo-go/pkg/core/native/nativenames"
"github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/core/transaction"
@ -44,7 +42,6 @@ const (
defaultNotaryRoundTime = 100 defaultNotaryRoundTime = 100
defaultNotaryFallbackTime = 40 defaultNotaryFallbackTime = 40
innerRingListMethod = "innerRingList"
notaryBalanceOfMethod = "balanceOf" notaryBalanceOfMethod = "balanceOf"
setDesignateMethod = "designateAsRole" setDesignateMethod = "designateAsRole"
@ -202,15 +199,15 @@ func (c *Client) notaryInvoke(committee bool, contract util.Uint160, method stri
// prepare arguments for test invocation // prepare arguments for test invocation
irList, err := c.notaryInnerRingList() alphabetList, err := c.Committee()
if err != nil { if err != nil {
return err return err
} }
_, n := mn(irList, committee) _, n := mn(alphabetList, committee)
u8n := uint8(n) u8n := uint8(n)
cosigners, err := c.notaryCosigners(irList, committee) cosigners, err := c.notaryCosigners(alphabetList, committee)
if err != nil { if err != nil {
return err return err
} }
@ -233,7 +230,7 @@ func (c *Client) notaryInvoke(committee bool, contract util.Uint160, method stri
// after test invocation we build main multisig transaction // after test invocation we build main multisig transaction
multiaddrAccount, err := c.notaryMultisigAccount(irList, committee) multiaddrAccount, err := c.notaryMultisigAccount(alphabetList, committee)
if err != nil { if err != nil {
return err return err
} }
@ -386,48 +383,6 @@ func (c *Client) notaryWitnesses(multiaddr *wallet.Account, tx *transaction.Tran
return w return w
} }
func (c *Client) notaryInnerRingList() ([]*keys.PublicKey, error) {
data, err := c.TestInvoke(c.notary.netmap, innerRingListMethod)
if err != nil {
return nil, errors.Wrap(err, "test invoke error")
}
if len(data) == 0 {
return nil, errors.Wrap(errInvalidIR, "test invoke returned empty stack")
}
prms, err := ArrayFromStackItem(data[0])
if err != nil {
return nil, errors.Wrap(err, "test invoke returned non array element")
}
res := make([]*keys.PublicKey, 0, len(prms))
for i := range prms {
nodePrms, err := ArrayFromStackItem(prms[i])
if err != nil {
return nil, errors.Wrap(err, "inner ring node structure is not an array")
}
if len(nodePrms) == 0 {
return nil, errors.Wrap(errInvalidIR, "inner ring node structure is empty array")
}
rawKey, err := BytesFromStackItem(nodePrms[0])
if err != nil {
return nil, errors.Wrap(err, "inner ring public key is not slice of bytes")
}
key, err := keys.NewPublicKeyFromBytes(rawKey, elliptic.P256())
if err != nil {
return nil, errors.Wrap(err, "can't parse inner ring public key bytes")
}
res = append(res, key)
}
return res, nil
}
func (c *Client) notaryMultisigAccount(ir []*keys.PublicKey, committee bool) (*wallet.Account, error) { func (c *Client) notaryMultisigAccount(ir []*keys.PublicKey, committee bool) (*wallet.Account, error) {
m, _ := mn(ir, committee) m, _ := mn(ir, committee)