github.com/ava-labs/avalanchego@v1.11.11/wallet/chain/x/backend_visitor.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package x 5 6 import ( 7 "context" 8 9 "github.com/ava-labs/avalanchego/ids" 10 "github.com/ava-labs/avalanchego/vms/avm/txs" 11 "github.com/ava-labs/avalanchego/vms/components/avax" 12 ) 13 14 var _ txs.Visitor = (*backendVisitor)(nil) 15 16 // backendVisitor handles accepting of transactions for the backend 17 type backendVisitor struct { 18 b *backend 19 ctx context.Context 20 txID ids.ID 21 } 22 23 func (*backendVisitor) BaseTx(*txs.BaseTx) error { 24 return nil 25 } 26 27 func (*backendVisitor) CreateAssetTx(*txs.CreateAssetTx) error { 28 return nil 29 } 30 31 func (*backendVisitor) OperationTx(*txs.OperationTx) error { 32 return nil 33 } 34 35 func (b *backendVisitor) ImportTx(tx *txs.ImportTx) error { 36 for _, in := range tx.ImportedIns { 37 utxoID := in.UTXOID.InputID() 38 if err := b.b.RemoveUTXO(b.ctx, tx.SourceChain, utxoID); err != nil { 39 return err 40 } 41 } 42 return nil 43 } 44 45 func (b *backendVisitor) ExportTx(tx *txs.ExportTx) error { 46 for i, out := range tx.ExportedOuts { 47 err := b.b.AddUTXO( 48 b.ctx, 49 tx.DestinationChain, 50 &avax.UTXO{ 51 UTXOID: avax.UTXOID{ 52 TxID: b.txID, 53 OutputIndex: uint32(len(tx.Outs) + i), 54 }, 55 Asset: avax.Asset{ID: out.AssetID()}, 56 Out: out.Out, 57 }, 58 ) 59 if err != nil { 60 return err 61 } 62 } 63 return nil 64 }