github.com/MetalBlockchain/metalgo@v1.11.9/wallet/subnet/primary/common/test_utxos.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package common
     5  
     6  import (
     7  	"context"
     8  	"slices"
     9  
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/MetalBlockchain/metalgo/ids"
    13  	"github.com/MetalBlockchain/metalgo/utils/constants"
    14  	"github.com/MetalBlockchain/metalgo/vms/components/avax"
    15  )
    16  
    17  func NewDeterministicChainUTXOs(require *require.Assertions, utxoSets map[ids.ID][]*avax.UTXO) *DeterministicChainUTXOs {
    18  	globalUTXOs := NewUTXOs()
    19  	for subnetID, utxos := range utxoSets {
    20  		for _, utxo := range utxos {
    21  			require.NoError(
    22  				globalUTXOs.AddUTXO(context.Background(), subnetID, constants.PlatformChainID, utxo),
    23  			)
    24  		}
    25  	}
    26  	return &DeterministicChainUTXOs{
    27  		ChainUTXOs: NewChainUTXOs(constants.PlatformChainID, globalUTXOs),
    28  	}
    29  }
    30  
    31  type DeterministicChainUTXOs struct {
    32  	ChainUTXOs
    33  }
    34  
    35  func (c *DeterministicChainUTXOs) UTXOs(ctx context.Context, sourceChainID ids.ID) ([]*avax.UTXO, error) {
    36  	utxos, err := c.ChainUTXOs.UTXOs(ctx, sourceChainID)
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  
    41  	slices.SortFunc(utxos, func(a, b *avax.UTXO) int {
    42  		return a.Compare(&b.UTXOID)
    43  	})
    44  	return utxos, nil
    45  }