@bgd-labs/cli 0.0.39 → 0.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ import { Command as Command6 } from "@commander-js/extra-typings";
7
7
  // package.json
8
8
  var package_default = {
9
9
  name: "@bgd-labs/cli",
10
- version: "0.0.39",
10
+ version: "0.0.41",
11
11
  main: "./dist/index.mjs",
12
12
  sideEffects: false,
13
13
  license: "MIT",
@@ -341,6 +341,7 @@ function registerProtocol(program2) {
341
341
  // src/tasks/seatbelt-report.ts
342
342
  import { IPayloadsControllerCore_ABI } from "@bgd-labs/aave-address-book/abis";
343
343
  import {
344
+ getMdContractName,
344
345
  getPayloadsController as getPayloadsController2,
345
346
  makePayloadExecutableOnTestClient as makePayloadExecutableOnTestClient2,
346
347
  renderTenderlyReport,
@@ -348,12 +349,18 @@ import {
348
349
  } from "@bgd-labs/toolbox";
349
350
  import { Option as Option5 } from "@commander-js/extra-typings";
350
351
  import { mkdirSync as mkdirSync2, writeFileSync as writeFileSync2 } from "node:fs";
351
- import { encodeFunctionData, parseAbi, zeroAddress } from "viem";
352
+ import {
353
+ encodeFunctionData,
354
+ isAddress,
355
+ parseAbi,
356
+ zeroAddress
357
+ } from "viem";
352
358
  import { toAccount } from "viem/accounts";
353
359
  import { readContract } from "viem/actions";
360
+ import * as addresses2 from "@bgd-labs/aave-address-book";
354
361
  function registerSeatbeltReport(program2) {
355
- program2.command("seatbelt-report").description("generates a seatbelt report for the payload").addOption(new Option5("-c,--chainId <number>").makeOptionMandatory()).addOption(new Option5("-pi,--payloadId <number>")).addOption(new Option5("-pa,--payloadAddress <address>")).addOption(new Option5("-pb,--payloadBytecode <hex>")).addOption(
356
- new Option5("-pc,--payloadsController <address>").makeOptionMandatory()
362
+ program2.command("seatbelt-report").description("generates a seatbelt report for the payload").addOption(new Option5("-c,--chainId <number>").makeOptionMandatory()).addOption(new Option5("--pi,--payloadId <number>")).addOption(new Option5("--pa, --payloadAddress <address>")).addOption(new Option5("--pb,--payloadBytecode <hex>")).addOption(
363
+ new Option5("--pc, --payloadsController <address>").makeOptionMandatory()
357
364
  ).addOption(
358
365
  new Option5("-o, --output <output path>").default("./reports/seatbelt/")
359
366
  ).addOption(
@@ -478,6 +485,15 @@ function registerSeatbeltReport(program2) {
478
485
  onchainLogs: {},
479
486
  config: {
480
487
  etherscanApiKey: process.env.ETHERSCAN_API_KEY
488
+ },
489
+ getContractName: (sim, address) => {
490
+ const isKnown = isKnownAddress(
491
+ address,
492
+ Number(sim.simulation.network_id)
493
+ );
494
+ if (isKnown)
495
+ return flagAsKnown(getMdContractName(sim.contracts, address));
496
+ return getMdContractName(sim.contracts, address);
481
497
  }
482
498
  });
483
499
  const filePath = `${output}/${chainId}_${payloadsController}`;
@@ -487,6 +503,30 @@ function registerSeatbeltReport(program2) {
487
503
  }
488
504
  );
489
505
  }
506
+ function flattenObject(obj, parentKey = "", result = {}) {
507
+ for (const [key, value] of Object.entries(obj)) {
508
+ const newKey = parentKey ? `${parentKey}.${key}` : key;
509
+ if (value !== null && typeof value === "object" && !Array.isArray(value)) {
510
+ flattenObject(value, newKey, result);
511
+ } else {
512
+ result[newKey] = value;
513
+ }
514
+ }
515
+ return result;
516
+ }
517
+ function isKnownAddress(value, chainId) {
518
+ const transformedAddresses = Object.keys(addresses2).reduce((acc, key) => {
519
+ if (addresses2[key].CHAIN_ID === chainId) {
520
+ const chainAddresses = { ...addresses2[key] };
521
+ acc.push(...Object.values(flattenObject(chainAddresses)));
522
+ }
523
+ return acc;
524
+ }, []).filter((a) => isAddress(a));
525
+ return transformedAddresses.includes(value);
526
+ }
527
+ function flagAsKnown(address) {
528
+ return `${address} :ghost:`;
529
+ }
490
530
 
491
531
  // src/index.ts
492
532
  var program = new Command6();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../package.json","../src/tasks/code-diff.ts","../src/tasks/aave-vnet.ts","../src/tasks/storage-diff.ts","../src/tasks/rpcs.ts","../src/tasks/protocol.ts","../src/tasks/seatbelt-report.ts"],"sourcesContent":["#!/usr/bin/env node\nimport \"dotenv/config\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport packageJson from \"../package.json\";\nimport { registerCodeDiff } from \"./tasks/code-diff\";\nimport { registerAaveVNet } from \"./tasks/aave-vnet\";\nimport { registerStorageDiff } from \"./tasks/storage-diff\";\nimport { registerRpcs } from \"./tasks/rpcs\";\nimport { registerProtocol } from \"./tasks/protocol\";\nimport { registerSeatbeltReport } from \"./tasks/seatbelt-report.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"@bgd-labs/cli\")\n .description(\"A cli to help with web3 / solidity tasks\")\n .version(packageJson.version)\n .showHelpAfterError();\n\nregisterCodeDiff(program);\nregisterAaveVNet(program);\nregisterStorageDiff(program);\nregisterRpcs(program);\nregisterProtocol(program);\nregisterSeatbeltReport(program);\n\nprogram.parse();\n","{\n \"name\": \"@bgd-labs/cli\",\n \"version\": \"0.0.39\",\n \"main\": \"./dist/index.mjs\",\n \"sideEffects\": false,\n \"license\": \"MIT\",\n \"files\": [\n \"dist/**\",\n \"README.md\"\n ],\n \"type\": \"module\",\n \"bin\": {\n \"cli\": \"dist/index.js\"\n },\n \"scripts\": {\n \"build\": \"tsup src/index.ts\",\n \"dev\": \"tsup src/index.ts --watch\",\n \"start\": \"node dist/index.js\",\n \"clean\": \"rm -rf .turbo && rm -rf node_modules && rm -rf dist\"\n },\n \"devDependencies\": {\n \"@types/node\": \"catalog:\",\n \"tsup\": \"catalog:\",\n \"typescript\": \"catalog:\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"@bgd-labs/aave-address-book\": \"^4.14.0\",\n \"@bgd-labs/toolbox\": \"workspace:*\",\n \"@commander-js/extra-typings\": \"^13.1.0\",\n \"@inquirer/prompts\": \"^7.3.2\",\n \"dotenv\": \"^16.4.7\",\n \"viem\": \"catalog:\"\n }\n}\n","import { Command, Option } from \"@commander-js/extra-typings\";\nimport {\n BlockscoutStyleSourceCode,\n diffCode,\n getSourceCode,\n parseBlockscoutStyleSourceCode,\n parseEtherscanStyleSourceCode,\n StandardJsonInput,\n} from \"@bgd-labs/toolbox\";\nimport { mkdirSync, writeFileSync } from \"node:fs\";\n\nexport function registerCodeDiff(program: Command) {\n program\n .command(\"codeDiff\")\n .description(\"generated the diff between any two addresses\")\n .addOption(new Option(\"--address1 <address>\").makeOptionMandatory())\n .addOption(new Option(\"--chainId1 <number>\").makeOptionMandatory())\n .addOption(new Option(\"--address2 <address>\").makeOptionMandatory())\n .addOption(new Option(\"--chainId2 <number>\").makeOptionMandatory())\n .addOption(new Option(\"-f, --flatten\"))\n .addOption(\n new Option(\"-o, --output <format>\")\n .choices([\"stdout\", \"file\"])\n .default(\"stdout\"),\n )\n .addOption(new Option(\"-p, --path <path>\").default(\"./diffs/code\"))\n .action(\n async ({\n address1,\n address2,\n chainId1,\n chainId2,\n flatten,\n output,\n path,\n }) => {\n const sources = await Promise.all([\n getSourceCode({\n chainId: Number(chainId1),\n address: address1 as any,\n apiKey: process.env.ETHERSCAN_API_KEY,\n }),\n getSourceCode({\n chainId: Number(chainId2),\n address: address2 as any,\n apiKey: process.env.ETHERSCAN_API_KEY,\n }),\n ]);\n const source1: StandardJsonInput = (\n sources[0] as BlockscoutStyleSourceCode\n ).AdditionalSources\n ? parseBlockscoutStyleSourceCode(\n sources[0] as BlockscoutStyleSourceCode,\n )\n : parseEtherscanStyleSourceCode(sources[0].SourceCode);\n const source2: StandardJsonInput = (\n sources[0] as BlockscoutStyleSourceCode\n ).AdditionalSources\n ? parseBlockscoutStyleSourceCode(\n sources[1] as BlockscoutStyleSourceCode,\n )\n : parseEtherscanStyleSourceCode(sources[1].SourceCode);\n const diff = await diffCode(source1, source2);\n if (flatten || output === \"stdout\") {\n const flat = Object.keys(diff).reduce((acc, key) => {\n acc += diff[key];\n return acc;\n }, \"\");\n if (output === \"stdout\") {\n console.log(flat);\n } else {\n const filePath = `${path}/${chainId1}`;\n mkdirSync(filePath, { recursive: true });\n writeFileSync(`${filePath}/${address1}_${address2}.patch`, flat);\n }\n } else {\n const filePath = `${path}/${chainId1}/${address1}_${address2}`;\n mkdirSync(filePath, { recursive: true });\n Object.keys(diff).map((file) => {\n writeFileSync(`${filePath}/${file}.patch`, diff[file]);\n });\n }\n },\n );\n}\n","import { Command, Option } from \"@commander-js/extra-typings\";\nimport {\n getNonFinalizedPayloads,\n getPayloadsController,\n makePayloadExecutableOnTestClient,\n tenderly_createVnet,\n} from \"@bgd-labs/toolbox\";\nimport { checkbox, select, Separator, input } from \"@inquirer/prompts\";\nimport * as addresses from \"@bgd-labs/aave-address-book\";\nimport { Address } from \"viem\";\n\nenum DialogOptions {\n PAYLOAD_ID,\n PAYLOAD_ADDRESS,\n PAYLOAD_ARTIFACT,\n EXIT,\n DELETE,\n}\n\nexport function registerAaveVNet(program: Command) {\n program\n .command(\"aave-vnet\")\n .description(\"creates a tenderly virtual testnet and execute payloads\")\n .addOption(new Option(\"-c,--chainId <number>\").makeOptionMandatory())\n .addOption(\n new Option(\n \"-t, --tenderlyAccessToken <string>\",\n \"defaults to env.TENDERLY_ACCESS_TOKEN\",\n ),\n )\n .addOption(\n new Option(\n \"-a, --tenderlyAccountSlug <string>\",\n \"defaults to env.TENDERLY_ACCOUNT_SLUG\",\n ),\n )\n .addOption(\n new Option(\n \"-p, --tenderlyProjectSlug <string>\",\n \"defaults to env.TENDERLY_PROJECT_SLUG\",\n ),\n )\n .action(\n async ({\n chainId,\n tenderlyAccessToken,\n tenderlyAccountSlug,\n tenderlyProjectSlug,\n }) => {\n const vnet = await tenderly_createVnet(\n {\n baseChainId: Number(chainId),\n forkChainId: 3030,\n slug: `${Math.floor(Math.random() * 1000)}acli-bgd-labs-vnet-${chainId}`,\n displayName: \"bgd-labs cli vnet\",\n },\n {\n accessToken:\n tenderlyAccessToken || process.env.TENDERLY_ACCESS_TOKEN!,\n accountSlug:\n tenderlyAccountSlug || process.env.TENDERLY_ACCOUNT_SLUG!,\n projectSlug:\n tenderlyProjectSlug || process.env.TENDERLY_PROJECT_SLUG!,\n },\n );\n console.info(\"Virtual testnet created!\");\n console.info(\"RPC:\", vnet.vnet.rpcs[0].url);\n const controllerAddress = findPayloadsController(Number(chainId))!;\n const controllerContract = getPayloadsController(\n vnet.walletClient,\n controllerAddress,\n );\n while (true) {\n const answer = await select({\n message: \"What do you want to do?\",\n choices: [\n {\n name: \"Execute a registered payload\",\n value: DialogOptions.PAYLOAD_ID,\n },\n {\n name: \"Execute a deployed (but not registered) payload\",\n value: DialogOptions.PAYLOAD_ADDRESS,\n },\n {\n name: \"Execute a local payload.\",\n value: DialogOptions.PAYLOAD_ARTIFACT,\n },\n new Separator(),\n {\n name: \"Exit (this will keep the vnet open - you can delete it via tenderly ui)\",\n value: DialogOptions.EXIT,\n },\n {\n name: \"Exit and delete\",\n value: DialogOptions.DELETE,\n },\n ],\n });\n switch (answer) {\n case DialogOptions.PAYLOAD_ID:\n const payloadIds = await getNonFinalizedPayloads(\n vnet.testClient,\n controllerAddress,\n );\n const answer = await checkbox({\n message: \"Select the payloads you want to execute\",\n choices: payloadIds.map((id) => ({\n name: String(id),\n value: String(id),\n })),\n });\n for (const id of answer) {\n await makePayloadExecutableOnTestClient(\n vnet.testClient,\n controllerAddress,\n Number(id),\n );\n await controllerContract.write.executePayload([Number(id)]);\n console.info(`Payload ${id} executed`);\n }\n break;\n case DialogOptions.PAYLOAD_ADDRESS:\n const address = await input({\n message: \"Enter the payload address\",\n });\n const currentId =\n await controllerContract.read.getPayloadsCount();\n await controllerContract.write.createPayload([\n [\n {\n target: address as Address,\n accessLevel: 1,\n callData: \"\",\n withDelegateCall: true,\n signature: \"execute()\",\n value: 0,\n },\n ],\n ]);\n await makePayloadExecutableOnTestClient(\n vnet.testClient,\n controllerAddress,\n currentId,\n );\n await controllerContract.write.executePayload([currentId]);\n break;\n case DialogOptions.EXIT:\n process.exit(0);\n case DialogOptions.DELETE:\n await vnet.delete();\n console.info(\"Virtual testnet deleted!\");\n process.exit(0);\n }\n }\n },\n );\n}\n\nexport function findPayloadsController(chainId: number): Address | void {\n const key = Object.keys(addresses).find(\n (key) =>\n (addresses[key as keyof typeof addresses] as any).CHAIN_ID === chainId &&\n (addresses[key as keyof typeof addresses] as any).PAYLOADS_CONTROLLER,\n );\n if (key)\n return (addresses[key as keyof typeof addresses] as any)\n .PAYLOADS_CONTROLLER;\n}\n","import { Command, Option } from \"@commander-js/extra-typings\";\nimport {\n diffFoundryStorageLayout,\n foundry_getStorageLayout,\n} from \"@bgd-labs/toolbox\";\n\nexport function registerStorageDiff(program: Command) {\n program\n .command(\"storageDiff\")\n .description(\"generated the storage diff between any two files\")\n .addOption(new Option(\"--contract1 <Contract|path>\").makeOptionMandatory())\n .addOption(new Option(\"--contract2 <Contract|path>\").makeOptionMandatory())\n .action(async ({ contract1, contract2 }) => {\n const storage1 = foundry_getStorageLayout(contract1);\n const storage2 = foundry_getStorageLayout(contract2);\n const result = diffFoundryStorageLayout(storage1, storage2);\n console.log(result);\n });\n}\n","import { Command, Option } from \"@commander-js/extra-typings\";\nimport { ChainId, getNetworkEnv, getRPCUrl } from \"@bgd-labs/toolbox\";\n\n/**\n * Logs a list of rpcs to be used in your foundry project\n * @param program\n */\nexport function registerRpcs(program: Command) {\n program\n .command(\"rpcs\")\n .description(\"generate a list of rpcs to be used in foundry projects\")\n .addOption(\n new Option(\"--alchemyApiKey <string>\", \"defaults to env.ALCHEMY_API_KEY\"),\n )\n .addOption(\n new Option(\n \"--quicknodeToken <string>\",\n \"defaults to env.QUICKNODE_TOKEN\",\n ),\n )\n .addOption(\n new Option(\n \"--quicknodeEndpointName <string>\",\n \"defaults to env.QUICKNODE_ENDPOINT_NAME\",\n ),\n )\n .action(\n async ({ alchemyApiKey, quicknodeToken, quicknodeEndpointName }) => {\n let env = \"\";\n let toml = \"\";\n Object.entries(ChainId).map(([key, chainId]) => {\n const networkEnv = getNetworkEnv(chainId);\n const rpc = getRPCUrl(chainId, {\n alchemyKey: alchemyApiKey || process.env.ALCHEMY_API_KEY,\n quicknodeToken: quicknodeToken || process.env.QUICKNODE_TOKEN,\n quicknodeEndpointName:\n quicknodeEndpointName || process.env.QUICKNODE_ENDPOINT_NAME,\n });\n env += `${networkEnv}=${rpc || \"\"}\\n`;\n toml += `${key}=\"\\${${networkEnv}}\"\\n`;\n });\n\n console.log(\"### .env ###\");\n console.log(env);\n\n console.log(\"### foundry toml ###\");\n console.log(toml);\n },\n );\n}\n","import { Command, Option } from \"@commander-js/extra-typings\";\nimport {\n fetchPoolAddresses,\n getClient,\n getReserveTokens,\n getReserveConfigurations,\n} from \"@bgd-labs/toolbox\";\nimport { AaveV3Ethereum } from \"@bgd-labs/aave-address-book\";\n\nexport function registerProtocol(program: Command) {\n program\n .command(\"protocol\")\n .description(\"generated the storage diff between any two files\")\n .action(async () => {\n const mainnetClient = getClient(1, {\n providerConfig: { alchemyKey: process.env.ALCHEMY_API_KEY },\n });\n const contracts = await fetchPoolAddresses(\n mainnetClient,\n AaveV3Ethereum.POOL_ADDRESSES_PROVIDER,\n );\n const reserveTokens = await getReserveTokens(\n mainnetClient,\n contracts.pool,\n );\n const reserveConfigs = await getReserveConfigurations(\n mainnetClient,\n contracts.pool,\n reserveTokens,\n );\n console.log(reserveConfigs);\n });\n}\n","import { IPayloadsControllerCore_ABI } from \"@bgd-labs/aave-address-book/abis\";\nimport {\n getPayloadsController,\n makePayloadExecutableOnTestClient,\n renderTenderlyReport,\n tenderly_createVnet,\n} from \"@bgd-labs/toolbox\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { mkdirSync, writeFileSync } from \"node:fs\";\nimport { Address, encodeFunctionData, Hex, parseAbi, zeroAddress } from \"viem\";\nimport { toAccount } from \"viem/accounts\";\nimport { readContract } from \"viem/actions\";\n\nexport function registerSeatbeltReport(program: Command) {\n program\n .command(\"seatbelt-report\")\n .description(\"generates a seatbelt report for the payload\")\n .addOption(new Option(\"-c,--chainId <number>\").makeOptionMandatory())\n .addOption(new Option(\"-pi,--payloadId <number>\"))\n .addOption(new Option(\"-pa,--payloadAddress <address>\"))\n .addOption(new Option(\"-pb,--payloadBytecode <hex>\"))\n .addOption(\n new Option(\"-pc,--payloadsController <address>\").makeOptionMandatory(),\n )\n .addOption(\n new Option(\"-o, --output <output path>\").default(\"./reports/seatbelt/\"),\n )\n .addOption(\n new Option(\n \"-t, --tenderlyAccessToken <string>\",\n \"defaults to env.TENDERLY_ACCESS_TOKEN\",\n ),\n )\n .addOption(\n new Option(\n \"-a, --tenderlyAccountSlug <string>\",\n \"defaults to env.TENDERLY_ACCOUNT_SLUG\",\n ),\n )\n .addOption(\n new Option(\n \"-p, --tenderlyProjectSlug <string>\",\n \"defaults to env.TENDERLY_PROJECT_SLUG\",\n ),\n )\n .addOption(\n new Option(\n \"-e, --etherscanApiKey <string>\",\n \"defaults to env.ETHERSCAN_API_KEY\",\n ),\n )\n .action(\n async ({\n chainId,\n tenderlyAccessToken,\n tenderlyAccountSlug,\n tenderlyProjectSlug,\n output,\n payloadId,\n payloadAddress,\n payloadBytecode,\n payloadsController,\n }) => {\n const vnet = await tenderly_createVnet(\n {\n baseChainId: Number(chainId),\n forkChainId: 3030,\n slug: `${Math.floor(Math.random() * 1000)}acli-bgd-labs-vnet-${chainId}`,\n displayName: \"seatbelt\",\n },\n {\n accessToken:\n tenderlyAccessToken || process.env.TENDERLY_ACCESS_TOKEN!,\n accountSlug:\n tenderlyAccountSlug || process.env.TENDERLY_ACCOUNT_SLUG!,\n projectSlug:\n tenderlyProjectSlug || process.env.TENDERLY_PROJECT_SLUG!,\n },\n );\n const controllerContract = getPayloadsController(\n vnet.walletClient,\n payloadsController as Address,\n );\n\n // the current \"count\" will be the id after creation\n let currentId: number = 0;\n\n // in case the controller is permissioned we fetch the manager\n let sender: Address = zeroAddress;\n try {\n sender = await readContract(vnet.testClient, {\n address: controllerContract.address,\n abi: parseAbi([\n \"function payloadsManager() external view returns (address)\",\n ]),\n functionName: \"payloadsManager\",\n });\n } catch (e) {}\n if (payloadId) {\n currentId = Number(payloadId);\n }\n if (payloadBytecode) {\n vnet.testClient.setCode({\n address: \"0xBE0eB53F46cd790Cd13851d5EFf43D12404d33E8\",\n bytecode: payloadBytecode as Hex,\n });\n payloadAddress = \"0xBE0eB53F46cd790Cd13851d5EFf43D12404d33E8\";\n }\n if (payloadAddress) {\n currentId = await controllerContract.read.getPayloadsCount();\n const payload = {\n target: payloadAddress as Address,\n accessLevel: 1,\n callData: \"0x\",\n withDelegateCall: true,\n signature: \"execute()\",\n value: 0n,\n } as const;\n await controllerContract.write.createPayload([[payload]], {\n account: toAccount(sender),\n chain: vnet.walletClient.chain,\n });\n }\n\n await makePayloadExecutableOnTestClient(\n vnet.testClient,\n payloadsController as Address,\n currentId as number,\n );\n\n // simulate executing the payload\n const simResult = await vnet.simulate({\n network_id: chainId.toString(),\n from: sender,\n to: payloadsController,\n input: encodeFunctionData({\n abi: IPayloadsControllerCore_ABI,\n functionName: \"executePayload\",\n args: [currentId],\n }),\n block_number: null,\n transaction_index: 0,\n gas: 30_000_000,\n gas_price: \"0\",\n value: \"0\",\n access_list: [],\n generate_access_list: true,\n save: true,\n source: \"dashboard\",\n });\n\n // after we simulate the execution, we also execute it\n // this way when we query the chain, we can access data as if it was already executed\n await controllerContract.write.executePayload([currentId], {\n account: toAccount(sender),\n chain: vnet.walletClient.chain,\n });\n\n const report = await renderTenderlyReport({\n client: vnet.walletClient,\n sim: simResult,\n payloadId: currentId,\n payload: await controllerContract.read.getPayloadById([currentId]),\n onchainLogs: {} as any,\n config: {\n etherscanApiKey: process.env.ETHERSCAN_API_KEY!,\n },\n });\n\n const filePath = `${output}/${chainId}_${payloadsController}`;\n mkdirSync(filePath, { recursive: true });\n writeFileSync(`${filePath}/${currentId}.md`, report.report);\n await vnet.delete();\n },\n );\n}\n"],"mappings":"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","names":["Command","program","Option","program","Option","answer","key","Option","program","Option","program","program","getPayloadsController","makePayloadExecutableOnTestClient","tenderly_createVnet","Option","mkdirSync","writeFileSync","program","Command"]}
1
+ {"version":3,"sources":["../src/index.ts","../package.json","../src/tasks/code-diff.ts","../src/tasks/aave-vnet.ts","../src/tasks/storage-diff.ts","../src/tasks/rpcs.ts","../src/tasks/protocol.ts","../src/tasks/seatbelt-report.ts"],"sourcesContent":["#!/usr/bin/env node\nimport \"dotenv/config\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport packageJson from \"../package.json\";\nimport { registerCodeDiff } from \"./tasks/code-diff\";\nimport { registerAaveVNet } from \"./tasks/aave-vnet\";\nimport { registerStorageDiff } from \"./tasks/storage-diff\";\nimport { registerRpcs } from \"./tasks/rpcs\";\nimport { registerProtocol } from \"./tasks/protocol\";\nimport { registerSeatbeltReport } from \"./tasks/seatbelt-report.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"@bgd-labs/cli\")\n .description(\"A cli to help with web3 / solidity tasks\")\n .version(packageJson.version)\n .showHelpAfterError();\n\nregisterCodeDiff(program);\nregisterAaveVNet(program);\nregisterStorageDiff(program);\nregisterRpcs(program);\nregisterProtocol(program);\nregisterSeatbeltReport(program);\n\nprogram.parse();\n","{\n \"name\": \"@bgd-labs/cli\",\n \"version\": \"0.0.41\",\n \"main\": \"./dist/index.mjs\",\n \"sideEffects\": false,\n \"license\": \"MIT\",\n \"files\": [\n \"dist/**\",\n \"README.md\"\n ],\n \"type\": \"module\",\n \"bin\": {\n \"cli\": \"dist/index.js\"\n },\n \"scripts\": {\n \"build\": \"tsup src/index.ts\",\n \"dev\": \"tsup src/index.ts --watch\",\n \"start\": \"node dist/index.js\",\n \"clean\": \"rm -rf .turbo && rm -rf node_modules && rm -rf dist\"\n },\n \"devDependencies\": {\n \"@types/node\": \"catalog:\",\n \"tsup\": \"catalog:\",\n \"typescript\": \"catalog:\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"@bgd-labs/aave-address-book\": \"^4.14.0\",\n \"@bgd-labs/toolbox\": \"workspace:*\",\n \"@commander-js/extra-typings\": \"^13.1.0\",\n \"@inquirer/prompts\": \"^7.3.2\",\n \"dotenv\": \"^16.4.7\",\n \"viem\": \"catalog:\"\n }\n}\n","import { Command, Option } from \"@commander-js/extra-typings\";\nimport {\n BlockscoutStyleSourceCode,\n diffCode,\n getSourceCode,\n parseBlockscoutStyleSourceCode,\n parseEtherscanStyleSourceCode,\n StandardJsonInput,\n} from \"@bgd-labs/toolbox\";\nimport { mkdirSync, writeFileSync } from \"node:fs\";\n\nexport function registerCodeDiff(program: Command) {\n program\n .command(\"codeDiff\")\n .description(\"generated the diff between any two addresses\")\n .addOption(new Option(\"--address1 <address>\").makeOptionMandatory())\n .addOption(new Option(\"--chainId1 <number>\").makeOptionMandatory())\n .addOption(new Option(\"--address2 <address>\").makeOptionMandatory())\n .addOption(new Option(\"--chainId2 <number>\").makeOptionMandatory())\n .addOption(new Option(\"-f, --flatten\"))\n .addOption(\n new Option(\"-o, --output <format>\")\n .choices([\"stdout\", \"file\"])\n .default(\"stdout\"),\n )\n .addOption(new Option(\"-p, --path <path>\").default(\"./diffs/code\"))\n .action(\n async ({\n address1,\n address2,\n chainId1,\n chainId2,\n flatten,\n output,\n path,\n }) => {\n const sources = await Promise.all([\n getSourceCode({\n chainId: Number(chainId1),\n address: address1 as any,\n apiKey: process.env.ETHERSCAN_API_KEY,\n }),\n getSourceCode({\n chainId: Number(chainId2),\n address: address2 as any,\n apiKey: process.env.ETHERSCAN_API_KEY,\n }),\n ]);\n const source1: StandardJsonInput = (\n sources[0] as BlockscoutStyleSourceCode\n ).AdditionalSources\n ? parseBlockscoutStyleSourceCode(\n sources[0] as BlockscoutStyleSourceCode,\n )\n : parseEtherscanStyleSourceCode(sources[0].SourceCode);\n const source2: StandardJsonInput = (\n sources[0] as BlockscoutStyleSourceCode\n ).AdditionalSources\n ? parseBlockscoutStyleSourceCode(\n sources[1] as BlockscoutStyleSourceCode,\n )\n : parseEtherscanStyleSourceCode(sources[1].SourceCode);\n const diff = await diffCode(source1, source2);\n if (flatten || output === \"stdout\") {\n const flat = Object.keys(diff).reduce((acc, key) => {\n acc += diff[key];\n return acc;\n }, \"\");\n if (output === \"stdout\") {\n console.log(flat);\n } else {\n const filePath = `${path}/${chainId1}`;\n mkdirSync(filePath, { recursive: true });\n writeFileSync(`${filePath}/${address1}_${address2}.patch`, flat);\n }\n } else {\n const filePath = `${path}/${chainId1}/${address1}_${address2}`;\n mkdirSync(filePath, { recursive: true });\n Object.keys(diff).map((file) => {\n writeFileSync(`${filePath}/${file}.patch`, diff[file]);\n });\n }\n },\n );\n}\n","import { Command, Option } from \"@commander-js/extra-typings\";\nimport {\n getNonFinalizedPayloads,\n getPayloadsController,\n makePayloadExecutableOnTestClient,\n tenderly_createVnet,\n} from \"@bgd-labs/toolbox\";\nimport { checkbox, select, Separator, input } from \"@inquirer/prompts\";\nimport * as addresses from \"@bgd-labs/aave-address-book\";\nimport { Address } from \"viem\";\n\nenum DialogOptions {\n PAYLOAD_ID,\n PAYLOAD_ADDRESS,\n PAYLOAD_ARTIFACT,\n EXIT,\n DELETE,\n}\n\nexport function registerAaveVNet(program: Command) {\n program\n .command(\"aave-vnet\")\n .description(\"creates a tenderly virtual testnet and execute payloads\")\n .addOption(new Option(\"-c,--chainId <number>\").makeOptionMandatory())\n .addOption(\n new Option(\n \"-t, --tenderlyAccessToken <string>\",\n \"defaults to env.TENDERLY_ACCESS_TOKEN\",\n ),\n )\n .addOption(\n new Option(\n \"-a, --tenderlyAccountSlug <string>\",\n \"defaults to env.TENDERLY_ACCOUNT_SLUG\",\n ),\n )\n .addOption(\n new Option(\n \"-p, --tenderlyProjectSlug <string>\",\n \"defaults to env.TENDERLY_PROJECT_SLUG\",\n ),\n )\n .action(\n async ({\n chainId,\n tenderlyAccessToken,\n tenderlyAccountSlug,\n tenderlyProjectSlug,\n }) => {\n const vnet = await tenderly_createVnet(\n {\n baseChainId: Number(chainId),\n forkChainId: 3030,\n slug: `${Math.floor(Math.random() * 1000)}acli-bgd-labs-vnet-${chainId}`,\n displayName: \"bgd-labs cli vnet\",\n },\n {\n accessToken:\n tenderlyAccessToken || process.env.TENDERLY_ACCESS_TOKEN!,\n accountSlug:\n tenderlyAccountSlug || process.env.TENDERLY_ACCOUNT_SLUG!,\n projectSlug:\n tenderlyProjectSlug || process.env.TENDERLY_PROJECT_SLUG!,\n },\n );\n console.info(\"Virtual testnet created!\");\n console.info(\"RPC:\", vnet.vnet.rpcs[0].url);\n const controllerAddress = findPayloadsController(Number(chainId))!;\n const controllerContract = getPayloadsController(\n vnet.walletClient,\n controllerAddress,\n );\n while (true) {\n const answer = await select({\n message: \"What do you want to do?\",\n choices: [\n {\n name: \"Execute a registered payload\",\n value: DialogOptions.PAYLOAD_ID,\n },\n {\n name: \"Execute a deployed (but not registered) payload\",\n value: DialogOptions.PAYLOAD_ADDRESS,\n },\n {\n name: \"Execute a local payload.\",\n value: DialogOptions.PAYLOAD_ARTIFACT,\n },\n new Separator(),\n {\n name: \"Exit (this will keep the vnet open - you can delete it via tenderly ui)\",\n value: DialogOptions.EXIT,\n },\n {\n name: \"Exit and delete\",\n value: DialogOptions.DELETE,\n },\n ],\n });\n switch (answer) {\n case DialogOptions.PAYLOAD_ID:\n const payloadIds = await getNonFinalizedPayloads(\n vnet.testClient,\n controllerAddress,\n );\n const answer = await checkbox({\n message: \"Select the payloads you want to execute\",\n choices: payloadIds.map((id) => ({\n name: String(id),\n value: String(id),\n })),\n });\n for (const id of answer) {\n await makePayloadExecutableOnTestClient(\n vnet.testClient,\n controllerAddress,\n Number(id),\n );\n await controllerContract.write.executePayload([Number(id)]);\n console.info(`Payload ${id} executed`);\n }\n break;\n case DialogOptions.PAYLOAD_ADDRESS:\n const address = await input({\n message: \"Enter the payload address\",\n });\n const currentId =\n await controllerContract.read.getPayloadsCount();\n await controllerContract.write.createPayload([\n [\n {\n target: address as Address,\n accessLevel: 1,\n callData: \"\",\n withDelegateCall: true,\n signature: \"execute()\",\n value: 0,\n },\n ],\n ]);\n await makePayloadExecutableOnTestClient(\n vnet.testClient,\n controllerAddress,\n currentId,\n );\n await controllerContract.write.executePayload([currentId]);\n break;\n case DialogOptions.EXIT:\n process.exit(0);\n case DialogOptions.DELETE:\n await vnet.delete();\n console.info(\"Virtual testnet deleted!\");\n process.exit(0);\n }\n }\n },\n );\n}\n\nexport function findPayloadsController(chainId: number): Address | void {\n const key = Object.keys(addresses).find(\n (key) =>\n (addresses[key as keyof typeof addresses] as any).CHAIN_ID === chainId &&\n (addresses[key as keyof typeof addresses] as any).PAYLOADS_CONTROLLER,\n );\n if (key)\n return (addresses[key as keyof typeof addresses] as any)\n .PAYLOADS_CONTROLLER;\n}\n","import { Command, Option } from \"@commander-js/extra-typings\";\nimport {\n diffFoundryStorageLayout,\n foundry_getStorageLayout,\n} from \"@bgd-labs/toolbox\";\n\nexport function registerStorageDiff(program: Command) {\n program\n .command(\"storageDiff\")\n .description(\"generated the storage diff between any two files\")\n .addOption(new Option(\"--contract1 <Contract|path>\").makeOptionMandatory())\n .addOption(new Option(\"--contract2 <Contract|path>\").makeOptionMandatory())\n .action(async ({ contract1, contract2 }) => {\n const storage1 = foundry_getStorageLayout(contract1);\n const storage2 = foundry_getStorageLayout(contract2);\n const result = diffFoundryStorageLayout(storage1, storage2);\n console.log(result);\n });\n}\n","import { Command, Option } from \"@commander-js/extra-typings\";\nimport { ChainId, getNetworkEnv, getRPCUrl } from \"@bgd-labs/toolbox\";\n\n/**\n * Logs a list of rpcs to be used in your foundry project\n * @param program\n */\nexport function registerRpcs(program: Command) {\n program\n .command(\"rpcs\")\n .description(\"generate a list of rpcs to be used in foundry projects\")\n .addOption(\n new Option(\"--alchemyApiKey <string>\", \"defaults to env.ALCHEMY_API_KEY\"),\n )\n .addOption(\n new Option(\n \"--quicknodeToken <string>\",\n \"defaults to env.QUICKNODE_TOKEN\",\n ),\n )\n .addOption(\n new Option(\n \"--quicknodeEndpointName <string>\",\n \"defaults to env.QUICKNODE_ENDPOINT_NAME\",\n ),\n )\n .action(\n async ({ alchemyApiKey, quicknodeToken, quicknodeEndpointName }) => {\n let env = \"\";\n let toml = \"\";\n Object.entries(ChainId).map(([key, chainId]) => {\n const networkEnv = getNetworkEnv(chainId);\n const rpc = getRPCUrl(chainId, {\n alchemyKey: alchemyApiKey || process.env.ALCHEMY_API_KEY,\n quicknodeToken: quicknodeToken || process.env.QUICKNODE_TOKEN,\n quicknodeEndpointName:\n quicknodeEndpointName || process.env.QUICKNODE_ENDPOINT_NAME,\n });\n env += `${networkEnv}=${rpc || \"\"}\\n`;\n toml += `${key}=\"\\${${networkEnv}}\"\\n`;\n });\n\n console.log(\"### .env ###\");\n console.log(env);\n\n console.log(\"### foundry toml ###\");\n console.log(toml);\n },\n );\n}\n","import { Command, Option } from \"@commander-js/extra-typings\";\nimport {\n fetchPoolAddresses,\n getClient,\n getReserveTokens,\n getReserveConfigurations,\n} from \"@bgd-labs/toolbox\";\nimport { AaveV3Ethereum } from \"@bgd-labs/aave-address-book\";\n\nexport function registerProtocol(program: Command) {\n program\n .command(\"protocol\")\n .description(\"generated the storage diff between any two files\")\n .action(async () => {\n const mainnetClient = getClient(1, {\n providerConfig: { alchemyKey: process.env.ALCHEMY_API_KEY },\n });\n const contracts = await fetchPoolAddresses(\n mainnetClient,\n AaveV3Ethereum.POOL_ADDRESSES_PROVIDER,\n );\n const reserveTokens = await getReserveTokens(\n mainnetClient,\n contracts.pool,\n );\n const reserveConfigs = await getReserveConfigurations(\n mainnetClient,\n contracts.pool,\n reserveTokens,\n );\n console.log(reserveConfigs);\n });\n}\n","import { IPayloadsControllerCore_ABI } from \"@bgd-labs/aave-address-book/abis\";\nimport {\n getMdContractName,\n getPayloadsController,\n makePayloadExecutableOnTestClient,\n renderTenderlyReport,\n tenderly_createVnet,\n} from \"@bgd-labs/toolbox\";\nimport { Command, Option } from \"@commander-js/extra-typings\";\nimport { mkdirSync, writeFileSync } from \"node:fs\";\nimport {\n Address,\n encodeFunctionData,\n Hex,\n isAddress,\n parseAbi,\n zeroAddress,\n} from \"viem\";\nimport { toAccount } from \"viem/accounts\";\nimport { readContract } from \"viem/actions\";\nimport * as addresses from \"@bgd-labs/aave-address-book\";\n\nexport function registerSeatbeltReport(program: Command) {\n program\n .command(\"seatbelt-report\")\n .description(\"generates a seatbelt report for the payload\")\n .addOption(new Option(\"-c,--chainId <number>\").makeOptionMandatory())\n .addOption(new Option(\"--pi,--payloadId <number>\"))\n .addOption(new Option(\"--pa, --payloadAddress <address>\"))\n .addOption(new Option(\"--pb,--payloadBytecode <hex>\"))\n .addOption(\n new Option(\"--pc, --payloadsController <address>\").makeOptionMandatory(),\n )\n .addOption(\n new Option(\"-o, --output <output path>\").default(\"./reports/seatbelt/\"),\n )\n .addOption(\n new Option(\n \"-t, --tenderlyAccessToken <string>\",\n \"defaults to env.TENDERLY_ACCESS_TOKEN\",\n ),\n )\n .addOption(\n new Option(\n \"-a, --tenderlyAccountSlug <string>\",\n \"defaults to env.TENDERLY_ACCOUNT_SLUG\",\n ),\n )\n .addOption(\n new Option(\n \"-p, --tenderlyProjectSlug <string>\",\n \"defaults to env.TENDERLY_PROJECT_SLUG\",\n ),\n )\n .addOption(\n new Option(\n \"-e, --etherscanApiKey <string>\",\n \"defaults to env.ETHERSCAN_API_KEY\",\n ),\n )\n .action(\n async ({\n chainId,\n tenderlyAccessToken,\n tenderlyAccountSlug,\n tenderlyProjectSlug,\n output,\n payloadId,\n payloadAddress,\n payloadBytecode,\n payloadsController,\n }) => {\n const vnet = await tenderly_createVnet(\n {\n baseChainId: Number(chainId),\n forkChainId: 3030,\n slug: `${Math.floor(Math.random() * 1000)}acli-bgd-labs-vnet-${chainId}`,\n displayName: \"seatbelt\",\n },\n {\n accessToken:\n tenderlyAccessToken || process.env.TENDERLY_ACCESS_TOKEN!,\n accountSlug:\n tenderlyAccountSlug || process.env.TENDERLY_ACCOUNT_SLUG!,\n projectSlug:\n tenderlyProjectSlug || process.env.TENDERLY_PROJECT_SLUG!,\n },\n );\n const controllerContract = getPayloadsController(\n vnet.walletClient,\n payloadsController as Address,\n );\n\n // the current \"count\" will be the id after creation\n let currentId: number = 0;\n\n // in case the controller is permissioned we fetch the manager\n let sender: Address = zeroAddress;\n try {\n sender = await readContract(vnet.testClient, {\n address: controllerContract.address,\n abi: parseAbi([\n \"function payloadsManager() external view returns (address)\",\n ]),\n functionName: \"payloadsManager\",\n });\n } catch (e) {}\n if (payloadId) {\n currentId = Number(payloadId);\n }\n if (payloadBytecode) {\n vnet.testClient.setCode({\n address: \"0xBE0eB53F46cd790Cd13851d5EFf43D12404d33E8\",\n bytecode: payloadBytecode as Hex,\n });\n payloadAddress = \"0xBE0eB53F46cd790Cd13851d5EFf43D12404d33E8\";\n }\n if (payloadAddress) {\n currentId = await controllerContract.read.getPayloadsCount();\n const payload = {\n target: payloadAddress as Address,\n accessLevel: 1,\n callData: \"0x\",\n withDelegateCall: true,\n signature: \"execute()\",\n value: 0n,\n } as const;\n await controllerContract.write.createPayload([[payload]], {\n account: toAccount(sender),\n chain: vnet.walletClient.chain,\n });\n }\n\n await makePayloadExecutableOnTestClient(\n vnet.testClient,\n payloadsController as Address,\n currentId as number,\n );\n\n // simulate executing the payload\n const simResult = await vnet.simulate({\n network_id: chainId.toString(),\n from: sender,\n to: payloadsController,\n input: encodeFunctionData({\n abi: IPayloadsControllerCore_ABI,\n functionName: \"executePayload\",\n args: [currentId],\n }),\n block_number: null,\n transaction_index: 0,\n gas: 30_000_000,\n gas_price: \"0\",\n value: \"0\",\n access_list: [],\n generate_access_list: true,\n save: true,\n source: \"dashboard\",\n });\n\n // after we simulate the execution, we also execute it\n // this way when we query the chain, we can access data as if it was already executed\n await controllerContract.write.executePayload([currentId], {\n account: toAccount(sender),\n chain: vnet.walletClient.chain,\n });\n\n const report = await renderTenderlyReport({\n client: vnet.walletClient,\n sim: simResult,\n payloadId: currentId,\n payload: await controllerContract.read.getPayloadById([currentId]),\n onchainLogs: {} as any,\n config: {\n etherscanApiKey: process.env.ETHERSCAN_API_KEY!,\n },\n getContractName: (sim, address) => {\n const isKnown = isKnownAddress(\n address,\n Number(sim.simulation.network_id),\n );\n if (isKnown)\n return flagAsKnown(getMdContractName(sim.contracts, address));\n return getMdContractName(sim.contracts, address);\n },\n });\n\n const filePath = `${output}/${chainId}_${payloadsController}`;\n mkdirSync(filePath, { recursive: true });\n writeFileSync(`${filePath}/${currentId}.md`, report.report);\n await vnet.delete();\n },\n );\n}\n\ntype AnyObject = { [key: string]: any };\n\nfunction flattenObject(\n obj: AnyObject,\n parentKey = \"\",\n result: AnyObject = {},\n): AnyObject {\n for (const [key, value] of Object.entries(obj)) {\n const newKey = parentKey ? `${parentKey}.${key}` : key;\n\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n flattenObject(value, newKey, result);\n } else {\n result[newKey] = value;\n }\n }\n return result;\n}\n\n/**\n * Checks if address is listed on address-book\n * @param value\n * @param chainId\n * @returns string[] found paths to address-book addresses\n */\nfunction isKnownAddress(value: Address, chainId: number): boolean {\n // glob imports have no object properties\n // therefore we recreate the object via spread & remove addresses unrelated to the chain we are checking\n const transformedAddresses = Object.keys(addresses)\n .reduce((acc, key) => {\n if (addresses[key as keyof typeof addresses].CHAIN_ID === chainId) {\n const chainAddresses = { ...addresses[key as keyof typeof addresses] };\n acc.push(...Object.values(flattenObject(chainAddresses)));\n }\n return acc;\n }, [] as Address[])\n .filter((a) => isAddress(a));\n return transformedAddresses.includes(value);\n}\n\nfunction flagAsKnown(address: string) {\n return `${address} :ghost:`;\n}\n"],"mappings":"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","names":["Command","program","Option","program","Option","answer","key","Option","program","Option","program","program","getPayloadsController","makePayloadExecutableOnTestClient","tenderly_createVnet","Option","mkdirSync","writeFileSync","addresses","program","Command"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgd-labs/cli",
3
- "version": "0.0.39",
3
+ "version": "0.0.41",
4
4
  "main": "./dist/index.mjs",
5
5
  "sideEffects": false,
6
6
  "license": "MIT",
@@ -26,7 +26,7 @@
26
26
  "@inquirer/prompts": "^7.3.2",
27
27
  "dotenv": "^16.4.7",
28
28
  "viem": "^2.30.0",
29
- "@bgd-labs/toolbox": "0.0.30"
29
+ "@bgd-labs/toolbox": "0.0.32"
30
30
  },
31
31
  "scripts": {
32
32
  "build": "tsup src/index.ts",