diff --git a/vms/platformvm/service_test.go b/vms/platformvm/service_test.go index e36e06e29d4d..60d599bfeb12 100644 --- a/vms/platformvm/service_test.go +++ b/vms/platformvm/service_test.go @@ -39,7 +39,6 @@ import ( "github.com/ava-labs/avalanchego/vms/platformvm/state" "github.com/ava-labs/avalanchego/vms/platformvm/status" "github.com/ava-labs/avalanchego/vms/platformvm/txs" - "github.com/ava-labs/avalanchego/vms/platformvm/txs/fee" "github.com/ava-labs/avalanchego/vms/platformvm/txs/txstest" "github.com/ava-labs/avalanchego/vms/secp256k1fx" "github.com/ava-labs/avalanchego/wallet/subnet/primary/common" @@ -366,12 +365,9 @@ func TestGetBalance(t *testing.T) { require := require.New(t) service, _, _ := defaultService(t) - staticFeeCfg := service.vm.Config.StaticConfig + staticFeesCfg := service.vm.Config.StaticConfig upgrades := service.vm.Config.Times - staticFeeCalc := fee.NewStaticCalculator(staticFeeCfg, upgrades, service.vm.clock.Time()) - dummyCreateSubnetTx := &txs.CreateSubnetTx{} - require.NoError(dummyCreateSubnetTx.Visit(staticFeeCalc)) - createSubnetFee := staticFeeCalc.Fee + createSubnetFee := staticFeesCfg.GetCreateSubnetTxFee(upgrades, service.vm.clock.Time()) // Ensure GetStake is correct for each of the genesis validators genesis, _ := defaultGenesis(t, service.vm.ctx.AVAXAssetID) diff --git a/vms/platformvm/txs/fee/calculator.go b/vms/platformvm/txs/fee/calculator.go index 153b85458a09..2b69dbff8478 100644 --- a/vms/platformvm/txs/fee/calculator.go +++ b/vms/platformvm/txs/fee/calculator.go @@ -47,20 +47,12 @@ func (fc *Calculator) AddDelegatorTx(*txs.AddDelegatorTx) error { } func (fc *Calculator) CreateChainTx(*txs.CreateChainTx) error { - if fc.upgrades.IsApricotPhase3Activated(fc.chainTime) { - fc.Fee = fc.staticCfg.CreateBlockchainTxFee - } else { - fc.Fee = fc.staticCfg.CreateAssetTxFee - } + fc.Fee = fc.staticCfg.GetCreateBlockchainTxFee(fc.upgrades, fc.chainTime) return nil } func (fc *Calculator) CreateSubnetTx(*txs.CreateSubnetTx) error { - if fc.upgrades.IsApricotPhase3Activated(fc.chainTime) { - fc.Fee = fc.staticCfg.CreateSubnetTxFee - } else { - fc.Fee = fc.staticCfg.CreateAssetTxFee - } + fc.Fee = fc.staticCfg.GetCreateSubnetTxFee(fc.upgrades, fc.chainTime) return nil } diff --git a/vms/platformvm/txs/fee/static_config.go b/vms/platformvm/txs/fee/static_config.go index 12899b315b32..f2abb6d4d569 100644 --- a/vms/platformvm/txs/fee/static_config.go +++ b/vms/platformvm/txs/fee/static_config.go @@ -3,6 +3,12 @@ package fee +import ( + "time" + + "github.com/ava-labs/avalanchego/vms/platformvm/upgrade" +) + type StaticConfig struct { // Fee that is burned by every non-state creating transaction TxFee uint64 @@ -43,3 +49,17 @@ type StaticConfig struct { // Minimum fee that can be charged for delegation MinDelegationFee uint32 } + +func (c *StaticConfig) GetCreateBlockchainTxFee(upgrades upgrade.Times, timestamp time.Time) uint64 { + if upgrades.IsApricotPhase3Activated(timestamp) { + return c.CreateBlockchainTxFee + } + return c.CreateAssetTxFee +} + +func (c *StaticConfig) GetCreateSubnetTxFee(upgrades upgrade.Times, timestamp time.Time) uint64 { + if upgrades.IsApricotPhase3Activated(timestamp) { + return c.CreateSubnetTxFee + } + return c.CreateAssetTxFee +} diff --git a/vms/platformvm/txs/txstest/builder.go b/vms/platformvm/txs/txstest/builder.go index 92f40f4b4176..bfc50d7454d6 100644 --- a/vms/platformvm/txs/txstest/builder.go +++ b/vms/platformvm/txs/txstest/builder.go @@ -47,10 +47,7 @@ func (b *Builder) NewImportTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewImportTx( chainID, @@ -70,10 +67,7 @@ func (b *Builder) NewExportTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewExportTx( chainID, @@ -96,10 +90,7 @@ func (b *Builder) NewCreateChainTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewCreateChainTx( subnetID, @@ -121,10 +112,7 @@ func (b *Builder) NewCreateSubnetTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewCreateSubnetTx( owner, @@ -155,10 +143,7 @@ func (b *Builder) NewTransformSubnetTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewTransformSubnetTx( subnetID, @@ -191,10 +176,7 @@ func (b *Builder) NewAddValidatorTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewAddValidatorTx( vdr, @@ -219,10 +201,7 @@ func (b *Builder) NewAddPermissionlessValidatorTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewAddPermissionlessValidatorTx( vdr, @@ -246,10 +225,7 @@ func (b *Builder) NewAddDelegatorTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewAddDelegatorTx( vdr, @@ -270,10 +246,7 @@ func (b *Builder) NewAddPermissionlessDelegatorTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewAddPermissionlessDelegatorTx( vdr, @@ -293,10 +266,7 @@ func (b *Builder) NewAddSubnetValidatorTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewAddSubnetValidatorTx( vdr, @@ -315,10 +285,7 @@ func (b *Builder) NewRemoveSubnetValidatorTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewRemoveSubnetValidatorTx( nodeID, @@ -338,10 +305,7 @@ func (b *Builder) NewTransferSubnetOwnershipTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewTransferSubnetOwnershipTx( subnetID, @@ -360,10 +324,7 @@ func (b *Builder) NewBaseTx( keys []*secp256k1.PrivateKey, options ...common.Option, ) (*txs.Tx, error) { - pBuilder, pSigner, err := b.builders(keys) - if err != nil { - return nil, err - } + pBuilder, pSigner := b.builders(keys) utx, err := pBuilder.NewBaseTx( outputs, @@ -376,19 +337,15 @@ func (b *Builder) NewBaseTx( return walletsigner.SignUnsigned(context.Background(), pSigner, utx) } -func (b *Builder) builders(keys []*secp256k1.PrivateKey) (builder.Builder, walletsigner.Signer, error) { +func (b *Builder) builders(keys []*secp256k1.PrivateKey) (builder.Builder, walletsigner.Signer) { var ( kc = secp256k1fx.NewKeychain(keys...) addrs = kc.Addresses() + context = newContext(b.ctx, b.cfg, b.state.GetTimestamp()) backend = newBackend(addrs, b.state, b.ctx.SharedMemory) ) - context, err := newContext(b.ctx, b.cfg, b.state.GetTimestamp()) - if err != nil { - return nil, nil, err - } - builder := builder.New(addrs, context, backend) signer := walletsigner.New(kc, backend) - return builder, signer, nil + return builder, signer } diff --git a/vms/platformvm/txs/txstest/context.go b/vms/platformvm/txs/txstest/context.go index a914e9b24085..88e03c07fd1c 100644 --- a/vms/platformvm/txs/txstest/context.go +++ b/vms/platformvm/txs/txstest/context.go @@ -8,8 +8,6 @@ import ( "github.com/ava-labs/avalanchego/snow" "github.com/ava-labs/avalanchego/vms/platformvm/config" - "github.com/ava-labs/avalanchego/vms/platformvm/txs" - "github.com/ava-labs/avalanchego/vms/platformvm/txs/fee" "github.com/ava-labs/avalanchego/wallet/chain/p/builder" ) @@ -17,34 +15,22 @@ func newContext( ctx *snow.Context, cfg *config.Config, timestamp time.Time, -) (*builder.Context, error) { +) *builder.Context { var ( - staticFeesCfg = cfg.StaticConfig - upgrades = cfg.Times - staticFeeCalc = fee.NewStaticCalculator(staticFeesCfg, upgrades, timestamp) - createSubnetTx = &txs.CreateSubnetTx{} - createChainTx = &txs.CreateChainTx{} + staticFeesCfg = cfg.StaticConfig + upgrades = cfg.Times ) - if err := createSubnetTx.Visit(staticFeeCalc); err != nil { - return nil, err - } - createSubnetFee := staticFeeCalc.Fee - - if err := createChainTx.Visit(staticFeeCalc); err != nil { - return nil, err - } - createChainFee := staticFeeCalc.Fee return &builder.Context{ NetworkID: ctx.NetworkID, AVAXAssetID: ctx.AVAXAssetID, BaseTxFee: staticFeesCfg.TxFee, - CreateSubnetTxFee: createSubnetFee, + CreateSubnetTxFee: staticFeesCfg.GetCreateSubnetTxFee(upgrades, timestamp), TransformSubnetTxFee: staticFeesCfg.TransformSubnetTxFee, - CreateBlockchainTxFee: createChainFee, + CreateBlockchainTxFee: staticFeesCfg.GetCreateBlockchainTxFee(upgrades, timestamp), AddPrimaryNetworkValidatorFee: staticFeesCfg.AddPrimaryNetworkValidatorFee, AddPrimaryNetworkDelegatorFee: staticFeesCfg.AddPrimaryNetworkDelegatorFee, AddSubnetValidatorFee: staticFeesCfg.AddSubnetValidatorFee, AddSubnetDelegatorFee: staticFeesCfg.AddSubnetDelegatorFee, - }, nil + } }