@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/index.d.mts +24 -7
- package/dist/index.d.ts +24 -7
- package/dist/index.js +343 -166
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +369 -195
- package/dist/index.mjs.map +1 -1
- package/dist/node.d.mts +1 -1
- package/dist/node.d.ts +1 -1
- package/dist/node.js +343 -166
- package/dist/node.js.map +1 -1
- package/dist/node.mjs +369 -195
- package/dist/node.mjs.map +1 -1
- package/package.json +1 -1
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,
|
|
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,
|
|
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
|
-
|
|
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: {
|
|
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
|
|
28793
|
-
|
|
28794
|
-
|
|
28795
|
-
|
|
28796
|
-
|
|
28797
|
-
|
|
28798
|
-
|
|
28799
|
-
return
|
|
28800
|
-
})(
|
|
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)
|
|
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
|
-
|
|
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:
|
|
29028
|
-
after:
|
|
29029
|
-
name:
|
|
29030
|
-
type: diff.soltype?.
|
|
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
|
|
29036
|
-
const newVal = JSON.stringify(w.dirty);
|
|
29003
|
+
const diff2 = getObjectDiff(w.original, w.dirty);
|
|
29037
29004
|
changes.push({
|
|
29038
|
-
before:
|
|
29039
|
-
after:
|
|
29005
|
+
before: diff2.before,
|
|
29006
|
+
after: diff2.after,
|
|
29040
29007
|
name: w.key,
|
|
29041
|
-
type: "
|
|
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
|
-
|
|
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,
|