diff --git a/cli/node/cfg.buidler.toml b/cli/node/cfg.buidler.toml index 6edceef..4fe8c2b 100644 --- a/cli/node/cfg.buidler.toml +++ b/cli/node/cfg.buidler.toml @@ -51,6 +51,7 @@ ForgerAddress = "0x05c23b938a85ab26A36E6314a0D02080E9ca6BeD" # Non-Boot Coordina # ForgerAddressPrivateKey = "0x30f5fddb34cd4166adb2c6003fa6b18f380fd2341376be42cf1c7937004ac7a3" # ForgerAddress = "0xb4124ceb3451635dacedd11767f004d8a28c6ee7" # Boot Coordinator # ForgerAddressPrivateKey = "0xa8a54b2d8197bc0b19bb8a084031be71835580a01e70a45a13babd16c9bc1563" +MinimumForgeAddressBalance = 0 ConfirmBlocks = 10 L1BatchTimeoutPerc = 0.6 StartSlotBlocksDelay = 2 diff --git a/config/config.go b/config/config.go index 63158c7..a9f495f 100644 --- a/config/config.go +++ b/config/config.go @@ -48,6 +48,10 @@ type ForgeBatchGasCost struct { 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 diff --git a/node/node.go b/node/node.go index 56c4d12..f5d483a 100644 --- a/node/node.go +++ b/node/node.go @@ -137,6 +137,23 @@ func NewNode(mode Mode, cfg *config.Node) (*Node, error) { 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) {