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  }