arnaucube
arnaucube/hermez-nodePublic Self-hosted repository
Merge pull request #588 from hermeznetwork/feature/check-forge-balance

check the forge address balance before starting the node
a_bennassar arnaubennassar5@gmail.com
Fri, 26 Feb 2021 17:32:53 +0100
commit

f664a3a382d8172453c512645bf721c2f7745b0a

parent

6da827c751f7844a52b1f20afdf2e3a0e41aa215

3 files changed, 22 insertions(+), 0 deletions(-)

jump to
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) {