github.com/ava-labs/avalanchego@v1.11.11/wallet/subnet/primary/common/utxotest/utxotest.go (about)

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