Skip to content

Commit 37bb42c

Browse files
committed
Bootstrap surge factor using the network's current value
1 parent fa36f38 commit 37bb42c

8 files changed

Lines changed: 65 additions & 17 deletions

File tree

bootstrap/bootstrap.go

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ package bootstrap
22

33
import (
44
"context"
5+
_ "embed"
56
"errors"
67
"fmt"
78
"math"
89
"time"
910

1011
pebbleDB "github.com/cockroachdb/pebble"
1112
gethTypes "github.com/ethereum/go-ethereum/core/types"
13+
"github.com/onflow/cadence"
1214
"github.com/onflow/flow-go-sdk/access"
1315
"github.com/onflow/flow-go-sdk/access/grpc"
1416
"github.com/onflow/flow-go/fvm/environment"
@@ -50,6 +52,11 @@ const (
5052
DefaultResourceExhaustedMaxRetryDelay = 30 * time.Second
5153
)
5254

55+
var (
56+
//go:embed cadence/get_fees_surge_factor.cdc
57+
getFeesSurgeFactor []byte
58+
)
59+
5360
type Storages struct {
5461
Storage *pebble.Storage
5562
Registers *pebble.RegisterStorage
@@ -649,12 +656,12 @@ func setupStorage(
649656
// }
650657

651658
feeParameters := pebble.NewFeeParameters(store)
652-
if _, err = feeParameters.Get(); errors.Is(err, errs.ErrEntityNotFound) {
653-
if err := feeParameters.Store(models.DefaultFeeParameters, batch); err != nil {
654-
return nil, nil, fmt.Errorf("failed to bootstrap fee parameters: %w", err)
655-
}
656-
} else if err != nil {
657-
return nil, nil, fmt.Errorf("failed to load latest fee parameters: %w", err)
659+
currentFeeParams, err := getNetworkFeeParams(context.Background(), config, client, logger)
660+
if err != nil {
661+
return nil, nil, fmt.Errorf("failed to fetch current fees surge factor: %w", err)
662+
}
663+
if err := feeParameters.Store(currentFeeParams, batch); err != nil {
664+
return nil, nil, fmt.Errorf("failed to bootstrap fee parameters: %w", err)
658665
}
659666

660667
if batch.Count() > 0 {
@@ -794,3 +801,36 @@ func (m *metricsWrapper) Stop() {
794801
m.stopFN()
795802
<-m.Done()
796803
}
804+
805+
// getNetworkFeeParams returns the network's current Flow fees parameters
806+
func getNetworkFeeParams(
807+
ctx context.Context,
808+
config config.Config,
809+
client *requester.CrossSporkClient,
810+
logger zerolog.Logger,
811+
) (*models.FeeParameters, error) {
812+
val, err := client.ExecuteScriptAtLatestBlock(
813+
ctx,
814+
requester.ReplaceAddresses(getFeesSurgeFactor, config.FlowNetworkID),
815+
nil,
816+
)
817+
if err != nil {
818+
return nil, err
819+
}
820+
821+
// sanity check, should never occur
822+
if _, ok := val.(cadence.UFix64); !ok {
823+
return nil, fmt.Errorf("failed to convert surgeFactor %v to UFix64, got type: %T", val, val)
824+
}
825+
826+
surgeFactor := val.(cadence.UFix64)
827+
828+
logger.Debug().
829+
Uint64("surge-factor", uint64(surgeFactor)).
830+
Msg("get current surge factor executed")
831+
832+
feeParameters := models.DefaultFeeParameters()
833+
feeParameters.SurgeFactor = surgeFactor
834+
835+
return feeParameters, nil
836+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import FlowFees
2+
3+
access(all) fun main(): UFix64 {
4+
return FlowFees.getFeeParameters().surgeFactor
5+
}

models/fee_parameters.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ const feeParamsPrecision = 100_000_000
1212

1313
var surgeFactorScale = big.NewInt(feeParamsPrecision)
1414

15-
var DefaultFeeParameters = &FeeParameters{
16-
SurgeFactor: cadence.UFix64(feeParamsPrecision),
17-
InclusionEffortCost: cadence.UFix64(feeParamsPrecision),
18-
ExecutionEffortCost: cadence.UFix64(feeParamsPrecision),
15+
func DefaultFeeParameters() *FeeParameters {
16+
return &FeeParameters{
17+
SurgeFactor: cadence.UFix64(feeParamsPrecision),
18+
InclusionEffortCost: cadence.UFix64(feeParamsPrecision),
19+
ExecutionEffortCost: cadence.UFix64(feeParamsPrecision),
20+
}
1921
}
2022

2123
type FeeParameters struct {

services/requester/batch_tx_pool.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ func (t *BatchTxPool) batchSubmitTransactionsForSameAddress(
218218
return err
219219
}
220220

221-
script := replaceAddresses(batchRunTxScript, t.config.FlowNetworkID)
221+
script := ReplaceAddresses(batchRunTxScript, t.config.FlowNetworkID)
222222
flowTx, err := t.buildTransaction(
223223
latestBlock,
224224
account,
@@ -254,7 +254,7 @@ func (t *BatchTxPool) submitSingleTransaction(
254254
return err
255255
}
256256

257-
script := replaceAddresses(runTxScript, t.config.FlowNetworkID)
257+
script := ReplaceAddresses(runTxScript, t.config.FlowNetworkID)
258258
flowTx, err := t.buildTransaction(
259259
latestBlock,
260260
account,

services/requester/remote_cadence_arch.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ func (rca *RemoteCadenceArch) runCall(input []byte) (*evmTypes.ResultSummary, er
109109
scriptResult, err := rca.client.ExecuteScriptAtBlockHeight(
110110
context.Background(),
111111
rca.blockHeight,
112-
replaceAddresses(dryRunScript, rca.chainID),
112+
ReplaceAddresses(dryRunScript, rca.chainID),
113113
[]cadence.Value{hexEncodedTx, hexEncodedAddress},
114114
)
115115
if err != nil {

services/requester/requester.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ func (e *EVM) GetCode(
453453
func (e *EVM) GetLatestEVMHeight(ctx context.Context) (uint64, error) {
454454
val, err := e.client.ExecuteScriptAtLatestBlock(
455455
ctx,
456-
replaceAddresses(getLatestEVMHeight, e.config.FlowNetworkID),
456+
ReplaceAddresses(getLatestEVMHeight, e.config.FlowNetworkID),
457457
nil,
458458
)
459459
if err != nil {

services/requester/single_tx_pool.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ func (t *SingleTxPool) Add(
9898
return err
9999
}
100100

101-
script := replaceAddresses(runTxScript, t.config.FlowNetworkID)
101+
script := ReplaceAddresses(runTxScript, t.config.FlowNetworkID)
102102
flowTx, err := t.buildTransaction(
103103
latestBlock,
104104
account,

services/requester/utils.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ import (
88
"github.com/onflow/flow-go/model/flow"
99
)
1010

11-
// replaceAddresses replace the addresses based on the network
12-
func replaceAddresses(script []byte, chainID flow.ChainID) []byte {
11+
// ReplaceAddresses replace the addresses based on the network
12+
func ReplaceAddresses(script []byte, chainID flow.ChainID) []byte {
1313
// make the list of all contracts we should replace address for
1414
sc := systemcontracts.SystemContractsForChain(chainID)
1515
contracts := []systemcontracts.SystemContract{
1616
sc.EVMContract,
1717
sc.FungibleToken,
1818
sc.FlowToken,
19+
sc.FlowFees,
1920
}
2021

2122
s := string(script)

0 commit comments

Comments
 (0)