diff --git a/package.json b/package.json index ef123981e..8bf674dff 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "addresses.json" ], "dependencies": { + "console-table-printer": "^2.11.1", "ethers": "^5.6.0" }, "devDependencies": { diff --git a/tasks/bridge/deposits.ts b/tasks/bridge/deposits.ts new file mode 100644 index 000000000..a94e8691c --- /dev/null +++ b/tasks/bridge/deposits.ts @@ -0,0 +1,59 @@ +import { task } from 'hardhat/config' +import { cliOpts } from '../../cli/defaults' +import { ethers } from 'ethers' +import { Table } from 'console-table-printer' + +export const TASK_BRIDGE_DEPOSITS = 'bridge:deposits' + +task(TASK_BRIDGE_DEPOSITS, 'List deposits initiated on L1GraphTokenGateway') + .addOptionalParam('addressBook', cliOpts.addressBook.description) + .addOptionalParam( + 'arbitrumAddressBook', + cliOpts.arbitrumAddressBook.description, + cliOpts.arbitrumAddressBook.default, + ) + .addOptionalParam('l1GraphConfig', cliOpts.graphConfig.description) + .addOptionalParam('l2GraphConfig', cliOpts.graphConfig.description) + .addOptionalParam('startBlock', 'Start block for the search') + .addOptionalParam('endBlock', 'End block for the search') + .setAction(async (taskArgs, hre) => { + console.log('> L1GraphTokenGateway deposits') + + const graph = hre.graph(taskArgs) + const gateway = graph.l1.contracts.L1GraphTokenGateway + console.log(`Tracking 'DepositInitiated' events on ${gateway.address}`) + + const startBlock = taskArgs.startBlock ? parseInt(taskArgs.startBlock) : 0 + const endBlock = taskArgs.endBlock ? parseInt(taskArgs.endBlock) : 'latest' + console.log(`Searching blocks from ${startBlock} to ${endBlock}`) + + const events = ( + await gateway.queryFilter(gateway.filters.DepositInitiated(), startBlock, endBlock) + ).map((e) => ({ + blockNumber: e.blockNumber, + transactionHash: e.transactionHash, + from: e.args.from, + to: e.args.to, + amount: ethers.utils.formatEther(e.args.amount), + })) + + printEvents(events) + }) + +function printEvents(events: any[]) { + const tablePrinter = new Table({ + columns: [ + { name: 'blockNumber', color: 'green' }, + { + name: 'transactionHash', + color: 'green', + }, + { name: 'from', color: 'green' }, + { name: 'to', color: 'green' }, + { name: 'amount', color: 'green' }, + ], + }) + + events.map((e) => tablePrinter.addRow(e)) + tablePrinter.printTable() +} diff --git a/tasks/bridge/withdrawals.ts b/tasks/bridge/withdrawals.ts new file mode 100644 index 000000000..4637647f0 --- /dev/null +++ b/tasks/bridge/withdrawals.ts @@ -0,0 +1,59 @@ +import { task } from 'hardhat/config' +import { cliOpts } from '../../cli/defaults' +import { ethers } from 'ethers' +import { Table } from 'console-table-printer' + +export const TASK_BRIDGE_WITHDRAWALS = 'bridge:withdrawals' + +task(TASK_BRIDGE_WITHDRAWALS, 'List withdrawals initiated on L2GraphTokenGateway') + .addOptionalParam('addressBook', cliOpts.addressBook.description) + .addOptionalParam( + 'arbitrumAddressBook', + cliOpts.arbitrumAddressBook.description, + cliOpts.arbitrumAddressBook.default, + ) + .addOptionalParam('l1GraphConfig', cliOpts.graphConfig.description) + .addOptionalParam('l2GraphConfig', cliOpts.graphConfig.description) + .addOptionalParam('startBlock', 'Start block for the search') + .addOptionalParam('endBlock', 'End block for the search') + .setAction(async (taskArgs, hre) => { + console.log('> L2GraphTokenGateway withdrawals') + + const graph = hre.graph(taskArgs) + const gateway = graph.l2.contracts.L2GraphTokenGateway + console.log(`Tracking 'WithdrawalInitiated' events on ${gateway.address}`) + + const startBlock = taskArgs.startBlock ? parseInt(taskArgs.startBlock) : 0 + const endBlock = taskArgs.endBlock ? parseInt(taskArgs.endBlock) : 'latest' + console.log(`Searching blocks from ${startBlock} to ${endBlock}`) + + const events = ( + await gateway.queryFilter(gateway.filters.WithdrawalInitiated(), startBlock, endBlock) + ).map((e) => ({ + blockNumber: e.blockNumber, + transactionHash: e.transactionHash, + from: e.args.from, + to: e.args.to, + amount: ethers.utils.formatEther(e.args.amount), + })) + + printEvents(events) + }) + +function printEvents(events: any[]) { + const tablePrinter = new Table({ + columns: [ + { name: 'blockNumber', color: 'green' }, + { + name: 'transactionHash', + color: 'green', + }, + { name: 'from', color: 'green' }, + { name: 'to', color: 'green' }, + { name: 'amount', color: 'green' }, + ], + }) + + events.map((e) => tablePrinter.addRow(e)) + tablePrinter.printTable() +} diff --git a/yarn.lock b/yarn.lock index 42084d9cd..33ead1e4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3544,6 +3544,13 @@ concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" +console-table-printer@^2.11.1: + version "2.11.1" + resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.11.1.tgz#c2dfe56e6343ea5bcfa3701a4be29fe912dbd9c7" + integrity sha512-8LfFpbF/BczoxPwo2oltto5bph8bJkGOATXsg3E9ddMJOGnWJciKHldx2zDj5XIBflaKzPfVCjOTl6tMh7lErg== + dependencies: + simple-wcswidth "^1.0.1" + console-table-printer@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.11.0.tgz#704a74cb56d66267a2527f500fedcaa78ca76259"