@pimlico/alto 0.0.0-main.20250428T104157 → 0.0.0-main.20250429T114818
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/contracts/EIP712.sol/EIP712.json +1 -0
- package/contracts/ERC165.sol/ERC165.json +1 -0
- package/contracts/Eip7702Support.sol/Eip7702Support.json +1 -0
- package/contracts/EntryPoint.sol/EntryPoint.json +1 -0
- package/contracts/EntryPointCodeOverride.sol/EntryPointCodeOverride.json +1 -0
- package/contracts/EntryPointSimulations.sol/EntryPointSimulations.json +1 -0
- package/contracts/Exec.sol/Exec.json +1 -0
- package/contracts/IAccount.sol/IAccount.json +1 -0
- package/contracts/IAccountExecute.sol/IAccountExecute.json +1 -0
- package/contracts/IAggregator.sol/IAggregator.json +1 -0
- package/contracts/IERC165.sol/IERC165.json +1 -0
- package/contracts/IERC5267.sol/IERC5267.json +1 -0
- package/contracts/IEntryPoint.sol/IEntryPoint.json +1 -0
- package/contracts/IEntryPointSimulations.sol/IEntryPointSimulations.json +1 -0
- package/contracts/INonceManager.sol/INonceManager.json +1 -0
- package/contracts/IPaymaster.sol/IPaymaster.json +1 -0
- package/contracts/ISenderCreator.sol/ISenderCreator.json +1 -0
- package/contracts/IStakeManager.sol/IStakeManager.json +1 -0
- package/contracts/Math.sol/Math.json +1 -0
- package/contracts/MessageHashUtils.sol/MessageHashUtils.json +1 -0
- package/contracts/NonceManager.sol/NonceManager.json +1 -0
- package/contracts/Panic.sol/Panic.json +1 -0
- package/contracts/PimlicoEntryPointSimulationsV7.sol/PimlicoEntryPointSimulationsV7.json +1 -0
- package/contracts/PimlicoEntryPointSimulationsV8.sol/PimlicoEntryPointSimulationsV8.json +1 -0
- package/contracts/ReentrancyGuard.sol/ReentrancyGuard.json +1 -0
- package/contracts/ReentrancyGuardTransient.sol/ReentrancyGuardTransient.json +1 -0
- package/contracts/SafeCast.sol/SafeCast.json +1 -0
- package/contracts/SenderCreator.sol/SenderCreator.json +1 -0
- package/contracts/ShortStrings.sol/ShortStrings.json +1 -0
- package/contracts/SignedMath.sol/SignedMath.json +1 -0
- package/contracts/StakeManager.sol/StakeManager.json +1 -0
- package/contracts/StorageSlot.sol/StorageSlot.json +1 -0
- package/contracts/Strings.sol/Strings.json +1 -0
- package/contracts/TransientSlot.sol/TransientSlot.json +1 -0
- package/contracts/UserOperation.sol/UserOperationLib.json +1 -0
- package/contracts/UserOperationLib.sol/UserOperationLib.json +1 -0
- package/contracts/build-info/0c52dc19c74a9a932ddddcca463ce398.json +1 -0
- package/contracts/build-info/a1d9af887789a0ade8ffbc8b045f0780.json +1 -0
- package/contracts/interfaces/IEntryPoint.sol/IEntryPoint.json +1 -0
- package/esm/cli/deploySimulationsContract.js +14 -5
- package/esm/cli/deploySimulationsContract.js.map +1 -1
- package/package.json +2 -1
- package/lib/cli/alto.d.ts +0 -7
- package/lib/cli/alto.js +0 -141
- package/lib/cli/alto.js.map +0 -1
- package/lib/cli/config/bundler.d.ts +0 -2872
- package/lib/cli/config/bundler.js +0 -242
- package/lib/cli/config/bundler.js.map +0 -1
- package/lib/cli/config/index.d.ts +0 -3
- package/lib/cli/config/index.js +0 -19
- package/lib/cli/config/index.js.map +0 -1
- package/lib/cli/config/options.d.ts +0 -13
- package/lib/cli/config/options.js +0 -587
- package/lib/cli/config/options.js.map +0 -1
- package/lib/cli/customTransport.d.ts +0 -14
- package/lib/cli/customTransport.js +0 -94
- package/lib/cli/customTransport.js.map +0 -1
- package/lib/cli/deploySimulationsContract.d.ts +0 -13
- package/lib/cli/deploySimulationsContract.js +0 -100
- package/lib/cli/deploySimulationsContract.js.map +0 -1
- package/lib/cli/handler.d.ts +0 -3
- package/lib/cli/handler.js +0 -157
- package/lib/cli/handler.js.map +0 -1
- package/lib/cli/index.d.ts +0 -4
- package/lib/cli/index.js +0 -20
- package/lib/cli/index.js.map +0 -1
- package/lib/cli/instrumentation.d.ts +0 -2
- package/lib/cli/instrumentation.js +0 -47
- package/lib/cli/instrumentation.js.map +0 -1
- package/lib/cli/parseArgs.d.ts +0 -8
- package/lib/cli/parseArgs.js +0 -25
- package/lib/cli/parseArgs.js.map +0 -1
- package/lib/cli/setupServer.d.ts +0 -13
- package/lib/cli/setupServer.js +0 -266
- package/lib/cli/setupServer.js.map +0 -1
- package/lib/cli/util.d.ts +0 -22
- package/lib/cli/util.js +0 -34
- package/lib/cli/util.js.map +0 -1
- package/lib/createConfig.d.ts +0 -16
- package/lib/createConfig.js +0 -13
- package/lib/createConfig.js.map +0 -1
- package/lib/executor/executor.d.ts +0 -65
- package/lib/executor/executor.js +0 -301
- package/lib/executor/executor.js.map +0 -1
- package/lib/executor/executorManager.d.ts +0 -108
- package/lib/executor/executorManager.js +0 -702
- package/lib/executor/executorManager.js.map +0 -1
- package/lib/executor/fastlane.d.ts +0 -9
- package/lib/executor/fastlane.js +0 -41
- package/lib/executor/fastlane.js.map +0 -1
- package/lib/executor/filterOpsAndEStimateGas.d.ts +0 -29
- package/lib/executor/filterOpsAndEStimateGas.js +0 -225
- package/lib/executor/filterOpsAndEStimateGas.js.map +0 -1
- package/lib/executor/index.d.ts +0 -5
- package/lib/executor/index.js +0 -21
- package/lib/executor/index.js.map +0 -1
- package/lib/executor/senderManager/createMemorySenderManager.d.ts +0 -8
- package/lib/executor/senderManager/createMemorySenderManager.js +0 -45
- package/lib/executor/senderManager/createMemorySenderManager.js.map +0 -1
- package/lib/executor/senderManager/createRedisSenderManager.d.ts +0 -8
- package/lib/executor/senderManager/createRedisSenderManager.js +0 -85
- package/lib/executor/senderManager/createRedisSenderManager.js.map +0 -1
- package/lib/executor/senderManager/flushOnStartUp.d.ts +0 -9
- package/lib/executor/senderManager/flushOnStartUp.js +0 -37
- package/lib/executor/senderManager/flushOnStartUp.js.map +0 -1
- package/lib/executor/senderManager/index.d.ts +0 -15
- package/lib/executor/senderManager/index.js +0 -25
- package/lib/executor/senderManager/index.js.map +0 -1
- package/lib/executor/senderManager/validateAndRefill.d.ts +0 -11
- package/lib/executor/senderManager/validateAndRefill.js +0 -115
- package/lib/executor/senderManager/validateAndRefill.js.map +0 -1
- package/lib/executor/utilityWalletMonitor.d.ts +0 -19
- package/lib/executor/utilityWalletMonitor.js +0 -42
- package/lib/executor/utilityWalletMonitor.js.map +0 -1
- package/lib/executor/utils.d.ts +0 -34
- package/lib/executor/utils.js +0 -167
- package/lib/executor/utils.js.map +0 -1
- package/lib/handlers/arbitrumGasPriceManager.d.ts +0 -14
- package/lib/handlers/arbitrumGasPriceManager.js +0 -39
- package/lib/handlers/arbitrumGasPriceManager.js.map +0 -1
- package/lib/handlers/eventManager.d.ts +0 -29
- package/lib/handlers/eventManager.js +0 -225
- package/lib/handlers/eventManager.js.map +0 -1
- package/lib/handlers/gasPriceManager.d.ts +0 -36
- package/lib/handlers/gasPriceManager.js +0 -391
- package/lib/handlers/gasPriceManager.js.map +0 -1
- package/lib/handlers/index.d.ts +0 -3
- package/lib/handlers/index.js +0 -19
- package/lib/handlers/index.js.map +0 -1
- package/lib/handlers/mantleGasPriceManager.d.ts +0 -23
- package/lib/handlers/mantleGasPriceManager.js +0 -44
- package/lib/handlers/mantleGasPriceManager.js.map +0 -1
- package/lib/handlers/optimismManager.d.ts +0 -10
- package/lib/handlers/optimismManager.js +0 -21
- package/lib/handlers/optimismManager.js.map +0 -1
- package/lib/index.d.ts +0 -2
- package/lib/index.js +0 -4
- package/lib/index.js.map +0 -1
- package/lib/mempool/index.d.ts +0 -4
- package/lib/mempool/index.js +0 -20
- package/lib/mempool/index.js.map +0 -1
- package/lib/mempool/mempool.d.ts +0 -191
- package/lib/mempool/mempool.js +0 -499
- package/lib/mempool/mempool.js.map +0 -1
- package/lib/mempool/monitoring.d.ts +0 -14
- package/lib/mempool/monitoring.js +0 -101
- package/lib/mempool/monitoring.js.map +0 -1
- package/lib/mempool/reputationManager.d.ts +0 -121
- package/lib/mempool/reputationManager.js +0 -472
- package/lib/mempool/reputationManager.js.map +0 -1
- package/lib/rpc/createMethodHandler.d.ts +0 -31
- package/lib/rpc/createMethodHandler.js +0 -34
- package/lib/rpc/createMethodHandler.js.map +0 -1
- package/lib/rpc/estimation/gasEstimationHandler.d.ts +0 -30
- package/lib/rpc/estimation/gasEstimationHandler.js +0 -50
- package/lib/rpc/estimation/gasEstimationHandler.js.map +0 -1
- package/lib/rpc/estimation/gasEstimationsV06.d.ts +0 -19
- package/lib/rpc/estimation/gasEstimationsV06.js +0 -148
- package/lib/rpc/estimation/gasEstimationsV06.js.map +0 -1
- package/lib/rpc/estimation/gasEstimationsV07.d.ts +0 -101
- package/lib/rpc/estimation/gasEstimationsV07.js +0 -727
- package/lib/rpc/estimation/gasEstimationsV07.js.map +0 -1
- package/lib/rpc/estimation/types.d.ts +0 -120
- package/lib/rpc/estimation/types.js +0 -125
- package/lib/rpc/estimation/types.js.map +0 -1
- package/lib/rpc/index.d.ts +0 -4
- package/lib/rpc/index.js +0 -20
- package/lib/rpc/index.js.map +0 -1
- package/lib/rpc/methods/debug_bundler_clearReputation.d.ts +0 -22
- package/lib/rpc/methods/debug_bundler_clearReputation.js +0 -15
- package/lib/rpc/methods/debug_bundler_clearReputation.js.map +0 -1
- package/lib/rpc/methods/debug_bundler_clearState.d.ts +0 -22
- package/lib/rpc/methods/debug_bundler_clearState.js +0 -16
- package/lib/rpc/methods/debug_bundler_clearState.js.map +0 -1
- package/lib/rpc/methods/debug_bundler_dumpMempool.d.ts +0 -973
- package/lib/rpc/methods/debug_bundler_dumpMempool.js +0 -16
- package/lib/rpc/methods/debug_bundler_dumpMempool.js.map +0 -1
- package/lib/rpc/methods/debug_bundler_dumpReputation.d.ts +0 -57
- package/lib/rpc/methods/debug_bundler_dumpReputation.js +0 -16
- package/lib/rpc/methods/debug_bundler_dumpReputation.js.map +0 -1
- package/lib/rpc/methods/debug_bundler_getStakeStatus.d.ts +0 -79
- package/lib/rpc/methods/debug_bundler_getStakeStatus.js +0 -25
- package/lib/rpc/methods/debug_bundler_getStakeStatus.js.map +0 -1
- package/lib/rpc/methods/debug_bundler_sendBundleNow.d.ts +0 -22
- package/lib/rpc/methods/debug_bundler_sendBundleNow.js +0 -15
- package/lib/rpc/methods/debug_bundler_sendBundleNow.js.map +0 -1
- package/lib/rpc/methods/debug_bundler_setBundlingMode.d.ts +0 -22
- package/lib/rpc/methods/debug_bundler_setBundlingMode.js +0 -16
- package/lib/rpc/methods/debug_bundler_setBundlingMode.js.map +0 -1
- package/lib/rpc/methods/debug_bundler_setReputation.d.ts +0 -46
- package/lib/rpc/methods/debug_bundler_setReputation.js +0 -16
- package/lib/rpc/methods/debug_bundler_setReputation.js.map +0 -1
- package/lib/rpc/methods/eth_chainId.d.ts +0 -22
- package/lib/rpc/methods/eth_chainId.js +0 -13
- package/lib/rpc/methods/eth_chainId.js.map +0 -1
- package/lib/rpc/methods/eth_estimateUserOperationGas.d.ts +0 -1891
- package/lib/rpc/methods/eth_estimateUserOperationGas.js +0 -26
- package/lib/rpc/methods/eth_estimateUserOperationGas.js.map +0 -1
- package/lib/rpc/methods/eth_getUserOperationByHash.d.ts +0 -1775
- package/lib/rpc/methods/eth_getUserOperationByHash.js +0 -101
- package/lib/rpc/methods/eth_getUserOperationByHash.js.map +0 -1
- package/lib/rpc/methods/eth_getUserOperationReceipt.d.ts +0 -412
- package/lib/rpc/methods/eth_getUserOperationReceipt.js +0 -14
- package/lib/rpc/methods/eth_getUserOperationReceipt.js.map +0 -1
- package/lib/rpc/methods/eth_sendUserOperation.d.ts +0 -878
- package/lib/rpc/methods/eth_sendUserOperation.js +0 -44
- package/lib/rpc/methods/eth_sendUserOperation.js.map +0 -1
- package/lib/rpc/methods/eth_supportedEntryPoints.d.ts +0 -22
- package/lib/rpc/methods/eth_supportedEntryPoints.js +0 -13
- package/lib/rpc/methods/eth_supportedEntryPoints.js.map +0 -1
- package/lib/rpc/methods/index.d.ts +0 -3
- package/lib/rpc/methods/index.js +0 -44
- package/lib/rpc/methods/index.js.map +0 -1
- package/lib/rpc/methods/pimlico_getUserOperationGasPrice.d.ts +0 -131
- package/lib/rpc/methods/pimlico_getUserOperationGasPrice.js +0 -33
- package/lib/rpc/methods/pimlico_getUserOperationGasPrice.js.map +0 -1
- package/lib/rpc/methods/pimlico_getUserOperationStatus.d.ts +0 -43
- package/lib/rpc/methods/pimlico_getUserOperationStatus.js +0 -14
- package/lib/rpc/methods/pimlico_getUserOperationStatus.js.map +0 -1
- package/lib/rpc/methods/pimlico_sendUserOperationNow.d.ts +0 -1268
- package/lib/rpc/methods/pimlico_sendUserOperationNow.js +0 -55
- package/lib/rpc/methods/pimlico_sendUserOperationNow.js.map +0 -1
- package/lib/rpc/rpcHandler.d.ts +0 -75
- package/lib/rpc/rpcHandler.js +0 -391
- package/lib/rpc/rpcHandler.js.map +0 -1
- package/lib/rpc/server.d.ts +0 -26
- package/lib/rpc/server.js +0 -283
- package/lib/rpc/server.js.map +0 -1
- package/lib/rpc/validation/BundlerCollectorTracerV06.d.ts +0 -102
- package/lib/rpc/validation/BundlerCollectorTracerV06.js +0 -262
- package/lib/rpc/validation/BundlerCollectorTracerV06.js.map +0 -1
- package/lib/rpc/validation/BundlerCollectorTracerV07.d.ts +0 -102
- package/lib/rpc/validation/BundlerCollectorTracerV07.js +0 -261
- package/lib/rpc/validation/BundlerCollectorTracerV07.js.map +0 -1
- package/lib/rpc/validation/SafeValidator.d.ts +0 -51
- package/lib/rpc/validation/SafeValidator.js +0 -327
- package/lib/rpc/validation/SafeValidator.js.map +0 -1
- package/lib/rpc/validation/TracerResultParserV06.d.ts +0 -13
- package/lib/rpc/validation/TracerResultParserV06.js +0 -582
- package/lib/rpc/validation/TracerResultParserV06.js.map +0 -1
- package/lib/rpc/validation/TracerResultParserV07.d.ts +0 -33
- package/lib/rpc/validation/TracerResultParserV07.js +0 -599
- package/lib/rpc/validation/TracerResultParserV07.js.map +0 -1
- package/lib/rpc/validation/UnsafeValidator.d.ts +0 -97
- package/lib/rpc/validation/UnsafeValidator.js +0 -303
- package/lib/rpc/validation/UnsafeValidator.js.map +0 -1
- package/lib/rpc/validation/index.d.ts +0 -3
- package/lib/rpc/validation/index.js +0 -19
- package/lib/rpc/validation/index.js.map +0 -1
- package/lib/rpc/validation/tracer.d.ts +0 -125
- package/lib/rpc/validation/tracer.js +0 -112
- package/lib/rpc/validation/tracer.js.map +0 -1
- package/lib/store/createMemoryOutstandingStore.d.ts +0 -28
- package/lib/store/createMemoryOutstandingStore.js +0 -236
- package/lib/store/createMemoryOutstandingStore.js.map +0 -1
- package/lib/store/createMempoolStore.d.ts +0 -8
- package/lib/store/createMempoolStore.js +0 -199
- package/lib/store/createMempoolStore.js.map +0 -1
- package/lib/store/createRedisOutstandingStore.d.ts +0 -27
- package/lib/store/createRedisOutstandingStore.js +0 -349
- package/lib/store/createRedisOutstandingStore.js.map +0 -1
- package/lib/store/createRedisStore.d.ts +0 -9
- package/lib/store/createRedisStore.js +0 -138
- package/lib/store/createRedisStore.js.map +0 -1
- package/lib/store/createStore.d.ts +0 -6
- package/lib/store/createStore.js +0 -70
- package/lib/store/createStore.js.map +0 -1
- package/lib/store/index.d.ts +0 -81
- package/lib/store/index.js +0 -6
- package/lib/store/index.js.map +0 -1
- package/lib/types/contracts/ArbitrumL1FeeAbi.d.ts +0 -32
- package/lib/types/contracts/ArbitrumL1FeeAbi.js +0 -45
- package/lib/types/contracts/ArbitrumL1FeeAbi.js.map +0 -1
- package/lib/types/contracts/CallEngine.d.ts +0 -28
- package/lib/types/contracts/CallEngine.js +0 -40
- package/lib/types/contracts/CallEngine.js.map +0 -1
- package/lib/types/contracts/CodeHashGetter.d.ts +0 -37
- package/lib/types/contracts/CodeHashGetter.js +0 -48
- package/lib/types/contracts/CodeHashGetter.js.map +0 -1
- package/lib/types/contracts/EntryPoint.d.ts +0 -1789
- package/lib/types/contracts/EntryPoint.js +0 -2307
- package/lib/types/contracts/EntryPoint.js.map +0 -1
- package/lib/types/contracts/EntryPointSimulationsV6.d.ts +0 -34
- package/lib/types/contracts/EntryPointSimulationsV6.js +0 -51
- package/lib/types/contracts/EntryPointSimulationsV6.js.map +0 -1
- package/lib/types/contracts/EntryPointSimulationsV7.d.ts +0 -2076
- package/lib/types/contracts/EntryPointSimulationsV7.js +0 -2678
- package/lib/types/contracts/EntryPointSimulationsV7.js.map +0 -1
- package/lib/types/contracts/IAccountExecute.d.ts +0 -53
- package/lib/types/contracts/IAccountExecute.js +0 -71
- package/lib/types/contracts/IAccountExecute.js.map +0 -1
- package/lib/types/contracts/IPaymaster.d.ts +0 -3
- package/lib/types/contracts/IPaymaster.js +0 -120
- package/lib/types/contracts/IPaymaster.js.map +0 -1
- package/lib/types/contracts/MantleBvmGasPriceOracle.d.ts +0 -219
- package/lib/types/contracts/MantleBvmGasPriceOracle.js +0 -180
- package/lib/types/contracts/MantleBvmGasPriceOracle.js.map +0 -1
- package/lib/types/contracts/OpL1FeeAbi.d.ts +0 -114
- package/lib/types/contracts/OpL1FeeAbi.js +0 -77
- package/lib/types/contracts/OpL1FeeAbi.js.map +0 -1
- package/lib/types/contracts/PimlicoEntryPointSimulations.d.ts +0 -25
- package/lib/types/contracts/PimlicoEntryPointSimulations.js +0 -42
- package/lib/types/contracts/PimlicoEntryPointSimulations.js.map +0 -1
- package/lib/types/contracts/SenderCreator.d.ts +0 -4
- package/lib/types/contracts/SenderCreator.js +0 -26
- package/lib/types/contracts/SenderCreator.js.map +0 -1
- package/lib/types/contracts/SimpleAccountFactory.d.ts +0 -57
- package/lib/types/contracts/SimpleAccountFactory.js +0 -79
- package/lib/types/contracts/SimpleAccountFactory.js.map +0 -1
- package/lib/types/contracts/TestOpcodesAccount.d.ts +0 -4
- package/lib/types/contracts/TestOpcodesAccount.js +0 -284
- package/lib/types/contracts/TestOpcodesAccount.js.map +0 -1
- package/lib/types/contracts/TestOpcodesAccountFactory.d.ts +0 -4
- package/lib/types/contracts/TestOpcodesAccountFactory.js +0 -26
- package/lib/types/contracts/TestOpcodesAccountFactory.js.map +0 -1
- package/lib/types/contracts/TestStorageAccount.d.ts +0 -4
- package/lib/types/contracts/TestStorageAccount.js +0 -316
- package/lib/types/contracts/TestStorageAccount.js.map +0 -1
- package/lib/types/contracts/index.d.ts +0 -17
- package/lib/types/contracts/index.js +0 -33
- package/lib/types/contracts/index.js.map +0 -1
- package/lib/types/gasPrice.d.ts +0 -110
- package/lib/types/gasPrice.js +0 -55
- package/lib/types/gasPrice.js.map +0 -1
- package/lib/types/index.d.ts +0 -11
- package/lib/types/index.js +0 -27
- package/lib/types/index.js.map +0 -1
- package/lib/types/interfaces.d.ts +0 -58
- package/lib/types/interfaces.js +0 -3
- package/lib/types/interfaces.js.map +0 -1
- package/lib/types/mempool.d.ts +0 -60
- package/lib/types/mempool.js +0 -11
- package/lib/types/mempool.js.map +0 -1
- package/lib/types/schemas.d.ts +0 -20785
- package/lib/types/schemas.js +0 -679
- package/lib/types/schemas.js.map +0 -1
- package/lib/types/utils.d.ts +0 -25
- package/lib/types/utils.js +0 -35
- package/lib/types/utils.js.map +0 -1
- package/lib/types/validation.d.ts +0 -14327
- package/lib/types/validation.js +0 -312
- package/lib/types/validation.js.map +0 -1
- package/lib/utils/asyncTimeout.d.ts +0 -5
- package/lib/utils/asyncTimeout.js +0 -51
- package/lib/utils/asyncTimeout.js.map +0 -1
- package/lib/utils/bigInt.d.ts +0 -8
- package/lib/utils/bigInt.js +0 -24
- package/lib/utils/bigInt.js.map +0 -1
- package/lib/utils/eip7702.d.ts +0 -4
- package/lib/utils/eip7702.js +0 -21
- package/lib/utils/eip7702.js.map +0 -1
- package/lib/utils/fastify-rpc-decorators.d.ts +0 -19
- package/lib/utils/fastify-rpc-decorators.js +0 -23
- package/lib/utils/fastify-rpc-decorators.js.map +0 -1
- package/lib/utils/helpers.d.ts +0 -15
- package/lib/utils/helpers.js +0 -59
- package/lib/utils/helpers.js.map +0 -1
- package/lib/utils/index.d.ts +0 -9
- package/lib/utils/index.js +0 -24
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/logger.d.ts +0 -6
- package/lib/utils/logger.js +0 -85
- package/lib/utils/logger.js.map +0 -1
- package/lib/utils/metrics.d.ts +0 -29
- package/lib/utils/metrics.js +0 -199
- package/lib/utils/metrics.js.map +0 -1
- package/lib/utils/minMaxQueue/createMemoryMinMaxQueue.d.ts +0 -6
- package/lib/utils/minMaxQueue/createMemoryMinMaxQueue.js +0 -57
- package/lib/utils/minMaxQueue/createMemoryMinMaxQueue.js.map +0 -1
- package/lib/utils/minMaxQueue/createRedisMinMaxQueue.d.ts +0 -7
- package/lib/utils/minMaxQueue/createRedisMinMaxQueue.js +0 -105
- package/lib/utils/minMaxQueue/createRedisMinMaxQueue.js.map +0 -1
- package/lib/utils/minMaxQueue/index.d.ts +0 -12
- package/lib/utils/minMaxQueue/index.js +0 -16
- package/lib/utils/minMaxQueue/index.js.map +0 -1
- package/lib/utils/rpc-reply.d.ts +0 -16
- package/lib/utils/rpc-reply.js +0 -41
- package/lib/utils/rpc-reply.js.map +0 -1
- package/lib/utils/userop.d.ts +0 -138
- package/lib/utils/userop.js +0 -620
- package/lib/utils/userop.js.map +0 -1
- package/lib/utils/validation.d.ts +0 -76
- package/lib/utils/validation.js +0 -491
- package/lib/utils/validation.js.map +0 -1
package/lib/rpc/server.js
DELETED
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.Server = void 0;
|
|
30
|
-
const types_1 = require("../types/index.js");
|
|
31
|
-
const websocket_1 = __importDefault(require("@fastify/websocket"));
|
|
32
|
-
const sentry = __importStar(require("@sentry/node"));
|
|
33
|
-
const fastify_1 = __importDefault(require("fastify"));
|
|
34
|
-
const viem_1 = require("viem");
|
|
35
|
-
const zod_validation_error_1 = require("zod-validation-error");
|
|
36
|
-
const fastify_rpc_decorators_1 = __importStar(require("../utils/fastify-rpc-decorators.js"));
|
|
37
|
-
const rpc_reply_1 = __importDefault(require("../utils/rpc-reply.js"));
|
|
38
|
-
// jsonBigIntOverride.ts
|
|
39
|
-
const originalJsonStringify = JSON.stringify;
|
|
40
|
-
JSON.stringify = (
|
|
41
|
-
// biome-ignore lint/suspicious/noExplicitAny: it's a generic type
|
|
42
|
-
value, replacer, space) => {
|
|
43
|
-
// biome-ignore lint/suspicious/noExplicitAny: it's a generic type
|
|
44
|
-
const bigintReplacer = (_key, value) => {
|
|
45
|
-
if (typeof value === "bigint") {
|
|
46
|
-
return (0, viem_1.toHex)(value);
|
|
47
|
-
}
|
|
48
|
-
return value;
|
|
49
|
-
};
|
|
50
|
-
// biome-ignore lint/suspicious/noExplicitAny: it's a generic type
|
|
51
|
-
const wrapperReplacer = (key, value) => {
|
|
52
|
-
if (typeof replacer === "function") {
|
|
53
|
-
// biome-ignore lint: no other way to do this
|
|
54
|
-
value = replacer(key, value);
|
|
55
|
-
}
|
|
56
|
-
else if (Array.isArray(replacer)) {
|
|
57
|
-
if (!replacer.includes(key)) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return bigintReplacer(key, value);
|
|
62
|
-
};
|
|
63
|
-
return originalJsonStringify(value, wrapperReplacer, space);
|
|
64
|
-
};
|
|
65
|
-
class Server {
|
|
66
|
-
config;
|
|
67
|
-
fastify;
|
|
68
|
-
rpcEndpoint;
|
|
69
|
-
registry;
|
|
70
|
-
metrics;
|
|
71
|
-
constructor({ config, rpcEndpoint, registry, metrics }) {
|
|
72
|
-
this.config = config;
|
|
73
|
-
const logger = config.getLogger({ module: "rpc" }, {
|
|
74
|
-
level: config.rpcLogLevel || config.logLevel
|
|
75
|
-
});
|
|
76
|
-
this.fastify = (0, fastify_1.default)({
|
|
77
|
-
logger: logger, // workaround for https://github.com/fastify/fastify/issues/4960
|
|
78
|
-
requestTimeout: config.timeout,
|
|
79
|
-
disableRequestLogging: true
|
|
80
|
-
});
|
|
81
|
-
this.fastify.register(fastify_rpc_decorators_1.default);
|
|
82
|
-
this.fastify.register(websocket_1.default, {
|
|
83
|
-
options: {
|
|
84
|
-
maxPayload: config.websocketMaxPayloadSize
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
this.fastify.addHook("onResponse", (request, reply) => {
|
|
88
|
-
const ignoredRoutes = ["/health", "/metrics"];
|
|
89
|
-
if (ignoredRoutes.includes(request.routeOptions.url)) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
const labels = {
|
|
93
|
-
route: request.routeOptions.url,
|
|
94
|
-
code: reply.statusCode,
|
|
95
|
-
method: request.method,
|
|
96
|
-
rpc_method: request.rpcMethod,
|
|
97
|
-
rpc_status: reply.rpcStatus
|
|
98
|
-
};
|
|
99
|
-
this.metrics.httpRequests.labels(labels).inc();
|
|
100
|
-
const durationMs = reply.elapsedTime;
|
|
101
|
-
const durationSeconds = durationMs / 1000;
|
|
102
|
-
this.metrics.httpRequestsDuration
|
|
103
|
-
.labels(labels)
|
|
104
|
-
.observe(durationSeconds);
|
|
105
|
-
});
|
|
106
|
-
this.fastify.post("/rpc", this.rpcHttp.bind(this));
|
|
107
|
-
this.fastify.post("/:version/rpc", this.rpcHttp.bind(this));
|
|
108
|
-
this.fastify.post("/", this.rpcHttp.bind(this));
|
|
109
|
-
if (config.websocket) {
|
|
110
|
-
this.fastify.register((fastify) => {
|
|
111
|
-
fastify.route({
|
|
112
|
-
method: "GET",
|
|
113
|
-
url: "/:version/rpc",
|
|
114
|
-
handler: async (request, reply) => {
|
|
115
|
-
const version = request.params.version;
|
|
116
|
-
await reply
|
|
117
|
-
.status(404)
|
|
118
|
-
.send(`GET request to /${version}/rpc is not supported, use POST isntead`);
|
|
119
|
-
},
|
|
120
|
-
wsHandler: (socket, request) => {
|
|
121
|
-
socket.on("message", async (msgBuffer) => this.rpcSocket(request, msgBuffer, socket));
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
this.fastify.get("/health", this.healthCheck.bind(this));
|
|
127
|
-
this.fastify.get("/metrics", this.serveMetrics.bind(this));
|
|
128
|
-
this.rpcEndpoint = rpcEndpoint;
|
|
129
|
-
this.registry = registry;
|
|
130
|
-
this.metrics = metrics;
|
|
131
|
-
}
|
|
132
|
-
start() {
|
|
133
|
-
this.fastify.listen({ port: this.config.port, host: "0.0.0.0" });
|
|
134
|
-
}
|
|
135
|
-
async stop() {
|
|
136
|
-
await this.fastify.close();
|
|
137
|
-
}
|
|
138
|
-
async healthCheck(_request, reply) {
|
|
139
|
-
await reply.status(200).send("OK");
|
|
140
|
-
}
|
|
141
|
-
async rpcSocket(request, msgBuffer, socket) {
|
|
142
|
-
try {
|
|
143
|
-
request.body = JSON.parse(msgBuffer.toString());
|
|
144
|
-
}
|
|
145
|
-
catch (err) {
|
|
146
|
-
socket.send(JSON.stringify({
|
|
147
|
-
jsonrpc: "2.0",
|
|
148
|
-
id: null,
|
|
149
|
-
error: {
|
|
150
|
-
message: "invalid JSON-RPC request",
|
|
151
|
-
data: msgBuffer.toString(),
|
|
152
|
-
code: types_1.ValidationErrors.InvalidFields
|
|
153
|
-
}
|
|
154
|
-
}));
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
await this.rpc(request, rpc_reply_1.default.fromSocket(socket));
|
|
158
|
-
}
|
|
159
|
-
async rpcHttp(request, reply) {
|
|
160
|
-
await this.rpc(request, rpc_reply_1.default.fromHttpReply(reply));
|
|
161
|
-
}
|
|
162
|
-
async rpc(request, reply) {
|
|
163
|
-
let requestId = null;
|
|
164
|
-
const versionParsingResult = types_1.altoVersions.safeParse(request.params?.version ?? this.config.defaultApiVersion);
|
|
165
|
-
if (!versionParsingResult.success) {
|
|
166
|
-
const error = (0, zod_validation_error_1.fromZodError)(versionParsingResult.error);
|
|
167
|
-
throw new types_1.RpcError(`invalid version ${error.message}`, types_1.ValidationErrors.InvalidFields);
|
|
168
|
-
}
|
|
169
|
-
const apiVersion = versionParsingResult.data;
|
|
170
|
-
if (this.config.apiVersion.indexOf(apiVersion) === -1) {
|
|
171
|
-
throw new types_1.RpcError(`unsupported version ${apiVersion}`, types_1.ValidationErrors.InvalidFields);
|
|
172
|
-
}
|
|
173
|
-
try {
|
|
174
|
-
const contentTypeHeader = request.headers["content-type"];
|
|
175
|
-
// Common browser websocket API does not allow setting custom headers
|
|
176
|
-
if (contentTypeHeader !== "application/json" &&
|
|
177
|
-
request.ws === false) {
|
|
178
|
-
throw new types_1.RpcError("invalid content-type, content-type must be application/json", types_1.ValidationErrors.InvalidFields);
|
|
179
|
-
}
|
|
180
|
-
this.fastify.log.trace({ body: JSON.stringify(request.body) }, "received request");
|
|
181
|
-
const jsonRpcParsing = types_1.jsonRpcSchema.safeParse(request.body);
|
|
182
|
-
if (!jsonRpcParsing.success) {
|
|
183
|
-
const validationError = (0, zod_validation_error_1.fromZodError)(jsonRpcParsing.error);
|
|
184
|
-
throw new types_1.RpcError(`invalid JSON-RPC request ${validationError.message}`, types_1.ValidationErrors.InvalidFields);
|
|
185
|
-
}
|
|
186
|
-
const jsonRpcRequest = jsonRpcParsing.data;
|
|
187
|
-
requestId = jsonRpcRequest.id;
|
|
188
|
-
const bundlerRequestParsing = types_1.bundlerRequestSchema.safeParse(jsonRpcRequest);
|
|
189
|
-
if (!bundlerRequestParsing.success) {
|
|
190
|
-
const validationError = (0, zod_validation_error_1.fromZodError)(bundlerRequestParsing.error);
|
|
191
|
-
if (validationError.message.includes("Missing/invalid userOpHash")) {
|
|
192
|
-
throw new types_1.RpcError("Missing/invalid userOpHash", types_1.ValidationErrors.InvalidFields);
|
|
193
|
-
}
|
|
194
|
-
throw new types_1.RpcError(validationError.message, types_1.ValidationErrors.InvalidRequest);
|
|
195
|
-
}
|
|
196
|
-
const bundlerRequest = bundlerRequestParsing.data;
|
|
197
|
-
request.rpcMethod = bundlerRequest.method;
|
|
198
|
-
if (this.config.rpcMethods !== null &&
|
|
199
|
-
!this.config.rpcMethods.includes(bundlerRequest.method)) {
|
|
200
|
-
throw new types_1.RpcError(`Method not supported: ${bundlerRequest.method}`, types_1.ValidationErrors.InvalidRequest);
|
|
201
|
-
}
|
|
202
|
-
this.fastify.log.info({
|
|
203
|
-
data: JSON.stringify(bundlerRequest, null),
|
|
204
|
-
method: bundlerRequest.method
|
|
205
|
-
}, "incoming request");
|
|
206
|
-
const result = await this.rpcEndpoint.handleMethod(bundlerRequest, apiVersion);
|
|
207
|
-
const jsonRpcResponse = {
|
|
208
|
-
jsonrpc: "2.0",
|
|
209
|
-
id: jsonRpcRequest.id,
|
|
210
|
-
result
|
|
211
|
-
};
|
|
212
|
-
await reply
|
|
213
|
-
.setRpcStatus(fastify_rpc_decorators_1.RpcStatus.Success)
|
|
214
|
-
.status(200)
|
|
215
|
-
.send(jsonRpcResponse);
|
|
216
|
-
this.fastify.log.info({
|
|
217
|
-
data: bundlerRequest.method ===
|
|
218
|
-
"eth_getUserOperationReceipt" &&
|
|
219
|
-
jsonRpcResponse.result
|
|
220
|
-
? {
|
|
221
|
-
...jsonRpcResponse,
|
|
222
|
-
result: "<reduced>"
|
|
223
|
-
}
|
|
224
|
-
: jsonRpcResponse, // do not log the full result for eth_getUserOperationReceipt to reduce log size
|
|
225
|
-
method: bundlerRequest.method
|
|
226
|
-
}, "sent reply");
|
|
227
|
-
}
|
|
228
|
-
catch (err) {
|
|
229
|
-
if (err instanceof types_1.RpcError) {
|
|
230
|
-
const rpcError = {
|
|
231
|
-
jsonrpc: "2.0",
|
|
232
|
-
id: requestId,
|
|
233
|
-
error: {
|
|
234
|
-
message: err.message,
|
|
235
|
-
data: err.data,
|
|
236
|
-
code: err.code
|
|
237
|
-
}
|
|
238
|
-
};
|
|
239
|
-
await reply
|
|
240
|
-
.setRpcStatus(fastify_rpc_decorators_1.RpcStatus.ClientError)
|
|
241
|
-
.status(200)
|
|
242
|
-
.send(rpcError);
|
|
243
|
-
this.fastify.log.info(rpcError, "error reply");
|
|
244
|
-
}
|
|
245
|
-
else if (err instanceof Error) {
|
|
246
|
-
sentry.captureException(err);
|
|
247
|
-
const rpcError = {
|
|
248
|
-
jsonrpc: "2.0",
|
|
249
|
-
id: requestId,
|
|
250
|
-
error: {
|
|
251
|
-
message: err.message
|
|
252
|
-
}
|
|
253
|
-
};
|
|
254
|
-
await reply
|
|
255
|
-
.setRpcStatus(fastify_rpc_decorators_1.RpcStatus.ServerError)
|
|
256
|
-
.status(500)
|
|
257
|
-
.send(rpcError);
|
|
258
|
-
this.fastify.log.error(err, "error reply (non-rpc)");
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
const rpcError = {
|
|
262
|
-
jsonrpc: "2.0",
|
|
263
|
-
id: requestId,
|
|
264
|
-
error: {
|
|
265
|
-
message: "Unknown error"
|
|
266
|
-
}
|
|
267
|
-
};
|
|
268
|
-
await reply
|
|
269
|
-
.setRpcStatus(fastify_rpc_decorators_1.RpcStatus.ServerError)
|
|
270
|
-
.status(500)
|
|
271
|
-
.send(rpcError);
|
|
272
|
-
this.fastify.log.error({ err }, "error reply (unhandled error type)");
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
async serveMetrics(_request, reply) {
|
|
277
|
-
reply.headers({ "Content-Type": this.registry.contentType });
|
|
278
|
-
const metrics = await this.registry.metrics();
|
|
279
|
-
await reply.send(metrics);
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
exports.Server = Server;
|
|
283
|
-
//# sourceMappingURL=server.js.map
|
package/lib/rpc/server.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../rpc/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAQoB;AAEpB,mEAA0C;AAC1C,qDAAsC;AACtC,sDAKgB;AAEhB,+BAA4B;AAE5B,+DAAmD;AAEnD,0FAA0E;AAC1E,mEAAyC;AAGzC,wBAAwB;AACxB,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAA;AAE5C,IAAI,CAAC,SAAS,GAAG;AACb,kEAAkE;AAClE,KAAU,EACV,QAC0E,EAC1E,KAAuB,EACjB,EAAE;IACR,kEAAkE;IAClE,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,KAAU,EAAO,EAAE;QACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAA,YAAK,EAAC,KAAK,CAAC,CAAA;QACvB,CAAC;QACD,OAAO,KAAK,CAAA;IAChB,CAAC,CAAA;IAED,kEAAkE;IAClE,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,KAAU,EAAO,EAAE;QACrD,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,6CAA6C;YAC7C,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAChC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,OAAM;YACV,CAAC;QACL,CAAC;QACD,OAAO,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACrC,CAAC,CAAA;IAED,OAAO,qBAAqB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,CAAA;AAC/D,CAAC,CAAA;AAED,MAAa,MAAM;IACP,MAAM,CAAY;IAClB,OAAO,CAAiB;IACxB,WAAW,CAAY;IACvB,QAAQ,CAAU;IAClB,OAAO,CAAS;IAExB,YAAY,EACR,MAAM,EACN,WAAW,EACX,QAAQ,EACR,OAAO,EAMV;QACG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAC3B,EAAE,MAAM,EAAE,KAAK,EAAE,EACjB;YACI,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,QAAQ;SAC/C,CACJ,CAAA;QAED,IAAI,CAAC,OAAO,GAAG,IAAA,iBAAO,EAAC;YACnB,MAAM,EAAE,MAA2B,EAAE,gEAAgE;YACrG,cAAc,EAAE,MAAM,CAAC,OAAO;YAC9B,qBAAqB,EAAE,IAAI;SAC9B,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gCAAa,CAAC,CAAA;QAEpC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAS,EAAE;YAC7B,OAAO,EAAE;gBACL,UAAU,EAAE,MAAM,CAAC,uBAAuB;aAC7C;SACJ,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAClD,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;YAC7C,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnD,OAAM;YACV,CAAC;YAED,MAAM,MAAM,GAAG;gBACX,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;gBAC/B,IAAI,EAAE,KAAK,CAAC,UAAU;gBACtB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU,EAAE,OAAO,CAAC,SAAS;gBAC7B,UAAU,EAAE,KAAK,CAAC,SAAS;aAC9B,CAAA;YAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAA;YAE9C,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAA;YACpC,MAAM,eAAe,GAAG,UAAU,GAAG,IAAI,CAAA;YACzC,IAAI,CAAC,OAAO,CAAC,oBAAoB;iBAC5B,MAAM,CAAC,MAAM,CAAC;iBACd,OAAO,CAAC,eAAe,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAClD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAE/C,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC9B,OAAO,CAAC,KAAK,CAAC;oBACV,MAAM,EAAE,KAAK;oBACb,GAAG,EAAE,eAAe;oBACpB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;wBAC9B,MAAM,OAAO,GAAI,OAAO,CAAC,MAAc,CAAC,OAAO,CAAA;wBAE/C,MAAM,KAAK;6BACN,MAAM,CAAC,GAAG,CAAC;6BACX,IAAI,CACD,mBAAmB,OAAO,yCAAyC,CACtE,CAAA;oBACT,CAAC;oBACD,SAAS,EAAE,CAAC,MAA2B,EAAE,OAAO,EAAE,EAAE;wBAChD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,SAAiB,EAAE,EAAE,CAC7C,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAC7C,CAAA;oBACL,CAAC;iBACJ,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;QACN,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAE1D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IAC1B,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;IACpE,CAAC;IAEM,KAAK,CAAC,IAAI;QACb,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IAC9B,CAAC;IAEM,KAAK,CAAC,WAAW,CACpB,QAAwB,EACxB,KAAmB;QAEnB,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IAEO,KAAK,CAAC,SAAS,CACnB,OAAuB,EACvB,SAAiB,EACjB,MAA2B;QAE3B,IAAI,CAAC;YACD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CACP,IAAI,CAAC,SAAS,CAAC;gBACX,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE;oBACH,OAAO,EAAE,0BAA0B;oBACnC,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE;oBAC1B,IAAI,EAAE,wBAAgB,CAAC,aAAa;iBACvC;aACJ,CAAC,CACL,CAAA;YACD,OAAM;QACV,CAAC;QAED,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IACxD,CAAC;IAEO,KAAK,CAAC,OAAO,CACjB,OAAuB,EACvB,KAAmB;QAEnB,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1D,CAAC;IAEO,KAAK,CAAC,GAAG,CAAC,OAAuB,EAAE,KAAe;QACtD,IAAI,SAAS,GAAkB,IAAI,CAAA;QAEnC,MAAM,oBAAoB,GAAG,oBAAY,CAAC,SAAS,CAC9C,OAAO,CAAC,MAAc,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACpE,CAAA;QAED,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAA,mCAAY,EAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;YACtD,MAAM,IAAI,gBAAQ,CACd,mBAAmB,KAAK,CAAC,OAAO,EAAE,EAClC,wBAAgB,CAAC,aAAa,CACjC,CAAA;QACL,CAAC;QAED,MAAM,UAAU,GAAe,oBAAoB,CAAC,IAAI,CAAA;QAExD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,gBAAQ,CACd,uBAAuB,UAAU,EAAE,EACnC,wBAAgB,CAAC,aAAa,CACjC,CAAA;QACL,CAAC;QAED,IAAI,CAAC;YACD,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;YAEzD,qEAAqE;YACrE,IACI,iBAAiB,KAAK,kBAAkB;gBACxC,OAAO,CAAC,EAAE,KAAK,KAAK,EACtB,CAAC;gBACC,MAAM,IAAI,gBAAQ,CACd,6DAA6D,EAC7D,wBAAgB,CAAC,aAAa,CACjC,CAAA;YACL,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAClB,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EACtC,kBAAkB,CACrB,CAAA;YAED,MAAM,cAAc,GAAG,qBAAa,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAC5D,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,eAAe,GAAG,IAAA,mCAAY,EAAC,cAAc,CAAC,KAAK,CAAC,CAAA;gBAC1D,MAAM,IAAI,gBAAQ,CACd,4BAA4B,eAAe,CAAC,OAAO,EAAE,EACrD,wBAAgB,CAAC,aAAa,CACjC,CAAA;YACL,CAAC;YAED,MAAM,cAAc,GAAG,cAAc,CAAC,IAAI,CAAA;YAE1C,SAAS,GAAG,cAAc,CAAC,EAAE,CAAA;YAE7B,MAAM,qBAAqB,GACvB,4BAAoB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;YAClD,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;gBACjC,MAAM,eAAe,GAAG,IAAA,mCAAY,EAChC,qBAAqB,CAAC,KAAK,CAC9B,CAAA;gBAED,IACI,eAAe,CAAC,OAAO,CAAC,QAAQ,CAC5B,4BAA4B,CAC/B,EACH,CAAC;oBACC,MAAM,IAAI,gBAAQ,CACd,4BAA4B,EAC5B,wBAAgB,CAAC,aAAa,CACjC,CAAA;gBACL,CAAC;gBAED,MAAM,IAAI,gBAAQ,CACd,eAAe,CAAC,OAAO,EACvB,wBAAgB,CAAC,cAAc,CAClC,CAAA;YACL,CAAC;YAED,MAAM,cAAc,GAAG,qBAAqB,CAAC,IAAI,CAAA;YACjD,OAAO,CAAC,SAAS,GAAG,cAAc,CAAC,MAAM,CAAA;YAEzC,IACI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,IAAI;gBAC/B,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EACzD,CAAC;gBACC,MAAM,IAAI,gBAAQ,CACd,yBAAyB,cAAc,CAAC,MAAM,EAAE,EAChD,wBAAgB,CAAC,cAAc,CAClC,CAAA;YACL,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CACjB;gBACI,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC;gBAC1C,MAAM,EAAE,cAAc,CAAC,MAAM;aAChC,EACD,kBAAkB,CACrB,CAAA;YACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAC9C,cAAc,EACd,UAAU,CACb,CAAA;YACD,MAAM,eAAe,GAAoB;gBACrC,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,cAAc,CAAC,EAAE;gBACrB,MAAM;aACT,CAAA;YAED,MAAM,KAAK;iBACN,YAAY,CAAC,kCAAS,CAAC,OAAO,CAAC;iBAC/B,MAAM,CAAC,GAAG,CAAC;iBACX,IAAI,CAAC,eAAe,CAAC,CAAA;YAE1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CACjB;gBACI,IAAI,EACA,cAAc,CAAC,MAAM;oBACjB,6BAA6B;oBACjC,eAAe,CAAC,MAAM;oBAClB,CAAC,CAAC;wBACI,GAAG,eAAe;wBAClB,MAAM,EAAE,WAAW;qBACtB;oBACH,CAAC,CAAC,eAAe,EAAE,gFAAgF;gBAC3G,MAAM,EAAE,cAAc,CAAC,MAAM;aAChC,EACD,YAAY,CACf,CAAA;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,YAAY,gBAAQ,EAAE,CAAC;gBAC1B,MAAM,QAAQ,GAAG;oBACb,OAAO,EAAE,KAAK;oBACd,EAAE,EAAE,SAAS;oBACb,KAAK,EAAE;wBACH,OAAO,EAAE,GAAG,CAAC,OAAO;wBACpB,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,IAAI,EAAE,GAAG,CAAC,IAAI;qBACjB;iBACJ,CAAA;gBACD,MAAM,KAAK;qBACN,YAAY,CAAC,kCAAS,CAAC,WAAW,CAAC;qBACnC,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;YAClD,CAAC;iBAAM,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;gBAC9B,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;gBAC5B,MAAM,QAAQ,GAAG;oBACb,OAAO,EAAE,KAAK;oBACd,EAAE,EAAE,SAAS;oBACb,KAAK,EAAE;wBACH,OAAO,EAAE,GAAG,CAAC,OAAO;qBACvB;iBACJ,CAAA;gBAED,MAAM,KAAK;qBACN,YAAY,CAAC,kCAAS,CAAC,WAAW,CAAC;qBACnC,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAA;YACxD,CAAC;iBAAM,CAAC;gBACJ,MAAM,QAAQ,GAAG;oBACb,OAAO,EAAE,KAAK;oBACd,EAAE,EAAE,SAAS;oBACb,KAAK,EAAE;wBACH,OAAO,EAAE,eAAe;qBAC3B;iBACJ,CAAA;gBAED,MAAM,KAAK;qBACN,YAAY,CAAC,kCAAS,CAAC,WAAW,CAAC;qBACnC,MAAM,CAAC,GAAG,CAAC;qBACX,IAAI,CAAC,QAAQ,CAAC,CAAA;gBACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAClB,EAAE,GAAG,EAAE,EACP,oCAAoC,CACvC,CAAA;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,YAAY,CACrB,QAAwB,EACxB,KAAmB;QAEnB,KAAK,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAA;QAC5D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;QAC7C,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;CACJ;AA9UD,wBA8UC"}
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import type { Address, Hex } from "viem";
|
|
2
|
-
import type { LogTracer } from "./tracer.js";
|
|
3
|
-
/**
|
|
4
|
-
* return type of our BundlerCollectorTracer.
|
|
5
|
-
* collect access and opcodes, split into "levels" based on NUMBER opcode
|
|
6
|
-
* keccak, calls and logs are collected globally, since the levels are unimportant for them.
|
|
7
|
-
*/
|
|
8
|
-
export interface BundlerTracerResult {
|
|
9
|
-
/**
|
|
10
|
-
* storage and opcode info, collected on top-level calls from EntryPoint
|
|
11
|
-
*/
|
|
12
|
-
callsFromEntryPoint: TopLevelCallInfo[];
|
|
13
|
-
/**
|
|
14
|
-
* values passed into KECCAK opcode
|
|
15
|
-
*/
|
|
16
|
-
keccak: Hex[];
|
|
17
|
-
calls: Array<ExitInfo | MethodInfo>;
|
|
18
|
-
logs: LogInfo[];
|
|
19
|
-
debug: any[];
|
|
20
|
-
}
|
|
21
|
-
export interface MethodInfo {
|
|
22
|
-
type: string;
|
|
23
|
-
from: Address;
|
|
24
|
-
to: Address;
|
|
25
|
-
method: string;
|
|
26
|
-
value: bigint;
|
|
27
|
-
gas: number;
|
|
28
|
-
}
|
|
29
|
-
export interface ExitInfo {
|
|
30
|
-
type: "REVERT" | "RETURN";
|
|
31
|
-
gasUsed: number;
|
|
32
|
-
data: Hex;
|
|
33
|
-
}
|
|
34
|
-
export interface TopLevelCallInfo {
|
|
35
|
-
topLevelMethodSig: Hex;
|
|
36
|
-
topLevelTargetAddress: Address;
|
|
37
|
-
opcodes: {
|
|
38
|
-
[opcode: string]: number;
|
|
39
|
-
};
|
|
40
|
-
access: {
|
|
41
|
-
[address: string]: AccessInfo;
|
|
42
|
-
};
|
|
43
|
-
contractSize: {
|
|
44
|
-
[addr: string]: ContractSizeInfo;
|
|
45
|
-
};
|
|
46
|
-
extCodeAccessInfo: {
|
|
47
|
-
[addr: string]: string;
|
|
48
|
-
};
|
|
49
|
-
oog?: boolean;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* It is illegal to access contracts with no code in validation even if it gets deployed later.
|
|
53
|
-
* This means we need to store the {@link contractSize} of accessed addresses at the time of access.
|
|
54
|
-
*/
|
|
55
|
-
export interface ContractSizeInfo {
|
|
56
|
-
opcode: string;
|
|
57
|
-
contractSize: number;
|
|
58
|
-
}
|
|
59
|
-
export interface AccessInfo {
|
|
60
|
-
reads: {
|
|
61
|
-
[slot: string]: string;
|
|
62
|
-
};
|
|
63
|
-
writes: {
|
|
64
|
-
[slot: string]: number;
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
export interface LogInfo {
|
|
68
|
-
topics: string[];
|
|
69
|
-
data: string;
|
|
70
|
-
}
|
|
71
|
-
interface RelevantStepData {
|
|
72
|
-
opcode: string;
|
|
73
|
-
stackTop3: any[];
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* type-safe local storage of our collector. contains all return-value properties.
|
|
77
|
-
* (also defines all "trace-local" variables and functions)
|
|
78
|
-
*/
|
|
79
|
-
interface BundlerCollectorTracer extends LogTracer, BundlerTracerResult {
|
|
80
|
-
lastOp: string;
|
|
81
|
-
lastThreeOpcodes: RelevantStepData[];
|
|
82
|
-
stopCollectingTopic: string;
|
|
83
|
-
stopCollecting: boolean;
|
|
84
|
-
currentLevel: TopLevelCallInfo;
|
|
85
|
-
topLevelCallCounter: number;
|
|
86
|
-
countSlot: (list: {
|
|
87
|
-
[key: string]: number | undefined;
|
|
88
|
-
}, key: any) => void;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* tracer to collect data for opcode banning.
|
|
92
|
-
* this method is passed as the "tracer" for eth_traceCall (note, the function itself)
|
|
93
|
-
*
|
|
94
|
-
* returned data:
|
|
95
|
-
* numberLevels: opcodes and memory access, split on execution of "number" opcode.
|
|
96
|
-
* keccak: input data of keccak opcode.
|
|
97
|
-
* calls: for each call, an array of [type, from, to, value]
|
|
98
|
-
* slots: accessed slots (on any address)
|
|
99
|
-
*/
|
|
100
|
-
export declare function bundlerCollectorTracer(): BundlerCollectorTracer;
|
|
101
|
-
export {};
|
|
102
|
-
//# sourceMappingURL=BundlerCollectorTracerV06.d.ts.map
|
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// javascript code of tracer function
|
|
3
|
-
// NOTE: we process this locally for hardhat, but send to geth for remote tracing.
|
|
4
|
-
// should NOT "require" anything, or use logs.
|
|
5
|
-
// see LogTrace for valid types (but alas, this one must be javascript, not typescript).
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.bundlerCollectorTracer = void 0;
|
|
8
|
-
/**
|
|
9
|
-
* tracer to collect data for opcode banning.
|
|
10
|
-
* this method is passed as the "tracer" for eth_traceCall (note, the function itself)
|
|
11
|
-
*
|
|
12
|
-
* returned data:
|
|
13
|
-
* numberLevels: opcodes and memory access, split on execution of "number" opcode.
|
|
14
|
-
* keccak: input data of keccak opcode.
|
|
15
|
-
* calls: for each call, an array of [type, from, to, value]
|
|
16
|
-
* slots: accessed slots (on any address)
|
|
17
|
-
*/
|
|
18
|
-
function bundlerCollectorTracer() {
|
|
19
|
-
return {
|
|
20
|
-
callsFromEntryPoint: [],
|
|
21
|
-
// biome-ignore lint/suspicious/noExplicitAny: it's a generic type
|
|
22
|
-
currentLevel: null,
|
|
23
|
-
keccak: [],
|
|
24
|
-
calls: [],
|
|
25
|
-
logs: [],
|
|
26
|
-
debug: [],
|
|
27
|
-
lastOp: "",
|
|
28
|
-
lastThreeOpcodes: [],
|
|
29
|
-
// event sent after all validations are done: keccak("BeforeExecution()")
|
|
30
|
-
stopCollectingTopic: "bb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972",
|
|
31
|
-
stopCollecting: false,
|
|
32
|
-
topLevelCallCounter: 0,
|
|
33
|
-
fault(log, _db) {
|
|
34
|
-
this.debug.push(JSON.stringify({
|
|
35
|
-
type: "fault",
|
|
36
|
-
depth: log.getDepth(),
|
|
37
|
-
gas: log.getGas(),
|
|
38
|
-
cost: log.getCost(),
|
|
39
|
-
err: log.getError()
|
|
40
|
-
}));
|
|
41
|
-
},
|
|
42
|
-
result(_ctx, _db) {
|
|
43
|
-
return {
|
|
44
|
-
callsFromEntryPoint: this.callsFromEntryPoint,
|
|
45
|
-
keccak: this.keccak,
|
|
46
|
-
logs: this.logs,
|
|
47
|
-
calls: this.calls,
|
|
48
|
-
debug: this.debug // for internal debugging.
|
|
49
|
-
};
|
|
50
|
-
},
|
|
51
|
-
enter(frame) {
|
|
52
|
-
if (this.stopCollecting) {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
this.calls.push({
|
|
56
|
-
type: frame.getType(),
|
|
57
|
-
from: toHex(frame.getFrom()),
|
|
58
|
-
to: toHex(frame.getTo()),
|
|
59
|
-
method: toHex(frame.getInput()).slice(0, 10),
|
|
60
|
-
gas: frame.getGas(),
|
|
61
|
-
value: frame.getValue()
|
|
62
|
-
});
|
|
63
|
-
},
|
|
64
|
-
exit(frame) {
|
|
65
|
-
if (this.stopCollecting) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
this.calls.push({
|
|
69
|
-
type: frame.getError() != null ? "REVERT" : "RETURN",
|
|
70
|
-
gasUsed: frame.getGasUsed(),
|
|
71
|
-
data: toHex(frame.getOutput()).slice(0, 4000)
|
|
72
|
-
});
|
|
73
|
-
},
|
|
74
|
-
// increment the "key" in the list. if the key is not defined yet, then set it to "1"
|
|
75
|
-
// biome-ignore lint/suspicious/noExplicitAny: it's a generic type
|
|
76
|
-
countSlot(list, key) {
|
|
77
|
-
if (list[key]) {
|
|
78
|
-
// @ts-ignore
|
|
79
|
-
list[key] += 1;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
list[key] = 1;
|
|
83
|
-
}
|
|
84
|
-
},
|
|
85
|
-
// biome-ignore lint/suspicious/noExplicitAny: it's a generic type
|
|
86
|
-
step(log, db) {
|
|
87
|
-
if (this.stopCollecting) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
const opcode = log.op.toString();
|
|
91
|
-
const stackSize = log.stack.length();
|
|
92
|
-
const stackTop3 = [];
|
|
93
|
-
for (let i = 0; i < 3 && i < stackSize; i++) {
|
|
94
|
-
stackTop3.push(log.stack.peek(i));
|
|
95
|
-
}
|
|
96
|
-
this.lastThreeOpcodes.push({ opcode, stackTop3 });
|
|
97
|
-
if (this.lastThreeOpcodes.length > 3) {
|
|
98
|
-
this.lastThreeOpcodes.shift();
|
|
99
|
-
}
|
|
100
|
-
if (log.getGas() < log.getCost() ||
|
|
101
|
-
// special rule for SSTORE with gas metering
|
|
102
|
-
(opcode === "SSTORE" && log.getGas() < 2300)) {
|
|
103
|
-
this.currentLevel.oog = true;
|
|
104
|
-
}
|
|
105
|
-
if (opcode === "REVERT" || opcode === "RETURN") {
|
|
106
|
-
if (log.getDepth() === 1) {
|
|
107
|
-
// exit() is not called on top-level return/revent, so we reconstruct it
|
|
108
|
-
// from opcode
|
|
109
|
-
const ofs = Number.parseInt(log.stack.peek(0).toString());
|
|
110
|
-
const len = Number.parseInt(log.stack.peek(1).toString());
|
|
111
|
-
const data = toHex(log.memory.slice(ofs, ofs + len)).slice(0, 4000);
|
|
112
|
-
// this.debug.push(opcode + ' ' + data)
|
|
113
|
-
this.calls.push({
|
|
114
|
-
type: opcode,
|
|
115
|
-
gasUsed: 0,
|
|
116
|
-
data
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
// NOTE: flushing all history after RETURN
|
|
120
|
-
this.lastThreeOpcodes = [];
|
|
121
|
-
}
|
|
122
|
-
if (log.getDepth() === 1) {
|
|
123
|
-
if (opcode === "CALL" || opcode === "STATICCALL") {
|
|
124
|
-
// stack.peek(0) - gas
|
|
125
|
-
const addr = toAddress(log.stack.peek(1).toString(16));
|
|
126
|
-
const topLevelTargetAddress = toHex(addr);
|
|
127
|
-
// stack.peek(2) - value
|
|
128
|
-
const ofs = Number.parseInt(log.stack.peek(3).toString());
|
|
129
|
-
// stack.peek(4) - len
|
|
130
|
-
const topLevelMethodSig = toHex(log.memory.slice(ofs, ofs + 4));
|
|
131
|
-
this.currentLevel = this.callsFromEntryPoint[this.topLevelCallCounter] = {
|
|
132
|
-
topLevelMethodSig,
|
|
133
|
-
topLevelTargetAddress,
|
|
134
|
-
access: {},
|
|
135
|
-
opcodes: {},
|
|
136
|
-
extCodeAccessInfo: {},
|
|
137
|
-
contractSize: {}
|
|
138
|
-
};
|
|
139
|
-
this.topLevelCallCounter++;
|
|
140
|
-
}
|
|
141
|
-
else if (opcode === "LOG1") {
|
|
142
|
-
// ignore log data ofs, len
|
|
143
|
-
const topic = log.stack.peek(2).toString(16);
|
|
144
|
-
if (topic === this.stopCollectingTopic) {
|
|
145
|
-
this.stopCollecting = true;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
this.lastOp = "";
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
const lastOpInfo = this.lastThreeOpcodes[this.lastThreeOpcodes.length - 2];
|
|
152
|
-
// store all addresses touched by EXTCODE* opcodes
|
|
153
|
-
if (lastOpInfo &&
|
|
154
|
-
lastOpInfo.opcode &&
|
|
155
|
-
lastOpInfo.opcode.match(/^(EXT.*)$/) != null) {
|
|
156
|
-
const addr = toAddress(lastOpInfo.stackTop3[0].toString(16));
|
|
157
|
-
const addrHex = toHex(addr);
|
|
158
|
-
// [OP-051]
|
|
159
|
-
if (!(this.lastThreeOpcodes[0].opcode.match(/\w+/) !== null &&
|
|
160
|
-
this.lastThreeOpcodes[1].opcode === "EXTCODESIZE" &&
|
|
161
|
-
this.lastThreeOpcodes[2].opcode === "ISZERO")) {
|
|
162
|
-
this.currentLevel.extCodeAccessInfo[addrHex] = opcode;
|
|
163
|
-
}
|
|
164
|
-
// this.debug.push({
|
|
165
|
-
// last3opcodes: JSON.stringify(this.lastThreeOpcodes.map(x => x.opcode)),
|
|
166
|
-
// extCodeAccessInfo: this.currentLevel.extCodeAccessInfo
|
|
167
|
-
// })
|
|
168
|
-
}
|
|
169
|
-
// not using 'isPrecompiled' to only allow the ones defined by the ERC-4337 as stateless precompiles
|
|
170
|
-
// [OP-062]
|
|
171
|
-
// biome-ignore lint/suspicious/noExplicitAny: it's a generic type
|
|
172
|
-
const isAllowedPrecompiled = (address) => {
|
|
173
|
-
const addrHex = toHex(address);
|
|
174
|
-
const addressInt = Number.parseInt(addrHex);
|
|
175
|
-
// this.debug.push(`isPrecompiled address=${addrHex} addressInt=${addressInt}`)
|
|
176
|
-
return addressInt > 0 && addressInt < 10;
|
|
177
|
-
};
|
|
178
|
-
// [OP-041]
|
|
179
|
-
if (opcode.match(/^(EXT.*|CALL|CALLCODE|DELEGATECALL|STATICCALL)$/) != null) {
|
|
180
|
-
const idx = opcode.startsWith("EXT") ? 0 : 1;
|
|
181
|
-
const addr = toAddress(log.stack.peek(idx).toString(16));
|
|
182
|
-
const addrHex = toHex(addr);
|
|
183
|
-
// this.debug.push('op=' + opcode + ' last=' + this.lastOp + ' stacksize=' + log.stack.length() + ' addr=' + addrHex)
|
|
184
|
-
if (this.currentLevel.contractSize[addrHex] == null &&
|
|
185
|
-
!isAllowedPrecompiled(addr)) {
|
|
186
|
-
this.currentLevel.contractSize[addrHex] = {
|
|
187
|
-
contractSize: db.getCode(addr).length,
|
|
188
|
-
opcode
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
// [OP-012]
|
|
193
|
-
if (this.lastOp === "GAS" && !opcode.includes("CALL")) {
|
|
194
|
-
// count "GAS" opcode only if not followed by "CALL"
|
|
195
|
-
this.countSlot(this.currentLevel.opcodes, "GAS");
|
|
196
|
-
}
|
|
197
|
-
if (opcode !== "GAS") {
|
|
198
|
-
// ignore "unimportant" opcodes:
|
|
199
|
-
if (opcode.match(/^(DUP\d+|PUSH\d+|SWAP\d+|POP|ADD|SUB|MUL|DIV|EQ|LTE?|S?GTE?|SLT|SH[LR]|AND|OR|NOT|ISZERO)$/) == null) {
|
|
200
|
-
this.countSlot(this.currentLevel.opcodes, opcode);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
this.lastOp = opcode;
|
|
204
|
-
if (opcode === "SLOAD" ||
|
|
205
|
-
opcode === "SSTORE" ||
|
|
206
|
-
opcode === "TLOAD" ||
|
|
207
|
-
opcode === "TSTORE") {
|
|
208
|
-
const slot = toWord(log.stack.peek(0).toString(16));
|
|
209
|
-
const slotHex = toHex(slot);
|
|
210
|
-
const addr = log.contract.getAddress();
|
|
211
|
-
const addrHex = toHex(addr);
|
|
212
|
-
let access = this.currentLevel.access[addrHex];
|
|
213
|
-
if (access == null) {
|
|
214
|
-
access = {
|
|
215
|
-
reads: {},
|
|
216
|
-
writes: {}
|
|
217
|
-
};
|
|
218
|
-
this.currentLevel.access[addrHex] = access;
|
|
219
|
-
}
|
|
220
|
-
if (opcode === "SLOAD" || opcode === "TLOAD") {
|
|
221
|
-
// read slot values before this UserOp was created
|
|
222
|
-
// (so saving it if it was written before the first read)
|
|
223
|
-
if (access.reads[slotHex] == null &&
|
|
224
|
-
access.writes[slotHex] == null) {
|
|
225
|
-
access.reads[slotHex] = toHex(db.getState(addr, slot));
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
else {
|
|
229
|
-
this.countSlot(access.writes, slotHex);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
if (opcode === "KECCAK256") {
|
|
233
|
-
// collect keccak on 64-byte blocks
|
|
234
|
-
const ofs = Number.parseInt(log.stack.peek(0).toString());
|
|
235
|
-
const len = Number.parseInt(log.stack.peek(1).toString());
|
|
236
|
-
// currently, solidity uses only 2-word (6-byte) for a key. this might change..
|
|
237
|
-
// still, no need to return too much
|
|
238
|
-
if (len > 20 && len < 512) {
|
|
239
|
-
// if (len === 64) {
|
|
240
|
-
this.keccak.push(toHex(log.memory.slice(ofs, ofs + len)));
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
else if (opcode.startsWith("LOG")) {
|
|
244
|
-
const count = Number.parseInt(opcode.substring(3));
|
|
245
|
-
const ofs = Number.parseInt(log.stack.peek(0).toString());
|
|
246
|
-
const len = Number.parseInt(log.stack.peek(1).toString());
|
|
247
|
-
const topics = [];
|
|
248
|
-
for (let i = 0; i < count; i++) {
|
|
249
|
-
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
|
|
250
|
-
topics.push("0x" + log.stack.peek(2 + i).toString(16));
|
|
251
|
-
}
|
|
252
|
-
const data = toHex(log.memory.slice(ofs, ofs + len));
|
|
253
|
-
this.logs.push({
|
|
254
|
-
topics,
|
|
255
|
-
data
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
exports.bundlerCollectorTracer = bundlerCollectorTracer;
|
|
262
|
-
//# sourceMappingURL=BundlerCollectorTracerV06.js.map
|