github.com/MetalBlockchain/metalgo@v1.11.9/vms/components/avax/utxo_state_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 avax 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 11 "github.com/MetalBlockchain/metalgo/codec" 12 "github.com/MetalBlockchain/metalgo/codec/linearcodec" 13 "github.com/MetalBlockchain/metalgo/database" 14 "github.com/MetalBlockchain/metalgo/database/memdb" 15 "github.com/MetalBlockchain/metalgo/ids" 16 "github.com/MetalBlockchain/metalgo/vms/secp256k1fx" 17 ) 18 19 const trackChecksum = false 20 21 func TestUTXOState(t *testing.T) { 22 require := require.New(t) 23 24 txID := ids.GenerateTestID() 25 assetID := ids.GenerateTestID() 26 addr := ids.GenerateTestShortID() 27 utxo := &UTXO{ 28 UTXOID: UTXOID{ 29 TxID: txID, 30 OutputIndex: 0, 31 }, 32 Asset: Asset{ID: assetID}, 33 Out: &secp256k1fx.TransferOutput{ 34 Amt: 12345, 35 OutputOwners: secp256k1fx.OutputOwners{ 36 Locktime: 54321, 37 Threshold: 1, 38 Addrs: []ids.ShortID{addr}, 39 }, 40 }, 41 } 42 utxoID := utxo.InputID() 43 44 c := linearcodec.NewDefault() 45 manager := codec.NewDefaultManager() 46 47 require.NoError(c.RegisterType(&secp256k1fx.MintOutput{})) 48 require.NoError(c.RegisterType(&secp256k1fx.TransferOutput{})) 49 require.NoError(c.RegisterType(&secp256k1fx.Input{})) 50 require.NoError(c.RegisterType(&secp256k1fx.TransferInput{})) 51 require.NoError(c.RegisterType(&secp256k1fx.Credential{})) 52 require.NoError(manager.RegisterCodec(codecVersion, c)) 53 54 db := memdb.New() 55 s, err := NewUTXOState(db, manager, trackChecksum) 56 require.NoError(err) 57 58 _, err = s.GetUTXO(utxoID) 59 require.Equal(database.ErrNotFound, err) 60 61 _, err = s.GetUTXO(utxoID) 62 require.Equal(database.ErrNotFound, err) 63 64 require.NoError(s.DeleteUTXO(utxoID)) 65 66 require.NoError(s.PutUTXO(utxo)) 67 68 utxoIDs, err := s.UTXOIDs(addr[:], ids.Empty, 5) 69 require.NoError(err) 70 require.Equal([]ids.ID{utxoID}, utxoIDs) 71 72 readUTXO, err := s.GetUTXO(utxoID) 73 require.NoError(err) 74 require.Equal(utxo, readUTXO) 75 76 require.NoError(s.DeleteUTXO(utxoID)) 77 78 _, err = s.GetUTXO(utxoID) 79 require.Equal(database.ErrNotFound, err) 80 81 require.NoError(s.PutUTXO(utxo)) 82 83 s, err = NewUTXOState(db, manager, trackChecksum) 84 require.NoError(err) 85 86 readUTXO, err = s.GetUTXO(utxoID) 87 require.NoError(err) 88 require.Equal(utxoID, readUTXO.InputID()) 89 require.Equal(utxo, readUTXO) 90 91 utxoIDs, err = s.UTXOIDs(addr[:], ids.Empty, 5) 92 require.NoError(err) 93 require.Equal([]ids.ID{utxoID}, utxoIDs) 94 }