@eth-optimism/balance-monitor
Version:
[Optimism] Forta Agent that reports whether certain accounts have fallen below some balance
55 lines • 2.16 kB
JavaScript
;
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