check the forge address balance before starting the node
Danilo Pantani danpantani@gmail.com
Fri, 26 Feb 2021 12:51:31 -0300
3 files changed,
22 insertions(+),
0 deletions(-)
M
cli/node/cfg.buidler.toml
→
cli/node/cfg.buidler.toml
@@ -51,6 +51,7 @@ ForgerAddress = "0x05c23b938a85ab26A36E6314a0D02080E9ca6BeD" # Non-Boot Coordinator
# ForgerAddressPrivateKey = "0x30f5fddb34cd4166adb2c6003fa6b18f380fd2341376be42cf1c7937004ac7a3" # ForgerAddress = "0xb4124ceb3451635dacedd11767f004d8a28c6ee7" # Boot Coordinator # ForgerAddressPrivateKey = "0xa8a54b2d8197bc0b19bb8a084031be71835580a01e70a45a13babd16c9bc1563" +MinimumForgeAddressBalance = 0 ConfirmBlocks = 10 L1BatchTimeoutPerc = 0.6 StartSlotBlocksDelay = 2
M
config/config.go
→
config/config.go
@@ -48,6 +48,10 @@ // Coordinator is the coordinator specific configuration.
type Coordinator struct { // ForgerAddress is the address under which this coordinator is forging ForgerAddress ethCommon.Address `validate:"required"` + // MinimumForgeAddressBalance is the minimum balance the forger address + // needs to start the coordinator in wei. Of set to 0, the coordinator + // will not check the balance before starting. + MinimumForgeAddressBalance *big.Int // FeeAccount is the Hermez account that the coordinator uses to receive fees FeeAccount struct { // Address is the ethereum address of the account to receive fees
M
node/node.go
→
node/node.go
@@ -137,6 +137,23 @@ }
keyStore = ethKeystore.NewKeyStore(cfg.Coordinator.EthClient.Keystore.Path, scryptN, scryptP) + balance, err := ethClient.BalanceAt(context.TODO(), cfg.Coordinator.ForgerAddress, nil) + if err != nil { + return nil, tracerr.Wrap(err) + } + + minForgeBalance := cfg.Coordinator.MinimumForgeAddressBalance + if minForgeBalance != nil && balance.Cmp(minForgeBalance) == -1 { + return nil, tracerr.Wrap(fmt.Errorf( + "forger account balance is less than cfg.Coordinator.MinimumForgeAddressBalance: %v < %v", + balance.Int64(), minForgeBalance)) + } + log.Infow("forger ethereum account balance", + "addr", cfg.Coordinator.ForgerAddress, + "balance", balance.Int64(), + "minForgeBalance", minForgeBalance.Int64(), + ) + // Unlock Coordinator ForgerAddr in the keystore to make calls // to ForgeBatch in the smart contract if !keyStore.HasAddress(cfg.Coordinator.ForgerAddress) {