neotest: allow to extract account from single signer
Signed-off-by: Evgeniy Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
e3d8e7b613
commit
d4689db47e
2 changed files with 30 additions and 1 deletions
|
@ -27,6 +27,14 @@ type Signer interface {
|
||||||
SignTx(netmode.Magic, *transaction.Transaction) error
|
SignTx(netmode.Magic, *transaction.Transaction) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SingleSigner is a generic interface for simple one-signature signer.
|
||||||
|
type SingleSigner interface {
|
||||||
|
Signer
|
||||||
|
// Account returns underlying account which can be used to
|
||||||
|
// get public key and/or sign arbitrary things.
|
||||||
|
Account() *wallet.Account
|
||||||
|
}
|
||||||
|
|
||||||
// signer represents simple-signature signer.
|
// signer represents simple-signature signer.
|
||||||
type signer wallet.Account
|
type signer wallet.Account
|
||||||
|
|
||||||
|
@ -35,7 +43,7 @@ type multiSigner []*wallet.Account
|
||||||
|
|
||||||
// NewSingleSigner returns multi-signature signer for the provided account.
|
// NewSingleSigner returns multi-signature signer for the provided account.
|
||||||
// It must contain exactly as many accounts as needed to sign the script.
|
// It must contain exactly as many accounts as needed to sign the script.
|
||||||
func NewSingleSigner(acc *wallet.Account) Signer {
|
func NewSingleSigner(acc *wallet.Account) SingleSigner {
|
||||||
if !vm.IsSignatureContract(acc.Contract.Script) {
|
if !vm.IsSignatureContract(acc.Contract.Script) {
|
||||||
panic("account must have simple-signature verification script")
|
panic("account must have simple-signature verification script")
|
||||||
}
|
}
|
||||||
|
@ -63,6 +71,11 @@ func (s *signer) SignTx(magic netmode.Magic, tx *transaction.Transaction) error
|
||||||
return (*wallet.Account)(s).SignTx(magic, tx)
|
return (*wallet.Account)(s).SignTx(magic, tx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Account implements SingleSigner interface.
|
||||||
|
func (s *signer) Account() *wallet.Account {
|
||||||
|
return (*wallet.Account)(s)
|
||||||
|
}
|
||||||
|
|
||||||
// NewMultiSigner returns multi-signature signer for the provided account.
|
// NewMultiSigner returns multi-signature signer for the provided account.
|
||||||
// It must contain at least as many accounts as needed to sign the script.
|
// It must contain at least as many accounts as needed to sign the script.
|
||||||
func NewMultiSigner(accs ...*wallet.Account) Signer {
|
func NewMultiSigner(accs ...*wallet.Account) Signer {
|
||||||
|
|
16
pkg/neotest/signer_test.go
Normal file
16
pkg/neotest/signer_test.go
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
package neotest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/wallet"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSingleSigner(t *testing.T) {
|
||||||
|
a, err := wallet.NewAccount()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
s := NewSingleSigner(a)
|
||||||
|
require.Equal(t, s.ScriptHash(), s.Account().Contract.ScriptHash())
|
||||||
|
}
|
Loading…
Reference in a new issue