github.com/ava-labs/avalanchego@v1.11.11/vms/platformvm/txs/executor/create_subnet_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 executor
     5  
     6  import (
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/stretchr/testify/require"
    11  
    12  	"github.com/ava-labs/avalanchego/ids"
    13  	"github.com/ava-labs/avalanchego/upgrade/upgradetest"
    14  	"github.com/ava-labs/avalanchego/utils/set"
    15  	"github.com/ava-labs/avalanchego/utils/units"
    16  	"github.com/ava-labs/avalanchego/vms/platformvm/genesis/genesistest"
    17  	"github.com/ava-labs/avalanchego/vms/platformvm/state"
    18  	"github.com/ava-labs/avalanchego/vms/platformvm/utxo"
    19  	"github.com/ava-labs/avalanchego/vms/secp256k1fx"
    20  )
    21  
    22  func TestCreateSubnetTxAP3FeeChange(t *testing.T) {
    23  	ap3Time := genesistest.DefaultValidatorStartTime.Add(time.Hour)
    24  	tests := []struct {
    25  		name        string
    26  		time        time.Time
    27  		fee         uint64
    28  		expectedErr error
    29  	}{
    30  		{
    31  			name:        "pre-fork - correctly priced",
    32  			time:        genesistest.DefaultValidatorStartTime,
    33  			fee:         0,
    34  			expectedErr: nil,
    35  		},
    36  		{
    37  			name:        "post-fork - incorrectly priced",
    38  			time:        ap3Time,
    39  			fee:         100*defaultTxFee - 1*units.NanoAvax,
    40  			expectedErr: utxo.ErrInsufficientUnlockedFunds,
    41  		},
    42  		{
    43  			name:        "post-fork - correctly priced",
    44  			time:        ap3Time,
    45  			fee:         100 * defaultTxFee,
    46  			expectedErr: nil,
    47  		},
    48  	}
    49  	for _, test := range tests {
    50  		t.Run(test.name, func(t *testing.T) {
    51  			require := require.New(t)
    52  
    53  			env := newEnvironment(t, upgradetest.ApricotPhase3)
    54  			env.config.UpgradeConfig.ApricotPhase3Time = ap3Time
    55  			env.ctx.Lock.Lock()
    56  			defer env.ctx.Lock.Unlock()
    57  
    58  			env.state.SetTimestamp(test.time) // to duly set fee
    59  
    60  			addrs := set.NewSet[ids.ShortID](len(genesistest.DefaultFundedKeys))
    61  			for _, key := range genesistest.DefaultFundedKeys {
    62  				addrs.Add(key.Address())
    63  			}
    64  
    65  			config := *env.config
    66  			config.StaticFeeConfig.CreateSubnetTxFee = test.fee
    67  			wallet := newWallet(t, env, walletConfig{
    68  				config: &config,
    69  			})
    70  
    71  			tx, err := wallet.IssueCreateSubnetTx(
    72  				&secp256k1fx.OutputOwners{},
    73  			)
    74  			require.NoError(err)
    75  
    76  			stateDiff, err := state.NewDiff(lastAcceptedID, env)
    77  			require.NoError(err)
    78  
    79  			stateDiff.SetTimestamp(test.time)
    80  
    81  			feeCalculator := state.PickFeeCalculator(env.config, stateDiff)
    82  			executor := StandardTxExecutor{
    83  				Backend:       &env.backend,
    84  				FeeCalculator: feeCalculator,
    85  				State:         stateDiff,
    86  				Tx:            tx,
    87  			}
    88  			err = tx.Unsigned.Visit(&executor)
    89  			require.ErrorIs(err, test.expectedErr)
    90  		})
    91  	}
    92  }