Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
202 commits
Select commit Hold shift + click to select a range
10d71e7
fee manager draft
abi87 Jan 8, 2024
f4da004
fee calculator draft
abi87 Jan 8, 2024
c705d55
some more fee calculator drafting
abi87 Jan 8, 2024
75b93b7
wired in fee calculator
abi87 Jan 8, 2024
b7a539c
fixed leftovers
abi87 Jan 8, 2024
195741f
nit
abi87 Jan 8, 2024
b86f784
fixed EFork fork time
abi87 Jan 8, 2024
033abd0
fixed DefaultUnitPrices
abi87 Jan 8, 2024
6e24cea
added UTs
abi87 Jan 8, 2024
b79b295
nit
abi87 Jan 8, 2024
5a56f0e
added UTXORead fee dimension
abi87 Jan 8, 2024
23749c0
added UTXOWrite fee dimension
abi87 Jan 8, 2024
421032c
minor renaming
abi87 Jan 8, 2024
82fb788
nit
abi87 Jan 9, 2024
7f2c799
wip: improved utxos complexity metering
abi87 Jan 9, 2024
3cf241a
wip: adding UTs
abi87 Jan 9, 2024
2ffcd08
some more UTs
abi87 Jan 9, 2024
cceccfd
UTs cleanup
abi87 Jan 9, 2024
8df89e5
added feeCalculator to avm
abi87 Jan 9, 2024
136c812
fixed avm fee manager
abi87 Jan 10, 2024
fbf219f
added avm UTs for fee calculator
abi87 Jan 10, 2024
6c3939c
nit
abi87 Jan 10, 2024
52ea70d
Merge branch 'dev' into p-chain_dynamic-fees
abi87 Jan 10, 2024
6154ee7
Merge branch 'dev' into p-chain_dynamic-fees
abi87 Jan 10, 2024
8b45443
Merge branch 'e-fork-scaffolding' into p-chain_dynamic-fees
abi87 Jan 10, 2024
d77ee0e
refactored fees
abi87 Jan 11, 2024
85ae069
repackaging
abi87 Jan 11, 2024
e2742b1
p-chain fee calculator repackaging
abi87 Jan 11, 2024
687dcf0
EXTENDED CODEC SIZE TO PROCESS PARTIALLY FILLED TXS
abi87 Jan 11, 2024
f40fa5e
nit
abi87 Jan 11, 2024
5e74e36
Merge branch 'e-fork-scaffolding' into p-chain_dynamic-fees
abi87 Jan 12, 2024
3cd30f8
Merge branch 'p-chain_dynamic-fees' of github.com:ava-labs/avalancheg…
abi87 Jan 12, 2024
2123e4d
wip: draft of tx financing with dynamic fees
abi87 Jan 12, 2024
cf2c55c
UT for codec size additivity
abi87 Jan 12, 2024
b14d514
exported inputs and outputs fee dimensions calculations
abi87 Jan 12, 2024
3d6f980
wip: keep on drafting tx financing with dynamic fees
abi87 Jan 12, 2024
f472b39
wip: keep on drafting tx financing with dynamic fees
abi87 Jan 12, 2024
0b94f8e
Merge branch 'e-fork-scaffolding' into p-chain_dynamic-fees
abi87 Jan 15, 2024
8b8c1fa
some more UTs
abi87 Jan 15, 2024
2ff80c8
added UTs for stake amounts
abi87 Jan 15, 2024
1c151c0
nit: simplified UTs
abi87 Jan 15, 2024
c1b8f7a
extended UTs checks
abi87 Jan 15, 2024
67fa06e
nit
abi87 Jan 15, 2024
ac1d066
added UTs with locked UTXOs
abi87 Jan 15, 2024
7f9bc12
nit
abi87 Jan 15, 2024
dc85668
nits
abi87 Jan 15, 2024
5a684d3
wip: extended financing of txs with dynamic fees
abi87 Jan 15, 2024
a05df57
wip: drafted ImportTx builder
abi87 Jan 16, 2024
a4bdc70
added UTs
abi87 Jan 16, 2024
a196754
repackaged avm fee calculator
abi87 Jan 16, 2024
85bff3d
removed some code duplication
abi87 Jan 17, 2024
498112d
Merge branch 'e-fork-scaffolding' into p-chain_dynamic-fees
abi87 Jan 17, 2024
0d5b618
added p-chain fees calculator
abi87 Jan 17, 2024
8623d08
added x-chain fees calculator
abi87 Jan 17, 2024
dea17c0
Merge branch 'introducing-fees-calculators' into p-chain_dynamic-fees
abi87 Jan 17, 2024
ed2875c
extended codec size
abi87 Jan 17, 2024
14f914b
Merge branch 'e-fork-scaffolding' into introducing-fees-calculators
abi87 Jan 18, 2024
1b1cc99
nits
abi87 Jan 18, 2024
3efc606
Merge branch 'introducing-fees-calculators' into codec-upgrades-for-d…
abi87 Jan 18, 2024
504f6c7
added UT
abi87 Jan 18, 2024
8dcc8e8
Merge branch 'codec-upgrades-for-dynamic-fees' of github.com:ava-labs…
abi87 Jan 18, 2024
8dd8879
Merge branch 'codec-upgrades-for-dynamic-fees' into p-chain_dynamic-fees
abi87 Jan 18, 2024
524631c
reduced diff
abi87 Jan 18, 2024
9e668d5
nit
abi87 Jan 18, 2024
8819964
Merge branch 'codec-upgrades-for-dynamic-fees' into p-chain_dynamic-fees
abi87 Jan 18, 2024
01b51a9
Merge branch 'e-fork-scaffolding' into introducing-fees-calculators
abi87 Jan 22, 2024
460395f
Merge branch 'introducing-fees-calculators' into codec-upgrades-for-d…
abi87 Jan 22, 2024
b881e92
Merge branch 'codec-upgrades-for-dynamic-fees' into p-chain_dynamic-fees
abi87 Jan 22, 2024
057a4e4
exported p-chain unit fees via API
abi87 Jan 22, 2024
27eb36d
exported p-chain block units cap via API
abi87 Jan 22, 2024
e9c440b
wip: restructured fees calculator
abi87 Jan 22, 2024
b417546
wip: moving multidimensional fees configs to state
abi87 Jan 22, 2024
02c6084
cleanup
abi87 Jan 22, 2024
9ed258d
wip: multifee tx construction in wallet
abi87 Jan 22, 2024
9c123f0
wip: multifee tx construction in wallet
abi87 Jan 22, 2024
cbe4b04
added builder backend mock
abi87 Jan 23, 2024
456cde9
wip adding UTs for dynamic fees builder
abi87 Jan 23, 2024
e0490ae
Merge branch 'p-chain_dynamic-fees' of github.com:ava-labs/avalancheg…
abi87 Jan 23, 2024
4170845
wip: adding UTs for dynamic fees builder
abi87 Jan 23, 2024
5b32e72
wip: fixing UTs
abi87 Jan 24, 2024
03d1829
moved wallet mocks
abi87 Jan 24, 2024
5854363
expanded UTXOs list
abi87 Jan 24, 2024
d78aeb3
wip: adding txs to dynamic fees builder
abi87 Jan 24, 2024
f7a7912
wip: adding some more txs to dynamic fees builder
abi87 Jan 24, 2024
c5182e8
added ExportTx to dynamic fees builder
abi87 Jan 25, 2024
728d8db
added BaseTx to dynamic fees builder
abi87 Jan 25, 2024
c76445d
fixed Add/RemoveFees
abi87 Jan 25, 2024
226e8db
added ImportTx to dynamic fees builder
abi87 Jan 26, 2024
c5f083b
integrated dynamic fees builder into wallet
abi87 Jan 26, 2024
0d90f0f
enabled E fork in testnet + minor fixes
abi87 Jan 26, 2024
67f0dcf
Merge branch 'e-fork-scaffolding' into introducing-fees-calculators
abi87 Jan 26, 2024
dd086bd
Merge branch 'introducing-fees-calculators' into codec-upgrades-for-d…
abi87 Jan 26, 2024
b4f44c1
Merge branch 'codec-upgrades-for-dynamic-fees' into p-chain_dynamic-fees
abi87 Jan 26, 2024
d984b3b
fixed merge
abi87 Jan 26, 2024
48e6939
Merge branch 'introducing-fees-calculators' into codec-upgrades-for-d…
abi87 Jan 26, 2024
f2b6b9b
Merge branch 'codec-upgrades-for-dynamic-fees' into p-chain_dynamic-fees
abi87 Jan 26, 2024
77e5779
fixed merge
abi87 Jan 26, 2024
5b35ad3
leftover from previous merge
abi87 Jan 26, 2024
7a2a673
wip: fixing e2e tests
abi87 Jan 26, 2024
9b32bb0
moved X-chain changes to different branch
abi87 Jan 26, 2024
921a7dd
fixed p-chain workflow e2e test
abi87 Jan 26, 2024
36399f4
nit
abi87 Jan 26, 2024
cb46cdf
nit
abi87 Jan 26, 2024
5bad537
leftover
abi87 Jan 26, 2024
93fff34
improved utxos selection to finance txs in wallet
abi87 Jan 29, 2024
1f3cece
fix CI compilation
abi87 Jan 29, 2024
7415a58
consolidated code in wallet
abi87 Jan 29, 2024
8197e72
fixed e2e test to account for fees
abi87 Jan 29, 2024
332789d
Merge branch 'e-fork-scaffolding' into introducing-fees-calculators
abi87 Jan 29, 2024
25b9424
reduced diffs
abi87 Jan 29, 2024
3328f8c
Merge branch 'introducing-fees-calculators' into codec-upgrades-for-d…
abi87 Jan 29, 2024
9e83485
Merge branch 'codec-upgrades-for-dynamic-fees' into p-chain_dynamic-fees
abi87 Jan 29, 2024
d28afdf
restored x-chain fee calculator
abi87 Jan 29, 2024
ddce06a
added dynamic fees builder for x-chain wallet
abi87 Jan 29, 2024
c40fe2b
added some more txs to x-chain dynamic fees builder
abi87 Jan 30, 2024
68b3c8c
introduced fees tracking window
abi87 Jan 31, 2024
81b4cf8
wip:drafting unit fees update mechs
abi87 Jan 31, 2024
4e4e3ec
added windows UTs
abi87 Jan 31, 2024
6bb5796
added ComputeNext fee manager UTs
abi87 Jan 31, 2024
cff5c2c
nit
abi87 Jan 31, 2024
80b9186
passed windows in fee manager ctor
abi87 Jan 31, 2024
1606c83
wip: persisting dynamic unit fees and windows
abi87 Jan 31, 2024
6644311
wip: introducing dynamic fees config
abi87 Feb 1, 2024
2315dc1
wip: introducing unit fees update
abi87 Feb 1, 2024
a279f4e
wip: persist unit fees and fee windows
abi87 Feb 1, 2024
744c41e
nits
abi87 Feb 1, 2024
c1d7dd2
wip: introducing dynamic fees config
abi87 Feb 1, 2024
e109041
wip: persisting dynamic unit fees and windows
abi87 Feb 1, 2024
f8c99b7
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 6, 2024
62d5125
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 9, 2024
355bf18
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 13, 2024
c80f4da
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 16, 2024
f995750
nit
abi87 Feb 16, 2024
23e5cf5
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 16, 2024
9c6c9e5
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 18, 2024
a299f48
wip: cleaning up X-chain wallet
abi87 Feb 18, 2024
c7f0c70
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 18, 2024
cd8d6df
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 19, 2024
cdf1785
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 23, 2024
5655a61
fixed avm client calls
abi87 Feb 23, 2024
3f54b34
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 25, 2024
b6f61ba
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 26, 2024
a070817
fixed changeDenom
abi87 Feb 29, 2024
b59913c
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Feb 29, 2024
3536499
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 4, 2024
cc7a334
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 7, 2024
0d3a382
exponential fees update
abi87 Mar 10, 2024
14ce036
fixed update fee rates calls
abi87 Mar 10, 2024
e73435b
another fee rate update approximation
abi87 Mar 11, 2024
d4ea8ac
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 11, 2024
4b8531e
fixed build blocks for e upgrade
abi87 Mar 11, 2024
13e8b90
exponential fee update stability test
abi87 Mar 11, 2024
551b920
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 11, 2024
cb6aae1
fixed merge
abi87 Mar 11, 2024
0470a42
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 12, 2024
0a5c32c
simplified fee manager
abi87 Mar 15, 2024
a4558ee
simplified dynamic fees config
abi87 Mar 15, 2024
26c75bd
fixed fee update calls
abi87 Mar 18, 2024
b627cd2
added dynamic fees custom config
abi87 Mar 18, 2024
3309752
removed floats from fees update algo
abi87 Mar 18, 2024
1c3070e
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 18, 2024
e449d45
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 19, 2024
0b56bd2
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 21, 2024
2634462
restructured following P-chain
abi87 Mar 22, 2024
e3018a8
renaming for clarify
abi87 Mar 22, 2024
5eed97c
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 22, 2024
1506ff5
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 22, 2024
cccf6cd
some more naming cleanup
abi87 Mar 22, 2024
eca84c4
added x-chain e2e test
abi87 Mar 22, 2024
425ae86
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 25, 2024
94c76ea
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 26, 2024
62e2ec0
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 26, 2024
5d54294
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 27, 2024
8a43b65
update avm tx builder to use next fee manager
abi87 Mar 27, 2024
4c93dd5
removed some code duplication
abi87 Mar 27, 2024
3aecfc3
removed some more code duplication
abi87 Mar 27, 2024
10524b5
wip: fixing e2e tests
abi87 Mar 28, 2024
5418148
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 28, 2024
6e561d6
fixed e2e test
abi87 Mar 28, 2024
34c0307
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 29, 2024
07c19f1
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Mar 29, 2024
b8f4c2b
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 2, 2024
3d315aa
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 2, 2024
0fc4882
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 3, 2024
559ba62
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 4, 2024
7697979
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 8, 2024
9bf94d9
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 11, 2024
c752aac
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 12, 2024
fe6be02
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 15, 2024
3868210
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 23, 2024
bc46e25
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 26, 2024
3f8e7a1
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 Apr 29, 2024
fd4b4f0
update fee update algo
abi87 Apr 29, 2024
fa31853
removed fee tests flakiness
abi87 Apr 29, 2024
0eb3e34
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 May 2, 2024
52f28c8
aligned fee update algo
abi87 May 2, 2024
05fe446
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 May 6, 2024
7fc5021
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 May 9, 2024
b9fbcc8
fixed update fee algo
abi87 May 9, 2024
ec1a96b
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 May 10, 2024
b03de00
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 May 14, 2024
113313a
Merge branch 'x-chain_meter_fees' into x-chain_units-fees-update
abi87 May 15, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion tests/e2e/p/workflow.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"github.com/ava-labs/avalanchego/utils/constants"
"github.com/ava-labs/avalanchego/utils/crypto/bls"
"github.com/ava-labs/avalanchego/utils/units"
"github.com/ava-labs/avalanchego/vms/avm"
"github.com/ava-labs/avalanchego/vms/avm/config"
"github.com/ava-labs/avalanchego/vms/avm/txs/fees"
"github.com/ava-labs/avalanchego/vms/components/avax"
Expand Down Expand Up @@ -52,6 +53,7 @@ var _ = e2e.DescribePChain("[Workflow]", func() {
xBuilder := xWallet.Builder()
xContext := xBuilder.Context()
pChainClient := platformvm.NewClient(nodeURI.URI)
xChainClient := avm.NewClient(nodeURI.URI, "X")

tests.Outf("{{blue}} fetching minimal stake amounts {{/}}\n")
minValStake, minDelStake, err := pChainClient.GetMinStake(e2e.DefaultContext(), constants.PlatformChainID)
Expand Down Expand Up @@ -188,9 +190,12 @@ var _ = e2e.DescribePChain("[Workflow]", func() {

// retrieve fees paid for the tx
feeCfg := config.GetDynamicFeesConfig(true /*isEActive*/)
feeRates, _, err := xChainClient.GetFeeRates(e2e.DefaultContext())
require.NoError(err)

feeCalc := fees.NewDynamicCalculator(
xbuilder.Parser.Codec(),
commonfees.NewManager(feeCfg.FeeRate),
commonfees.NewManager(feeRates),
feeCfg.BlockMaxComplexity,
tx.Creds,
)
Expand Down
126 changes: 126 additions & 0 deletions tests/e2e/x/dynamic_fees.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
// Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.

package x

import (
"github.com/stretchr/testify/require"

"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/tests"
"github.com/ava-labs/avalanchego/tests/fixture/e2e"
"github.com/ava-labs/avalanchego/tests/fixture/tmpnet"
"github.com/ava-labs/avalanchego/utils/units"
"github.com/ava-labs/avalanchego/vms/avm"
"github.com/ava-labs/avalanchego/vms/components/verify"
"github.com/ava-labs/avalanchego/vms/secp256k1fx"

commonfees "github.com/ava-labs/avalanchego/vms/components/fees"
ginkgo "github.com/onsi/ginkgo/v2"
)

var _ = ginkgo.Describe("[Dynamic Fees]", func() {
require := require.New(ginkgo.GinkgoT())

ginkgo.It("should ensure that the dynamic multifees are affected by load", func() {
customDynamicFeesConfig := commonfees.DynamicFeesConfig{
InitialFeeRate: commonfees.Dimensions{1, 2, 3, 4},
MinFeeRate: commonfees.Dimensions{1, 1, 1, 1},
UpdateCoefficient: commonfees.Dimensions{1, 1, 1, 1},
BlockMaxComplexity: commonfees.Max,

// BlockUnitsTarget are set to cause an increase of fees while simple transactions are issued
BlockTargetComplexityRate: commonfees.Dimensions{300, 80, 150, 800},
}

ginkgo.By("creating a new private network to ensure isolation from other tests")
privateNetwork := &tmpnet.Network{
Owner: "avalanchego-e2e-dynamic-fees",
ChainConfigs: map[string]tmpnet.FlagsMap{
"X": {
"dynamic-fees-config": customDynamicFeesConfig,
},
},
}
e2e.Env.StartPrivateNetwork(privateNetwork)

ginkgo.By("setup a wallet and a X-chain client")
node := privateNetwork.Nodes[0]
nodeURI := tmpnet.NodeURI{
NodeID: node.NodeID,
URI: node.URI,
}
keychain := secp256k1fx.NewKeychain(privateNetwork.PreFundedKeys...)
baseWallet := e2e.NewWallet(keychain, nodeURI)
xWallet := baseWallet.X()
xChainClient := avm.NewClient(nodeURI.URI, "X")

// retrieve initial balances
xBuilder := xWallet.Builder()
xContext := xBuilder.Context()
avaxAssetID := xContext.AVAXAssetID
xBalances, err := xWallet.Builder().GetFTBalance()
require.NoError(err)
xStartBalance := xBalances[avaxAssetID]
tests.Outf("{{blue}} X-chain initial balance: %d {{/}}\n", xStartBalance)

ginkgo.By("checking that initial fee values match with configured ones", func() {
currFeeRates, _, err := xChainClient.GetFeeRates(e2e.DefaultContext())
require.NoError(err)
require.Equal(customDynamicFeesConfig.InitialFeeRate, currFeeRates)
})

ginkgo.By("issue expensive transactions so to increase the fee rates to be paid for accepting the transactons",
func() {
currFeeRates := commonfees.Empty

ginkgo.By("repeatedly change the permissioned subnet owner to increase fee rates", func() {
txsCount := 10
for i := 0; i < txsCount; i++ {
owner := secp256k1fx.OutputOwners{
Threshold: 1,
Addrs: []ids.ShortID{
keychain.Keys[1].Address(),
},
}

_, err := xWallet.IssueCreateAssetTx(
"HI",
"HI",
byte(txsCount),
map[uint32][]verify.State{
0: {
&secp256k1fx.TransferOutput{
Amt: units.Schmeckle,
OutputOwners: owner,
},
},
},
)
require.NoError(err)

updatedFeeRates, _, err := xChainClient.GetFeeRates(e2e.DefaultContext())
require.NoError(err)
tests.Outf("{{blue}} current fee rates: %v {{/}}\n", updatedFeeRates)

ginkgo.By("check that fee rates components have increased")
require.True(commonfees.Compare(currFeeRates, updatedFeeRates))
currFeeRates = updatedFeeRates
}
})

ginkgo.By("wait for the fee rates to decrease", func() {
initialFeeRates := currFeeRates
e2e.Eventually(func() bool {
var err error
_, currFeeRates, err = xChainClient.GetFeeRates(e2e.DefaultContext())
require.NoError(err)
tests.Outf("{{blue}} next fee rates: %v {{/}}\n", currFeeRates)
return commonfees.Compare(initialFeeRates, currFeeRates)
}, e2e.DefaultTimeout, e2e.DefaultPollingInterval, "failed to see gas price decrease before timeout")
tests.Outf("\n{{blue}}fee rates have decreased to %v{{/}}\n", currFeeRates)
})
},
)
})
})
8 changes: 7 additions & 1 deletion tests/e2e/x/transfer/virtuous.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,12 @@ var _ = e2e.DescribeXChainSerial("[Virtuous Transfer Tx AVAX]", func() {
require.Contains(err.Error(), "insufficient funds")
})

// retrieve the unit fees that will be used for the BaseTx
nodeURI := e2e.Env.GetRandomNodeURI()
xChainClient := avm.NewClient(nodeURI.URI, "X")
_, feeRates, err := xChainClient.GetFeeRates(e2e.DefaultContext())
require.NoError(err)

tx, err := wallets[fromIdx].X().IssueBaseTx(
[]*avax.TransferableOutput{{
Asset: avax.Asset{
Expand All @@ -193,7 +199,7 @@ var _ = e2e.DescribeXChainSerial("[Virtuous Transfer Tx AVAX]", func() {
feeCfg := config.GetDynamicFeesConfig(true /*isEActive*/)
feeCalc := fees.NewDynamicCalculator(
xbuilder.Parser.Codec(),
commonfees.NewManager(feeCfg.FeeRate),
commonfees.NewManager(feeRates),
feeCfg.BlockMaxComplexity,
tx.Creds,
)
Expand Down
48 changes: 30 additions & 18 deletions vms/avm/block/builder/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@ import (
"github.com/ava-labs/avalanchego/vms/avm/config"
"github.com/ava-labs/avalanchego/vms/avm/state"
"github.com/ava-labs/avalanchego/vms/avm/txs"
"github.com/ava-labs/avalanchego/vms/avm/txs/fees"
"github.com/ava-labs/avalanchego/vms/avm/txs/mempool"
"github.com/ava-labs/avalanchego/vms/components/fees"

blockexecutor "github.com/ava-labs/avalanchego/vms/avm/block/executor"
txexecutor "github.com/ava-labs/avalanchego/vms/avm/txs/executor"
commonfees "github.com/ava-labs/avalanchego/vms/components/fees"
)

// targetBlockSize is the max block size we aim to produce
Expand Down Expand Up @@ -76,13 +77,10 @@ func (b *builder) BuildBlock(context.Context) (snowman.Block, error) {
}

preferredHeight := preferred.Height()
preferredTimestamp := preferred.Timestamp()

nextHeight := preferredHeight + 1
nextTimestamp := b.clk.Time() // [timestamp] = max(now, parentTime)
if preferredTimestamp.After(nextTimestamp) {
nextTimestamp = preferredTimestamp
}

parentBlkTime := preferred.Timestamp()
nextBlkTime := blockexecutor.NextBlockTime(parentBlkTime, b.clk)

stateDiff, err := state.NewDiff(preferredID, b.manager)
if err != nil {
Expand All @@ -94,18 +92,28 @@ func (b *builder) BuildBlock(context.Context) (snowman.Block, error) {
inputs set.Set[ids.ID]
remainingSize = targetBlockSize

chainTime = stateDiff.GetTimestamp()
isEActive = b.backend.Config.IsEActivated(chainTime)
feesCfg = config.GetDynamicFeesConfig(isEActive)
feeManager = fees.NewManager(feesCfg.FeeRate)
chainTime = stateDiff.GetTimestamp()
isEActive = b.backend.Config.IsEActivated(chainTime)
feesCfg = config.GetDynamicFeesConfig(isEActive)
)

feeManager, err := fees.UpdatedFeeManager(stateDiff, b.backend.Config, parentBlkTime, nextBlkTime)
if err != nil {
return nil, err
}

for {
tx, exists := b.mempool.Peek()
// Invariant: [mempool.MaxTxSize] < [targetBlockSize]. This guarantees
// that we will only stop building a block once there are no
// transactions in the mempool or the block is at least
// [targetBlockSize - mempool.MaxTxSize] bytes full.
if !exists || len(tx.Bytes()) > remainingSize {
if !exists {
break
}
txSize := len(tx.Bytes())

// pre e upgrade is active, we fill blocks till a target size
// post e upgrade is active, we fill blocks till a target complexity
done := (!isEActive && txSize > remainingSize) ||
(isEActive && !commonfees.Compare(feeManager.GetCumulatedComplexity(), feesCfg.BlockTargetComplexityRate))
if done {
break
}
b.mempool.Remove(tx)
Expand Down Expand Up @@ -156,9 +164,13 @@ func (b *builder) BuildBlock(context.Context) (snowman.Block, error) {
inputs.Union(executor.Inputs)

txDiff.AddTx(tx)
txDiff.SetFeeRates(feeManager.GetFeeRates())
txDiff.SetLastBlockComplexity(feeManager.GetCumulatedComplexity())
txDiff.Apply(stateDiff)

remainingSize -= len(tx.Bytes())
if isEActive {
remainingSize -= txSize
}
blockTxs = append(blockTxs, tx)
}

Expand All @@ -169,7 +181,7 @@ func (b *builder) BuildBlock(context.Context) (snowman.Block, error) {
statelessBlk, err := block.NewStandardBlock(
preferredID,
nextHeight,
nextTimestamp,
nextBlkTime,
blockTxs,
b.backend.Codec,
)
Expand Down
Loading