github.com/MetalBlockchain/metalgo@v1.11.9/vms/avm/wallet_service_test.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package avm 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 11 "github.com/MetalBlockchain/metalgo/api" 12 "github.com/MetalBlockchain/metalgo/ids" 13 "github.com/MetalBlockchain/metalgo/utils/linked" 14 "github.com/MetalBlockchain/metalgo/vms/avm/txs" 15 ) 16 17 func TestWalletService_SendMultiple(t *testing.T) { 18 require := require.New(t) 19 20 for _, tc := range testCases { 21 t.Run(tc.name, func(t *testing.T) { 22 env := setup(t, &envConfig{ 23 fork: latest, 24 isCustomFeeAsset: !tc.avaxAsset, 25 keystoreUsers: []*user{{ 26 username: username, 27 password: password, 28 initialKeys: keys, 29 }}, 30 }) 31 env.vm.ctx.Lock.Unlock() 32 33 walletService := &WalletService{ 34 vm: env.vm, 35 pendingTxs: linked.NewHashmap[ids.ID, *txs.Tx](), 36 } 37 38 assetID := env.genesisTx.ID() 39 addr := keys[0].PublicKey().Address() 40 41 addrStr, err := env.vm.FormatLocalAddress(addr) 42 require.NoError(err) 43 changeAddrStr, err := env.vm.FormatLocalAddress(testChangeAddr) 44 require.NoError(err) 45 _, fromAddrsStr := sampleAddrs(t, env.vm.AddressManager, addrs) 46 47 args := &SendMultipleArgs{ 48 JSONSpendHeader: api.JSONSpendHeader{ 49 UserPass: api.UserPass{ 50 Username: username, 51 Password: password, 52 }, 53 JSONFromAddrs: api.JSONFromAddrs{From: fromAddrsStr}, 54 JSONChangeAddr: api.JSONChangeAddr{ChangeAddr: changeAddrStr}, 55 }, 56 Outputs: []SendOutput{ 57 { 58 Amount: 500, 59 AssetID: assetID.String(), 60 To: addrStr, 61 }, 62 { 63 Amount: 1000, 64 AssetID: assetID.String(), 65 To: addrStr, 66 }, 67 }, 68 } 69 reply := &api.JSONTxIDChangeAddr{} 70 require.NoError(walletService.SendMultiple(nil, args, reply)) 71 require.Equal(changeAddrStr, reply.ChangeAddr) 72 73 buildAndAccept(require, env.vm, env.issuer, reply.TxID) 74 75 env.vm.ctx.Lock.Lock() 76 _, err = env.vm.state.GetTx(reply.TxID) 77 env.vm.ctx.Lock.Unlock() 78 require.NoError(err) 79 }) 80 } 81 }