@bgd-labs/toolbox 0.0.26 → 0.0.27

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/node.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { StandardJsonInput } from './index.mjs';
2
- export { AggregatorInterface_ABI, Aip, BlockscoutStyleSourceCode, BundleParams, ChainId, ChainList, Change, ContractObject, EVENT_DB, EtherscanStyleSourceCode, ExplorerConfig, GenericIndexerArgs, GovernanceContract, HALF_RAY, HALF_WAD, HUMAN_READABLE_PAYLOAD_STATE, HUMAN_READABLE_PROPOSAL_STATE, IAToken_ABI, IAaveOracle_ABI, IAaveV3ConfigEngine_ABI, IAuthorizedForwarder_ABI, ICollector_ABI, IDualAggregator_ABI, IERC20Metadata_ABI, IERC20_ABI, IEmissionManager_ABI, IPoolAddressesProvider_ABI, IPoolConfigurator_ABI, IPool_ABI, IReserveInterestRateStrategy_ABI, IRewardsController_ABI, IStataTokenFactory_ABI, IStataTokenV2_ABI, IWrappedTokenGatewayV3_ABI, IndexerTopicState, Input, LTV_PRECISION, Payload, PayloadState, PayloadsControllerContract, Proposal, ProposalState, RAY, ReserveConfiguration, SECONDS_PER_YEAR, SelfdestuctCheckState, SoltypeElement, SoltypeType, StateDiff, StateObject, SupportedChainIds, TenderlyLog, TenderlyLogRaw, TenderlySimRequest, TenderlySimulationResponse, TenderlySimulationResponseObject, TenderlyStackTrace, Tenderly_createVnetParamsResponse, Trace, TransactionInfo, VerificationStatus, WAD, WAD_RAY_RATIO, aaveAddressesProvider_IncentivesControllerSlot, alchemyNetworkMap, alchemySupportedChainIds, assetToBase, bitmapToIndexes, blockscoutExplorers, calculateAvailableBorrowsMarketReferenceCurrency, calculateCompoundedInterest, calculateHealthFactor, calculateHealthFactorFromBalances, calculateLinearInterest, chainlinkFeeds, checkForSelfdestruct, decodeReserveConfiguration, decodeReserveConfigurationV2, decodeUserConfiguration, diffCode, erc1967_AdminSlot, erc1967_ImplementationSlot, etherscanExplorers, fetchImmutablePoolAddresses, fetchMutablePoolAddresses, fetchPoolAddresses, flashbotsClientExtension, flashbotsOnFetchRequest, genericIndexer, getAlchemyRPC, getBits, getClient, getContractDeploymentBlock, getCurrentDebtBalance, getCurrentLiquidityBalance, getExplicitRPC, getExplorer, getGovernance, getHyperRPC, getImplementationSlot, getLogsRecursive, getMarketReferenceCurrencyAndUsdBalance, getNetworkEnv, getNonFinalizedPayloads, getNonFinalizedProposals, getNormalizedDebt, getNormalizedIncome, getPayloadStorageOverrides, getPayloadsController, getPublicRpc, getQuicknodeRpc, getRPCUrl, getReserveConfigurations, getReserveTokens, getSourceCode, getVerificationStatus, hyperRPCSupportedNetworks, isPayloadFinal, isProposalFinal, makePayloadExecutableOnTestClient, makeProposalExecutableOnTestClient, onMevHandler, parseBlockscoutStyleSourceCode, parseEtherscanStyleSourceCode, parseLogs, priceUpdateDecoder, publicRPCs, quicknodeNetworkMap, rayDiv, rayMul, rayToWad, renderTenderlyReport, routescanExplorers, setBits, tenderly_createVnet, tenderly_deleteVnet, tenderly_getVnet, tenderly_logsToAbiLogs, tenderly_sim, tenderly_simVnet, toTxLink, transformTenderlyStateDiff, validateAip, verificationStatusToString, wadDiv, wadToRay } from './index.mjs';
2
+ export { AggregatorInterface_ABI, Aip, BlockscoutStyleSourceCode, BundleParams, ChainId, ChainList, Change, ContractObject, EVENT_DB, EtherscanStyleSourceCode, ExplorerConfig, GenericIndexerArgs, GovernanceContract, HALF_RAY, HALF_WAD, HUMAN_READABLE_PAYLOAD_STATE, HUMAN_READABLE_PROPOSAL_STATE, IAToken_ABI, IAaveOracle_ABI, IAaveV3ConfigEngine_ABI, IAuthorizedForwarder_ABI, ICollector_ABI, IDualAggregator_ABI, IERC20Metadata_ABI, IERC20_ABI, IEmissionManager_ABI, IPoolAddressesProvider_ABI, IPoolConfigurator_ABI, IPool_ABI, IReserveInterestRateStrategy_ABI, IRewardsController_ABI, IStataTokenFactory_ABI, IStataTokenV2_ABI, IWrappedTokenGatewayV3_ABI, IndexerTopicState, Input, LTV_PRECISION, Payload, PayloadState, PayloadsControllerContract, Proposal, ProposalState, RAY, ReserveConfiguration, SECONDS_PER_YEAR, SelfdestructCheckState, SoltypeElement, SoltypeType, StateDiff, StateObject, SupportedChainIds, TenderlyLog, TenderlyLogRaw, TenderlySimRequest, TenderlySimulationResponse, TenderlySimulationResponseObject, TenderlyStackTrace, Tenderly_createVnetParamsResponse, Trace, TransactionInfo, VerificationStatus, WAD, WAD_RAY_RATIO, aaveAddressesProvider_IncentivesControllerSlot, alchemyNetworkMap, alchemySupportedChainIds, assetToBase, bitmapToIndexes, blockscoutExplorers, calculateAvailableBorrowsMarketReferenceCurrency, calculateCompoundedInterest, calculateHealthFactor, calculateHealthFactorFromBalances, calculateLinearInterest, chainlinkFeeds, checkForSelfdestruct, decodeReserveConfiguration, decodeReserveConfigurationV2, decodeUserConfiguration, diffCode, erc1967_AdminSlot, erc1967_ImplementationSlot, etherscanExplorers, fetchImmutablePoolAddresses, fetchMutablePoolAddresses, fetchPoolAddresses, flashbotsClientExtension, flashbotsOnFetchRequest, genericIndexer, getAlchemyRPC, getBits, getClient, getContractDeploymentBlock, getCurrentDebtBalance, getCurrentLiquidityBalance, getExplicitRPC, getExplorer, getGovernance, getHyperRPC, getImplementationSlot, getLogsRecursive, getMarketReferenceCurrencyAndUsdBalance, getNetworkEnv, getNonFinalizedPayloads, getNonFinalizedProposals, getNormalizedDebt, getNormalizedIncome, getObjectDiff, getPayloadStorageOverrides, getPayloadsController, getPublicRpc, getQuicknodeRpc, getRPCUrl, getReserveConfigurations, getReserveTokens, getSourceCode, getVerificationStatus, hyperRPCSupportedNetworks, isPayloadFinal, isProposalFinal, makePayloadExecutableOnTestClient, makeProposalExecutableOnTestClient, onMevHandler, parseBlockscoutStyleSourceCode, parseEtherscanStyleSourceCode, parseLogs, priceUpdateDecoder, publicRPCs, quicknodeNetworkMap, rayDiv, rayMul, rayToWad, renderMarkdownStateDiffReport, renderTenderlyReport, routescanExplorers, selfDestructStatusToString, setBits, tenderly_createVnet, tenderly_deleteVnet, tenderly_getVnet, tenderly_logsToAbiLogs, tenderly_sim, tenderly_simVnet, toTxLink, transformTenderlyStateDiff, validateAip, verificationStatusToString, wadDiv, wadToRay } from './index.mjs';
3
3
  import 'viem';
4
4
  import '@bgd-labs/aave-address-book/abis';
5
5
  import 'arktype/internal/methods/object.ts';
package/dist/node.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { StandardJsonInput } from './index.js';
2
- export { AggregatorInterface_ABI, Aip, BlockscoutStyleSourceCode, BundleParams, ChainId, ChainList, Change, ContractObject, EVENT_DB, EtherscanStyleSourceCode, ExplorerConfig, GenericIndexerArgs, GovernanceContract, HALF_RAY, HALF_WAD, HUMAN_READABLE_PAYLOAD_STATE, HUMAN_READABLE_PROPOSAL_STATE, IAToken_ABI, IAaveOracle_ABI, IAaveV3ConfigEngine_ABI, IAuthorizedForwarder_ABI, ICollector_ABI, IDualAggregator_ABI, IERC20Metadata_ABI, IERC20_ABI, IEmissionManager_ABI, IPoolAddressesProvider_ABI, IPoolConfigurator_ABI, IPool_ABI, IReserveInterestRateStrategy_ABI, IRewardsController_ABI, IStataTokenFactory_ABI, IStataTokenV2_ABI, IWrappedTokenGatewayV3_ABI, IndexerTopicState, Input, LTV_PRECISION, Payload, PayloadState, PayloadsControllerContract, Proposal, ProposalState, RAY, ReserveConfiguration, SECONDS_PER_YEAR, SelfdestuctCheckState, SoltypeElement, SoltypeType, StateDiff, StateObject, SupportedChainIds, TenderlyLog, TenderlyLogRaw, TenderlySimRequest, TenderlySimulationResponse, TenderlySimulationResponseObject, TenderlyStackTrace, Tenderly_createVnetParamsResponse, Trace, TransactionInfo, VerificationStatus, WAD, WAD_RAY_RATIO, aaveAddressesProvider_IncentivesControllerSlot, alchemyNetworkMap, alchemySupportedChainIds, assetToBase, bitmapToIndexes, blockscoutExplorers, calculateAvailableBorrowsMarketReferenceCurrency, calculateCompoundedInterest, calculateHealthFactor, calculateHealthFactorFromBalances, calculateLinearInterest, chainlinkFeeds, checkForSelfdestruct, decodeReserveConfiguration, decodeReserveConfigurationV2, decodeUserConfiguration, diffCode, erc1967_AdminSlot, erc1967_ImplementationSlot, etherscanExplorers, fetchImmutablePoolAddresses, fetchMutablePoolAddresses, fetchPoolAddresses, flashbotsClientExtension, flashbotsOnFetchRequest, genericIndexer, getAlchemyRPC, getBits, getClient, getContractDeploymentBlock, getCurrentDebtBalance, getCurrentLiquidityBalance, getExplicitRPC, getExplorer, getGovernance, getHyperRPC, getImplementationSlot, getLogsRecursive, getMarketReferenceCurrencyAndUsdBalance, getNetworkEnv, getNonFinalizedPayloads, getNonFinalizedProposals, getNormalizedDebt, getNormalizedIncome, getPayloadStorageOverrides, getPayloadsController, getPublicRpc, getQuicknodeRpc, getRPCUrl, getReserveConfigurations, getReserveTokens, getSourceCode, getVerificationStatus, hyperRPCSupportedNetworks, isPayloadFinal, isProposalFinal, makePayloadExecutableOnTestClient, makeProposalExecutableOnTestClient, onMevHandler, parseBlockscoutStyleSourceCode, parseEtherscanStyleSourceCode, parseLogs, priceUpdateDecoder, publicRPCs, quicknodeNetworkMap, rayDiv, rayMul, rayToWad, renderTenderlyReport, routescanExplorers, setBits, tenderly_createVnet, tenderly_deleteVnet, tenderly_getVnet, tenderly_logsToAbiLogs, tenderly_sim, tenderly_simVnet, toTxLink, transformTenderlyStateDiff, validateAip, verificationStatusToString, wadDiv, wadToRay } from './index.js';
2
+ export { AggregatorInterface_ABI, Aip, BlockscoutStyleSourceCode, BundleParams, ChainId, ChainList, Change, ContractObject, EVENT_DB, EtherscanStyleSourceCode, ExplorerConfig, GenericIndexerArgs, GovernanceContract, HALF_RAY, HALF_WAD, HUMAN_READABLE_PAYLOAD_STATE, HUMAN_READABLE_PROPOSAL_STATE, IAToken_ABI, IAaveOracle_ABI, IAaveV3ConfigEngine_ABI, IAuthorizedForwarder_ABI, ICollector_ABI, IDualAggregator_ABI, IERC20Metadata_ABI, IERC20_ABI, IEmissionManager_ABI, IPoolAddressesProvider_ABI, IPoolConfigurator_ABI, IPool_ABI, IReserveInterestRateStrategy_ABI, IRewardsController_ABI, IStataTokenFactory_ABI, IStataTokenV2_ABI, IWrappedTokenGatewayV3_ABI, IndexerTopicState, Input, LTV_PRECISION, Payload, PayloadState, PayloadsControllerContract, Proposal, ProposalState, RAY, ReserveConfiguration, SECONDS_PER_YEAR, SelfdestructCheckState, SoltypeElement, SoltypeType, StateDiff, StateObject, SupportedChainIds, TenderlyLog, TenderlyLogRaw, TenderlySimRequest, TenderlySimulationResponse, TenderlySimulationResponseObject, TenderlyStackTrace, Tenderly_createVnetParamsResponse, Trace, TransactionInfo, VerificationStatus, WAD, WAD_RAY_RATIO, aaveAddressesProvider_IncentivesControllerSlot, alchemyNetworkMap, alchemySupportedChainIds, assetToBase, bitmapToIndexes, blockscoutExplorers, calculateAvailableBorrowsMarketReferenceCurrency, calculateCompoundedInterest, calculateHealthFactor, calculateHealthFactorFromBalances, calculateLinearInterest, chainlinkFeeds, checkForSelfdestruct, decodeReserveConfiguration, decodeReserveConfigurationV2, decodeUserConfiguration, diffCode, erc1967_AdminSlot, erc1967_ImplementationSlot, etherscanExplorers, fetchImmutablePoolAddresses, fetchMutablePoolAddresses, fetchPoolAddresses, flashbotsClientExtension, flashbotsOnFetchRequest, genericIndexer, getAlchemyRPC, getBits, getClient, getContractDeploymentBlock, getCurrentDebtBalance, getCurrentLiquidityBalance, getExplicitRPC, getExplorer, getGovernance, getHyperRPC, getImplementationSlot, getLogsRecursive, getMarketReferenceCurrencyAndUsdBalance, getNetworkEnv, getNonFinalizedPayloads, getNonFinalizedProposals, getNormalizedDebt, getNormalizedIncome, getObjectDiff, getPayloadStorageOverrides, getPayloadsController, getPublicRpc, getQuicknodeRpc, getRPCUrl, getReserveConfigurations, getReserveTokens, getSourceCode, getVerificationStatus, hyperRPCSupportedNetworks, isPayloadFinal, isProposalFinal, makePayloadExecutableOnTestClient, makeProposalExecutableOnTestClient, onMevHandler, parseBlockscoutStyleSourceCode, parseEtherscanStyleSourceCode, parseLogs, priceUpdateDecoder, publicRPCs, quicknodeNetworkMap, rayDiv, rayMul, rayToWad, renderMarkdownStateDiffReport, renderTenderlyReport, routescanExplorers, selfDestructStatusToString, setBits, tenderly_createVnet, tenderly_deleteVnet, tenderly_getVnet, tenderly_logsToAbiLogs, tenderly_sim, tenderly_simVnet, toTxLink, transformTenderlyStateDiff, validateAip, verificationStatusToString, wadDiv, wadToRay } from './index.js';
3
3
  import 'viem';
4
4
  import '@bgd-labs/aave-address-book/abis';
5
5
  import 'arktype/internal/methods/object.ts';
package/dist/node.js CHANGED
@@ -61,7 +61,7 @@ __export(node_exports, {
61
61
  ProposalState: () => ProposalState,
62
62
  RAY: () => RAY,
63
63
  SECONDS_PER_YEAR: () => SECONDS_PER_YEAR,
64
- SelfdestuctCheckState: () => SelfdestuctCheckState,
64
+ SelfdestructCheckState: () => SelfdestructCheckState,
65
65
  SoltypeType: () => SoltypeType,
66
66
  VerificationStatus: () => VerificationStatus,
67
67
  WAD: () => WAD,
@@ -114,6 +114,7 @@ __export(node_exports, {
114
114
  getNonFinalizedProposals: () => getNonFinalizedProposals,
115
115
  getNormalizedDebt: () => getNormalizedDebt,
116
116
  getNormalizedIncome: () => getNormalizedIncome,
117
+ getObjectDiff: () => getObjectDiff,
117
118
  getPayloadStorageOverrides: () => getPayloadStorageOverrides,
118
119
  getPayloadsController: () => getPayloadsController,
119
120
  getPublicRpc: () => getPublicRpc,
@@ -138,8 +139,10 @@ __export(node_exports, {
138
139
  rayDiv: () => rayDiv,
139
140
  rayMul: () => rayMul,
140
141
  rayToWad: () => rayToWad,
142
+ renderMarkdownStateDiffReport: () => renderMarkdownStateDiffReport,
141
143
  renderTenderlyReport: () => renderTenderlyReport,
142
144
  routescanExplorers: () => routescanExplorers,
145
+ selfDestructStatusToString: () => selfDestructStatusToString,
143
146
  setBits: () => setBits,
144
147
  tenderly_createVnet: () => tenderly_createVnet,
145
148
  tenderly_deleteVnet: () => tenderly_deleteVnet,
@@ -13980,6 +13983,83 @@ function parseBlockscoutStyleSourceCode(sourceCode) {
13980
13983
 
13981
13984
  // src/ecosystem/tenderly.ts
13982
13985
  var import_viem5 = require("viem");
13986
+
13987
+ // src/ecosystem/chainIds.ts
13988
+ var import_chains = require("viem/chains");
13989
+ var ChainId = {
13990
+ celo: import_chains.celo.id,
13991
+ mainnet: import_chains.mainnet.id,
13992
+ polygon: import_chains.polygon.id,
13993
+ polygon_amoy: import_chains.polygonAmoy.id,
13994
+ avalanche: import_chains.avalanche.id,
13995
+ avalanche_fuji: import_chains.avalancheFuji.id,
13996
+ arbitrum: import_chains.arbitrum.id,
13997
+ arbitrum_sepolia: import_chains.arbitrumSepolia.id,
13998
+ fantom: import_chains.fantom.id,
13999
+ fantom_testnet: import_chains.fantomTestnet.id,
14000
+ optimism: import_chains.optimism.id,
14001
+ optimism_sepolia: import_chains.optimismSepolia.id,
14002
+ harmony: import_chains.harmonyOne.id,
14003
+ sepolia: import_chains.sepolia.id,
14004
+ scroll: import_chains.scroll.id,
14005
+ scroll_sepolia: import_chains.scrollSepolia.id,
14006
+ sonic: import_chains.sonic.id,
14007
+ mantle: import_chains.mantle.id,
14008
+ metis: import_chains.metis.id,
14009
+ base: import_chains.base.id,
14010
+ base_sepolia: import_chains.baseSepolia.id,
14011
+ bnb: import_chains.bsc.id,
14012
+ gnosis: import_chains.gnosis.id,
14013
+ zkEVM: import_chains.polygonZkEvm.id,
14014
+ zksync: import_chains.zksync.id,
14015
+ linea: import_chains.linea.id,
14016
+ ink: import_chains.ink.id,
14017
+ soneium: import_chains.soneium.id,
14018
+ bob: import_chains.bob.id
14019
+ };
14020
+ var ChainList = {
14021
+ [ChainId.mainnet]: import_chains.mainnet,
14022
+ [ChainId.polygon]: import_chains.polygon,
14023
+ [ChainId.polygon_amoy]: import_chains.polygonAmoy,
14024
+ [ChainId.avalanche]: {
14025
+ ...import_chains.avalanche,
14026
+ blockExplorers: {
14027
+ default: { url: "https://snowscan.xyz", name: "Snowscan" }
14028
+ }
14029
+ },
14030
+ [ChainId.avalanche_fuji]: {
14031
+ ...import_chains.avalancheFuji,
14032
+ blockExplorers: {
14033
+ default: { url: "https://testnet.snowscan.xyz", name: "Snowscan Fuji" }
14034
+ }
14035
+ },
14036
+ [ChainId.arbitrum]: import_chains.arbitrum,
14037
+ [ChainId.arbitrum_sepolia]: import_chains.arbitrumSepolia,
14038
+ [ChainId.fantom]: import_chains.fantom,
14039
+ [ChainId.fantom_testnet]: import_chains.fantomTestnet,
14040
+ [ChainId.optimism]: import_chains.optimism,
14041
+ [ChainId.optimism_sepolia]: import_chains.optimismSepolia,
14042
+ [ChainId.harmony]: import_chains.harmonyOne,
14043
+ [ChainId.sepolia]: import_chains.sepolia,
14044
+ [ChainId.scroll]: import_chains.scroll,
14045
+ [ChainId.scroll_sepolia]: import_chains.scrollSepolia,
14046
+ [ChainId.sonic]: import_chains.sonic,
14047
+ [ChainId.mantle]: import_chains.mantle,
14048
+ [ChainId.metis]: import_chains.metis,
14049
+ [ChainId.base]: import_chains.base,
14050
+ [ChainId.base_sepolia]: import_chains.baseSepolia,
14051
+ [ChainId.bnb]: import_chains.bsc,
14052
+ [ChainId.gnosis]: import_chains.gnosis,
14053
+ [ChainId.zkEVM]: import_chains.polygonZkEvm,
14054
+ [ChainId.celo]: import_chains.celo,
14055
+ [ChainId.zksync]: import_chains.zksync,
14056
+ [ChainId.linea]: import_chains.linea,
14057
+ [ChainId.ink]: import_chains.ink,
14058
+ [ChainId.soneium]: import_chains.soneium,
14059
+ [ChainId.bob]: import_chains.bob
14060
+ };
14061
+
14062
+ // src/ecosystem/tenderly.ts
13983
14063
  var TENDERLY_BASE_URL = "https://api.tenderly.co/api/v1";
13984
14064
  async function tenderly_deleteVnet(vnetId, { accountSlug, projectSlug, accessToken }) {
13985
14065
  return fetch(
@@ -14088,11 +14168,18 @@ async function tenderly_createVnet({
14088
14168
  return {
14089
14169
  vnet: response,
14090
14170
  testClient: (0, import_viem5.createTestClient)({
14171
+ chain: {
14172
+ ...ChainList[baseChainId],
14173
+ id: forkChainId
14174
+ },
14091
14175
  mode: "tenderly",
14092
14176
  transport: (0, import_viem5.http)(rpc.url)
14093
14177
  }),
14094
14178
  walletClient: (0, import_viem5.createWalletClient)({
14095
- chain: { id: forkChainId },
14179
+ chain: {
14180
+ ...ChainList[baseChainId],
14181
+ id: forkChainId
14182
+ },
14096
14183
  account: "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9",
14097
14184
  transport: (0, import_viem5.http)(rpc.url)
14098
14185
  }),
@@ -14214,81 +14301,6 @@ var SoltypeType = /* @__PURE__ */ ((SoltypeType2) => {
14214
14301
  // src/ecosystem/event-db.ts
14215
14302
  var EVENT_DB = [];
14216
14303
 
14217
- // src/ecosystem/chainIds.ts
14218
- var import_chains = require("viem/chains");
14219
- var ChainId = {
14220
- celo: import_chains.celo.id,
14221
- mainnet: import_chains.mainnet.id,
14222
- polygon: import_chains.polygon.id,
14223
- polygon_amoy: import_chains.polygonAmoy.id,
14224
- avalanche: import_chains.avalanche.id,
14225
- avalanche_fuji: import_chains.avalancheFuji.id,
14226
- arbitrum: import_chains.arbitrum.id,
14227
- arbitrum_sepolia: import_chains.arbitrumSepolia.id,
14228
- fantom: import_chains.fantom.id,
14229
- fantom_testnet: import_chains.fantomTestnet.id,
14230
- optimism: import_chains.optimism.id,
14231
- optimism_sepolia: import_chains.optimismSepolia.id,
14232
- harmony: import_chains.harmonyOne.id,
14233
- sepolia: import_chains.sepolia.id,
14234
- scroll: import_chains.scroll.id,
14235
- scroll_sepolia: import_chains.scrollSepolia.id,
14236
- sonic: import_chains.sonic.id,
14237
- mantle: import_chains.mantle.id,
14238
- metis: import_chains.metis.id,
14239
- base: import_chains.base.id,
14240
- base_sepolia: import_chains.baseSepolia.id,
14241
- bnb: import_chains.bsc.id,
14242
- gnosis: import_chains.gnosis.id,
14243
- zkEVM: import_chains.polygonZkEvm.id,
14244
- zksync: import_chains.zksync.id,
14245
- linea: import_chains.linea.id,
14246
- ink: import_chains.ink.id,
14247
- soneium: import_chains.soneium.id,
14248
- bob: import_chains.bob.id
14249
- };
14250
- var ChainList = {
14251
- [ChainId.mainnet]: import_chains.mainnet,
14252
- [ChainId.polygon]: import_chains.polygon,
14253
- [ChainId.polygon_amoy]: import_chains.polygonAmoy,
14254
- [ChainId.avalanche]: {
14255
- ...import_chains.avalanche,
14256
- blockExplorers: {
14257
- default: { url: "https://snowscan.xyz", name: "Snowscan" }
14258
- }
14259
- },
14260
- [ChainId.avalanche_fuji]: {
14261
- ...import_chains.avalancheFuji,
14262
- blockExplorers: {
14263
- default: { url: "https://testnet.snowscan.xyz", name: "Snowscan Fuji" }
14264
- }
14265
- },
14266
- [ChainId.arbitrum]: import_chains.arbitrum,
14267
- [ChainId.arbitrum_sepolia]: import_chains.arbitrumSepolia,
14268
- [ChainId.fantom]: import_chains.fantom,
14269
- [ChainId.fantom_testnet]: import_chains.fantomTestnet,
14270
- [ChainId.optimism]: import_chains.optimism,
14271
- [ChainId.optimism_sepolia]: import_chains.optimismSepolia,
14272
- [ChainId.harmony]: import_chains.harmonyOne,
14273
- [ChainId.sepolia]: import_chains.sepolia,
14274
- [ChainId.scroll]: import_chains.scroll,
14275
- [ChainId.scroll_sepolia]: import_chains.scrollSepolia,
14276
- [ChainId.sonic]: import_chains.sonic,
14277
- [ChainId.mantle]: import_chains.mantle,
14278
- [ChainId.metis]: import_chains.metis,
14279
- [ChainId.base]: import_chains.base,
14280
- [ChainId.base_sepolia]: import_chains.baseSepolia,
14281
- [ChainId.bnb]: import_chains.bsc,
14282
- [ChainId.gnosis]: import_chains.gnosis,
14283
- [ChainId.zkEVM]: import_chains.polygonZkEvm,
14284
- [ChainId.celo]: import_chains.celo,
14285
- [ChainId.zksync]: import_chains.zksync,
14286
- [ChainId.linea]: import_chains.linea,
14287
- [ChainId.ink]: import_chains.ink,
14288
- [ChainId.soneium]: import_chains.soneium,
14289
- [ChainId.bob]: import_chains.bob
14290
- };
14291
-
14292
14304
  // src/ecosystem/rpcs.ts
14293
14305
  var import_viem6 = require("viem");
14294
14306
 
@@ -28789,15 +28801,33 @@ var SELFDESTRUCT = 255;
28789
28801
  var DELEGATECALL = 244;
28790
28802
  var isHalting = (opcode) => [STOP, RETURN, REVERT, INVALID, SELFDESTRUCT].includes(opcode);
28791
28803
  var isPUSH = (opcode) => opcode >= PUSH1 && opcode <= PUSH32;
28792
- var SelfdestuctCheckState = /* @__PURE__ */ ((SelfdestuctCheckState2) => {
28793
- SelfdestuctCheckState2[SelfdestuctCheckState2["TRUSTED"] = 0] = "TRUSTED";
28794
- SelfdestuctCheckState2[SelfdestuctCheckState2["EOA"] = 1] = "EOA";
28795
- SelfdestuctCheckState2[SelfdestuctCheckState2["EMPTY"] = 2] = "EMPTY";
28796
- SelfdestuctCheckState2[SelfdestuctCheckState2["DELEGATECALL"] = 3] = "DELEGATECALL";
28797
- SelfdestuctCheckState2[SelfdestuctCheckState2["SAFE"] = 4] = "SAFE";
28798
- SelfdestuctCheckState2[SelfdestuctCheckState2["SELF_DESTRUCT"] = 5] = "SELF_DESTRUCT";
28799
- return SelfdestuctCheckState2;
28800
- })(SelfdestuctCheckState || {});
28804
+ var SelfdestructCheckState = /* @__PURE__ */ ((SelfdestructCheckState2) => {
28805
+ SelfdestructCheckState2[SelfdestructCheckState2["TRUSTED"] = 0] = "TRUSTED";
28806
+ SelfdestructCheckState2[SelfdestructCheckState2["EOA"] = 1] = "EOA";
28807
+ SelfdestructCheckState2[SelfdestructCheckState2["EMPTY"] = 2] = "EMPTY";
28808
+ SelfdestructCheckState2[SelfdestructCheckState2["DELEGATECALL"] = 3] = "DELEGATECALL";
28809
+ SelfdestructCheckState2[SelfdestructCheckState2["SAFE"] = 4] = "SAFE";
28810
+ SelfdestructCheckState2[SelfdestructCheckState2["SELF_DESTRUCT"] = 5] = "SELF_DESTRUCT";
28811
+ return SelfdestructCheckState2;
28812
+ })(SelfdestructCheckState || {});
28813
+ function selfDestructStatusToString(state) {
28814
+ switch (state) {
28815
+ case 0 /* TRUSTED */:
28816
+ return "Trusted";
28817
+ case 1 /* EOA */:
28818
+ return "EOA";
28819
+ case 2 /* EMPTY */:
28820
+ return "Empty";
28821
+ case 3 /* DELEGATECALL */:
28822
+ return "DelegateCall";
28823
+ case 4 /* SAFE */:
28824
+ return "Safe";
28825
+ case 5 /* SELF_DESTRUCT */:
28826
+ return "SelfDestruct";
28827
+ default:
28828
+ return "Unknown";
28829
+ }
28830
+ }
28801
28831
  async function checkForSelfdestruct(client, addresses, trustedAddresses) {
28802
28832
  const result = [];
28803
28833
  for (const address of addresses) {
@@ -28808,7 +28838,8 @@ async function checkForSelfdestruct(client, addresses, trustedAddresses) {
28808
28838
  const code = await (0, import_actions6.getBytecode)(client, { address });
28809
28839
  if (!code) {
28810
28840
  const nonce = await (0, import_actions6.getTransactionCount)(client, { address });
28811
- if (nonce > 0) result.push({ address, state: 1 /* EOA */ });
28841
+ if (nonce > 0)
28842
+ result.push({ address, state: 1 /* EOA */ });
28812
28843
  else result.push({ address, state: 2 /* EMPTY */ });
28813
28844
  continue;
28814
28845
  }
@@ -28911,73 +28942,6 @@ async function getVerificationStatus({
28911
28942
  return results;
28912
28943
  }
28913
28944
 
28914
- // src/seatbelt/tenderly-report.ts
28915
- async function renderTenderlyReport({
28916
- client,
28917
- sim,
28918
- payloadId,
28919
- payload,
28920
- onchainLogs: { createdLog, queuedLog, executedLog }
28921
- }) {
28922
- const logs = parseLogs({
28923
- logs: (sim.transaction.transaction_info.logs || []).map((l) => l.raw),
28924
- eventDb: EVENT_DB
28925
- });
28926
- const selfDestruct = checkForSelfdestruct(
28927
- client,
28928
- sim.transaction.addresses,
28929
- []
28930
- // trusted addresses
28931
- );
28932
- const verified = getVerificationStatus({
28933
- client,
28934
- addresses: sim.transaction.addresses,
28935
- contractDb: {}
28936
- });
28937
- let report = `## Payload ${payloadId} on ${client.chain.name}
28938
-
28939
- - creator: ${payload.creator}
28940
- - maximumAccessLevelRequired: ${payload.maximumAccessLevelRequired}
28941
- - state: ${payload.state}(${HUMAN_READABLE_PAYLOAD_STATE[payload.state]})
28942
- - actions:
28943
- ${payload.actions.map((a) => ` - [${a.target}](${toTxLink(a.target, client)}), accessLevel: ${a.accessLevel}, withDelegateCall: ${a.withDelegateCall}, value: ${a.value}, signature: ${a.signature}, callData: ${a.callData}`).join("\n")}
28944
- - createdAt: [${renderUnixTime(payload.createdAt)}](${toTxLink(createdLog.transactionHash, client)})
28945
- `;
28946
- if (queuedLog) {
28947
- report += `- queuedAt: [${renderUnixTime(payload.queuedAt)}](${toTxLink(
28948
- queuedLog.transactionHash,
28949
- client
28950
- )})
28951
- `;
28952
- if (executedLog) {
28953
- report += `- executedAt: [${renderUnixTime(payload.executedAt)}, block: ${executedLog.blockNumber}](${toTxLink(
28954
- executedLog.transactionHash,
28955
- client
28956
- )})
28957
- `;
28958
- } else {
28959
- report += `- earliest execution at: [${renderUnixTime(
28960
- payload.queuedAt + payload.delay
28961
- )}](https://www.epochconverter.com/countdown?q=${payload.queuedAt + payload.delay})
28962
- `;
28963
- const timestamp = Math.floor(
28964
- new Date(sim.transaction.timestamp).getTime() / 1e3
28965
- );
28966
- report += `- simulatedExecutionAt: ${renderUnixTime(
28967
- timestamp
28968
- )}, timestamp: ${timestamp}, block: ${sim.transaction.block_number}`;
28969
- }
28970
- }
28971
- report += "\n";
28972
- return report;
28973
- }
28974
- function renderUnixTime(time) {
28975
- return new Date(time * 1e3).toLocaleString("en-GB", { timeZone: "UTC" });
28976
- }
28977
- function toTxLink(txn, client) {
28978
- return `${client.chain?.blockExplorers?.default.url}/tx/${txn}`;
28979
- }
28980
-
28981
28945
  // src/seatbelt/state.ts
28982
28946
  var import_viem10 = require("viem");
28983
28947
  function transformTenderlyStateDiff(stateDiff) {
@@ -29002,7 +28966,8 @@ function transformTenderlyStateDiff(stateDiff) {
29002
28966
  changes.push({
29003
28967
  before: oldVal,
29004
28968
  after: newVal,
29005
- name: `Slot \`${w.key}\``
28969
+ type: "raw",
28970
+ name: w.key
29006
28971
  });
29007
28972
  }
29008
28973
  } else if (diff.soltype.simple_type) {
@@ -29022,23 +28987,25 @@ function transformTenderlyStateDiff(stateDiff) {
29022
28987
  const original = diff.original || {};
29023
28988
  const dirty = diff.dirty || {};
29024
28989
  for (const k of keys) {
29025
- if (original[k] || dirty[k])
28990
+ if (original[k] || dirty[k]) {
28991
+ const objDiff = getObjectDiff(original[k], dirty[k]);
29026
28992
  changes.push({
29027
- before: original[k],
29028
- after: dirty[k],
29029
- name: k,
29030
- type: diff.soltype?.name
28993
+ before: objDiff.before,
28994
+ after: objDiff.after,
28995
+ name: diff.soltype?.name,
28996
+ type: diff.soltype?.type,
28997
+ key: k
29031
28998
  });
28999
+ }
29032
29000
  }
29033
29001
  } else {
29034
29002
  for (const w of diff.raw) {
29035
- const oldVal = JSON.stringify(w.original);
29036
- const newVal = JSON.stringify(w.dirty);
29003
+ const diff2 = getObjectDiff(w.original, w.dirty);
29037
29004
  changes.push({
29038
- before: oldVal,
29039
- after: newVal,
29005
+ before: diff2.before,
29006
+ after: diff2.after,
29040
29007
  name: w.key,
29041
- type: "slot"
29008
+ type: "raw"
29042
29009
  });
29043
29010
  }
29044
29011
  }
@@ -29047,6 +29014,213 @@ function transformTenderlyStateDiff(stateDiff) {
29047
29014
  }
29048
29015
  return allChanges;
29049
29016
  }
29017
+ function getObjectDiff(obj1, obj2) {
29018
+ const diff = { before: {}, after: {} };
29019
+ const allKeys = /* @__PURE__ */ new Set([...Object.keys(obj1), ...Object.keys(obj2)]);
29020
+ for (const key of allKeys) {
29021
+ const val1 = obj1[key];
29022
+ const val2 = obj2[key];
29023
+ if (JSON.stringify(val1) !== JSON.stringify(val2)) {
29024
+ diff.before[key] = val1;
29025
+ diff.after[key] = val2;
29026
+ }
29027
+ }
29028
+ return diff;
29029
+ }
29030
+ function renderMarkdownStateDiffReport(changes, getContractName = (address) => `${address}`) {
29031
+ let report = "";
29032
+ for (const contract of Object.keys(changes)) {
29033
+ report += `## ${getContractName(contract)}
29034
+
29035
+ `;
29036
+ for (const change of changes[contract]) {
29037
+ if (typeof change.before !== "object" || typeof change.after !== "object") {
29038
+ report += `@@ \`${change.name}\` ${change.type} ${change.key ? `key \`${change.key}\`` : ""} @@
29039
+ `;
29040
+ report += `- ${change.before}
29041
+ `;
29042
+ report += `+ ${change.after}
29043
+
29044
+ `;
29045
+ } else {
29046
+ report += deepDiff(change);
29047
+ }
29048
+ }
29049
+ }
29050
+ return report;
29051
+ }
29052
+ function deepDiff({
29053
+ name,
29054
+ type: type2,
29055
+ before,
29056
+ after,
29057
+ key,
29058
+ path
29059
+ }) {
29060
+ let diff = "";
29061
+ const allKeys = /* @__PURE__ */ new Set([...Object.keys(before), ...Object.keys(after)]);
29062
+ for (const pathKey of allKeys) {
29063
+ if (typeof before[pathKey] !== "object" || typeof after[pathKey] !== "object") {
29064
+ diff += `@@ \`${name}\` ${type2} ${key ? `key \`${key}\`` : ""}.${path ?? ""}${pathKey} @@
29065
+ `;
29066
+ diff += `- ${JSON.stringify(before[pathKey])}
29067
+ `;
29068
+ diff += `+ ${JSON.stringify(after[pathKey])}
29069
+
29070
+ `;
29071
+ } else {
29072
+ return deepDiff({
29073
+ name,
29074
+ type: type2,
29075
+ before: before[pathKey],
29076
+ after: after[pathKey],
29077
+ key,
29078
+ path: path ? `${path}.${pathKey}` : `${pathKey}.`
29079
+ });
29080
+ }
29081
+ }
29082
+ return diff;
29083
+ }
29084
+
29085
+ // src/seatbelt/tenderly-report.ts
29086
+ async function renderTenderlyReport({
29087
+ client,
29088
+ sim,
29089
+ payloadId,
29090
+ payload,
29091
+ onchainLogs: { createdLog, queuedLog, executedLog },
29092
+ eventCache = [],
29093
+ config
29094
+ }) {
29095
+ const events = sim.transaction.transaction_info?.logs ? tenderly_logsToAbiLogs(sim.transaction.transaction_info?.logs) : [];
29096
+ events.map((e) => {
29097
+ if (!eventCache.find((eC) => JSON.stringify(eC) === JSON.stringify(e))) {
29098
+ eventCache.push(e);
29099
+ }
29100
+ });
29101
+ const logs = parseLogs({
29102
+ logs: (sim.transaction.transaction_info.logs || []).map((l) => l.raw),
29103
+ eventDb: eventCache
29104
+ });
29105
+ const selfDestruct = await checkForSelfdestruct(
29106
+ client,
29107
+ sim.transaction.addresses,
29108
+ []
29109
+ // trusted addresses
29110
+ );
29111
+ const verified = await getVerificationStatus({
29112
+ client,
29113
+ addresses: sim.transaction.addresses,
29114
+ // In the future we might want to maintain our own db, so we do not need to rely on tenderly so much for contract name lookup.
29115
+ contractDb: sim.contracts.reduce(
29116
+ (acc, val) => {
29117
+ acc[val.address] = val.contract_name;
29118
+ return acc;
29119
+ },
29120
+ {}
29121
+ ),
29122
+ apiKey: config.etherscanApiKey
29123
+ });
29124
+ const stateDiff = transformTenderlyStateDiff(
29125
+ sim.transaction.transaction_info.state_diff
29126
+ );
29127
+ let report = `## Payload ${payloadId} on ${client.chain.name}
29128
+
29129
+ - creator: ${payload.creator}
29130
+ - maximumAccessLevelRequired: ${payload.maximumAccessLevelRequired}
29131
+ - state: ${payload.state}(${HUMAN_READABLE_PAYLOAD_STATE[payload.state]})
29132
+ - actions:
29133
+ ${payload.actions.map(
29134
+ (a) => ` - [${a.target}](${toTxLink(a.target, client)}), accessLevel: ${a.accessLevel}, withDelegateCall: ${a.withDelegateCall}, value: ${a.value}, signature: ${a.signature}, callData: ${a.callData}`
29135
+ ).join("\n")}
29136
+ `;
29137
+ if (createdLog) {
29138
+ report += `- createdAt: [${renderUnixTime(payload.createdAt)}](${toTxLink(
29139
+ createdLog.transactionHash,
29140
+ client
29141
+ )})
29142
+ `;
29143
+ if (queuedLog) {
29144
+ report += `- queuedAt: [${renderUnixTime(payload.queuedAt)}](${toTxLink(
29145
+ queuedLog.transactionHash,
29146
+ client
29147
+ )})
29148
+ `;
29149
+ if (executedLog) {
29150
+ report += `- executedAt: [${renderUnixTime(payload.executedAt)}, block: ${executedLog.blockNumber}](${toTxLink(executedLog.transactionHash, client)})
29151
+ `;
29152
+ } else {
29153
+ report += `- earliest execution at: [${renderUnixTime(
29154
+ payload.queuedAt + payload.delay
29155
+ )}](https://www.epochconverter.com/countdown?q=${payload.queuedAt + payload.delay})
29156
+ `;
29157
+ const timestamp = Math.floor(
29158
+ new Date(sim.transaction.timestamp).getTime() / 1e3
29159
+ );
29160
+ report += `- simulatedExecutionAt: ${renderUnixTime(
29161
+ timestamp
29162
+ )}, timestamp: ${timestamp}, block: ${sim.transaction.block_number}`;
29163
+ }
29164
+ }
29165
+ }
29166
+ report += "\n";
29167
+ if (verified.find((contract) => contract.status === 2 /* ERROR */)) {
29168
+ report += `:sos: Found unverified contracts!
29169
+
29170
+ `;
29171
+ }
29172
+ if (selfDestruct.find(
29173
+ (contract) => contract.state === 5 /* SELF_DESTRUCT */
29174
+ )) {
29175
+ report += `:sos: Found selfDestruct!
29176
+
29177
+ `;
29178
+ }
29179
+ report += renderMarkdownStateDiffReport(stateDiff);
29180
+ if (verified.length) {
29181
+ report += "### Verification status for contracts touched in the proposal\n\n";
29182
+ report += "| Contract | Status |\n";
29183
+ report += "|---------|------------|\n";
29184
+ verified.map((contract) => {
29185
+ report += `| ${contract.address}(${contract.name}) | ${verificationStatusToString(contract.status)} |
29186
+ `;
29187
+ });
29188
+ report += "\n";
29189
+ }
29190
+ if (selfDestruct.length) {
29191
+ report += `### Selfdestruct analysis
29192
+
29193
+ `;
29194
+ report += "| Address | Result |\n";
29195
+ report += "|---------|------------|\n";
29196
+ selfDestruct.map((selfDestruct2) => {
29197
+ report += `| ${selfDestruct2.address} | ${selfDestructStatusToString(
29198
+ selfDestruct2.state
29199
+ )} |
29200
+ `;
29201
+ });
29202
+ report += "\n";
29203
+ }
29204
+ if (logs.length) {
29205
+ report += "### Events emitted from the proposal\n\n";
29206
+ report += "| Address | Event Name | Arguments |\n";
29207
+ report += "|---------|------------|-----------|\n";
29208
+ logs.map((log) => {
29209
+ report += `| ${log.address} | ${log.eventName || log.topics} | ${log.args ? JSON.stringify(
29210
+ log.args,
29211
+ (_, v) => typeof v === "bigint" ? v.toString() : v
29212
+ ) : log.data} |
29213
+ `;
29214
+ });
29215
+ }
29216
+ return { report, eventCache };
29217
+ }
29218
+ function renderUnixTime(time) {
29219
+ return new Date(time * 1e3).toLocaleString("en-GB", { timeZone: "UTC" });
29220
+ }
29221
+ function toTxLink(txn, client) {
29222
+ return `${client.chain?.blockExplorers?.default.url}/tx/${txn}`;
29223
+ }
29050
29224
 
29051
29225
  // src/ecosystem/foundry.ts
29052
29226
  var import_node_child_process = require("child_process");
@@ -29137,7 +29311,7 @@ function diffFoundryStorageLayout(layoutBefore, layoutAfter) {
29137
29311
  ProposalState,
29138
29312
  RAY,
29139
29313
  SECONDS_PER_YEAR,
29140
- SelfdestuctCheckState,
29314
+ SelfdestructCheckState,
29141
29315
  SoltypeType,
29142
29316
  VerificationStatus,
29143
29317
  WAD,
@@ -29190,6 +29364,7 @@ function diffFoundryStorageLayout(layoutBefore, layoutAfter) {
29190
29364
  getNonFinalizedProposals,
29191
29365
  getNormalizedDebt,
29192
29366
  getNormalizedIncome,
29367
+ getObjectDiff,
29193
29368
  getPayloadStorageOverrides,
29194
29369
  getPayloadsController,
29195
29370
  getPublicRpc,
@@ -29214,8 +29389,10 @@ function diffFoundryStorageLayout(layoutBefore, layoutAfter) {
29214
29389
  rayDiv,
29215
29390
  rayMul,
29216
29391
  rayToWad,
29392
+ renderMarkdownStateDiffReport,
29217
29393
  renderTenderlyReport,
29218
29394
  routescanExplorers,
29395
+ selfDestructStatusToString,
29219
29396
  setBits,
29220
29397
  tenderly_createVnet,
29221
29398
  tenderly_deleteVnet,