github.com/algorand/go-algorand-sdk@v1.24.0/future/transactionSigner_test.go (about) 1 package future 2 3 import ( 4 "crypto/ed25519" 5 "testing" 6 7 "github.com/algorand/go-algorand-sdk/crypto" 8 "github.com/algorand/go-algorand-sdk/mnemonic" 9 "github.com/algorand/go-algorand-sdk/types" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestMakeBasicAccountTransactionSigner(t *testing.T) { 14 account := crypto.GenerateAccount() 15 txSigner := BasicAccountTransactionSigner{Account: account} 16 17 addr, err := types.DecodeAddress("DN7MBMCL5JQ3PFUQS7TMX5AH4EEKOBJVDUF4TCV6WERATKFLQF4MQUPZTA") 18 require.NoError(t, err) 19 tx := types.Transaction{ 20 Type: types.PaymentTx, 21 Header: types.Header{ 22 Sender: addr, 23 Fee: 217000, 24 FirstValid: 972508, 25 LastValid: 973508, 26 Note: []byte{180, 81, 121, 57, 252, 250, 210, 113}, 27 GenesisID: "testnet-v31.0", 28 }, 29 PaymentTxnFields: types.PaymentTxnFields{ 30 Receiver: addr, 31 Amount: 5000, 32 }, 33 } 34 35 sigs, err := txSigner.SignTransactions([]types.Transaction{tx}, []int{0}) 36 require.NoError(t, err) 37 38 _, expectedSig, err := crypto.SignTransaction(account.PrivateKey, tx) 39 require.NoError(t, err) 40 require.Len(t, sigs, 1) 41 require.Equal(t, sigs[0], expectedSig) 42 } 43 44 func TestMakeLogicSigAccountTransactionSigner(t *testing.T) { 45 program := []byte{1, 32, 1, 1, 34} 46 args := [][]byte{ 47 {0x01}, 48 {0x02, 0x03}, 49 } 50 account := crypto.GenerateAccount() 51 lsig, err := crypto.MakeLogicSigAccountDelegated(program, args, account.PrivateKey) 52 require.NoError(t, err) 53 54 programHash := "6Z3C3LDVWGMX23BMSYMANACQOSINPFIRF77H7N3AWJZYV6OH6GWTJKVMXY" 55 programAddr, err := types.DecodeAddress(programHash) 56 require.NoError(t, err) 57 58 txSigner := LogicSigAccountTransactionSigner{LogicSigAccount: lsig} 59 60 require.NoError(t, err) 61 tx := types.Transaction{ 62 Type: types.PaymentTx, 63 Header: types.Header{ 64 Sender: programAddr, 65 Fee: 217000, 66 FirstValid: 972508, 67 LastValid: 973508, 68 Note: []byte{180, 81, 121, 57, 252, 250, 210, 113}, 69 GenesisID: "testnet-v31.0", 70 }, 71 PaymentTxnFields: types.PaymentTxnFields{ 72 Receiver: programAddr, 73 Amount: 5000, 74 }, 75 } 76 77 sigs, err := txSigner.SignTransactions([]types.Transaction{tx}, []int{0}) 78 require.NoError(t, err) 79 80 _, expectedSig, err := crypto.SignLogicSigAccountTransaction(lsig, tx) 81 require.NoError(t, err) 82 require.Equal(t, sigs[0], expectedSig) 83 } 84 85 func makeTestMultisigAccount(t *testing.T) (crypto.MultisigAccount, ed25519.PrivateKey, ed25519.PrivateKey, ed25519.PrivateKey) { 86 addr1, err := types.DecodeAddress("DN7MBMCL5JQ3PFUQS7TMX5AH4EEKOBJVDUF4TCV6WERATKFLQF4MQUPZTA") 87 require.NoError(t, err) 88 addr2, err := types.DecodeAddress("BFRTECKTOOE7A5LHCF3TTEOH2A7BW46IYT2SX5VP6ANKEXHZYJY77SJTVM") 89 require.NoError(t, err) 90 addr3, err := types.DecodeAddress("47YPQTIGQEO7T4Y4RWDYWEKV6RTR2UNBQXBABEEGM72ESWDQNCQ52OPASU") 91 require.NoError(t, err) 92 ma, err := crypto.MultisigAccountWithParams(1, 2, []types.Address{ 93 addr1, 94 addr2, 95 addr3, 96 }) 97 require.NoError(t, err) 98 mn1 := "auction inquiry lava second expand liberty glass involve ginger illness length room item discover ahead table doctor term tackle cement bonus profit right above catch" 99 sk1, err := mnemonic.ToPrivateKey(mn1) 100 require.NoError(t, err) 101 mn2 := "since during average anxiety protect cherry club long lawsuit loan expand embark forum theory winter park twenty ball kangaroo cram burst board host ability left" 102 sk2, err := mnemonic.ToPrivateKey(mn2) 103 require.NoError(t, err) 104 mn3 := "advice pudding treat near rule blouse same whisper inner electric quit surface sunny dismiss leader blood seat clown cost exist hospital century reform able sponsor" 105 sk3, err := mnemonic.ToPrivateKey(mn3) 106 return ma, sk1, sk2, sk3 107 } 108 109 func TestMakeMultiSigAccountTransactionSigner(t *testing.T) { 110 ma, sk1, _, _ := makeTestMultisigAccount(t) 111 fromAddr, err := ma.Address() 112 require.NoError(t, err) 113 toAddr, err := types.DecodeAddress("DN7MBMCL5JQ3PFUQS7TMX5AH4EEKOBJVDUF4TCV6WERATKFLQF4MQUPZTA") 114 require.NoError(t, err) 115 116 txSigner := MultiSigAccountTransactionSigner{Msig: ma, Sks: [][]byte{sk1}} 117 tx := types.Transaction{ 118 Type: types.PaymentTx, 119 Header: types.Header{ 120 Sender: fromAddr, 121 Fee: 217000, 122 FirstValid: 972508, 123 LastValid: 973508, 124 Note: []byte{180, 81, 121, 57, 252, 250, 210, 113}, 125 GenesisID: "testnet-v31.0", 126 }, 127 PaymentTxnFields: types.PaymentTxnFields{ 128 Receiver: toAddr, 129 Amount: 5000, 130 }, 131 } 132 133 sigs, err := txSigner.SignTransactions([]types.Transaction{tx}, []int{0}) 134 require.NoError(t, err) 135 136 _, expectedSig, err := crypto.SignMultisigTransaction(sk1, ma, tx) 137 require.NoError(t, err) 138 require.Equal(t, sigs[0], expectedSig) 139 }