neoneo-go/pkg/neotest/signer_test.go
Roman Khimov 8d33206bb8 *: don't get private key from account if just public one is needed
Add PublicKey() API to the Account and use it as appropriate, avoid creating
additional references to the private key.
2022-09-02 14:43:28 +03:00

48 lines
1 KiB
Go

package neotest
import (
"sort"
"testing"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neo-go/pkg/smartcontract"
"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())
}
func TestMultiSigner(t *testing.T) {
const size = 4
pubs := make(keys.PublicKeys, size)
accs := make([]*wallet.Account, size)
for i := range accs {
a, err := wallet.NewAccount()
require.NoError(t, err)
accs[i] = a
pubs[i] = a.PublicKey()
}
sort.Sort(pubs)
m := smartcontract.GetDefaultHonestNodeCount(size)
for i := range accs {
require.NoError(t, accs[i].ConvertMultisig(m, pubs))
}
s := NewMultiSigner(accs...)
for i := range pubs {
for j := range accs {
if pub := accs[j].PublicKey(); pub.Equal(pubs[i]) {
require.Equal(t, pub, s.Single(i).Account().PublicKey())
}
}
}
}