@prb/effect-evm 1.0.0-beta.2 → 1.0.0-beta.4
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/abi/erc165.js.map +1 -1
- package/dist/abi/erc20-no-output.js.map +1 -1
- package/dist/abi/erc20.js.map +1 -1
- package/dist/abi/erc721.js.map +1 -1
- package/dist/abi/index.js.map +1 -1
- package/dist/balance/index.js.map +1 -1
- package/dist/balance/service.js.map +1 -1
- package/dist/balance/service.test.integration.js.map +1 -1
- package/dist/balance/utils.js.map +1 -1
- package/dist/block/errors.js.map +1 -1
- package/dist/block/index.js.map +1 -1
- package/dist/block/service.js.map +1 -1
- package/dist/block/service.test.integration.js.map +1 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/contract/cross-chain-reader.js.map +1 -1
- package/dist/contract/index.js.map +1 -1
- package/dist/contract/pipeline/index.js.map +1 -1
- package/dist/contract/pipeline/internal/core.js.map +1 -1
- package/dist/contract/pipeline/internal/helpers.js.map +1 -1
- package/dist/contract/pipeline/internal/nonce.js.map +1 -1
- package/dist/contract/pipeline/internal/prepare.js.map +1 -1
- package/dist/contract/pipeline/internal/receipt.js.map +1 -1
- package/dist/contract/pipeline/live.js.map +1 -1
- package/dist/contract/pipeline/service.js.map +1 -1
- package/dist/contract/pipeline/types.js.map +1 -1
- package/dist/contract/pipeline/write-and-track.js.map +1 -1
- package/dist/contract/pipeline/write-and-wait.js.map +1 -1
- package/dist/contract/pipeline.js.map +1 -1
- package/dist/contract/reader.js.map +1 -1
- package/dist/contract/typed-contract.js.map +1 -1
- package/dist/contract/writer.js.map +1 -1
- package/dist/core/clients/index.js.map +1 -1
- package/dist/core/clients/public-client.js.map +1 -1
- package/dist/core/clients/wallet-client.js.map +1 -1
- package/dist/core/errors/client.js.map +1 -1
- package/dist/core/errors/contract.js.map +1 -1
- package/dist/core/errors/erc20.js.map +1 -1
- package/dist/core/errors/event.js.map +1 -1
- package/dist/core/errors/index.js.map +1 -1
- package/dist/core/errors/predicates.js.map +1 -1
- package/dist/core/errors/transaction.js.map +1 -1
- package/dist/core/errors/viem-mapper.js.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/deploy/errors.js.map +1 -1
- package/dist/deploy/index.js.map +1 -1
- package/dist/deploy/service.js.map +1 -1
- package/dist/eip7702/erc7579.js.map +1 -1
- package/dist/eip7702/errors.js.map +1 -1
- package/dist/eip7702/index.js.map +1 -1
- package/dist/eip7702/service.js.map +1 -1
- package/dist/ens/ens.d.ts.map +1 -1
- package/dist/ens/ens.js +6 -6
- package/dist/ens/ens.js.map +1 -1
- package/dist/ens/errors.js.map +1 -1
- package/dist/ens/index.js.map +1 -1
- package/dist/erc20/allowance/core.js.map +1 -1
- package/dist/erc20/allowance/index.js.map +1 -1
- package/dist/erc20/allowance/no-output.js.map +1 -1
- package/dist/erc20/allowance/types.js.map +1 -1
- package/dist/erc20/index.js.map +1 -1
- package/dist/erc20/metadata.js.map +1 -1
- package/dist/erc721/errors.js.map +1 -1
- package/dist/erc721/helpers.js.map +1 -1
- package/dist/erc721/index.js.map +1 -1
- package/dist/erc721/metadata.js.map +1 -1
- package/dist/erc721/service.js.map +1 -1
- package/dist/events/backfill.js.map +1 -1
- package/dist/events/backfill.test.integration.js.map +1 -1
- package/dist/events/cursor.js.map +1 -1
- package/dist/events/decoder.js.map +1 -1
- package/dist/events/index.js.map +1 -1
- package/dist/events/reliable-stream-simple.test.integration.js.map +1 -1
- package/dist/events/reliable-stream.js.map +1 -1
- package/dist/events/reliable-stream.test.integration.js.map +1 -1
- package/dist/events/stream.js.map +1 -1
- package/dist/events/stream.test.integration.js.map +1 -1
- package/dist/gas/errors.js.map +1 -1
- package/dist/gas/estimator.js.map +1 -1
- package/dist/gas/index.js.map +1 -1
- package/dist/gas/service.js.map +1 -1
- package/dist/gas/service.test.integration.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/react-hooks/convenience/index.js.map +1 -1
- package/dist/integrations/react-hooks/internal/error.js.map +1 -1
- package/dist/integrations/react-hooks/internal/is-dev.js.map +1 -1
- package/dist/integrations/react-hooks/internal/runtime.js.map +1 -1
- package/dist/integrations/react-hooks/internal/scoped-run.js.map +1 -1
- package/dist/integrations/react-hooks/internal/stable.js.map +1 -1
- package/dist/integrations/react-hooks/primitives/use-effect-memo-factory.js.map +1 -1
- package/dist/integrations/react-hooks/primitives/use-effect.js.map +1 -1
- package/dist/integrations/react-hooks/primitives/use-fork-effect.js.map +1 -1
- package/dist/integrations/react-hooks/primitives/use-stream.js.map +1 -1
- package/dist/integrations/react-hooks/primitives.js.map +1 -1
- package/dist/integrations/react-hooks/provider.js.map +1 -1
- package/dist/integrations/react-hooks/wagmi/index.js.map +1 -1
- package/dist/integrations/react-hooks/wallet-provider-ref.js.map +1 -1
- package/dist/integrations/wagmi/index.js.map +1 -1
- package/dist/integrations/wagmi/layers.js.map +1 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/numbers.js.map +1 -1
- package/dist/internal/schedule.js.map +1 -1
- package/dist/internal/stream-adapters.js.map +1 -1
- package/dist/internal/viem-effect.js.map +1 -1
- package/dist/nonce/index.js.map +1 -1
- package/dist/nonce/manager.js.map +1 -1
- package/dist/nonce/service.js.map +1 -1
- package/dist/nonce/service.test.integration.js.map +1 -1
- package/dist/platform/browser/cursor-store/index.js.map +1 -1
- package/dist/platform/browser/cursor-store/local-storage.js.map +1 -1
- package/dist/platform/browser/index.js.map +1 -1
- package/dist/platform/browser/layers.js.map +1 -1
- package/dist/platform/browser/storage/errors.js.map +1 -1
- package/dist/platform/browser/storage/index.js.map +1 -1
- package/dist/platform/browser/storage/local-storage.js.map +1 -1
- package/dist/platform/browser/tx-persistence/index.js.map +1 -1
- package/dist/platform/browser/tx-persistence/persistence.js.map +1 -1
- package/dist/platform/browser/tx-store/errors.js.map +1 -1
- package/dist/platform/browser/tx-store/index.js.map +1 -1
- package/dist/platform/browser/tx-store/local-storage.js.map +1 -1
- package/dist/platform/browser/tx-store/store.js.map +1 -1
- package/dist/platform/browser/tx-store/types.js.map +1 -1
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/layers.js.map +1 -1
- package/dist/presets/transports.js.map +1 -1
- package/dist/query/chain-head.js.map +1 -1
- package/dist/query/client.js.map +1 -1
- package/dist/query/client.test.integration.js.map +1 -1
- package/dist/query/contract-query.js.map +1 -1
- package/dist/query/contract-query.test.integration.js.map +1 -1
- package/dist/query/index.js.map +1 -1
- package/dist/query/multicall-batcher.js.map +1 -1
- package/dist/react-hooks/index.d.ts +3 -1
- package/dist/react-hooks/index.d.ts.map +1 -1
- package/dist/react-hooks/index.js +3 -1
- package/dist/react-hooks/index.js.map +1 -1
- package/dist/react-hooks/safe-origins.d.ts +8 -0
- package/dist/react-hooks/safe-origins.d.ts.map +1 -0
- package/dist/react-hooks/safe-origins.js +124 -0
- package/dist/react-hooks/safe-origins.js.map +1 -0
- package/dist/react-hooks/use-is-host-safe-multisig.d.ts +2 -0
- package/dist/react-hooks/use-is-host-safe-multisig.d.ts.map +1 -0
- package/dist/react-hooks/use-is-host-safe-multisig.js +16 -0
- package/dist/react-hooks/use-is-host-safe-multisig.js.map +1 -0
- package/dist/react-hooks/use-is-wallet-safe-multisig.d.ts +2 -0
- package/dist/react-hooks/use-is-wallet-safe-multisig.d.ts.map +1 -0
- package/dist/react-hooks/use-is-wallet-safe-multisig.js +24 -0
- package/dist/react-hooks/use-is-wallet-safe-multisig.js.map +1 -0
- package/dist/react-hooks/use-safe-context.d.ts.map +1 -1
- package/dist/react-hooks/use-safe-context.js.map +1 -1
- package/dist/react-hooks/wagmi/index.js.map +1 -1
- package/dist/rpc/cache.js.map +1 -1
- package/dist/rpc/circuit-breaker.js.map +1 -1
- package/dist/rpc/dedup.js.map +1 -1
- package/dist/rpc/index.js.map +1 -1
- package/dist/rpc/retry.js.map +1 -1
- package/dist/rpc/routemesh.js.map +1 -1
- package/dist/safe/adapter.js.map +1 -1
- package/dist/safe/detection.js.map +1 -1
- package/dist/safe/detection.test.integration.js.map +1 -1
- package/dist/safe/errors.js.map +1 -1
- package/dist/safe/index.js.map +1 -1
- package/dist/safe/live.js.map +1 -1
- package/dist/safe/service.js.map +1 -1
- package/dist/safe/service.test.integration.js.map +1 -1
- package/dist/safe/simulation/abis.d.ts.map +1 -1
- package/dist/safe/simulation/abis.js.map +1 -1
- package/dist/safe/simulation/addresses.d.ts.map +1 -1
- package/dist/safe/simulation/addresses.js +40 -26
- package/dist/safe/simulation/addresses.js.map +1 -1
- package/dist/safe/simulation/encoding.js.map +1 -1
- package/dist/safe/simulation/errors.js.map +1 -1
- package/dist/safe/simulation/index.js.map +1 -1
- package/dist/safe/simulation/internal/calldata/calldata.d.ts +5 -0
- package/dist/safe/simulation/internal/calldata/calldata.d.ts.map +1 -0
- package/dist/safe/simulation/internal/calldata/calldata.js +17 -0
- package/dist/safe/simulation/internal/calldata/calldata.js.map +1 -0
- package/dist/safe/simulation/internal/calldata/index.d.ts +2 -0
- package/dist/safe/simulation/internal/calldata/index.d.ts.map +1 -0
- package/dist/safe/simulation/internal/calldata/index.js +2 -0
- package/dist/safe/simulation/internal/calldata/index.js.map +1 -0
- package/dist/safe/simulation/internal/contracts/contracts.d.ts +5 -0
- package/dist/safe/simulation/internal/contracts/contracts.d.ts.map +1 -0
- package/dist/safe/simulation/internal/contracts/contracts.js +25 -0
- package/dist/safe/simulation/internal/contracts/contracts.js.map +1 -0
- package/dist/safe/simulation/internal/contracts/index.d.ts +2 -0
- package/dist/safe/simulation/internal/contracts/index.d.ts.map +1 -0
- package/dist/safe/simulation/internal/contracts/index.js +2 -0
- package/dist/safe/simulation/internal/contracts/index.js.map +1 -0
- package/dist/safe/simulation/internal/evaluation/evaluation.d.ts +6 -0
- package/dist/safe/simulation/internal/evaluation/evaluation.d.ts.map +1 -0
- package/dist/safe/simulation/internal/evaluation/evaluation.js +20 -0
- package/dist/safe/simulation/internal/evaluation/evaluation.js.map +1 -0
- package/dist/safe/simulation/internal/evaluation/index.d.ts +2 -0
- package/dist/safe/simulation/internal/evaluation/index.d.ts.map +1 -0
- package/dist/safe/simulation/internal/evaluation/index.js +2 -0
- package/dist/safe/simulation/internal/evaluation/index.js.map +1 -0
- package/dist/safe/simulation/internal/execution/execution.d.ts +9 -0
- package/dist/safe/simulation/internal/execution/execution.d.ts.map +1 -0
- package/dist/safe/simulation/internal/execution/execution.js +65 -0
- package/dist/safe/simulation/internal/execution/execution.js.map +1 -0
- package/dist/safe/simulation/internal/execution/index.d.ts +2 -0
- package/dist/safe/simulation/internal/execution/index.d.ts.map +1 -0
- package/dist/safe/simulation/internal/execution/index.js +2 -0
- package/dist/safe/simulation/internal/execution/index.js.map +1 -0
- package/dist/safe/simulation/internal/limits/index.d.ts +2 -0
- package/dist/safe/simulation/internal/limits/index.d.ts.map +1 -0
- package/dist/safe/simulation/internal/limits/index.js +2 -0
- package/dist/safe/simulation/internal/limits/index.js.map +1 -0
- package/dist/safe/simulation/internal/limits/limits.d.ts +5 -0
- package/dist/safe/simulation/internal/limits/limits.d.ts.map +1 -0
- package/dist/safe/simulation/internal/limits/limits.js +18 -0
- package/dist/safe/simulation/internal/limits/limits.js.map +1 -0
- package/dist/safe/simulation/internal/types/index.d.ts +2 -0
- package/dist/safe/simulation/internal/types/index.d.ts.map +1 -0
- package/dist/safe/simulation/internal/types/index.js +2 -0
- package/dist/safe/simulation/internal/types/index.js.map +1 -0
- package/dist/safe/simulation/internal/types/types.d.ts +11 -0
- package/dist/safe/simulation/internal/types/types.d.ts.map +1 -0
- package/dist/safe/simulation/internal/types/types.js +2 -0
- package/dist/safe/simulation/internal/types/types.js.map +1 -0
- package/dist/safe/simulation/internal/validation/index.d.ts +2 -0
- package/dist/safe/simulation/internal/validation/index.d.ts.map +1 -0
- package/dist/safe/simulation/internal/validation/index.js +2 -0
- package/dist/safe/simulation/internal/validation/index.js.map +1 -0
- package/dist/safe/simulation/internal/validation/validation.d.ts +5 -0
- package/dist/safe/simulation/internal/validation/validation.d.ts.map +1 -0
- package/dist/safe/simulation/internal/validation/validation.js +27 -0
- package/dist/safe/simulation/internal/validation/validation.js.map +1 -0
- package/dist/safe/simulation/service.d.ts +1 -1
- package/dist/safe/simulation/service.d.ts.map +1 -1
- package/dist/safe/simulation/service.js +12 -127
- package/dist/safe/simulation/service.js.map +1 -1
- package/dist/safe/simulation/types.js.map +1 -1
- package/dist/safe/types.js.map +1 -1
- package/dist/signature/errors.js.map +1 -1
- package/dist/signature/index.js.map +1 -1
- package/dist/signature/service.js.map +1 -1
- package/dist/signature/service.test.integration.js.map +1 -1
- package/dist/signature/utils.js.map +1 -1
- package/dist/simulation/errors.js.map +1 -1
- package/dist/simulation/index.js.map +1 -1
- package/dist/simulation/service.js.map +1 -1
- package/dist/simulation/tenderly.js.map +1 -1
- package/dist/simulation/tenderly.test.integration.js.map +1 -1
- package/dist/simulation/types.js.map +1 -1
- package/dist/subscriptions/block-subscription.js.map +1 -1
- package/dist/subscriptions/errors.js.map +1 -1
- package/dist/subscriptions/index.js.map +1 -1
- package/dist/subscriptions/log-subscription.js.map +1 -1
- package/dist/subscriptions/pending-tx.js.map +1 -1
- package/dist/subscriptions/service.js.map +1 -1
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/logger.js.map +1 -1
- package/dist/telemetry/tracer.js.map +1 -1
- package/dist/testing-kit/_fixtures/addresses.js.map +1 -1
- package/dist/testing-kit/_fixtures/receipts.js.map +1 -1
- package/dist/testing-kit/helpers.js.map +1 -1
- package/dist/testing-kit/index.js.map +1 -1
- package/dist/testing-kit/mock-balance-service.js.map +1 -1
- package/dist/testing-kit/mock-block-service.js.map +1 -1
- package/dist/testing-kit/mock-cross-chain-reader.js.map +1 -1
- package/dist/testing-kit/mock-deploy-service.js.map +1 -1
- package/dist/testing-kit/mock-erc721-service.js.map +1 -1
- package/dist/testing-kit/mock-gas-service.js.map +1 -1
- package/dist/testing-kit/mock-nonce-service.js.map +1 -1
- package/dist/testing-kit/mock-public-client.js.map +1 -1
- package/dist/testing-kit/mock-signature-service.js.map +1 -1
- package/dist/testing-kit/mock-simulation-service.js.map +1 -1
- package/dist/testing-kit/mock-subscription-service.js.map +1 -1
- package/dist/testing-kit/mock-transfer-service.js.map +1 -1
- package/dist/testing-kit/mock-wallet-client.js.map +1 -1
- package/dist/testing-kit/mock-wallet-provider.js.map +1 -1
- package/dist/testing-kit/test-layer.js.map +1 -1
- package/dist/transfer/index.js.map +1 -1
- package/dist/transfer/service.js.map +1 -1
- package/dist/tx/fees.js.map +1 -1
- package/dist/tx/index.js.map +1 -1
- package/dist/tx/manager.js.map +1 -1
- package/dist/tx/manager.test.integration.js.map +1 -1
- package/dist/tx/policy.js.map +1 -1
- package/dist/tx/replacement.js.map +1 -1
- package/dist/tx/tracker.js.map +1 -1
- package/dist/types/abi.js.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/params.js.map +1 -1
- package/dist/types/tx-overrides.js.map +1 -1
- package/dist/wagmi/index.js.map +1 -1
- package/dist/wagmi/layers.js.map +1 -1
- package/dist/wallet/errors.js.map +1 -1
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/lifecycle.js.map +1 -1
- package/dist/wallet/operations.js.map +1 -1
- package/dist/wallet/provider-ref.js.map +1 -1
- package/dist/wallet/service.js.map +1 -1
- package/dist/wallet/types.js.map +1 -1
- package/package.json +22 -10
- package/dist/react-hooks/use-is-safe-multisig.d.ts +0 -2
- package/dist/react-hooks/use-is-safe-multisig.d.ts.map +0 -1
- package/dist/react-hooks/use-is-safe-multisig.js +0 -44
- package/dist/react-hooks/use-is-safe-multisig.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/safe/simulation/internal/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/safe/simulation/internal/types/index.ts"],"names":[],"mappings":"","sourcesContent":["export type { LatestBlock, SafeContracts, SimulationDecoded } from \"./types.js\";\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Address, PublicClient } from "viem";
|
|
2
|
+
export type SafeContracts = {
|
|
3
|
+
readonly multiSendAddr: Address;
|
|
4
|
+
readonly simulateAccessorAddr: Address;
|
|
5
|
+
};
|
|
6
|
+
export type SimulationDecoded = {
|
|
7
|
+
readonly gas: bigint;
|
|
8
|
+
readonly success: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type LatestBlock = Awaited<ReturnType<PublicClient["getBlock"]>>;
|
|
11
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/safe/simulation/internal/types/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAKlD,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;CACxC,CAAC;AAKF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAKF,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/safe/simulation/internal/types/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Shared type definitions for Safe simulation internals.\n */\nimport type { Address, PublicClient } from \"viem\";\n\n/**\n * Resolved Safe contract addresses required for simulation.\n */\nexport type SafeContracts = {\n readonly multiSendAddr: Address;\n readonly simulateAccessorAddr: Address;\n};\n\n/**\n * Decoded revert payload for simulateAndRevert.\n */\nexport type SimulationDecoded = {\n readonly gas: bigint;\n readonly success: boolean;\n};\n\n/**\n * Block type alias used by helpers to avoid re-deriving it everywhere.\n */\nexport type LatestBlock = Awaited<ReturnType<PublicClient[\"getBlock\"]>>;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/safe/simulation/internal/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/safe/simulation/internal/validation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["export { validateSimulationParams } from \"./validation.js\";\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { InvalidGasThresholdError, SafeSimulationFailedError } from "../../errors.js";
|
|
3
|
+
import type { SafeSimulateBatchParams } from "../../types.js";
|
|
4
|
+
export declare function validateSimulationParams(params: SafeSimulateBatchParams): Effect.Effect<SafeSimulateBatchParams, InvalidGasThresholdError | SafeSimulationFailedError>;
|
|
5
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../src/safe/simulation/internal/validation/validation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAK9D,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,wBAAwB,GAAG,yBAAyB,CAAC,CAkC9F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { zeroAddress } from "viem";
|
|
3
|
+
import { InvalidGasThresholdError, SafeSimulationFailedError } from "../../errors.js";
|
|
4
|
+
export function validateSimulationParams(params) {
|
|
5
|
+
return Effect.gen(function* () {
|
|
6
|
+
const { gasThresholdPercent, safeAddress, transactions } = params;
|
|
7
|
+
if (transactions.length === 0) {
|
|
8
|
+
return yield* Effect.fail(new SafeSimulationFailedError({
|
|
9
|
+
message: "Cannot simulate empty transaction batch",
|
|
10
|
+
}));
|
|
11
|
+
}
|
|
12
|
+
if (safeAddress === zeroAddress) {
|
|
13
|
+
return yield* Effect.fail(new SafeSimulationFailedError({
|
|
14
|
+
message: "Invalid Safe address: cannot be zero address",
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
if (gasThresholdPercent !== undefined &&
|
|
18
|
+
(gasThresholdPercent < 1 || gasThresholdPercent > 100)) {
|
|
19
|
+
return yield* Effect.fail(new InvalidGasThresholdError({
|
|
20
|
+
message: "gasThresholdPercent must be between 1 and 100 (inclusive)",
|
|
21
|
+
value: gasThresholdPercent,
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
return params;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../../../src/safe/simulation/internal/validation/validation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAMtF,MAAM,UAAU,wBAAwB,CACtC,MAA+B;IAE/B,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAElE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,yBAAyB,CAAC;gBAC5B,OAAO,EAAE,yCAAyC;aACnD,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,yBAAyB,CAAC;gBAC5B,OAAO,EAAE,8CAA8C;aACxD,CAAC,CACH,CAAC;QACJ,CAAC;QAED,IACE,mBAAmB,KAAK,SAAS;YACjC,CAAC,mBAAmB,GAAG,CAAC,IAAI,mBAAmB,GAAG,GAAG,CAAC,EACtD,CAAC;YACD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,wBAAwB,CAAC;gBAC3B,OAAO,EAAE,2DAA2D;gBACpE,KAAK,EAAE,mBAAmB;aAC3B,CAAC,CACH,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * Input validation for Safe batch simulation parameters.\n */\nimport { Effect } from \"effect\";\nimport { zeroAddress } from \"viem\";\nimport { InvalidGasThresholdError, SafeSimulationFailedError } from \"../../errors.js\";\nimport type { SafeSimulateBatchParams } from \"../../types.js\";\n\n/**\n * Validate user-supplied simulation inputs before any chain calls.\n */\nexport function validateSimulationParams(\n params: SafeSimulateBatchParams\n): Effect.Effect<SafeSimulateBatchParams, InvalidGasThresholdError | SafeSimulationFailedError> {\n return Effect.gen(function* () {\n const { gasThresholdPercent, safeAddress, transactions } = params;\n\n if (transactions.length === 0) {\n return yield* Effect.fail(\n new SafeSimulationFailedError({\n message: \"Cannot simulate empty transaction batch\",\n })\n );\n }\n\n if (safeAddress === zeroAddress) {\n return yield* Effect.fail(\n new SafeSimulationFailedError({\n message: \"Invalid Safe address: cannot be zero address\",\n })\n );\n }\n\n if (\n gasThresholdPercent !== undefined &&\n (gasThresholdPercent < 1 || gasThresholdPercent > 100)\n ) {\n return yield* Effect.fail(\n new InvalidGasThresholdError({\n message: \"gasThresholdPercent must be between 1 and 100 (inclusive)\",\n value: gasThresholdPercent,\n })\n );\n }\n\n return params;\n });\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
2
|
import type { ClientNotFoundError } from "../../core/index.js";
|
|
3
3
|
import { PublicClientService } from "../../core/index.js";
|
|
4
|
-
import { GasLimitOverflowError, InvalidGasThresholdError, SafeContractsNotDeployedError, SafeSimulationFailedError, SimulationDecodeError, TransactionSizeTooLargeError } from "./errors.js";
|
|
4
|
+
import type { GasLimitOverflowError, InvalidGasThresholdError, SafeContractsNotDeployedError, SafeSimulationFailedError, SimulationDecodeError, TransactionSizeTooLargeError } from "./errors.js";
|
|
5
5
|
import type { SafeSimulateBatchParams, SafeSimulationResult } from "./types.js";
|
|
6
6
|
export type SafeSimulationServiceShape = {
|
|
7
7
|
readonly simulateBatch: (params: SafeSimulateBatchParams) => Effect.Effect<SafeSimulationResult, ClientNotFoundError | InvalidGasThresholdError | SafeContractsNotDeployedError | TransactionSizeTooLargeError | SafeSimulationFailedError | SimulationDecodeError | GasLimitOverflowError>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/safe/simulation/service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/safe/simulation/service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACxB,6BAA6B,EAC7B,yBAAyB,EACzB,qBAAqB,EACrB,4BAA4B,EAC7B,MAAM,aAAa,CAAC;AAOrB,OAAO,KAAK,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEhF,MAAM,MAAM,0BAA0B,GAAG;IAUvC,QAAQ,CAAC,aAAa,EAAE,CACtB,MAAM,EAAE,uBAAuB,KAC5B,MAAM,CAAC,MAAM,CAChB,oBAAoB,EAClB,mBAAmB,GACnB,wBAAwB,GACxB,6BAA6B,GAC7B,4BAA4B,GAC5B,yBAAyB,GACzB,qBAAqB,GACrB,qBAAqB,CACxB,CAAC;CACH,CAAC;;AAEF,qBAAa,qBAAsB,SAAQ,0BAGxC;CAAG;AAEN,eAAO,MAAM,yBAAyB,gEAyBrC,CAAC"}
|
|
@@ -1,139 +1,24 @@
|
|
|
1
1
|
import { Context, Effect, Layer } from "effect";
|
|
2
|
-
import { BaseError as CoreError, encodeFunctionData, zeroAddress } from "viem";
|
|
3
2
|
import { PublicClientService } from "../../core/index.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import { buildSafeCalldata } from "./internal/calldata/index.js";
|
|
4
|
+
import { resolveSafeContracts } from "./internal/contracts/index.js";
|
|
5
|
+
import { evaluateSimulationResult } from "./internal/evaluation/index.js";
|
|
6
|
+
import { fetchLatestBlock, simulateAndDecode } from "./internal/execution/index.js";
|
|
7
|
+
import { enforceTxSizeLimit } from "./internal/limits/index.js";
|
|
8
|
+
import { validateSimulationParams } from "./internal/validation/index.js";
|
|
8
9
|
export class SafeSimulationService extends Context.Tag("ew3/SafeSimulation")() {
|
|
9
10
|
}
|
|
10
11
|
export const SafeSimulationServiceLive = Layer.effect(SafeSimulationService, Effect.gen(function* () {
|
|
11
12
|
const publicClientService = yield* PublicClientService;
|
|
12
13
|
return SafeSimulationService.of({
|
|
13
14
|
simulateBatch: (params) => Effect.gen(function* () {
|
|
14
|
-
const { chainId, safeAddress, transactions, txSizeLimit, gasThresholdPercent } = params;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}));
|
|
19
|
-
}
|
|
20
|
-
if (safeAddress === zeroAddress) {
|
|
21
|
-
return yield* Effect.fail(new SafeSimulationFailedError({
|
|
22
|
-
message: "Invalid Safe address: cannot be zero address",
|
|
23
|
-
}));
|
|
24
|
-
}
|
|
25
|
-
if (gasThresholdPercent !== undefined &&
|
|
26
|
-
(gasThresholdPercent < 1 || gasThresholdPercent > 100)) {
|
|
27
|
-
return yield* Effect.fail(new InvalidGasThresholdError({
|
|
28
|
-
message: "gasThresholdPercent must be between 1 and 100 (inclusive)",
|
|
29
|
-
value: gasThresholdPercent,
|
|
30
|
-
}));
|
|
31
|
-
}
|
|
32
|
-
const multiSendAddr = getMultiSendAddress(chainId);
|
|
33
|
-
const simulateAccessorAddr = getSimulateAccessorAddress(chainId);
|
|
34
|
-
if (!multiSendAddr) {
|
|
35
|
-
return yield* Effect.fail(new SafeContractsNotDeployedError({
|
|
36
|
-
chainId,
|
|
37
|
-
message: "MultiSend contract not deployed on this chain",
|
|
38
|
-
missingContract: "multiSend",
|
|
39
|
-
}));
|
|
40
|
-
}
|
|
41
|
-
if (!simulateAccessorAddr) {
|
|
42
|
-
return yield* Effect.fail(new SafeContractsNotDeployedError({
|
|
43
|
-
chainId,
|
|
44
|
-
message: "SimulateAccessor contract not deployed on this chain",
|
|
45
|
-
missingContract: "simulateAccessor",
|
|
46
|
-
}));
|
|
47
|
-
}
|
|
48
|
-
const multiSendCalldata = encodeMultiSend(transactions);
|
|
49
|
-
const simulateAccessorCalldata = encodeFunctionData({
|
|
50
|
-
abi: safeAbis.simulateAccessor,
|
|
51
|
-
args: [multiSendAddr, 0n, multiSendCalldata, 1],
|
|
52
|
-
functionName: "simulate",
|
|
53
|
-
});
|
|
54
|
-
const safeCalldata = encodeFunctionData({
|
|
55
|
-
abi: safeAbis.multisig,
|
|
56
|
-
args: [simulateAccessorAddr, simulateAccessorCalldata],
|
|
57
|
-
functionName: "simulateAndRevert",
|
|
58
|
-
});
|
|
59
|
-
if (txSizeLimit) {
|
|
60
|
-
const sizeInBytes = (safeCalldata.length - 2) / 2;
|
|
61
|
-
if (sizeInBytes > txSizeLimit) {
|
|
62
|
-
return yield* Effect.fail(new TransactionSizeTooLargeError({
|
|
63
|
-
actualSize: sizeInBytes,
|
|
64
|
-
maxSize: txSizeLimit,
|
|
65
|
-
message: `Transaction size (${sizeInBytes} bytes) exceeds chain limit (${txSizeLimit} bytes). Try splitting into smaller batches.`,
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
}
|
|
15
|
+
const { chainId, safeAddress, transactions, txSizeLimit, gasThresholdPercent } = yield* validateSimulationParams(params);
|
|
16
|
+
const contracts = yield* resolveSafeContracts(chainId);
|
|
17
|
+
const safeCalldata = buildSafeCalldata(contracts, transactions);
|
|
18
|
+
yield* enforceTxSizeLimit(safeCalldata, txSizeLimit);
|
|
69
19
|
const client = yield* publicClientService.get(chainId);
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
catch: (error) => new SafeSimulationFailedError({
|
|
73
|
-
cause: error,
|
|
74
|
-
message: "Network error or unexpected behavior during simulation",
|
|
75
|
-
}),
|
|
76
|
-
try: async () => {
|
|
77
|
-
try {
|
|
78
|
-
await client.call({
|
|
79
|
-
account: safeAddress,
|
|
80
|
-
data: safeCalldata,
|
|
81
|
-
to: safeAddress,
|
|
82
|
-
});
|
|
83
|
-
throw new Error("simulateAndRevert did not revert");
|
|
84
|
-
}
|
|
85
|
-
catch (error) {
|
|
86
|
-
if (error instanceof CoreError) {
|
|
87
|
-
const revertError = error.walk((err) => {
|
|
88
|
-
const typedErr = err;
|
|
89
|
-
return typeof typedErr.data === "string";
|
|
90
|
-
});
|
|
91
|
-
if (revertError) {
|
|
92
|
-
const typedErr = revertError;
|
|
93
|
-
const extractedData = typedErr.data;
|
|
94
|
-
if (typeof extractedData === "string") {
|
|
95
|
-
return extractedData;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
throw error;
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
});
|
|
103
|
-
return yield* Effect.try({
|
|
104
|
-
catch: (error) => new SimulationDecodeError({
|
|
105
|
-
cause: error,
|
|
106
|
-
message: "Failed to decode simulation revert data - unexpected format",
|
|
107
|
-
revertData,
|
|
108
|
-
}),
|
|
109
|
-
try: () => decodeSimulationData(revertData),
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
const [result, block] = yield* Effect.all([
|
|
113
|
-
simulationEffect,
|
|
114
|
-
Effect.tryPromise({
|
|
115
|
-
catch: (e) => new SafeSimulationFailedError({
|
|
116
|
-
cause: e,
|
|
117
|
-
message: `Failed to fetch block: ${e}`,
|
|
118
|
-
}),
|
|
119
|
-
try: () => client.getBlock({ blockTag: "latest" }),
|
|
120
|
-
}),
|
|
121
|
-
], { concurrency: "unbounded" });
|
|
122
|
-
const threshold = (block.gasLimit * BigInt(params.gasThresholdPercent ?? 95)) / 100n;
|
|
123
|
-
if (result.success && result.gas > threshold) {
|
|
124
|
-
return yield* Effect.fail(new GasLimitOverflowError({
|
|
125
|
-
blockGasLimit: block.gasLimit,
|
|
126
|
-
estimatedGas: result.gas,
|
|
127
|
-
message: "Gas consumption exceeds threshold of block gas limit. Try splitting into smaller batches.",
|
|
128
|
-
threshold,
|
|
129
|
-
}));
|
|
130
|
-
}
|
|
131
|
-
if (!result.success) {
|
|
132
|
-
return yield* Effect.fail(new SafeSimulationFailedError({
|
|
133
|
-
message: "Transaction simulation failed - the transaction would revert",
|
|
134
|
-
}));
|
|
135
|
-
}
|
|
136
|
-
return { estimatedGas: result.gas, success: true };
|
|
20
|
+
const [result, block] = yield* Effect.all([simulateAndDecode(client, safeAddress, safeCalldata), fetchLatestBlock(client)], { concurrency: "unbounded" });
|
|
21
|
+
return yield* evaluateSimulationResult(result, block, gasThresholdPercent);
|
|
137
22
|
}),
|
|
138
23
|
});
|
|
139
24
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/safe/simulation/service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/safe/simulation/service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAS1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AA2B1E,MAAM,OAAO,qBAAsB,SAAQ,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAGzE;CAAG;AAEN,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC,MAAM,CACnD,qBAAqB,EACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC;IAEvD,OAAO,qBAAqB,CAAC,EAAE,CAAC;QAC9B,aAAa,EAAE,CAAC,MAA+B,EAAE,EAAE,CACjD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,GAC5E,KAAK,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAEhE,KAAK,CAAC,CAAC,kBAAkB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACvC,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAChF,EAAE,WAAW,EAAE,WAAW,EAAE,CAC7B,CAAC;YAEF,OAAO,KAAK,CAAC,CAAC,wBAAwB,CAAC,MAAM,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;QAC7E,CAAC,CAAC;KACL,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC","sourcesContent":["/**\n * Safe batch simulation service using Effect-TS.\n *\n * Simulates Safe multisig batch transactions to estimate gas consumption before execution.\n * Uses Safe's simulateAndRevert algorithm to get accurate gas estimates.\n *\n * @see https://github.com/safe-global/safe-smart-account/blob/c4859f4/contracts/common/StorageAccessible.sol#L32-L43\n */\n\nimport { Context, Effect, Layer } from \"effect\";\nimport type { ClientNotFoundError } from \"@/src/core/index.js\";\nimport { PublicClientService } from \"@/src/core/index.js\";\nimport type {\n GasLimitOverflowError,\n InvalidGasThresholdError,\n SafeContractsNotDeployedError,\n SafeSimulationFailedError,\n SimulationDecodeError,\n TransactionSizeTooLargeError,\n} from \"./errors.js\";\nimport { buildSafeCalldata } from \"./internal/calldata/index.js\";\nimport { resolveSafeContracts } from \"./internal/contracts/index.js\";\nimport { evaluateSimulationResult } from \"./internal/evaluation/index.js\";\nimport { fetchLatestBlock, simulateAndDecode } from \"./internal/execution/index.js\";\nimport { enforceTxSizeLimit } from \"./internal/limits/index.js\";\nimport { validateSimulationParams } from \"./internal/validation/index.js\";\nimport type { SafeSimulateBatchParams, SafeSimulationResult } from \"./types.js\";\n\nexport type SafeSimulationServiceShape = {\n /**\n * Simulate a batch of transactions in Safe context.\n *\n * Uses simulateAndRevert algorithm to estimate gas consumption. This always reverts,\n * and we decode the revert data to extract the gas estimate.\n *\n * @param params - Simulation parameters including chainId, safeAddress, and transactions\n * @returns Gas estimate and success flag\n */\n readonly simulateBatch: (\n params: SafeSimulateBatchParams\n ) => Effect.Effect<\n SafeSimulationResult,\n | ClientNotFoundError\n | InvalidGasThresholdError\n | SafeContractsNotDeployedError\n | TransactionSizeTooLargeError\n | SafeSimulationFailedError\n | SimulationDecodeError\n | GasLimitOverflowError\n >;\n};\n\nexport class SafeSimulationService extends Context.Tag(\"ew3/SafeSimulation\")<\n SafeSimulationService,\n SafeSimulationServiceShape\n>() {}\n\nexport const SafeSimulationServiceLive = Layer.effect(\n SafeSimulationService,\n Effect.gen(function* () {\n const publicClientService = yield* PublicClientService;\n\n return SafeSimulationService.of({\n simulateBatch: (params: SafeSimulateBatchParams) =>\n Effect.gen(function* () {\n const { chainId, safeAddress, transactions, txSizeLimit, gasThresholdPercent } =\n yield* validateSimulationParams(params);\n const contracts = yield* resolveSafeContracts(chainId);\n const safeCalldata = buildSafeCalldata(contracts, transactions);\n\n yield* enforceTxSizeLimit(safeCalldata, txSizeLimit);\n\n const client = yield* publicClientService.get(chainId);\n const [result, block] = yield* Effect.all(\n [simulateAndDecode(client, safeAddress, safeCalldata), fetchLatestBlock(client)],\n { concurrency: \"unbounded\" }\n );\n\n return yield* evaluateSimulationResult(result, block, gasThresholdPercent);\n }),\n });\n })\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/safe/simulation/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/safe/simulation/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Type definitions for Safe multisig gas simulation operations.\n */\nimport type { Address, Hex } from \"viem\";\n\n/** Safe transaction operation type */\nexport type SafeOperation = 0 | 1; // 0 = Call, 1 = DelegateCall\n\n/** A single transaction in a Safe batch */\nexport type SafeSimulationTransaction = {\n data: Hex;\n operation?: SafeOperation;\n to: Address;\n value: bigint;\n};\n\n/** Parameters for simulating a Safe batch */\nexport type SafeSimulateBatchParams = {\n chainId: number;\n safeAddress: Address;\n transactions: SafeSimulationTransaction[];\n /** Optional transaction size limit in bytes (for ZK chains) */\n txSizeLimit?: number;\n /** Gas threshold as percentage of block gas limit (1-100, default 95) */\n gasThresholdPercent?: number;\n};\n\n/** Result of a successful Safe simulation */\nexport type SafeSimulationResult = {\n estimatedGas: bigint;\n success: boolean;\n};\n"]}
|
package/dist/safe/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/safe/types.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/safe/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Address, Hash, Hex, TransactionReceipt } from \"viem\";\n\n/** Safe info returned from SDK */\nexport type SafeInfo = {\n safeAddress: Address;\n chainId: number;\n};\n\n/** Transaction to send via Safe */\nexport type SafeTransaction = {\n to: Address;\n data: Hex;\n value?: bigint; // Converted to string at SDK boundary\n};\n\n/** Result from sendTransactions */\nexport type SafeTxSubmission = {\n safeTxHash: Hash;\n safeAddress: Address;\n chainId: number;\n};\n\n/** Result from waitForTransactionReceipt */\nexport type SafeTxResult = {\n safeTxHash: Hash;\n onchainHash: Hash;\n receipt: TransactionReceipt;\n safeAddress: Address;\n chainId: number;\n};\n\n/** Discriminated union for signTypedData result */\nexport type SignTypedDataResult =\n | { readonly _tag: \"Offchain\"; readonly messageHash: Hex }\n | { readonly _tag: \"Onchain\"; readonly safeTxHash: Hash };\n\n/** Off-chain signature result */\nexport type OffchainSignatureResult = {\n messageHash: Hex;\n signature: Hex;\n};\n\n/** Policy for Safe tx waiting (aligns with TxPolicy from src/tx/policy.ts) */\nexport type SafeWaitPolicy = {\n /** Poll interval for Safe gateway in ms (default: 3000) */\n pollInterval?: number;\n /** Timeout for Safe tx execution in ms (default: 300000 = 5 min) */\n executionTimeout?: number;\n /** Policy passed to TxManager.waitForReceipt */\n receiptPolicy?: {\n receiptTimeout?: number;\n pollingInterval?: number;\n };\n};\n\n/** Policy for off-chain signature polling */\nexport type OffchainSignaturePolicy = {\n /** Poll interval in ms (default: 2000) */\n pollInterval?: number;\n /** Timeout in ms (default: 120000 = 2 min) */\n timeout?: number;\n};\n\n/** EIP-712 typed data structure (local definition to avoid SDK import) */\nexport type EIP712TypedData = {\n domain: {\n name?: string;\n version?: string;\n chainId?: number;\n verifyingContract?: string;\n salt?: string;\n };\n types: Record<string, Array<{ name: string; type: string }>>;\n message: Record<string, unknown>;\n primaryType?: string;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/signature/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,OAAO,0BAA2B,SAAQ,MAAM,CAAC,WAAW,EAA8B,CAC9F,4BAA4B,EAC5B;IACE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CACF;CAAG;AAEJ,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,WAAW,EAA0B,CACtF,wBAAwB,EACxB;IACE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CACF;CAAG;AAEJ,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,WAAW,EAAyB,CACpF,uBAAuB,EACvB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CACF;CAAG"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/signature/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,OAAO,0BAA2B,SAAQ,MAAM,CAAC,WAAW,EAA8B,CAC9F,4BAA4B,EAC5B;IACE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CACF;CAAG;AAEJ,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,WAAW,EAA0B,CACtF,wBAAwB,EACxB;IACE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CACF;CAAG;AAEJ,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,WAAW,EAAyB,CACpF,uBAAuB,EACvB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;CACzB,CACF;CAAG","sourcesContent":["import { Schema } from \"effect\";\n\nexport class SignatureVerificationError extends Schema.TaggedError<SignatureVerificationError>()(\n \"SignatureVerificationError\",\n {\n cause: Schema.optional(Schema.Unknown),\n message: Schema.String,\n signature: Schema.String,\n }\n) {}\n\nexport class SignatureRecoveryError extends Schema.TaggedError<SignatureRecoveryError>()(\n \"SignatureRecoveryError\",\n {\n cause: Schema.optional(Schema.Unknown),\n message: Schema.String,\n signature: Schema.String,\n }\n) {}\n\nexport class InvalidSignatureError extends Schema.TaggedError<InvalidSignatureError>()(\n \"InvalidSignatureError\",\n {\n message: Schema.String,\n signature: Schema.String,\n }\n) {}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signature/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signature/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC","sourcesContent":["export * from \"./errors.js\";\nexport * from \"./service.js\";\nexport * from \"./utils.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/signature/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/signature/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Effect, Layer } from \"effect\";\nimport type {\n Address,\n HashTypedDataParameters,\n Hex,\n RecoverTypedDataAddressParameters,\n SignableMessage,\n TypedData,\n VerifyTypedDataParameters,\n} from \"viem\";\nimport {\n hashMessage,\n hashTypedData,\n recoverMessageAddress,\n recoverTypedDataAddress,\n verifyMessage,\n verifyTypedData,\n} from \"viem\";\nimport { SpanNames } from \"@/src/telemetry/index.js\";\nimport {\n InvalidSignatureError,\n SignatureRecoveryError,\n SignatureVerificationError,\n} from \"./errors.js\";\nimport { constructSignature, extractSignatureComponents, isValidSignature } from \"./utils.js\";\n\nconst toSignableMessage = (message: string | Uint8Array): SignableMessage =>\n typeof message === \"string\" ? message : { raw: message };\n\nexport type SignatureServiceShape = {\n readonly verifyMessage: (params: {\n address: Address;\n message: string | Uint8Array;\n signature: Hex;\n }) => Effect.Effect<boolean, SignatureVerificationError>;\n\n readonly verifyTypedData: <\n const TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | \"EIP712Domain\",\n >(\n params: VerifyTypedDataParameters<TTypedData, TPrimaryType>\n ) => Effect.Effect<boolean, SignatureVerificationError>;\n\n readonly recoverAddress: (params: {\n message: string | Uint8Array;\n signature: Hex;\n }) => Effect.Effect<Address, SignatureRecoveryError>;\n\n readonly recoverTypedDataAddress: <\n const TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | \"EIP712Domain\",\n >(\n params: RecoverTypedDataAddressParameters<TTypedData, TPrimaryType>\n ) => Effect.Effect<Address, SignatureRecoveryError>;\n\n readonly splitSignature: (signature: Hex) => Effect.Effect<\n {\n r: Hex;\n s: Hex;\n v: bigint;\n },\n InvalidSignatureError\n >;\n\n readonly joinSignature: (params: { r: Hex; s: Hex; v: bigint }) => Effect.Effect<Hex, never>;\n\n readonly hashMessage: (message: string | Uint8Array) => Effect.Effect<Hex, never>;\n\n readonly hashTypedData: <\n const TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | \"EIP712Domain\",\n >(\n params: HashTypedDataParameters<TTypedData, TPrimaryType>\n ) => Effect.Effect<Hex, never>;\n};\n\nexport class SignatureService extends Context.Tag(\"ew3/SignatureService\")<\n SignatureService,\n SignatureServiceShape\n>() {}\n\nexport const SignatureServiceLive = Layer.succeed(\n SignatureService,\n SignatureService.of({\n hashMessage: (message) =>\n Effect.succeed(hashMessage(toSignableMessage(message))).pipe(\n Effect.withSpan(SpanNames.SIGNATURE_HASH_MESSAGE, {\n attributes: {},\n })\n ),\n\n hashTypedData: (params) =>\n Effect.succeed(hashTypedData(params)).pipe(\n Effect.withSpan(SpanNames.SIGNATURE_HASH_TYPED_DATA, {\n attributes: {\n primaryType: String(params.primaryType),\n },\n })\n ),\n\n joinSignature: (params) =>\n Effect.succeed(constructSignature(params)).pipe(\n Effect.withSpan(SpanNames.SIGNATURE_JOIN, {\n attributes: {},\n })\n ),\n\n recoverAddress: (params) =>\n Effect.gen(function* () {\n return yield* Effect.tryPromise({\n catch: (cause) =>\n new SignatureRecoveryError({\n cause,\n message: `Failed to recover address from message signature: ${cause}`,\n signature: params.signature,\n }),\n try: () =>\n recoverMessageAddress({\n message: toSignableMessage(params.message),\n signature: params.signature,\n }),\n });\n }).pipe(\n Effect.withSpan(SpanNames.SIGNATURE_RECOVER_ADDRESS, {\n attributes: {},\n })\n ),\n\n recoverTypedDataAddress: (params) =>\n Effect.gen(function* () {\n return yield* Effect.tryPromise({\n catch: (cause) =>\n new SignatureRecoveryError({\n cause,\n message: `Failed to recover address from typed data signature: ${cause}`,\n signature:\n typeof params.signature === \"string\" ? params.signature : String(params.signature),\n }),\n try: () => recoverTypedDataAddress(params),\n });\n }).pipe(\n Effect.withSpan(SpanNames.SIGNATURE_RECOVER_TYPED_DATA_ADDRESS, {\n attributes: {\n primaryType: String(params.primaryType),\n },\n })\n ),\n\n splitSignature: (signature) =>\n Effect.gen(function* () {\n if (!isValidSignature(signature)) {\n return yield* Effect.fail(\n new InvalidSignatureError({\n message: `Invalid signature format: expected 65 bytes (0x + 130 hex chars), got ${signature.length / 2 - 1} bytes`,\n signature,\n })\n );\n }\n\n return extractSignatureComponents(signature);\n }).pipe(\n Effect.withSpan(SpanNames.SIGNATURE_SPLIT, {\n attributes: {},\n })\n ),\n verifyMessage: (params) =>\n (isValidSignature(params.signature)\n ? Effect.tryPromise({\n catch: (cause) =>\n new SignatureVerificationError({\n cause,\n message: `Failed to verify message signature: ${cause}`,\n signature: params.signature,\n }),\n try: () =>\n verifyMessage({\n address: params.address,\n message: toSignableMessage(params.message),\n signature: params.signature,\n }),\n }).pipe(Effect.catchAll(() => Effect.succeed(false)))\n : Effect.succeed(false)\n ).pipe(\n Effect.withSpan(SpanNames.SIGNATURE_VERIFY_MESSAGE, {\n attributes: {\n address: params.address,\n },\n })\n ),\n\n verifyTypedData: (params) =>\n (typeof params.signature === \"string\" && !isValidSignature(params.signature as Hex)\n ? Effect.succeed(false)\n : Effect.tryPromise({\n catch: (cause) =>\n new SignatureVerificationError({\n cause,\n message: `Failed to verify typed data signature: ${cause}`,\n signature:\n typeof params.signature === \"string\"\n ? params.signature\n : String(params.signature),\n }),\n try: () => verifyTypedData(params),\n }).pipe(Effect.catchAll(() => Effect.succeed(false)))\n ).pipe(\n Effect.withSpan(SpanNames.SIGNATURE_VERIFY_TYPED_DATA, {\n attributes: {\n address: params.address,\n primaryType: String(params.primaryType),\n },\n })\n ),\n })\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.test.integration.js","sourceRoot":"","sources":["../../src/signature/service.test.integration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAElC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,SAAS,GAAG,oBAAoB,CAAC;IACvC,MAAM,OAAO,GAAG,mBAAmB,CACjC,oEAA2E,CAC5E,CAAC;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,MAAM,CAAC,iCAAiC,EAAE,GAAG,EAAE,CAChD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;YAE3D,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;QAEF,EAAE,CAAC,MAAM,CAAC,qCAAqC,EAAE,GAAG,EAAE,CACpD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEnD,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,MAAM,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAC5C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC1C,MAAM,EAAE;oBACN,OAAO,EAAE,OAAO,CAAC,EAAE;oBACnB,IAAI,EAAE,MAAM;iBACb;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;iBACd;gBACD,WAAW,EAAE,MAAM;gBACnB,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;iBACzC;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,MAAM,CAAC,gDAAgD,EAAE,GAAG,EAAE,CAC/D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,SAAS,GACb,sIAA6I,CAAC;YAEhJ,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAExD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;QAEF,EAAE,CAAC,MAAM,CAAC,wDAAwD,EAAE,GAAG,EAAE,CACvE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,WAAkB,CAAC,CAAC,CAAC;YAE5E,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC1B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,MAAM,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAC7C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC1C,CAAC,EAAE,oEAA2E;gBAC9E,CAAC,EAAE,oEAA2E;gBAC9E,CAAC,EAAE,GAAG;aACP,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,MAAM,CAAC,kCAAkC,EAAE,GAAG,EAAE,CACjD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,OAAO,GAAG,eAAe,CAAC;YAChC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAC3C,OAAO,CAAC,WAAW,CAAC;gBAClB,OAAO;aACR,CAAC,CACH,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC1C,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO;gBACP,SAAS;aACV,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;QAEF,EAAE,CAAC,MAAM,CAAC,qCAAqC,EAAE,GAAG,EAAE,CACpD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC1C,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,eAAe;gBACxB,SAAS,EACP,sIAA6I;aAChJ,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,MAAM,CAAC,6CAA6C,EAAE,GAAG,EAAE,CAC5D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE,OAAO,CAAC,EAAE;gBACnB,IAAI,EAAE,MAAM;aACJ,CAAC;YACX,MAAM,KAAK,GAAG;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;aAChC,CAAC;YACX,MAAM,OAAO,GAAG;gBACd,IAAI,EAAE,OAAO;aACL,CAAC;YAEX,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAC3C,OAAO,CAAC,aAAa,CAAC;gBACpB,MAAM;gBACN,OAAO;gBACP,WAAW,EAAE,MAAM;gBACnB,KAAK;aACN,CAAC,CACH,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;gBAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,MAAM;gBACN,OAAO;gBACP,WAAW,EAAE,MAAM;gBACnB,SAAS;gBACT,KAAK;aACN,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,MAAM,CAAC,yCAAyC,EAAE,GAAG,EAAE,CACxD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,OAAO,GAAG,eAAe,CAAC;YAChC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAC3C,OAAO,CAAC,WAAW,CAAC;gBAClB,OAAO;aACR,CAAC,CACH,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;gBAC3C,OAAO;gBACP,SAAS;aACV,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,MAAM,CAAC,4CAA4C,EAAE,GAAG,EAAE,CAC3D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;YACxC,MAAM,MAAM,GAAG;gBACb,OAAO,EAAE,OAAO,CAAC,EAAE;gBACnB,IAAI,EAAE,MAAM;aACJ,CAAC;YACX,MAAM,KAAK,GAAG;gBACZ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;aAChC,CAAC;YACX,MAAM,OAAO,GAAG;gBACd,IAAI,EAAE,OAAO;aACL,CAAC;YAEX,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAC3C,OAAO,CAAC,aAAa,CAAC;gBACpB,MAAM;gBACN,OAAO;gBACP,WAAW,EAAE,MAAM;gBACnB,KAAK;aACN,CAAC,CACH,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC;gBACpD,MAAM;gBACN,OAAO;gBACP,WAAW,EAAE,MAAM;gBACnB,SAAS;gBACT,KAAK;aACN,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CACnC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"service.test.integration.js","sourceRoot":"","sources":["../../src/signature/service.test.integration.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from \"@effect/vitest\";\nimport { Cause, Effect, Exit } from \"effect\";\nimport type { Hex } from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { mainnet } from \"viem/chains\";\nimport {\n InvalidSignatureError,\n SignatureService,\n SignatureServiceLive,\n} from \"@/src/signature/index.js\";\n\ndescribe(\"SignatureService\", () => {\n const testLayer = SignatureServiceLive;\n const account = privateKeyToAccount(\n \"0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef\" as Hex\n );\n\n describe(\"hashMessage\", () => {\n it.effect(\"returns hash for string message\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const result = yield* service.hashMessage(\"Hello, world!\");\n\n expect(result).toBeDefined();\n expect(result.startsWith(\"0x\")).toBe(true);\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"returns hash for Uint8Array message\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const message = new Uint8Array([72, 101, 108, 108, 111]); // \"Hello\"\n const result = yield* service.hashMessage(message);\n\n expect(result).toBeDefined();\n expect(result.startsWith(\"0x\")).toBe(true);\n }).pipe(Effect.provide(testLayer))\n );\n });\n\n describe(\"hashTypedData\", () => {\n it.effect(\"returns hash for typed data\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const result = yield* service.hashTypedData({\n domain: {\n chainId: mainnet.id,\n name: \"Test\",\n },\n message: {\n test: \"value\",\n },\n primaryType: \"Test\",\n types: {\n Test: [{ name: \"test\", type: \"string\" }],\n },\n });\n\n expect(result).toBeDefined();\n expect(result.startsWith(\"0x\")).toBe(true);\n }).pipe(Effect.provide(testLayer))\n );\n });\n\n describe(\"splitSignature\", () => {\n it.effect(\"splits valid signature into r, s, v components\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const signature =\n \"0x1234567890123456789012345678901234567890123456789012345678901234abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd1b\" as Hex;\n\n const result = yield* service.splitSignature(signature);\n\n expect(result.r).toBeDefined();\n expect(result.s).toBeDefined();\n expect(result.v).toBeDefined();\n expect(result.r.startsWith(\"0x\")).toBe(true);\n expect(result.s.startsWith(\"0x\")).toBe(true);\n expect(typeof result.v).toBe(\"bigint\");\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"fails with InvalidSignatureError for invalid signature\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const exit = yield* Effect.exit(service.splitSignature(\"0xinvalid\" as Hex));\n\n expect(Exit.isFailure(exit)).toBe(true);\n if (Exit.isFailure(exit)) {\n const error = Cause.failureOption(exit.cause);\n if (error._tag === \"Some\") {\n expect(error.value).toBeInstanceOf(InvalidSignatureError);\n }\n }\n }).pipe(Effect.provide(testLayer))\n );\n });\n\n describe(\"joinSignature\", () => {\n it.effect(\"joins r, s, v into signature\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const result = yield* service.joinSignature({\n r: \"0x1234567890123456789012345678901234567890123456789012345678901234\" as Hex,\n s: \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd\" as Hex,\n v: 27n,\n });\n\n expect(result).toBeDefined();\n expect(result.startsWith(\"0x\")).toBe(true);\n expect(result.length).toBe(132); // 0x + 130 hex chars\n }).pipe(Effect.provide(testLayer))\n );\n });\n\n describe(\"verifyMessage\", () => {\n it.effect(\"returns true for valid signature\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const message = \"Hello, world!\";\n const signature = yield* Effect.promise(() =>\n account.signMessage({\n message,\n })\n );\n const result = yield* service.verifyMessage({\n address: account.address,\n message,\n signature,\n });\n\n expect(result).toBe(true);\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"returns false for invalid signature\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const result = yield* service.verifyMessage({\n address: account.address,\n message: \"Hello, world!\",\n signature:\n \"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\" as Hex,\n });\n\n expect(result).toBe(false);\n }).pipe(Effect.provide(testLayer))\n );\n });\n\n describe(\"verifyTypedData\", () => {\n it.effect(\"returns true for valid typed data signature\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const domain = {\n chainId: mainnet.id,\n name: \"Test\",\n } as const;\n const types = {\n Test: [{ name: \"test\", type: \"string\" }],\n } as const;\n const message = {\n test: \"value\",\n } as const;\n\n const signature = yield* Effect.promise(() =>\n account.signTypedData({\n domain,\n message,\n primaryType: \"Test\",\n types,\n })\n );\n const result = yield* service.verifyTypedData({\n address: account.address,\n domain,\n message,\n primaryType: \"Test\",\n signature,\n types,\n });\n\n expect(result).toBe(true);\n }).pipe(Effect.provide(testLayer))\n );\n });\n\n describe(\"recoverAddress\", () => {\n it.effect(\"recovers address from message signature\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const message = \"Hello, world!\";\n const signature = yield* Effect.promise(() =>\n account.signMessage({\n message,\n })\n );\n const result = yield* service.recoverAddress({\n message,\n signature,\n });\n\n expect(result).toBe(account.address);\n }).pipe(Effect.provide(testLayer))\n );\n });\n\n describe(\"recoverTypedDataAddress\", () => {\n it.effect(\"recovers address from typed data signature\", () =>\n Effect.gen(function* () {\n const service = yield* SignatureService;\n const domain = {\n chainId: mainnet.id,\n name: \"Test\",\n } as const;\n const types = {\n Test: [{ name: \"test\", type: \"string\" }],\n } as const;\n const message = {\n test: \"value\",\n } as const;\n\n const signature = yield* Effect.promise(() =>\n account.signTypedData({\n domain,\n message,\n primaryType: \"Test\",\n types,\n })\n );\n const result = yield* service.recoverTypedDataAddress({\n domain,\n message,\n primaryType: \"Test\",\n signature,\n types,\n });\n\n expect(result).toBe(account.address);\n }).pipe(Effect.provide(testLayer))\n );\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/signature/utils.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAc,EAAW,EAAE;IAC1D,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG,CAAC;AAChE,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,SAAc,EAAiC,EAAE;IAC1F,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAS,CAAC;IACzC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,EAAS,CAAC;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAE7C,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACrB,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAqC,EAAO,EAAE;IAC/E,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEjD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAS,CAAC;AACjC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/signature/utils.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAc,EAAW,EAAE;IAC1D,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,KAAK,GAAG,CAAC;AAChE,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,SAAc,EAAiC,EAAE;IAC1F,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAS,CAAC;IACzC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,EAAS,CAAC;IAC3C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAE7C,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACrB,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAqC,EAAO,EAAE;IAC/E,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEjD,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAS,CAAC;AACjC,CAAC,CAAC","sourcesContent":["import type { Hex } from \"viem\";\n\n/**\n * Validates if a hex string is a valid signature (65 bytes)\n */\nexport const isValidSignature = (signature: Hex): boolean => {\n return signature.startsWith(\"0x\") && signature.length === 132; // 0x + 130 hex chars = 65 bytes\n};\n\n/**\n * Extracts signature components without validation\n */\nexport const extractSignatureComponents = (signature: Hex): { r: Hex; s: Hex; v: bigint } => {\n const sig = signature.slice(2); // Remove 0x prefix\n const r = `0x${sig.slice(0, 64)}` as Hex;\n const s = `0x${sig.slice(64, 128)}` as Hex;\n const v = BigInt(`0x${sig.slice(128, 130)}`);\n\n return { r, s, v };\n};\n\n/**\n * Constructs signature from components\n */\nexport const constructSignature = (params: { r: Hex; s: Hex; v: bigint }): Hex => {\n const r = params.r.slice(2);\n const s = params.s.slice(2);\n const v = params.v.toString(16).padStart(2, \"0\");\n\n return `0x${r}${s}${v}` as Hex;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/simulation/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAmB,CAAC,iBAAiB,EAAE;IAC5F,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC,MAAM;CAC1B,CAAC;CAAG;AAEL,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,WAAW,EAA0B,CACtF,wBAAwB,EACxB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CAC3C,CACF;CAAG;AAEJ,MAAM,OAAO,0BAA2B,SAAQ,MAAM,CAAC,WAAW,EAA8B,CAC9F,4BAA4B,EAC5B;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;CAC3C,CACF;CAAG"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/simulation/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,WAAW,EAAmB,CAAC,iBAAiB,EAAE;IAC5F,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM;CACvB,CAAC;CAAG;AAEL,MAAM,OAAO,gBAAiB,SAAQ,MAAM,CAAC,WAAW,EAAoB,CAAC,kBAAkB,EAAE;IAC/F,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC,MAAM;CAC1B,CAAC;CAAG;AAEL,MAAM,OAAO,sBAAuB,SAAQ,MAAM,CAAC,WAAW,EAA0B,CACtF,wBAAwB,EACxB;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CAC3C,CACF;CAAG;AAEJ,MAAM,OAAO,0BAA2B,SAAQ,MAAM,CAAC,WAAW,EAA8B,CAC9F,4BAA4B,EAC5B;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;CAC3C,CACF;CAAG","sourcesContent":["import { Schema } from \"effect\";\n\nexport class SimulationError extends Schema.TaggedError<SimulationError>()(\"SimulationError\", {\n cause: Schema.optional(Schema.Unknown),\n message: Schema.String,\n}) {}\n\nexport class TenderlyApiError extends Schema.TaggedError<TenderlyApiError>()(\"TenderlyApiError\", {\n message: Schema.String,\n response: Schema.optional(Schema.Unknown),\n statusCode: Schema.Number,\n}) {}\n\nexport class TenderlyRateLimitError extends Schema.TaggedError<TenderlyRateLimitError>()(\n \"TenderlyRateLimitError\",\n {\n message: Schema.String,\n retryAfter: Schema.optional(Schema.Number),\n }\n) {}\n\nexport class TenderlyNotConfiguredError extends Schema.TaggedError<TenderlyNotConfiguredError>()(\n \"TenderlyNotConfiguredError\",\n {\n message: Schema.String,\n missingConfig: Schema.Array(Schema.String),\n }\n) {}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/simulation/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/simulation/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC","sourcesContent":["export * from \"./errors.js\";\nexport * from \"./service.js\";\nexport * from \"./tenderly.js\";\nexport * from \"./types.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/simulation/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AASxD,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAQrD,SAAS,uBAAuB,CAAC,MAAwB;IACvD,OAAO;QACL,gBAAgB,CAAC,MAAM,CAAC;QACxB,aAAa,CAAC,MAAM,CAAC;QACrB,GAAG,gBAAgB,CAAC,MAAM,CAAC;QAC3B,GAAG,sBAAsB,CAAC,MAAM,CAAC;QACjC,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;QAC/B,GAAG,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC;QACzC,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;KAClC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAwB;IAChD,OAAO,WAAW,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CAAC,MAAwB;IAC7C,MAAM,UAAU,GACd,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChG,OAAO,QAAQ,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,UAAU,GAAG,CAAC;AACzG,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAwB;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAwB;IACtD,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,iBAAiB,EAAE,CAAC;YAC9B,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;QACrC,CAAC;QACD,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,eAAe,CAAC,IAA8B;IACrD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,EAAE,EAAE,WAAW,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,SAAS;QACX,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAwC;IACpE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,EAAE,EAAE,kBAAkB,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC;IACrE,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,KAAK,KAAK,2BAA2B,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAMD,SAAS,oBAAoB,CAAC,IAAe,EAAE,MAAc;IAC3D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,OAAO;QACL,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,EAAE;QACvE,GAAG,MAAM,UAAU,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE;KAClF,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAuB,EACvB,QAA0C,EAC1C,MAAc;IAEd,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAuB,EAAE,KAA2B;IAC9E,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAgC;IACxD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAEjC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM;QACR,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AA4BD,MAAM,OAAO,iBAAkB,SAAQ,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAGxE;CAAG;AAEN,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,MAAM,CAC/C,iBAAiB,EACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IAChD,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEzE,OAAO;QACL,kBAAkB,EAAE,CAAC,MAAwB,EAAE,IAAU,EAAE,EAAE,CAC3D,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAEpD,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CACnB,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CAC3B,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAC/B,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,mBAAmB,EAAE;YAC7C,UAAU,EAAE;gBACV,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE;gBAC3B,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE;aAChC;SACF,CAAC,CACH;QAEH,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CACzB,sBAAsB,CAAC,MAAM,CAAC,CAAC,IAAI,CACjC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAC/B,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,0BAA0B,EAAE;YACpD,UAAU,EAAE;gBACV,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;aAC7C;SACF,CAAC,CACH;KACJ,CAAC;AACJ,CAAC,CAAC,CACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/simulation/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpClient } from \"@effect/platform\";\nimport { Context, Effect, Layer } from \"effect\";\nimport type { Abi, Address, Hex } from \"viem\";\nimport { formatEther } from \"viem\";\nimport { formatPercent } from \"@/src/internal/index.js\";\nimport type {\n SimulationError,\n SimulationResult,\n StateOverride,\n TenderlyApiError,\n TenderlyNotConfiguredError,\n TenderlyRateLimitError,\n} from \"@/src/simulation/index.js\";\nimport { simulateBundleTenderly, simulateTenderly } from \"@/src/simulation/index.js\";\nimport { SpanNames } from \"@/src/telemetry/index.js\";\n\ntype TenderlyErrors =\n | SimulationError\n | TenderlyApiError\n | TenderlyNotConfiguredError\n | TenderlyRateLimitError;\n\nfunction formatSimulationSummary(result: SimulationResult): string {\n return [\n formatStatusLine(result),\n formatGasLine(result),\n ...formatErrorLines(result),\n ...formatReturnValueLines(result),\n ...formatLogsLines(result.logs),\n ...formatStateDiffLines(result.stateDiff),\n ...formatTraceLines(result.trace),\n ].join(\"\\n\");\n}\n\nfunction formatStatusLine(result: SimulationResult): string {\n return `Status: ${result.success ? \"✓ Success\" : \"✗ Failed\"}`;\n}\n\nfunction formatGasLine(result: SimulationResult): string {\n const gasPercent =\n result.gasLimit > 0n ? formatPercent(Number(result.gasUsed) / Number(result.gasLimit)) : \"0%\";\n return `Gas: ${result.gasUsed.toLocaleString()} / ${result.gasLimit.toLocaleString()} (${gasPercent})`;\n}\n\nfunction formatErrorLines(result: SimulationResult): readonly string[] {\n const lines: string[] = [];\n if (result.error) {\n lines.push(`Error: ${result.error}`);\n }\n if (result.revertReason) {\n lines.push(`Revert Reason: ${result.revertReason}`);\n }\n return lines;\n}\n\nfunction formatReturnValueLines(result: SimulationResult): readonly string[] {\n return result.returnValue ? [`Return Value: ${result.returnValue}`] : [];\n}\n\nfunction formatLogArgValue(value: unknown): string {\n if (typeof value === \"bigint\") {\n if (value > 1000000000000000n) {\n return `${formatEther(value)} ETH`;\n }\n return value.toLocaleString();\n }\n return String(value);\n}\n\nfunction formatLogsLines(logs: SimulationResult[\"logs\"]): readonly string[] {\n if (logs.length === 0) {\n return [];\n }\n\n const lines: string[] = [\"\", `Events (${logs.length}):`];\n for (const [i, log] of logs.entries()) {\n const index = i + 1;\n if (log.decoded) {\n lines.push(` ${index}. ${log.decoded.eventName}`);\n for (const [key, value] of Object.entries(log.decoded.args)) {\n lines.push(` ${key}: ${formatLogArgValue(value)}`);\n }\n continue;\n }\n\n lines.push(` ${index}. Log at ${log.address}`);\n lines.push(` Topics: ${log.topics.length}`);\n }\n\n return lines;\n}\n\nfunction formatStateDiffLines(stateDiff: SimulationResult[\"stateDiff\"]): readonly string[] {\n if (stateDiff.length === 0) {\n return [];\n }\n\n const byAddress = new Map<Address, number>();\n for (const diff of stateDiff) {\n byAddress.set(diff.address, (byAddress.get(diff.address) ?? 0) + 1);\n }\n\n const lines: string[] = [\"\", `State Changes (${stateDiff.length}):`];\n for (const [address, count] of byAddress) {\n lines.push(` ${address}: ${count} storage slot(s) modified`);\n }\n return lines;\n}\n\ntype Trace = NonNullable<SimulationResult[\"trace\"]>;\ntype TraceCall = Trace[number];\ntype TraceStackItem = { readonly call: TraceCall; readonly indent: number };\n\nfunction formatTraceCallLines(call: TraceCall, indent: number): readonly string[] {\n const spaces = \" \".repeat(indent);\n const valueStr = call.value > 0n ? ` {${formatEther(call.value)} ETH}` : \"\";\n const errorStr = call.error ? ` [ERROR: ${call.error}]` : \"\";\n\n return [\n `${spaces}${call.type} ${call.from} → ${call.to}${valueStr}${errorStr}`,\n `${spaces} Gas: ${call.gasUsed.toLocaleString()} / ${call.gas.toLocaleString()}`,\n ];\n}\n\nfunction pushTraceChildren(\n stack: TraceStackItem[],\n children: readonly TraceCall[] | undefined,\n indent: number\n): void {\n if (!children || children.length === 0) {\n return;\n }\n\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n if (child) {\n stack.push({ call: child, indent });\n }\n }\n}\n\nfunction pushTraceRootCalls(stack: TraceStackItem[], trace: readonly TraceCall[]): void {\n for (let i = trace.length - 1; i >= 0; i--) {\n const call = trace[i];\n if (call) {\n stack.push({ call, indent: 2 });\n }\n }\n}\n\nfunction formatTraceLines(trace: SimulationResult[\"trace\"]): readonly string[] {\n if (!trace || trace.length === 0) {\n return [];\n }\n\n const lines: string[] = [\"\", \"Call Trace:\"];\n const stack: TraceStackItem[] = [];\n pushTraceRootCalls(stack, trace);\n\n while (stack.length > 0) {\n const item = stack.pop();\n if (!item) {\n break;\n }\n lines.push(...formatTraceCallLines(item.call, item.indent));\n pushTraceChildren(stack, item.call.calls, item.indent + 2);\n }\n\n return lines;\n}\n\nexport type SimulationServiceShape = {\n readonly simulate: (params: {\n chainId: number;\n from: Address;\n to: Address;\n data?: Hex;\n value?: bigint;\n gas?: bigint;\n blockNumber?: bigint;\n stateOverrides?: StateOverride[];\n }) => Effect.Effect<SimulationResult, TenderlyErrors>;\n\n readonly simulateBundle: (params: {\n chainId: number;\n transactions: Array<{\n from: Address;\n to: Address;\n data?: Hex;\n value?: bigint;\n }>;\n blockNumber?: bigint;\n }) => Effect.Effect<SimulationResult[], TenderlyErrors>;\n\n readonly getReadableSummary: (result: SimulationResult, abi?: Abi) => Effect.Effect<string>;\n};\n\nexport class SimulationService extends Context.Tag(\"ew3/SimulationService\")<\n SimulationService,\n SimulationServiceShape\n>() {}\n\nexport const SimulationServiceLive = Layer.effect(\n SimulationService,\n Effect.gen(function* () {\n const httpClient = yield* HttpClient.HttpClient;\n const httpClientLayer = Layer.succeed(HttpClient.HttpClient, httpClient);\n\n return {\n getReadableSummary: (result: SimulationResult, _abi?: Abi) =>\n Effect.sync(() => formatSimulationSummary(result)),\n\n simulate: (params) =>\n simulateTenderly(params).pipe(\n Effect.provide(httpClientLayer),\n Effect.withSpan(SpanNames.SIMULATION_SIMULATE, {\n attributes: {\n chainId: params.chainId,\n from: params.from,\n gas: params.gas?.toString(),\n to: params.to,\n value: params.value?.toString(),\n },\n })\n ),\n\n simulateBundle: (params) =>\n simulateBundleTenderly(params).pipe(\n Effect.provide(httpClientLayer),\n Effect.withSpan(SpanNames.SIMULATION_SIMULATE_BUNDLE, {\n attributes: {\n chainId: params.chainId,\n transactionCount: params.transactions.length,\n },\n })\n ),\n };\n })\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenderly.js","sourceRoot":"","sources":["../../src/simulation/tenderly.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tenderly.js","sourceRoot":"","sources":["../../src/simulation/tenderly.ts"],"names":[],"mappings":"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","sourcesContent":["import { HttpClient, HttpClientRequest, HttpClientResponse } from \"@effect/platform\";\nimport { Config, Effect, Schema } from \"effect\";\nimport type { Address, Hex } from \"viem\";\nimport {\n SimulationError,\n TenderlyApiError,\n TenderlyNotConfiguredError,\n TenderlyRateLimitError,\n} from \"@/src/simulation/index.js\";\nimport type { SimulationResult, StateOverride, TraceCall } from \"@/src/simulation/types.ts\";\n\ntype TenderlySimulationRequest = {\n network_id: string;\n from: Address;\n to: Address;\n input?: Hex;\n value?: string;\n gas?: number;\n gas_price?: string;\n block_number?: number;\n state_objects?: Record<\n Address,\n {\n balance?: string;\n code?: Hex;\n nonce?: number;\n storage?: Record<Hex, Hex>;\n }\n >;\n save?: boolean;\n save_if_fails?: boolean;\n simulation_type?: \"quick\" | \"full\";\n};\n\ntype TenderlySimulationResponse = {\n transaction: {\n hash: Hex;\n block_number: number;\n block_hash: Hex;\n from: Address;\n to: Address;\n gas: number;\n gas_price: string;\n gas_used: number;\n cumulative_gas_used: number;\n input: Hex;\n output?: Hex;\n nonce: number;\n value: string;\n status: boolean;\n error_message?: string;\n };\n simulation: {\n id: string;\n status: boolean;\n };\n logs: Array<{\n address: Address;\n topics: Hex[];\n data: Hex;\n name?: string;\n anonymous?: boolean;\n inputs?: Array<{\n name: string;\n type: string;\n value: unknown;\n }>;\n }>;\n trace?: Array<{\n type: string;\n from: Address;\n to: Address;\n value: string;\n gas: number;\n gas_used: number;\n input: Hex;\n output?: Hex;\n error?: string;\n calls?: unknown[];\n }>;\n state_diff?: Array<{\n address: Address;\n soltype?: {\n name: string;\n type: string;\n };\n original: Hex;\n dirty: Hex;\n raw: Array<{\n key: Hex;\n original: Hex;\n dirty: Hex;\n }>;\n }>;\n};\n\nconst getTenderlyConfig = Effect.gen(function* () {\n const accessKey = yield* Config.string(\"TENDERLY_ACCESS_KEY\").pipe(\n Effect.catchAll(() => Effect.succeed(undefined))\n );\n const account = yield* Config.string(\"TENDERLY_ACCOUNT\").pipe(\n Effect.catchAll(() => Effect.succeed(undefined))\n );\n const project = yield* Config.string(\"TENDERLY_PROJECT\").pipe(\n Effect.catchAll(() => Effect.succeed(undefined))\n );\n\n const missing: string[] = [];\n if (!accessKey) {\n missing.push(\"TENDERLY_ACCESS_KEY\");\n }\n if (!account) {\n missing.push(\"TENDERLY_ACCOUNT\");\n }\n if (!project) {\n missing.push(\"TENDERLY_PROJECT\");\n }\n\n if (missing.length > 0) {\n return yield* Effect.fail(\n new TenderlyNotConfiguredError({\n message: `Missing Tenderly configuration: ${missing.join(\", \")}`,\n missingConfig: missing,\n })\n );\n }\n\n return {\n accessKey: accessKey as string,\n account: account as string,\n project: project as string,\n };\n});\n\nfunction mapTenderlyResponse(response: TenderlySimulationResponse): SimulationResult {\n const tx = response.transaction;\n\n return {\n error: tx.error_message,\n gasLimit: BigInt(tx.gas),\n gasUsed: BigInt(tx.gas_used),\n logs:\n response.logs?.map((log) => ({\n address: log.address,\n data: log.data,\n decoded: log.name\n ? {\n args:\n log.inputs?.reduce(\n (acc, input) => {\n acc[input.name] = input.value;\n return acc;\n },\n {} as Record<string, unknown>\n ) ?? {},\n eventName: log.name,\n }\n : undefined,\n topics: log.topics,\n })) ?? [],\n returnValue: tx.status ? (tx.output ?? response.trace?.[0]?.output) : undefined,\n revertReason: tx.error_message,\n stateDiff:\n response.state_diff?.flatMap((diff) =>\n diff.raw.map((raw) => ({\n address: diff.address,\n key: raw.key,\n modified: raw.dirty,\n original: raw.original,\n }))\n ) ?? [],\n success: tx.status,\n trace: response.trace ? mapTenderlyTrace(response.trace) : undefined,\n };\n}\n\nfunction mapTenderlyTrace(trace: TenderlySimulationResponse[\"trace\"]): TraceCall[] {\n if (!trace) {\n return [];\n }\n\n return trace.map((call) => ({\n calls: call.calls ? mapTenderlyTrace(call.calls as TenderlySimulationResponse[\"trace\"]) : [],\n error: call.error,\n from: call.from,\n gas: BigInt(call.gas),\n gasUsed: BigInt(call.gas_used),\n input: call.input,\n output: call.output,\n to: call.to,\n type: call.type.toUpperCase() as TraceCall[\"type\"],\n value: BigInt(call.value),\n }));\n}\n\nfunction parseRetryAfterSeconds(value: string | undefined): number | undefined {\n if (!value) {\n return;\n }\n\n const asSeconds = Number(value);\n if (Number.isFinite(asSeconds)) {\n return asSeconds;\n }\n\n const asDate = Date.parse(value);\n if (!Number.isNaN(asDate)) {\n const deltaMs = asDate - Date.now();\n return deltaMs > 0 ? Math.ceil(deltaMs / 1000) : 0;\n }\n\n return;\n}\n\nfunction toTenderlyStateObjects(\n overrides: readonly StateOverride[] | undefined\n): TenderlySimulationRequest[\"state_objects\"] | undefined {\n if (!overrides || overrides.length === 0) {\n return;\n }\n\n const stateObjects: TenderlySimulationRequest[\"state_objects\"] = {};\n for (const override of overrides) {\n stateObjects[override.address] = {\n balance: override.balance?.toString(),\n code: override.code,\n nonce: override.nonce ? Number(override.nonce) : undefined,\n storage: override.state,\n };\n }\n\n return stateObjects;\n}\n\nfunction toTenderlyRequestBody(params: {\n chainId: number;\n from: Address;\n to: Address;\n data?: Hex;\n value?: bigint;\n gas?: bigint;\n blockNumber?: bigint;\n stateOverrides?: StateOverride[];\n}): TenderlySimulationRequest {\n return {\n block_number: params.blockNumber ? Number(params.blockNumber) : undefined,\n from: params.from,\n gas: params.gas ? Number(params.gas) : undefined,\n input: params.data ?? \"0x\",\n network_id: params.chainId.toString(),\n save: false,\n save_if_fails: false,\n simulation_type: \"full\",\n state_objects: toTenderlyStateObjects(params.stateOverrides),\n to: params.to,\n value: params.value ? params.value.toString() : \"0\",\n };\n}\n\nfunction ensureTenderlyOk(response: HttpClientResponse.HttpClientResponse) {\n return Effect.gen(function* () {\n if (response.status === 429) {\n const retryAfter = parseRetryAfterSeconds(response.headers[\"retry-after\"]);\n return yield* Effect.fail(\n new TenderlyRateLimitError({\n message: \"Tenderly API rate limit exceeded\",\n retryAfter,\n })\n );\n }\n\n if (response.status < 200 || response.status >= 300) {\n const body = yield* response.json.pipe(Effect.catchAll(() => Effect.succeed(undefined)));\n return yield* Effect.fail(\n new TenderlyApiError({\n message: \"Tenderly API request failed\",\n response: body,\n statusCode: response.status,\n })\n );\n }\n });\n}\n\nexport function simulateTenderly(params: {\n chainId: number;\n from: Address;\n to: Address;\n data?: Hex;\n value?: bigint;\n gas?: bigint;\n blockNumber?: bigint;\n stateOverrides?: StateOverride[];\n}) {\n return Effect.gen(function* () {\n const config = yield* getTenderlyConfig;\n const client = yield* HttpClient.HttpClient;\n\n const url = `https://api.tenderly.co/api/v1/account/${config.account}/project/${config.project}/simulate`;\n\n const requestBody = toTenderlyRequestBody(params);\n\n const request = yield* HttpClientRequest.post(url).pipe(\n HttpClientRequest.setHeader(\"X-Access-Key\", config.accessKey),\n HttpClientRequest.setHeader(\"Content-Type\", \"application/json\"),\n HttpClientRequest.bodyJson(requestBody),\n Effect.mapError(\n () =>\n new SimulationError({\n message: \"Failed to serialize request body\",\n })\n )\n );\n\n const response = yield* client.execute(request).pipe(\n Effect.mapError(\n (cause) =>\n new SimulationError({\n cause,\n message: \"Failed to execute Tenderly request\",\n })\n )\n );\n\n yield* ensureTenderlyOk(response);\n\n const body = yield* HttpClientResponse.schemaBodyJson(Schema.Unknown)(response).pipe(\n Effect.mapError(\n (cause) =>\n new SimulationError({\n cause,\n message: \"Failed to decode Tenderly response body\",\n })\n )\n );\n\n return mapTenderlyResponse(body as TenderlySimulationResponse);\n });\n}\n\nexport function simulateBundleTenderly(params: {\n chainId: number;\n transactions: Array<{\n from: Address;\n to: Address;\n data?: Hex;\n value?: bigint;\n }>;\n blockNumber?: bigint;\n}) {\n return Effect.gen(function* () {\n // Tenderly doesn't have a native bundle simulation endpoint\n // We simulate each transaction sequentially with state carryover\n const results: SimulationResult[] = [];\n const stateOverrides: StateOverride[] = [];\n\n for (const tx of params.transactions) {\n const result = yield* simulateTenderly({\n blockNumber: params.blockNumber,\n chainId: params.chainId,\n data: tx.data,\n from: tx.from,\n stateOverrides,\n to: tx.to,\n value: tx.value,\n });\n\n results.push(result);\n\n // Carry state changes forward\n // This is a simplified approach - in production you'd want more sophisticated state tracking\n for (const diff of result.stateDiff) {\n const existingOverride = stateOverrides.find((o) => o.address === diff.address);\n if (existingOverride) {\n existingOverride.state = {\n ...existingOverride.state,\n [diff.key]: diff.modified,\n };\n } else {\n stateOverrides.push({\n address: diff.address,\n state: {\n [diff.key]: diff.modified,\n },\n });\n }\n }\n }\n\n return results;\n });\n}\n"]}
|