github.com/ava-labs/avalanchego@v1.11.11/vms/platformvm/block/builder/standard_block_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 builder 5 6 import ( 7 "context" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 12 "github.com/ava-labs/avalanchego/chains/atomic" 13 "github.com/ava-labs/avalanchego/database/prefixdb" 14 "github.com/ava-labs/avalanchego/ids" 15 "github.com/ava-labs/avalanchego/upgrade/upgradetest" 16 "github.com/ava-labs/avalanchego/utils/units" 17 "github.com/ava-labs/avalanchego/vms/components/avax" 18 "github.com/ava-labs/avalanchego/vms/platformvm/genesis/genesistest" 19 "github.com/ava-labs/avalanchego/vms/platformvm/status" 20 "github.com/ava-labs/avalanchego/vms/platformvm/txs" 21 "github.com/ava-labs/avalanchego/vms/secp256k1fx" 22 ) 23 24 func TestAtomicTxImports(t *testing.T) { 25 require := require.New(t) 26 27 env := newEnvironment(t, upgradetest.Latest) 28 env.ctx.Lock.Lock() 29 defer env.ctx.Lock.Unlock() 30 31 addr := genesistest.DefaultFundedKeys[0].Address() 32 owner := &secp256k1fx.OutputOwners{ 33 Threshold: 1, 34 Addrs: []ids.ShortID{addr}, 35 } 36 37 m := atomic.NewMemory(prefixdb.New([]byte{5}, env.baseDB)) 38 39 env.msm.SharedMemory = m.NewSharedMemory(env.ctx.ChainID) 40 peerSharedMemory := m.NewSharedMemory(env.ctx.XChainID) 41 utxo := &avax.UTXO{ 42 UTXOID: avax.UTXOID{ 43 TxID: ids.GenerateTestID(), 44 OutputIndex: 1, 45 }, 46 Asset: avax.Asset{ID: env.ctx.AVAXAssetID}, 47 Out: &secp256k1fx.TransferOutput{ 48 Amt: 70 * units.MicroAvax, 49 OutputOwners: *owner, 50 }, 51 } 52 utxoBytes, err := txs.Codec.Marshal(txs.CodecVersion, utxo) 53 require.NoError(err) 54 55 inputID := utxo.InputID() 56 require.NoError(peerSharedMemory.Apply(map[ids.ID]*atomic.Requests{ 57 env.ctx.ChainID: {PutRequests: []*atomic.Element{{ 58 Key: inputID[:], 59 Value: utxoBytes, 60 Traits: [][]byte{ 61 addr.Bytes(), 62 }, 63 }}}, 64 })) 65 66 wallet := newWallet(t, env, walletConfig{}) 67 68 tx, err := wallet.IssueImportTx( 69 env.ctx.XChainID, 70 owner, 71 ) 72 require.NoError(err) 73 74 require.NoError(env.Builder.Add(tx)) 75 b, err := env.Builder.BuildBlock(context.Background()) 76 require.NoError(err) 77 // Test multiple verify calls work 78 require.NoError(b.Verify(context.Background())) 79 require.NoError(b.Accept(context.Background())) 80 _, txStatus, err := env.state.GetTx(tx.ID()) 81 require.NoError(err) 82 // Ensure transaction is in the committed state 83 require.Equal(status.Committed, txStatus) 84 }