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 }