Skip to content

Commit

Permalink
simplified get chain and subnet fees
Browse files Browse the repository at this point in the history
  • Loading branch information
abi87 committed Apr 23, 2024
1 parent ac20888 commit db56045
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 95 deletions.
8 changes: 2 additions & 6 deletions vms/platformvm/service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)
Expand Down
12 changes: 2 additions & 10 deletions vms/platformvm/txs/fee/calculator.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
20 changes: 20 additions & 0 deletions vms/platformvm/txs/fee/static_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
75 changes: 16 additions & 59 deletions vms/platformvm/txs/txstest/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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
}
26 changes: 6 additions & 20 deletions vms/platformvm/txs/txstest/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,43 +8,29 @@ 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"
)

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
}
}

0 comments on commit db56045

Please sign in to comment.