arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
Fix mock server
arnaubennassar arnaubennassar5@gmail.com
Wed, 24 Mar 2021 09:12:14 +0100
commit

714530e1640a67e2611e47019e8d17a086920a27

parent

378ba669b601e0e5ad48f659eb66997e0e63f0e7

M api/api_test.go → api/api_test.go

@@ -522,11 +522,16 @@ wdelayerVars := common.WDelayerVariables{

WithdrawalDelay: uint64(3000), } - stateAPIUpdater = stateapiupdater.NewUpdater(hdb, nodeConfig, &common.SCVariables{ + stateAPIUpdater, err = stateapiupdater.NewUpdater(hdb, nodeConfig, &common.SCVariables{ Rollup: rollupVars, Auction: auctionVars, WDelayer: wdelayerVars, - }, constants) + }, constants, &stateapiupdater.RecommendedFeePolicy{ + PolicyType: stateapiupdater.RecommendedFeePolicyTypeAvgLastHour, + }) + if err != nil { + panic(err) + } // Generate test data, as expected to be received/sended from/to the API testCoords := genTestCoordinators(commonCoords)
M api/stateapiupdater/stateapiupdater.go → api/stateapiupdater/stateapiupdater.go

@@ -6,6 +6,7 @@ "sync"

"github.com/hermeznetwork/hermez-node/common" "github.com/hermeznetwork/hermez-node/db/historydb" + "github.com/hermeznetwork/hermez-node/log" "github.com/hermeznetwork/tracerr" )

@@ -17,11 +18,45 @@ config historydb.NodeConfig

vars common.SCVariablesPtr consts historydb.Constants rw sync.RWMutex + rfp *RecommendedFeePolicy +} + +// RecommendedFeePolicy describes how the recommended fee is calculated +type RecommendedFeePolicy struct { + PolicyType RecommendedFeePolicyType + StaticValue float64 +} + +// RecommendedFeePolicyType describes the different available recommended fee strategies +type RecommendedFeePolicyType string + +const ( + // Always give the same StaticValue as recommended fee + RecommendedFeePolicyTypeStatic RecommendedFeePolicyType = "Static" + // Set the recommended fee using the average fee of the last hour + RecommendedFeePolicyTypeAvgLastHour RecommendedFeePolicyType = "AvgLastHour" +) + +func (rfp *RecommendedFeePolicy) valid() bool { + switch rfp.PolicyType { + case RecommendedFeePolicyTypeStatic: + if rfp.StaticValue == 0 { + log.Warn("RcommendedFee is set to 0 USD, and the policy is static") + } + return true + case RecommendedFeePolicyTypeAvgLastHour: + return true + default: + return false + } } // NewUpdater creates a new Updater func NewUpdater(hdb *historydb.HistoryDB, config *historydb.NodeConfig, vars *common.SCVariables, - consts *historydb.Constants) *Updater { + consts *historydb.Constants, rfp *RecommendedFeePolicy) (*Updater, error) { + if ok := rfp.valid(); !ok { + return nil, tracerr.New("Invalid recommende fee policy") + } u := Updater{ hdb: hdb, config: *config,

@@ -31,9 +66,10 @@ NodePublicInfo: historydb.NodePublicInfo{

ForgeDelay: config.ForgeDelay, }, }, + rfp: rfp, } u.SetSCVars(vars.AsPtr()) - return &u + return &u, nil } // Store the State in the HistoryDB

@@ -65,13 +101,27 @@ }

// UpdateRecommendedFee update Status.RecommendedFee information func (u *Updater) UpdateRecommendedFee() error { - recommendedFee, err := u.hdb.GetRecommendedFee(u.config.MinFeeUSD, u.config.MaxFeeUSD) - if err != nil { - return tracerr.Wrap(err) + switch u.rfp.PolicyType { + case RecommendedFeePolicyTypeStatic: + u.rw.Lock() + u.state.RecommendedFee = common.RecommendedFee{ + ExistingAccount: u.rfp.StaticValue, + CreatesAccount: u.rfp.StaticValue, + CreatesAccountInternal: u.rfp.StaticValue, + } + u.rw.Unlock() + case RecommendedFeePolicyTypeAvgLastHour: + recommendedFee, err := u.hdb.GetRecommendedFee(u.config.MinFeeUSD, u.config.MaxFeeUSD) + if err != nil { + return tracerr.Wrap(err) + } + u.rw.Lock() + u.state.RecommendedFee = *recommendedFee + u.rw.Unlock() + default: + return tracerr.New("Invalid recommende fee policy") } - u.rw.Lock() - u.state.RecommendedFee = *recommendedFee - u.rw.Unlock() + return nil }
M api/swagger.yml → api/swagger.yml

@@ -59,9 +59,9 @@ externalDocs:

description: Find out more about Hermez network. url: 'https://hermez.io' servers: - - description: Hosted mock up, returns fake data usefull for development + - description: Hosted mock up, returns fake data useful for development url: https://apimock.hermez.network - - description: Localhost mock up, returns fake data usefull for development + - description: Localhost mock up, returns fake data useful for development url: http://localhost:4010 - description: Testnet (Rinkeby) server url: https://api.testnet.hermez.io
M cli/node/cfg.buidler.toml → cli/node/cfg.buidler.toml

@@ -145,3 +145,11 @@ [Coordinator.Debug]

BatchPath = "/tmp/iden3-test/hermez/batchesdebug" LightScrypt = true # RollupVerifierIndex = 0 + +[RecommendedFeePolicy] +# Strategy used to calculate the recommended fee that the API will expose. +# Available options: +# - Static: always return the same value (StaticValue) in USD +# - AvgLastHour: calculate using the average fee of the forged transactions during the last hour +PolicyType = "Static" +StaticValue = 0.99
M cli/node/main.go → cli/node/main.go

@@ -365,6 +365,7 @@ return nil, tracerr.Wrap(err)

} case modeCoord: cfg.mode = node.ModeCoordinator + fmt.Println("LOADING CFG") cfg.node, err = config.LoadNode(nodeCfgPath, true) if err != nil { return nil, tracerr.Wrap(err)
M config/config.go → config/config.go

@@ -8,6 +8,7 @@ "time"

"github.com/BurntSushi/toml" ethCommon "github.com/ethereum/go-ethereum/common" + "github.com/hermeznetwork/hermez-node/api/stateapiupdater" "github.com/hermeznetwork/hermez-node/common" "github.com/hermeznetwork/hermez-node/priceupdater" "github.com/hermeznetwork/tracerr"

@@ -347,8 +348,9 @@ // SQLConnectionTimeout is the maximum amount of time that an API request

// can wait to stablish a SQL connection SQLConnectionTimeout Duration } `validate:"required"` - Debug NodeDebug `validate:"required"` - Coordinator Coordinator `validate:"-"` + RecommendedFeePolicy stateapiupdater.RecommendedFeePolicy `validate:"required"` + Debug NodeDebug `validate:"required"` + Coordinator Coordinator `validate:"-"` } // APIServer is the api server configuration parameters
M node/node.go → node/node.go

@@ -288,7 +288,16 @@ if err := historyDB.SetConstants(&hdbConsts); err != nil {

return nil, tracerr.Wrap(err) } - stateAPIUpdater := stateapiupdater.NewUpdater(historyDB, &hdbNodeCfg, initSCVars, &hdbConsts) + stateAPIUpdater, err := stateapiupdater.NewUpdater( + historyDB, + &hdbNodeCfg, + initSCVars, + &hdbConsts, + &cfg.RecommendedFeePolicy, + ) + if err != nil { + return nil, tracerr.Wrap(err) + } var coord *coordinator.Coordinator if mode == ModeCoordinator {