UNPKG

@eth-optimism/balance-monitor

Version:

[Optimism] Forta Agent that reports whether certain accounts have fallen below some balance

55 lines 2.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.accounts = void 0; const forta_agent_1 = require("forta-agent"); const ethers_1 = require("ethers"); const utils_1 = require("./utils"); exports.accounts = [ { name: 'Sequencer', address: process.env.SEQUENCER_ADDRESS, thresholds: { danger: ethers_1.utils.parseEther(process.env.SEQUENCER_DANGER_THRESHOLD), }, }, { name: 'Proposer', address: process.env.PROPOSER_ADDRESS, thresholds: { danger: ethers_1.utils.parseEther(process.env.PROPOSER_DANGER_THRESHOLD), }, }, ]; const provideHandleBlock = (provider) => { return async (blockEvent) => { const findings = []; for (const [, account] of exports.accounts.entries()) { const accountBalance = ethers_1.BigNumber.from((await provider.getBalance(account.address, blockEvent.blockNumber)).toString()); if (accountBalance.lte(account.thresholds.danger)) { const alertId = `OPTIMISM-BALANCE-DANGER-${account.name}`; const description = (0, utils_1.describeFinding)(account.address, accountBalance, account.thresholds.danger); if (process.env.OPS_GENIE_KEY !== undefined) { await (0, utils_1.createAlert)({ alias: alertId, message: description }); } findings.push(forta_agent_1.Finding.fromObject({ name: 'Minimum Account Balance', description, alertId, severity: forta_agent_1.FindingSeverity.High, type: forta_agent_1.FindingType.Info, metadata: { balance: accountBalance.toString(), }, })); } } await (0, utils_1.heartBeat)(); return findings; }; }; const l1Provider = new ethers_1.providers.JsonRpcProvider(process.env.L1_RPC_URL); exports.default = { provideHandleBlock, handleBlock: provideHandleBlock(l1Provider), }; //# sourceMappingURL=agent.js.map