github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/neotest/signer_test.go (about)

     1  package neotest
     2  
     3  import (
     4  	"sort"
     5  	"testing"
     6  
     7  	"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
     8  	"github.com/nspcc-dev/neo-go/pkg/smartcontract"
     9  	"github.com/nspcc-dev/neo-go/pkg/wallet"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestSingleSigner(t *testing.T) {
    14  	a, err := wallet.NewAccount()
    15  	require.NoError(t, err)
    16  
    17  	s := NewSingleSigner(a)
    18  	require.Equal(t, s.ScriptHash(), s.Account().Contract.ScriptHash())
    19  }
    20  
    21  func TestMultiSigner(t *testing.T) {
    22  	const size = 4
    23  
    24  	pubs := make(keys.PublicKeys, size)
    25  	accs := make([]*wallet.Account, size)
    26  	for i := range accs {
    27  		a, err := wallet.NewAccount()
    28  		require.NoError(t, err)
    29  
    30  		accs[i] = a
    31  		pubs[i] = a.PublicKey()
    32  	}
    33  
    34  	sort.Sort(pubs)
    35  	m := smartcontract.GetDefaultHonestNodeCount(size)
    36  	for i := range accs {
    37  		require.NoError(t, accs[i].ConvertMultisig(m, pubs))
    38  	}
    39  
    40  	s := NewMultiSigner(accs...)
    41  	for i := range pubs {
    42  		for j := range accs {
    43  			if pub := accs[j].PublicKey(); pub.Equal(pubs[i]) {
    44  				require.Equal(t, pub, s.Single(i).Account().PublicKey())
    45  			}
    46  		}
    47  	}
    48  }