@prb/effect-evm 1.0.0-beta.0 → 1.0.0-beta.10
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/DOCS.md +13 -0
- package/README.md +4 -0
- 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.d.ts +2 -0
- package/dist/balance/service.test.integration.d.ts.map +1 -0
- package/dist/balance/service.test.integration.js +289 -0
- package/dist/balance/service.test.integration.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/block/service.test.integration.d.ts.map +1 -0
- package/dist/block/service.test.integration.js +190 -0
- package/dist/block/service.test.integration.js.map +1 -0
- package/dist/constants/index.d.ts +0 -4
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +1 -5
- package/dist/constants/index.js.map +1 -1
- package/dist/contract/cross-chain-reader.d.ts +14 -10
- package/dist/contract/cross-chain-reader.d.ts.map +1 -1
- package/dist/contract/cross-chain-reader.js +2 -8
- 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.d.ts +2 -2
- package/dist/contract/pipeline/internal/core.d.ts.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.d.ts +2 -2
- package/dist/contract/pipeline/internal/receipt.d.ts.map +1 -1
- package/dist/contract/pipeline/internal/receipt.js +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.d.ts +3 -3
- package/dist/contract/pipeline/service.d.ts.map +1 -1
- package/dist/contract/pipeline/service.js.map +1 -1
- package/dist/contract/pipeline/types.d.ts +2 -2
- package/dist/contract/pipeline/types.d.ts.map +1 -1
- package/dist/contract/pipeline/types.js.map +1 -1
- package/dist/contract/pipeline/write-and-track.d.ts.map +1 -1
- package/dist/contract/pipeline/write-and-track.js +5 -6
- package/dist/contract/pipeline/write-and-track.js.map +1 -1
- package/dist/contract/pipeline/write-and-wait.d.ts +1 -1
- package/dist/contract/pipeline/write-and-wait.d.ts.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.d.ts +10 -8
- package/dist/core/errors/transaction.d.ts.map +1 -1
- package/dist/core/errors/transaction.js +126 -4
- package/dist/core/errors/transaction.js.map +1 -1
- package/dist/core/errors/viem-mapper.d.ts +3 -3
- package/dist/core/errors/viem-mapper.d.ts.map +1 -1
- package/dist/core/errors/viem-mapper.js +14 -16
- 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.d.ts +3 -3
- package/dist/deploy/service.d.ts.map +1 -1
- package/dist/deploy/service.js.map +1 -1
- package/dist/eip7702/erc7579.js.map +1 -1
- package/dist/eip7702/errors.d.ts +3 -3
- package/dist/eip7702/errors.d.ts.map +1 -1
- package/dist/eip7702/errors.js +1 -1
- package/dist/eip7702/errors.js.map +1 -1
- package/dist/eip7702/index.js.map +1 -1
- package/dist/eip7702/service.d.ts +8 -8
- package/dist/eip7702/service.d.ts.map +1 -1
- package/dist/eip7702/service.js +2 -2
- 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.d.ts +1 -0
- package/dist/erc20/index.d.ts.map +1 -1
- package/dist/erc20/index.js +1 -0
- package/dist/erc20/index.js.map +1 -1
- package/dist/erc20/metadata.d.ts +16 -0
- package/dist/erc20/metadata.d.ts.map +1 -0
- package/dist/erc20/metadata.js +67 -0
- package/dist/erc20/metadata.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/events/backfill.test.integration.d.ts.map +1 -0
- package/dist/events/backfill.test.integration.js +112 -0
- package/dist/events/backfill.test.integration.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/events/reliable-stream-simple.test.integration.d.ts.map +1 -0
- package/dist/events/reliable-stream-simple.test.integration.js +22 -0
- package/dist/events/reliable-stream-simple.test.integration.js.map +1 -0
- package/dist/events/reliable-stream.js.map +1 -1
- package/dist/events/reliable-stream.test.integration.d.ts +2 -0
- package/dist/events/reliable-stream.test.integration.d.ts.map +1 -0
- package/dist/events/reliable-stream.test.integration.js +327 -0
- package/dist/events/reliable-stream.test.integration.js.map +1 -0
- package/dist/events/stream.js.map +1 -1
- package/dist/events/stream.test.integration.d.ts +2 -0
- package/dist/events/stream.test.integration.d.ts.map +1 -0
- package/dist/events/stream.test.integration.js +120 -0
- package/dist/events/stream.test.integration.js.map +1 -0
- package/dist/gas/errors.js.map +1 -1
- package/dist/gas/estimator.d.ts.map +1 -1
- package/dist/gas/estimator.js +75 -58
- package/dist/gas/estimator.js.map +1 -1
- package/dist/gas/index.js.map +1 -1
- package/dist/gas/service.d.ts.map +1 -1
- package/dist/gas/service.js +14 -2
- package/dist/gas/service.js.map +1 -1
- package/dist/gas/service.test.integration.d.ts +2 -0
- package/dist/gas/service.test.integration.d.ts.map +1 -0
- package/dist/gas/service.test.integration.js +152 -0
- package/dist/gas/service.test.integration.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/nonce/service.test.integration.d.ts.map +1 -0
- package/dist/nonce/service.test.integration.js +141 -0
- package/dist/nonce/service.test.integration.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/query/client.test.integration.d.ts.map +1 -0
- package/dist/query/client.test.integration.js +94 -0
- package/dist/query/client.test.integration.js.map +1 -0
- package/dist/query/contract-query.js.map +1 -1
- package/dist/query/contract-query.test.integration.d.ts +2 -0
- package/dist/query/contract-query.test.integration.d.ts.map +1 -0
- package/dist/query/contract-query.test.integration.js +133 -0
- package/dist/query/contract-query.test.integration.js.map +1 -0
- package/dist/query/index.js.map +1 -1
- package/dist/query/multicall-batcher.js.map +1 -1
- package/dist/react-hooks/index.d.ts +0 -2
- package/dist/react-hooks/index.d.ts.map +1 -1
- package/dist/react-hooks/index.js +0 -2
- package/dist/react-hooks/index.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/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.d.ts +2 -0
- package/dist/signature/service.test.integration.d.ts.map +1 -0
- package/dist/signature/service.test.integration.js +179 -0
- package/dist/signature/service.test.integration.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/simulation/tenderly.test.integration.d.ts.map +1 -0
- package/dist/simulation/tenderly.test.integration.js +104 -0
- package/dist/simulation/tenderly.test.integration.js.map +1 -0
- 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.d.ts +1 -1
- package/dist/subscriptions/pending-tx.d.ts.map +1 -1
- package/dist/subscriptions/pending-tx.js +1 -1
- package/dist/subscriptions/pending-tx.js.map +1 -1
- package/dist/subscriptions/service.d.ts +2 -2
- package/dist/subscriptions/service.d.ts.map +1 -1
- package/dist/subscriptions/service.js +4 -4
- 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.d.ts +2 -2
- package/dist/telemetry/tracer.js +2 -2
- 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.d.ts +3 -10
- package/dist/testing-kit/mock-cross-chain-reader.d.ts.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.d.ts +2 -2
- package/dist/testing-kit/mock-subscription-service.d.ts.map +1 -1
- package/dist/testing-kit/mock-subscription-service.js +5 -5
- package/dist/testing-kit/mock-subscription-service.js.map +1 -1
- package/dist/testing-kit/mock-transfer-service.d.ts +3 -3
- package/dist/testing-kit/mock-transfer-service.d.ts.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.d.ts +8 -11
- package/dist/transfer/service.d.ts.map +1 -1
- package/dist/transfer/service.js +32 -13
- package/dist/transfer/service.js.map +1 -1
- package/dist/tx/fees.d.ts.map +1 -1
- package/dist/tx/fees.js +3 -0
- package/dist/tx/fees.js.map +1 -1
- package/dist/tx/index.js.map +1 -1
- package/dist/tx/manager.d.ts +3 -2
- package/dist/tx/manager.d.ts.map +1 -1
- package/dist/tx/manager.js +232 -216
- package/dist/tx/manager.js.map +1 -1
- package/dist/tx/manager.test.integration.d.ts +2 -0
- package/dist/tx/manager.test.integration.d.ts.map +1 -0
- package/dist/tx/manager.test.integration.js +177 -0
- package/dist/tx/manager.test.integration.js.map +1 -0
- package/dist/tx/policy.d.ts +1 -1
- package/dist/tx/policy.d.ts.map +1 -1
- package/dist/tx/policy.js.map +1 -1
- package/dist/tx/replacement.d.ts +3 -3
- package/dist/tx/replacement.d.ts.map +1 -1
- package/dist/tx/replacement.js +3 -3
- package/dist/tx/replacement.js.map +1 -1
- package/dist/tx/tracker.d.ts +6 -6
- package/dist/tx/tracker.d.ts.map +1 -1
- package/dist/tx/tracker.js +9 -9
- 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.d.ts +1 -1
- package/dist/types/params.d.ts.map +1 -1
- package/dist/types/params.js.map +1 -1
- package/dist/types/tx-overrides.d.ts +1 -1
- package/dist/types/tx-overrides.d.ts.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.d.ts +3 -3
- package/dist/wallet/errors.d.ts.map +1 -1
- package/dist/wallet/errors.js +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.d.ts +2 -2
- package/dist/wallet/operations.d.ts.map +1 -1
- package/dist/wallet/operations.js +8 -15
- package/dist/wallet/operations.js.map +1 -1
- package/dist/wallet/provider-ref.js.map +1 -1
- package/dist/wallet/service.d.ts +2 -2
- package/dist/wallet/service.d.ts.map +1 -1
- package/dist/wallet/service.js.map +1 -1
- package/dist/wallet/types.js.map +1 -1
- package/package.json +25 -14
- 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
- package/dist/react-hooks/use-safe-context.d.ts +0 -2
- package/dist/react-hooks/use-safe-context.d.ts.map +0 -1
- package/dist/react-hooks/use-safe-context.js +0 -41
- package/dist/react-hooks/use-safe-context.js.map +0 -1
- package/dist/safe/adapter.d.ts +0 -9
- package/dist/safe/adapter.d.ts.map +0 -1
- package/dist/safe/adapter.js +0 -13
- package/dist/safe/adapter.js.map +0 -1
- package/dist/safe/detection.d.ts +0 -26
- package/dist/safe/detection.d.ts.map +0 -1
- package/dist/safe/detection.js +0 -102
- package/dist/safe/detection.js.map +0 -1
- package/dist/safe/errors.d.ts +0 -79
- package/dist/safe/errors.d.ts.map +0 -1
- package/dist/safe/errors.js +0 -34
- package/dist/safe/errors.js.map +0 -1
- package/dist/safe/index.d.ts +0 -8
- package/dist/safe/index.d.ts.map +0 -1
- package/dist/safe/index.js +0 -6
- package/dist/safe/index.js.map +0 -1
- package/dist/safe/live.d.ts +0 -8
- package/dist/safe/live.d.ts.map +0 -1
- package/dist/safe/live.js +0 -250
- package/dist/safe/live.js.map +0 -1
- package/dist/safe/service.d.ts +0 -26
- package/dist/safe/service.d.ts.map +0 -1
- package/dist/safe/service.js +0 -4
- package/dist/safe/service.js.map +0 -1
- package/dist/safe/simulation/abis.d.ts +0 -73
- package/dist/safe/simulation/abis.d.ts.map +0 -1
- package/dist/safe/simulation/abis.js +0 -61
- package/dist/safe/simulation/abis.js.map +0 -1
- package/dist/safe/simulation/addresses.d.ts +0 -4
- package/dist/safe/simulation/addresses.d.ts.map +0 -1
- package/dist/safe/simulation/addresses.js +0 -40
- package/dist/safe/simulation/addresses.js.map +0 -1
- package/dist/safe/simulation/encoding.d.ts +0 -16
- package/dist/safe/simulation/encoding.d.ts.map +0 -1
- package/dist/safe/simulation/encoding.js +0 -36
- package/dist/safe/simulation/encoding.js.map +0 -1
- package/dist/safe/simulation/errors.d.ts +0 -56
- package/dist/safe/simulation/errors.d.ts.map +0 -1
- package/dist/safe/simulation/errors.js +0 -37
- package/dist/safe/simulation/errors.js.map +0 -1
- package/dist/safe/simulation/index.d.ts +0 -7
- package/dist/safe/simulation/index.d.ts.map +0 -1
- package/dist/safe/simulation/index.js +0 -6
- package/dist/safe/simulation/index.js.map +0 -1
- package/dist/safe/simulation/service.d.ts +0 -14
- package/dist/safe/simulation/service.d.ts.map +0 -1
- package/dist/safe/simulation/service.js +0 -140
- package/dist/safe/simulation/service.js.map +0 -1
- package/dist/safe/simulation/types.d.ts +0 -20
- package/dist/safe/simulation/types.d.ts.map +0 -1
- package/dist/safe/simulation/types.js +0 -2
- package/dist/safe/simulation/types.js.map +0 -1
- package/dist/safe/types.d.ts +0 -61
- package/dist/safe/types.d.ts.map +0 -1
- package/dist/safe/types.js +0 -2
- package/dist/safe/types.js.map +0 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { describe, expect, it } from "@effect/vitest";
|
|
2
|
+
import { Cause, Effect, Exit, Fiber, TestClock } from "effect";
|
|
3
|
+
import { mainnet } from "viem/chains";
|
|
4
|
+
import { BlockNotFoundError, BlockService, BlockTimeoutError } from "../block/index.js";
|
|
5
|
+
import { ClientNotFoundError, TransportError } from "../core/index.js";
|
|
6
|
+
import { makeEffectEvmTestLayer } from "../testing-kit/index.js";
|
|
7
|
+
const DEFAULT_HASH = "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef";
|
|
8
|
+
const DEFAULT_BLOCK = {
|
|
9
|
+
baseFeePerGas: 30000000000n,
|
|
10
|
+
blobGasUsed: 0n,
|
|
11
|
+
difficulty: 0n,
|
|
12
|
+
excessBlobGas: 0n,
|
|
13
|
+
extraData: "0x",
|
|
14
|
+
gasLimit: 30000000n,
|
|
15
|
+
gasUsed: 12000000n,
|
|
16
|
+
hash: DEFAULT_HASH,
|
|
17
|
+
logsBloom: "0x00",
|
|
18
|
+
miner: "0x0000000000000000000000000000000000000000",
|
|
19
|
+
mixHash: DEFAULT_HASH,
|
|
20
|
+
nonce: "0x0000000000000000",
|
|
21
|
+
number: 1000n,
|
|
22
|
+
parentHash: DEFAULT_HASH,
|
|
23
|
+
receiptsRoot: DEFAULT_HASH,
|
|
24
|
+
sealFields: [],
|
|
25
|
+
sha3Uncles: DEFAULT_HASH,
|
|
26
|
+
size: 1024n,
|
|
27
|
+
stateRoot: DEFAULT_HASH,
|
|
28
|
+
timestamp: 1700000000n,
|
|
29
|
+
totalDifficulty: 0n,
|
|
30
|
+
transactions: [],
|
|
31
|
+
transactionsRoot: DEFAULT_HASH,
|
|
32
|
+
uncles: [],
|
|
33
|
+
};
|
|
34
|
+
describe("BlockService (Live)", () => {
|
|
35
|
+
const testLayer = makeEffectEvmTestLayer({
|
|
36
|
+
publicClient: {
|
|
37
|
+
getBlock: (params) => {
|
|
38
|
+
const p = params;
|
|
39
|
+
return Promise.resolve({
|
|
40
|
+
...DEFAULT_BLOCK,
|
|
41
|
+
hash: p.blockHash ?? DEFAULT_BLOCK.hash,
|
|
42
|
+
number: p.blockNumber ?? DEFAULT_BLOCK.number,
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
getBlockNumber: () => Promise.resolve(1000n),
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
describe("getBlockNumber", () => {
|
|
49
|
+
it.effect("returns current block number", () => Effect.gen(function* () {
|
|
50
|
+
const service = yield* BlockService;
|
|
51
|
+
const result = yield* service.getBlockNumber({ chainId: mainnet.id });
|
|
52
|
+
expect(result).toBe(1000n);
|
|
53
|
+
}).pipe(Effect.provide(testLayer)));
|
|
54
|
+
it.effect("fails with ClientNotFoundError for unsupported chainId", () => Effect.gen(function* () {
|
|
55
|
+
const service = yield* BlockService;
|
|
56
|
+
const exit = yield* Effect.exit(service.getBlockNumber({ chainId: 999 }));
|
|
57
|
+
expect(Exit.isFailure(exit)).toBe(true);
|
|
58
|
+
if (Exit.isFailure(exit)) {
|
|
59
|
+
const error = Cause.failureOption(exit.cause);
|
|
60
|
+
if (error._tag === "Some") {
|
|
61
|
+
expect(error.value).toBeInstanceOf(ClientNotFoundError);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}).pipe(Effect.provide(testLayer)));
|
|
65
|
+
it.effect("fails with TransportError (not timeout) on RPC error", () => {
|
|
66
|
+
const failingLayer = makeEffectEvmTestLayer({
|
|
67
|
+
publicClient: {
|
|
68
|
+
getBlockNumber: () => Promise.reject(new Error("boom")),
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
return Effect.gen(function* () {
|
|
72
|
+
const service = yield* BlockService;
|
|
73
|
+
const exit = yield* service.getBlockNumber({ chainId: mainnet.id }).pipe(Effect.exit);
|
|
74
|
+
expect(Exit.isFailure(exit)).toBe(true);
|
|
75
|
+
if (Exit.isFailure(exit)) {
|
|
76
|
+
const error = Cause.failureOption(exit.cause);
|
|
77
|
+
expect(error._tag).toBe("Some");
|
|
78
|
+
if (error._tag === "Some") {
|
|
79
|
+
expect(error.value).toBeInstanceOf(TransportError);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}).pipe(Effect.provide(failingLayer));
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
describe("getBlock / getBlockByHash / getBlocks", () => {
|
|
86
|
+
it.effect("returns block by number", () => Effect.gen(function* () {
|
|
87
|
+
const service = yield* BlockService;
|
|
88
|
+
const result = yield* service.getBlock({
|
|
89
|
+
blockNumber: 123n,
|
|
90
|
+
chainId: mainnet.id,
|
|
91
|
+
});
|
|
92
|
+
expect(result.number).toBe(123n);
|
|
93
|
+
}).pipe(Effect.provide(testLayer)));
|
|
94
|
+
it.effect("returns block by tag", () => Effect.gen(function* () {
|
|
95
|
+
const service = yield* BlockService;
|
|
96
|
+
const result = yield* service.getBlock({
|
|
97
|
+
blockTag: "latest",
|
|
98
|
+
chainId: mainnet.id,
|
|
99
|
+
});
|
|
100
|
+
expect(result.hash).toBeDefined();
|
|
101
|
+
}).pipe(Effect.provide(testLayer)));
|
|
102
|
+
it.effect("returns block by hash", () => Effect.gen(function* () {
|
|
103
|
+
const service = yield* BlockService;
|
|
104
|
+
const result = yield* service.getBlockByHash({
|
|
105
|
+
chainId: mainnet.id,
|
|
106
|
+
hash: DEFAULT_HASH,
|
|
107
|
+
});
|
|
108
|
+
expect(result.hash).toBe(DEFAULT_HASH);
|
|
109
|
+
}).pipe(Effect.provide(testLayer)));
|
|
110
|
+
it.effect("returns range of blocks", () => Effect.gen(function* () {
|
|
111
|
+
const service = yield* BlockService;
|
|
112
|
+
const result = yield* service.getBlocks({
|
|
113
|
+
chainId: mainnet.id,
|
|
114
|
+
fromBlock: 10n,
|
|
115
|
+
toBlock: 12n,
|
|
116
|
+
});
|
|
117
|
+
expect(result.map((b) => b.number)).toEqual([10n, 11n, 12n]);
|
|
118
|
+
}).pipe(Effect.provide(testLayer)));
|
|
119
|
+
});
|
|
120
|
+
describe("waitForBlock", () => {
|
|
121
|
+
it.effect("times out with BlockTimeoutError (not misclassified)", () => {
|
|
122
|
+
const current = 0n;
|
|
123
|
+
const layer = makeEffectEvmTestLayer({
|
|
124
|
+
publicClient: {
|
|
125
|
+
getBlockNumber: () => Promise.resolve(current),
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
return Effect.gen(function* () {
|
|
129
|
+
const service = yield* BlockService;
|
|
130
|
+
const fiber = yield* Effect.fork(service.waitForBlock({
|
|
131
|
+
blockNumber: 10n,
|
|
132
|
+
chainId: mainnet.id,
|
|
133
|
+
timeout: 2500,
|
|
134
|
+
}));
|
|
135
|
+
yield* TestClock.adjust("3 seconds");
|
|
136
|
+
const exit = yield* Fiber.await(fiber);
|
|
137
|
+
expect(Exit.isFailure(exit)).toBe(true);
|
|
138
|
+
if (Exit.isFailure(exit)) {
|
|
139
|
+
const error = Cause.failureOption(exit.cause);
|
|
140
|
+
expect(error._tag).toBe("Some");
|
|
141
|
+
if (error._tag === "Some") {
|
|
142
|
+
expect(error.value).toBeInstanceOf(BlockTimeoutError);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}).pipe(Effect.provide(layer));
|
|
146
|
+
});
|
|
147
|
+
it.effect("is interruptible", () => {
|
|
148
|
+
const current = 0n;
|
|
149
|
+
const layer = makeEffectEvmTestLayer({
|
|
150
|
+
publicClient: {
|
|
151
|
+
getBlockNumber: () => Promise.resolve(current),
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
return Effect.gen(function* () {
|
|
155
|
+
const service = yield* BlockService;
|
|
156
|
+
const fiber = yield* Effect.fork(service.waitForBlock({
|
|
157
|
+
blockNumber: 10n,
|
|
158
|
+
chainId: mainnet.id,
|
|
159
|
+
timeout: 60_000,
|
|
160
|
+
}));
|
|
161
|
+
yield* Fiber.interrupt(fiber);
|
|
162
|
+
const exit = yield* Fiber.await(fiber);
|
|
163
|
+
expect(Exit.isInterrupted(exit)).toBe(true);
|
|
164
|
+
}).pipe(Effect.provide(layer));
|
|
165
|
+
});
|
|
166
|
+
it.effect("returns BlockNotFoundError when block fetch fails", () => {
|
|
167
|
+
const layer = makeEffectEvmTestLayer({
|
|
168
|
+
publicClient: {
|
|
169
|
+
getBlock: () => Promise.reject(new Error("missing")),
|
|
170
|
+
getBlockNumber: () => Promise.resolve(10n),
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
return Effect.gen(function* () {
|
|
174
|
+
const service = yield* BlockService;
|
|
175
|
+
const exit = yield* service
|
|
176
|
+
.waitForBlock({ blockNumber: 10n, chainId: mainnet.id })
|
|
177
|
+
.pipe(Effect.exit);
|
|
178
|
+
expect(Exit.isFailure(exit)).toBe(true);
|
|
179
|
+
if (Exit.isFailure(exit)) {
|
|
180
|
+
const error = Cause.failureOption(exit.cause);
|
|
181
|
+
expect(error._tag).toBe("Some");
|
|
182
|
+
if (error._tag === "Some") {
|
|
183
|
+
expect(error.value).toBeInstanceOf(BlockNotFoundError);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}).pipe(Effect.provide(layer));
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
//# sourceMappingURL=service.test.integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.test.integration.js","sourceRoot":"","sources":["../../src/block/service.test.integration.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from \"@effect/vitest\";\nimport { Cause, Effect, Exit, Fiber, TestClock } from \"effect\";\nimport type { Block, Hash } from \"viem\";\nimport { mainnet } from \"viem/chains\";\nimport { BlockNotFoundError, BlockService, BlockTimeoutError } from \"@/src/block/index.js\";\nimport { ClientNotFoundError, TransportError } from \"@/src/core/index.js\";\nimport { makeEffectEvmTestLayer } from \"@/src/testing-kit/index.js\";\n\nconst DEFAULT_HASH = \"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\" as Hash;\n\nconst DEFAULT_BLOCK: Block = {\n baseFeePerGas: 30000000000n,\n blobGasUsed: 0n,\n difficulty: 0n,\n excessBlobGas: 0n,\n extraData: \"0x\",\n gasLimit: 30000000n,\n gasUsed: 12000000n,\n hash: DEFAULT_HASH,\n logsBloom: \"0x00\",\n miner: \"0x0000000000000000000000000000000000000000\",\n mixHash: DEFAULT_HASH,\n nonce: \"0x0000000000000000\",\n number: 1000n,\n parentHash: DEFAULT_HASH,\n receiptsRoot: DEFAULT_HASH,\n sealFields: [],\n sha3Uncles: DEFAULT_HASH,\n size: 1024n,\n stateRoot: DEFAULT_HASH,\n timestamp: 1700000000n,\n totalDifficulty: 0n,\n transactions: [],\n transactionsRoot: DEFAULT_HASH,\n uncles: [],\n};\n\ndescribe(\"BlockService (Live)\", () => {\n const testLayer = makeEffectEvmTestLayer({\n publicClient: {\n getBlock: (params: unknown) => {\n const p = params as { blockNumber?: bigint; blockHash?: Hash };\n return Promise.resolve({\n ...DEFAULT_BLOCK,\n hash: p.blockHash ?? DEFAULT_BLOCK.hash,\n number: p.blockNumber ?? DEFAULT_BLOCK.number,\n });\n },\n getBlockNumber: () => Promise.resolve(1000n),\n },\n });\n\n describe(\"getBlockNumber\", () => {\n it.effect(\"returns current block number\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const result = yield* service.getBlockNumber({ chainId: mainnet.id });\n\n expect(result).toBe(1000n);\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"fails with ClientNotFoundError for unsupported chainId\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const exit = yield* Effect.exit(service.getBlockNumber({ chainId: 999 }));\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(ClientNotFoundError);\n }\n }\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"fails with TransportError (not timeout) on RPC error\", () => {\n const failingLayer = makeEffectEvmTestLayer({\n publicClient: {\n getBlockNumber: () => Promise.reject(new Error(\"boom\")),\n },\n });\n\n return Effect.gen(function* () {\n const service = yield* BlockService;\n const exit = yield* service.getBlockNumber({ chainId: mainnet.id }).pipe(Effect.exit);\n\n expect(Exit.isFailure(exit)).toBe(true);\n if (Exit.isFailure(exit)) {\n const error = Cause.failureOption(exit.cause);\n expect(error._tag).toBe(\"Some\");\n if (error._tag === \"Some\") {\n expect(error.value).toBeInstanceOf(TransportError);\n }\n }\n }).pipe(Effect.provide(failingLayer));\n });\n });\n\n describe(\"getBlock / getBlockByHash / getBlocks\", () => {\n it.effect(\"returns block by number\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const result = yield* service.getBlock({\n blockNumber: 123n,\n chainId: mainnet.id,\n });\n\n expect(result.number).toBe(123n);\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"returns block by tag\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const result = yield* service.getBlock({\n blockTag: \"latest\",\n chainId: mainnet.id,\n });\n\n expect(result.hash).toBeDefined();\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"returns block by hash\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const result = yield* service.getBlockByHash({\n chainId: mainnet.id,\n hash: DEFAULT_HASH,\n });\n\n expect(result.hash).toBe(DEFAULT_HASH);\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"returns range of blocks\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const result = yield* service.getBlocks({\n chainId: mainnet.id,\n fromBlock: 10n,\n toBlock: 12n,\n });\n\n expect(result.map((b) => b.number)).toEqual([10n, 11n, 12n]);\n }).pipe(Effect.provide(testLayer))\n );\n });\n\n describe(\"waitForBlock\", () => {\n it.effect(\"times out with BlockTimeoutError (not misclassified)\", () => {\n const current = 0n;\n const layer = makeEffectEvmTestLayer({\n publicClient: {\n getBlockNumber: () => Promise.resolve(current),\n },\n });\n\n return Effect.gen(function* () {\n const service = yield* BlockService;\n const fiber = yield* Effect.fork(\n service.waitForBlock({\n blockNumber: 10n,\n chainId: mainnet.id,\n timeout: 2500,\n })\n );\n\n yield* TestClock.adjust(\"3 seconds\");\n\n const exit = yield* Fiber.await(fiber);\n expect(Exit.isFailure(exit)).toBe(true);\n if (Exit.isFailure(exit)) {\n const error = Cause.failureOption(exit.cause);\n expect(error._tag).toBe(\"Some\");\n if (error._tag === \"Some\") {\n expect(error.value).toBeInstanceOf(BlockTimeoutError);\n }\n }\n }).pipe(Effect.provide(layer));\n });\n\n it.effect(\"is interruptible\", () => {\n const current = 0n;\n const layer = makeEffectEvmTestLayer({\n publicClient: {\n getBlockNumber: () => Promise.resolve(current),\n },\n });\n\n return Effect.gen(function* () {\n const service = yield* BlockService;\n const fiber = yield* Effect.fork(\n service.waitForBlock({\n blockNumber: 10n,\n chainId: mainnet.id,\n timeout: 60_000,\n })\n );\n\n yield* Fiber.interrupt(fiber);\n const exit = yield* Fiber.await(fiber);\n expect(Exit.isInterrupted(exit)).toBe(true);\n }).pipe(Effect.provide(layer));\n });\n\n it.effect(\"returns BlockNotFoundError when block fetch fails\", () => {\n const layer = makeEffectEvmTestLayer({\n publicClient: {\n getBlock: () => Promise.reject(new Error(\"missing\")),\n getBlockNumber: () => Promise.resolve(10n),\n },\n });\n\n return Effect.gen(function* () {\n const service = yield* BlockService;\n const exit = yield* service\n .waitForBlock({ blockNumber: 10n, chainId: mainnet.id })\n .pipe(Effect.exit);\n\n expect(Exit.isFailure(exit)).toBe(true);\n if (Exit.isFailure(exit)) {\n const error = Cause.failureOption(exit.cause);\n expect(error._tag).toBe(\"Some\");\n if (error._tag === \"Some\") {\n expect(error.value).toBeInstanceOf(BlockNotFoundError);\n }\n }\n }).pipe(Effect.provide(layer));\n });\n });\n});\n"]}
|
|
@@ -9,8 +9,4 @@ export declare const DEFAULT_POLLING_INTERVAL: number;
|
|
|
9
9
|
export declare const DEFAULT_RETRY_DELAY: number;
|
|
10
10
|
export declare const DEFAULT_SUBSCRIPTION_BASE_DELAY: number;
|
|
11
11
|
export declare const DEFAULT_CURSOR_FLUSH_DELAY = "250 millis";
|
|
12
|
-
export declare const SAFE_POLL_INTERVAL: number;
|
|
13
|
-
export declare const SAFE_EXECUTION_TIMEOUT: number;
|
|
14
|
-
export declare const SAFE_SIGNATURE_POLL_INTERVAL: number;
|
|
15
|
-
export declare const SAFE_SIGNATURE_TIMEOUT: number;
|
|
16
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAMhD,eAAO,MAAM,UAAU,SAAS,CAAC;AAOjC,eAAO,MAAM,iBAAiB,QAAkC,CAAC;AAGjE,eAAO,MAAM,uBAAuB,QAAiC,CAAC;AAGtE,eAAO,MAAM,uBAAuB,QAAkC,CAAC;AAGvE,eAAO,MAAM,mBAAmB,QAAkC,CAAC;AAGnE,eAAO,MAAM,0BAA0B,QAAkC,CAAC;AAG1E,eAAO,MAAM,wBAAwB,QAAiC,CAAC;AAGvE,eAAO,MAAM,mBAAmB,QAAkC,CAAC;AAGnE,eAAO,MAAM,+BAA+B,QAAkC,CAAC;AAG/E,eAAO,MAAM,0BAA0B,eAAe,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAMhD,eAAO,MAAM,UAAU,SAAS,CAAC;AAOjC,eAAO,MAAM,iBAAiB,QAAkC,CAAC;AAGjE,eAAO,MAAM,uBAAuB,QAAiC,CAAC;AAGtE,eAAO,MAAM,uBAAuB,QAAkC,CAAC;AAGvE,eAAO,MAAM,mBAAmB,QAAkC,CAAC;AAGnE,eAAO,MAAM,0BAA0B,QAAkC,CAAC;AAG1E,eAAO,MAAM,wBAAwB,QAAiC,CAAC;AAGvE,eAAO,MAAM,mBAAmB,QAAkC,CAAC;AAGnE,eAAO,MAAM,+BAA+B,QAAkC,CAAC;AAG/E,eAAO,MAAM,0BAA0B,eAAe,CAAC"}
|
package/dist/constants/index.js
CHANGED
|
@@ -4,14 +4,10 @@ export const MIN_TX_GAS = 21000n;
|
|
|
4
4
|
export const DEFAULT_MAX_DELAY = Duration.toMillis("30 seconds");
|
|
5
5
|
export const DEFAULT_RECEIPT_TIMEOUT = Duration.toMillis("2 minutes");
|
|
6
6
|
export const DEFAULT_REQUEST_TIMEOUT = Duration.toMillis("10 seconds");
|
|
7
|
-
export const DEFAULT_STUCK_TX_MS = Duration.toMillis("
|
|
7
|
+
export const DEFAULT_STUCK_TX_MS = Duration.toMillis("60 minutes");
|
|
8
8
|
export const DEFAULT_BLOCK_WAIT_TIMEOUT = Duration.toMillis("60 seconds");
|
|
9
9
|
export const DEFAULT_POLLING_INTERVAL = Duration.toMillis("4 seconds");
|
|
10
10
|
export const DEFAULT_RETRY_DELAY = Duration.toMillis("150 millis");
|
|
11
11
|
export const DEFAULT_SUBSCRIPTION_BASE_DELAY = Duration.toMillis("500 millis");
|
|
12
12
|
export const DEFAULT_CURSOR_FLUSH_DELAY = "250 millis";
|
|
13
|
-
export const SAFE_POLL_INTERVAL = Duration.toMillis("3 seconds");
|
|
14
|
-
export const SAFE_EXECUTION_TIMEOUT = Duration.toMillis("5 minutes");
|
|
15
|
-
export const SAFE_SIGNATURE_POLL_INTERVAL = Duration.toMillis("2 seconds");
|
|
16
|
-
export const SAFE_SIGNATURE_TIMEOUT = Duration.toMillis("2 minutes");
|
|
17
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAOlC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAMhD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AAOjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAGtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAG1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,+BAA+B,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAG/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAOlC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAMhD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AAOjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAGtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAG1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,+BAA+B,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAG/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC","sourcesContent":["/**\n * Shared constants used across the codebase.\n */\n\nimport { Duration } from \"effect\";\n\n// =============================================================================\n// Gas Constants\n// =============================================================================\n\n/** Default multiplier for estimated gas limits (10% safety margin). */\nexport const DEFAULT_GAS_LIMIT_MULTIPLIER = 1.1;\n\n/**\n * Minimum gas required for a basic Ethereum transaction (21,000 gas units).\n * @see https://ethereum.stackexchange.com/q/34674/24693\n */\nexport const MIN_TX_GAS = 21000n;\n\n// =============================================================================\n// Timing Constants (milliseconds)\n// =============================================================================\n\n/** Default maximum delay for circuit breakers and subscriptions. */\nexport const DEFAULT_MAX_DELAY = Duration.toMillis(\"30 seconds\");\n\n/** Default timeout for waiting on a transaction receipt. */\nexport const DEFAULT_RECEIPT_TIMEOUT = Duration.toMillis(\"2 minutes\");\n\n/** Default timeout for RPC requests. */\nexport const DEFAULT_REQUEST_TIMEOUT = Duration.toMillis(\"10 seconds\");\n\n/** Default time before a transaction is considered stuck. */\nexport const DEFAULT_STUCK_TX_MS = Duration.toMillis(\"60 minutes\");\n\n/** Default timeout for waiting on a specific block. */\nexport const DEFAULT_BLOCK_WAIT_TIMEOUT = Duration.toMillis(\"60 seconds\");\n\n/** Default polling interval for transaction receipt and confirmation checks. */\nexport const DEFAULT_POLLING_INTERVAL = Duration.toMillis(\"4 seconds\");\n\n/** Default delay between RPC retries. */\nexport const DEFAULT_RETRY_DELAY = Duration.toMillis(\"150 millis\");\n\n/** Default base delay for subscription exponential backoff. */\nexport const DEFAULT_SUBSCRIPTION_BASE_DELAY = Duration.toMillis(\"500 millis\");\n\n/** Default debounce delay for cursor store flush operations. */\nexport const DEFAULT_CURSOR_FLUSH_DELAY = \"250 millis\";\n"]}
|
|
@@ -3,26 +3,30 @@ import type { Abi, Address, ContractFunctionArgs } from "viem";
|
|
|
3
3
|
import type { ClientNotFoundError, ContractReadError, MulticallError } from "../core/index.js";
|
|
4
4
|
import type { ContractFunctionName, ContractFunctionReturnType, MulticallCall, MulticallResult } from "../types/index.js";
|
|
5
5
|
import { ContractReader } from "./reader.js";
|
|
6
|
+
type ArgsField<TArgs> = {
|
|
7
|
+
readonly args?: TArgs | undefined;
|
|
8
|
+
} & (readonly [] extends TArgs ? unknown : {
|
|
9
|
+
readonly args: TArgs;
|
|
10
|
+
});
|
|
6
11
|
export type CrossChainCall<TAbi extends Abi = Abi, TFunctionName extends ContractFunctionName<TAbi, "pure" | "view"> = ContractFunctionName<TAbi, "pure" | "view">> = {
|
|
7
|
-
readonly
|
|
12
|
+
readonly abi: TAbi;
|
|
8
13
|
readonly address: Address;
|
|
14
|
+
readonly chainId: number;
|
|
15
|
+
readonly functionName: TFunctionName;
|
|
16
|
+
} & ArgsField<ContractFunctionArgs<TAbi, "pure" | "view", TFunctionName>>;
|
|
17
|
+
export type ReadSameParams<TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, "pure" | "view">> = {
|
|
9
18
|
readonly abi: TAbi;
|
|
19
|
+
readonly address: Address;
|
|
20
|
+
readonly chainIds: readonly number[];
|
|
10
21
|
readonly functionName: TFunctionName;
|
|
11
|
-
|
|
12
|
-
};
|
|
22
|
+
} & ArgsField<ContractFunctionArgs<TAbi, "pure" | "view", TFunctionName>>;
|
|
13
23
|
export type ChainMulticallBatch = {
|
|
14
24
|
readonly chainId: number;
|
|
15
25
|
readonly calls: readonly MulticallCall[];
|
|
16
26
|
};
|
|
17
27
|
export type CrossChainReaderShape = {
|
|
18
28
|
readonly readAll: <const TCalls extends readonly CrossChainCall[]>(calls: TCalls) => Effect.Effect<Map<number, unknown[]>, ContractReadError | ClientNotFoundError>;
|
|
19
|
-
readonly readSame: <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, "pure" | "view">>(params:
|
|
20
|
-
chainIds: readonly number[];
|
|
21
|
-
address: Address;
|
|
22
|
-
abi: TAbi;
|
|
23
|
-
functionName: TFunctionName;
|
|
24
|
-
args?: ContractFunctionArgs<TAbi, "pure" | "view", TFunctionName>;
|
|
25
|
-
}) => Effect.Effect<Map<number, ContractFunctionReturnType<TAbi, "pure" | "view", TFunctionName>>, ContractReadError | ClientNotFoundError>;
|
|
29
|
+
readonly readSame: <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, "pure" | "view">>(params: ReadSameParams<TAbi, TFunctionName>) => Effect.Effect<Map<number, ContractFunctionReturnType<TAbi, "pure" | "view", TFunctionName>>, ContractReadError | ClientNotFoundError>;
|
|
26
30
|
readonly multicallAll: <const TBatches extends readonly ChainMulticallBatch[]>(batches: TBatches) => Effect.Effect<Map<number, readonly MulticallResult<unknown>[]>, MulticallError | ClientNotFoundError>;
|
|
27
31
|
};
|
|
28
32
|
declare const CrossChainReader_base: Context.TagClass<CrossChainReader, "ew3/CrossChainReader", CrossChainReaderShape>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-chain-reader.d.ts","sourceRoot":"","sources":["../../src/contract/cross-chain-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAElG,OAAO,KAAK,EACV,oBAAoB,EACpB,0BAA0B,EAC1B,aAAa,EACb,eAAe,
|
|
1
|
+
{"version":3,"file":"cross-chain-reader.d.ts","sourceRoot":"","sources":["../../src/contract/cross-chain-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,13 +34,7 @@ export const CrossChainReaderLive = Layer.effect(CrossChainReader, Effect.gen(fu
|
|
|
34
34
|
})),
|
|
35
35
|
readAll: (calls) => Effect.gen(function* () {
|
|
36
36
|
const groupedCalls = groupBy(calls, (call) => call.chainId);
|
|
37
|
-
const results = yield* Effect.all(Array.from(groupedCalls.entries()).map(([chainId, chainCalls]) => Effect.all(chainCalls.map((call) => reader.read({
|
|
38
|
-
abi: call.abi,
|
|
39
|
-
address: call.address,
|
|
40
|
-
chainId: call.chainId,
|
|
41
|
-
functionName: call.functionName,
|
|
42
|
-
...(call.args !== undefined ? { args: call.args } : {}),
|
|
43
|
-
})), { concurrency: "unbounded" }).pipe(Effect.map((chainResults) => ({
|
|
37
|
+
const results = yield* Effect.all(Array.from(groupedCalls.entries()).map(([chainId, chainCalls]) => Effect.all(chainCalls.map((call) => reader.read(call)), { concurrency: "unbounded" }).pipe(Effect.map((chainResults) => ({
|
|
44
38
|
chainId,
|
|
45
39
|
results: chainResults,
|
|
46
40
|
})))), { concurrency: "unbounded" });
|
|
@@ -60,9 +54,9 @@ export const CrossChainReaderLive = Layer.effect(CrossChainReader, Effect.gen(fu
|
|
|
60
54
|
.read({
|
|
61
55
|
abi: params.abi,
|
|
62
56
|
address: params.address,
|
|
57
|
+
args: params.args,
|
|
63
58
|
chainId,
|
|
64
59
|
functionName: params.functionName,
|
|
65
|
-
...(params.args !== undefined ? { args: params.args } : {}),
|
|
66
60
|
})
|
|
67
61
|
.pipe(Effect.map((result) => ({
|
|
68
62
|
chainId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-chain-reader.js","sourceRoot":"","sources":["../../src/contract/cross-chain-reader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cross-chain-reader.js","sourceRoot":"","sources":["../../src/contract/cross-chain-reader.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Effect, Layer } from \"effect\";\nimport type { Abi, Address, ContractFunctionArgs } from \"viem\";\nimport type { ClientNotFoundError, ContractReadError, MulticallError } from \"@/src/core/index.js\";\nimport { SpanNames } from \"@/src/telemetry/index.js\";\nimport type {\n ContractFunctionName,\n ContractFunctionReturnType,\n MulticallCall,\n MulticallResult,\n ReadParams,\n} from \"@/src/types/index.js\";\nimport { ContractReader } from \"./reader.js\";\n\ntype ArgsField<TArgs> = {\n readonly args?: TArgs | undefined;\n} & (readonly [] extends TArgs ? unknown : { readonly args: TArgs });\n\nexport type CrossChainCall<\n TAbi extends Abi = Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\"> = ContractFunctionName<\n TAbi,\n \"pure\" | \"view\"\n >,\n> = {\n readonly abi: TAbi;\n readonly address: Address;\n readonly chainId: number;\n readonly functionName: TFunctionName;\n} & ArgsField<ContractFunctionArgs<TAbi, \"pure\" | \"view\", TFunctionName>>;\n\nexport type ReadSameParams<\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n> = {\n readonly abi: TAbi;\n readonly address: Address;\n readonly chainIds: readonly number[];\n readonly functionName: TFunctionName;\n} & ArgsField<ContractFunctionArgs<TAbi, \"pure\" | \"view\", TFunctionName>>;\n\nexport type ChainMulticallBatch = {\n readonly chainId: number;\n readonly calls: readonly MulticallCall[];\n};\n\nexport type CrossChainReaderShape = {\n /**\n * Execute reads across multiple chains in parallel.\n * Groups calls by chainId internally for efficiency.\n */\n readonly readAll: <const TCalls extends readonly CrossChainCall[]>(\n calls: TCalls\n ) => Effect.Effect<Map<number, unknown[]>, ContractReadError | ClientNotFoundError>;\n\n /**\n * Execute the same read on multiple chains (e.g., check balance on all chains)\n */\n readonly readSame: <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n >(\n params: ReadSameParams<TAbi, TFunctionName>\n ) => Effect.Effect<\n Map<number, ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName>>,\n ContractReadError | ClientNotFoundError\n >;\n\n /**\n * Execute multicall on each chain in parallel, then merge results\n */\n readonly multicallAll: <const TBatches extends readonly ChainMulticallBatch[]>(\n batches: TBatches\n ) => Effect.Effect<\n Map<number, readonly MulticallResult<unknown>[]>,\n MulticallError | ClientNotFoundError\n >;\n};\n\nexport class CrossChainReader extends Context.Tag(\"ew3/CrossChainReader\")<\n CrossChainReader,\n CrossChainReaderShape\n>() {}\n\n/**\n * Helper function to group items by a key\n */\nconst groupBy = <T, K extends string | number>(\n arr: readonly T[],\n keyFn: (item: T) => K\n): Map<K, T[]> => {\n const result = new Map<K, T[]>();\n for (const item of arr) {\n const key = keyFn(item);\n const group = result.get(key) ?? [];\n group.push(item);\n result.set(key, group);\n }\n return result;\n};\n\n/**\n * Live implementation of CrossChainReader service\n */\nexport const CrossChainReaderLive = Layer.effect(\n CrossChainReader,\n Effect.gen(function* () {\n const reader = yield* ContractReader;\n\n return CrossChainReader.of({\n multicallAll: <const TBatches extends readonly ChainMulticallBatch[]>(batches: TBatches) =>\n Effect.gen(function* () {\n // Execute multicalls for each chain in parallel\n const results = yield* Effect.all(\n batches.map((batch) =>\n reader.multicall(batch.chainId, batch.calls).pipe(\n Effect.map((result) => ({\n chainId: batch.chainId,\n result,\n }))\n )\n ),\n { concurrency: \"unbounded\" }\n );\n\n // Collect results into a Map by chainId\n const resultMap = new Map<number, readonly MulticallResult<unknown>[]>();\n for (const { chainId, result } of results) {\n resultMap.set(chainId, result);\n }\n\n return resultMap;\n }).pipe(\n Effect.withSpan(SpanNames.CROSS_CHAIN_MULTICALL_ALL, {\n attributes: {\n batchCount: batches.length,\n chainIds: batches.map((b) => b.chainId),\n },\n })\n ),\n\n readAll: <const TCalls extends readonly CrossChainCall[]>(calls: TCalls) =>\n Effect.gen(function* () {\n // Group calls by chainId\n const groupedCalls = groupBy(calls, (call) => call.chainId);\n\n // Execute reads for each chain in parallel\n const results = yield* Effect.all(\n Array.from(groupedCalls.entries()).map(([chainId, chainCalls]) =>\n Effect.all(\n chainCalls.map((call) => reader.read(call)),\n { concurrency: \"unbounded\" }\n ).pipe(\n Effect.map((chainResults) => ({\n chainId,\n results: chainResults,\n }))\n )\n ),\n { concurrency: \"unbounded\" }\n );\n\n // Collect results into a Map by chainId\n const resultMap = new Map<number, unknown[]>();\n for (const { chainId, results: chainResults } of results) {\n resultMap.set(chainId, chainResults);\n }\n\n return resultMap;\n }).pipe(\n Effect.withSpan(SpanNames.CROSS_CHAIN_READ_ALL, {\n attributes: {\n callCount: calls.length,\n chainIds: Array.from(new Set(calls.map((c) => c.chainId))),\n },\n })\n ),\n\n readSame: <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n >(\n params: ReadSameParams<TAbi, TFunctionName>\n ) =>\n Effect.gen(function* () {\n // Execute the same read on each chain in parallel\n const results = yield* Effect.all(\n params.chainIds.map((chainId) =>\n reader\n .read({\n abi: params.abi,\n address: params.address,\n args: params.args,\n chainId,\n functionName: params.functionName,\n } as ReadParams<TAbi, TFunctionName>)\n .pipe(\n Effect.map((result) => ({\n chainId,\n result: result as ContractFunctionReturnType<\n TAbi,\n \"pure\" | \"view\",\n TFunctionName\n >,\n }))\n )\n ),\n { concurrency: \"unbounded\" }\n );\n\n // Collect results into a Map by chainId\n const resultMap = new Map<\n number,\n ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName>\n >();\n for (const { chainId, result } of results) {\n resultMap.set(chainId, result);\n }\n\n return resultMap;\n }).pipe(\n Effect.withSpan(SpanNames.CROSS_CHAIN_READ_SAME, {\n attributes: {\n address: params.address,\n chainCount: params.chainIds.length,\n chainIds: params.chainIds,\n functionName: params.functionName,\n },\n })\n ),\n });\n })\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC","sourcesContent":["export * from \"./cross-chain-reader.js\";\nexport * from \"./pipeline.js\";\nexport * from \"./reader.js\";\nexport * from \"./typed-contract.js\";\nexport * from \"./writer.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contract/pipeline/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contract/pipeline/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC","sourcesContent":["export * from \"./live.js\";\nexport * from \"./service.js\";\nexport * from \"./types.js\";\n"]}
|
|
@@ -2,7 +2,7 @@ import type { Scope } from "effect";
|
|
|
2
2
|
import { Effect } from "effect";
|
|
3
3
|
import type { Abi } from "viem";
|
|
4
4
|
import type { ContractWriterShape } from "../../../contract/index.js";
|
|
5
|
-
import type { ClientNotFoundError, ContractReadError, ContractWriteError, EventDecodeError, GasEstimationError, InsufficientFundsError, ReceiptTimeoutError, SimulationFailedError,
|
|
5
|
+
import type { ClientNotFoundError, ContractReadError, ContractWriteError, EventDecodeError, GasEstimationError, InsufficientFundsError, ReceiptTimeoutError, SimulationFailedError, TransportError, TxFailedError, UserRejectedError, WalletNotConnectedError, WrongNetworkError } from "../../../core/index.js";
|
|
6
6
|
import type { EventStreamShape } from "../../../events/index.js";
|
|
7
7
|
import type { GasPriceUnavailableError, GasServiceShape } from "../../../gas/index.js";
|
|
8
8
|
import type { NonceServiceShape } from "../../../nonce/index.js";
|
|
@@ -16,7 +16,7 @@ export type CorePipelineDeps = {
|
|
|
16
16
|
readonly nonceService: NonceServiceShape;
|
|
17
17
|
readonly gasService: GasServiceShape;
|
|
18
18
|
};
|
|
19
|
-
type CorePipelineError = SimulationFailedError | ContractReadError | GasEstimationError | ContractWriteError | InsufficientFundsError | UserRejectedError | GasPriceUnavailableError |
|
|
19
|
+
type CorePipelineError = SimulationFailedError | ContractReadError | GasEstimationError | ContractWriteError | InsufficientFundsError | UserRejectedError | GasPriceUnavailableError | TxFailedError | ReceiptTimeoutError | ClientNotFoundError | TransportError | WalletNotConnectedError | WrongNetworkError | EventDecodeError;
|
|
20
20
|
export declare const runCorePipeline: <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, "nonpayable" | "payable">>(deps: CorePipelineDeps, params: WriteParams<TAbi, TFunctionName>, policy: TxPolicy, hooks?: PipelineHooks) => Effect.Effect<WriteAndTrackResult<TAbi>, CorePipelineError, Scope.Scope>;
|
|
21
21
|
export {};
|
|
22
22
|
//# sourceMappingURL=core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,GAAG,EAA4B,MAAM,MAAM,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,GAAG,EAA4B,MAAM,MAAM,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAQtE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC,CAAC;AAEF,KAAK,iBAAiB,GAClB,qBAAqB,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,iBAAiB,GACjB,wBAAwB,GACxB,aAAa,GACb,mBAAmB,GACnB,mBAAmB,GACnB,cAAc,GACd,uBAAuB,GACvB,iBAAiB,GACjB,gBAAgB,CAAC;AAcrB,eAAO,MAAM,eAAe,GAC1B,IAAI,SAAS,GAAG,EAChB,aAAa,SAAS,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC,EAE1E,MAAM,gBAAgB,EACtB,QAAQ,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,EACxC,QAAQ,QAAQ,EAChB,QAAO,aAAkB,KACxB,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAuFtE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/core.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/core.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scope } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { Abi, Hash, TransactionReceipt } from \"viem\";\nimport type { ContractWriterShape } from \"@/src/contract/index.js\";\nimport type {\n ClientNotFoundError,\n ContractReadError,\n ContractWriteError,\n EventDecodeError,\n GasEstimationError,\n InsufficientFundsError,\n ReceiptTimeoutError,\n SimulationFailedError,\n TransportError,\n TxFailedError,\n UserRejectedError,\n WalletNotConnectedError,\n WrongNetworkError,\n} from \"@/src/core/index.js\";\nimport type { EventStreamShape } from \"@/src/events/index.js\";\nimport type { GasPriceUnavailableError, GasServiceShape } from \"@/src/gas/index.js\";\nimport type { NonceServiceShape } from \"@/src/nonce/index.js\";\nimport type { TxManagerShape, TxPolicy } from \"@/src/tx/index.js\";\nimport { defaultPolicy } from \"@/src/tx/index.js\";\nimport type { ContractFunctionName, WriteParams } from \"@/src/types/index.js\";\nimport type { PipelineHooks, WriteAndTrackResult } from \"../types.js\";\nimport { confirmNonce, withNonceReservation } from \"./nonce.js\";\nimport { deriveBaseOverrides, simulateAndEstimate } from \"./prepare.js\";\nimport { waitForReceiptFollowingReplacements } from \"./receipt.js\";\n\n/**\n * Dependencies required by the core pipeline\n */\nexport type CorePipelineDeps = {\n readonly writer: ContractWriterShape;\n readonly txManager: TxManagerShape;\n readonly eventStream: EventStreamShape;\n readonly nonceService: NonceServiceShape;\n readonly gasService: GasServiceShape;\n};\n\ntype CorePipelineError =\n | SimulationFailedError\n | ContractReadError\n | GasEstimationError\n | ContractWriteError\n | InsufficientFundsError\n | UserRejectedError\n | GasPriceUnavailableError\n | TxFailedError\n | ReceiptTimeoutError\n | ClientNotFoundError\n | TransportError\n | WalletNotConnectedError\n | WrongNetworkError\n | EventDecodeError;\n\n/**\n * Run the core write pipeline with hooks for tracking.\n *\n * Steps:\n * 1. Derive base overrides (tx type + fees)\n * 2. Simulate transaction\n * 3. Estimate gas\n * 4. Reserve nonce\n * 5. Write transaction\n * 6. Wait for receipt (following replacements)\n * 7. Decode events\n */\nexport const runCorePipeline = <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"nonpayable\" | \"payable\">,\n>(\n deps: CorePipelineDeps,\n params: WriteParams<TAbi, TFunctionName>,\n policy: TxPolicy,\n hooks: PipelineHooks = {}\n): Effect.Effect<WriteAndTrackResult<TAbi>, CorePipelineError, Scope.Scope> =>\n Effect.gen(function* () {\n const { writer, txManager, eventStream, nonceService, gasService } = deps;\n const mergedPolicy = { ...defaultPolicy, ...policy };\n\n // Step 1: Derive base overrides\n const baseOverrides = yield* deriveBaseOverrides(gasService, {\n chainId: params.chainId,\n policy: mergedPolicy,\n userOverrides: params.overrides,\n });\n\n // Step 2 & 3: Simulate and estimate gas\n if (hooks.onSimulating) {\n yield* hooks.onSimulating();\n }\n\n const { finalGas, overridesWithGas } = yield* simulateAndEstimate(\n writer,\n params,\n baseOverrides,\n mergedPolicy\n );\n\n // Step 4: Reserve nonce\n const explicitNonce = params.overrides?.nonce;\n const nonceReservation = yield* withNonceReservation(nonceService, {\n account: params.account,\n chainId: params.chainId,\n explicitNonce,\n });\n\n const finalOverrides = {\n ...overridesWithGas,\n nonce: nonceReservation.nonce,\n };\n\n if (hooks.onEstimated) {\n yield* hooks.onEstimated(finalGas, nonceReservation.nonce);\n }\n\n // Step 5: Sign and write transaction\n if (hooks.onSigning) {\n yield* hooks.onSigning();\n }\n\n const hash = yield* writer.write({ ...params, overrides: finalOverrides });\n yield* nonceReservation.markSubmitted;\n\n if (hooks.onSubmitted) {\n yield* hooks.onSubmitted(hash);\n }\n\n // Step 6: Wait for receipt\n const onReplacedHook = hooks.onReplaced;\n const receipt: TransactionReceipt = yield* waitForReceiptFollowingReplacements(txManager, {\n chainId: params.chainId,\n hash,\n onReplaced: onReplacedHook\n ? (oldHash, newHash, reason) => onReplacedHook(oldHash, newHash, reason)\n : undefined,\n policy: mergedPolicy,\n });\n\n if (hooks.onMined) {\n yield* hooks.onMined(receipt);\n }\n\n // Confirm nonce after successful mining\n yield* confirmNonce(nonceService, {\n account: params.account,\n chainId: params.chainId,\n nonce: nonceReservation.nonce,\n reserved: nonceReservation.reserved,\n });\n\n // Step 7: Decode events\n const events = (yield* eventStream.decodeReceipt(\n receipt,\n params.abi\n )) as WriteAndTrackResult<TAbi>[\"events\"];\n\n return {\n events,\n hash: receipt.transactionHash as Hash,\n receipt,\n } as WriteAndTrackResult<TAbi>;\n });\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAKlE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAU,EAAE,CAC9D,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAMpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAE,UAA8B,EAAU,EAAE;IAC7F,MAAM,CAAC,GAAG,UAAU,IAAI,4BAA4B,CAAC;IACrD,OAAO,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAKlE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAU,EAAE,CAC9D,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAMpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAE,UAA8B,EAAU,EAAE;IAC7F,MAAM,CAAC,GAAG,UAAU,IAAI,4BAA4B,CAAC;IACrD,OAAO,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC,CAAC","sourcesContent":["import { Option } from \"effect\";\nimport { DEFAULT_GAS_LIMIT_MULTIPLIER } from \"@/src/constants/index.js\";\nimport { multiplyBigintByDecimal } from \"@/src/internal/index.js\";\n\n/**\n * Convert nonce to bigint regardless of input type\n */\nexport const nonceToBigInt = (nonce: number | bigint): bigint =>\n typeof nonce === \"bigint\" ? nonce : BigInt(nonce);\n\n/**\n * Apply gas limit multiplier with safety bounds\n * Returns original gas if multiplier is invalid or would overflow\n */\nexport const applyGasLimitMultiplier = (gas: bigint, multiplier: number | undefined): bigint => {\n const m = multiplier ?? DEFAULT_GAS_LIMIT_MULTIPLIER;\n return Option.getOrElse(multiplyBigintByDecimal(gas, m), () => gas);\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nonce.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/nonce.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAa7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,YAA+B,EAC/B,MAIC,EACyF,EAAE,CAC5F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC9C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAW,CAAC;QACnE,CAAC;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;YAChD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAW,CAAC;IAC3D,CAAC,CAAC,EACF,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CACL,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC;QAC/C,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;KAC/B,CAAC;AACJ,CAAC,CAAC,CAAC;AAKL,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,YAA+B,EAC/B,MAKC,EACoB,EAAE,CACvB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;KACnC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"nonce.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/nonce.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAa7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,YAA+B,EAC/B,MAIC,EACyF,EAAE,CAC5F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC9C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAW,CAAC;QACnE,CAAC;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;YAChD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAW,CAAC;IAC3D,CAAC,CAAC,EACF,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CACL,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC;QAC/C,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;KAC/B,CAAC;AACJ,CAAC,CAAC,CAAC;AAKL,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,YAA+B,EAC/B,MAKC,EACoB,EAAE,CACvB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;KACnC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import type { Scope } from \"effect\";\nimport { Effect, Ref } from \"effect\";\nimport type { Address } from \"viem\";\nimport type { ClientNotFoundError, TransportError } from \"@/src/core/index.js\";\nimport type { NonceServiceShape } from \"@/src/nonce/index.js\";\nimport { nonceToBigInt } from \"./helpers.js\";\n\nexport type NonceReservationResult = {\n readonly nonce: number | bigint;\n readonly reserved: boolean;\n readonly markSubmitted: Effect.Effect<void>;\n};\n\n/**\n * Reserve a nonce with proper cleanup semantics.\n * If explicitNonce is provided, no reservation is made.\n * Otherwise, reserves from NonceService and releases on scope exit if not submitted.\n */\nexport const withNonceReservation = (\n nonceService: NonceServiceShape,\n params: {\n account: Address;\n chainId: number;\n explicitNonce: number | bigint | undefined;\n }\n): Effect.Effect<NonceReservationResult, ClientNotFoundError | TransportError, Scope.Scope> =>\n Effect.gen(function* () {\n const nonceSubmittedRef = yield* Ref.make(false);\n\n const reservation = yield* Effect.acquireRelease(\n Effect.gen(function* () {\n if (params.explicitNonce !== undefined) {\n return { nonce: params.explicitNonce, reserved: false } as const;\n }\n\n const reservedNonce = yield* nonceService.reserve({\n address: params.account,\n chainId: params.chainId,\n });\n\n return { nonce: reservedNonce, reserved: true } as const;\n }),\n ({ nonce, reserved }) =>\n Effect.gen(function* () {\n if (!reserved) {\n return;\n }\n const submitted = yield* Ref.get(nonceSubmittedRef);\n if (submitted) {\n return;\n }\n\n yield* nonceService.release({\n address: params.account,\n chainId: params.chainId,\n nonce: nonceToBigInt(nonce),\n });\n })\n );\n\n return {\n markSubmitted: Ref.set(nonceSubmittedRef, true),\n nonce: reservation.nonce,\n reserved: reservation.reserved,\n };\n });\n\n/**\n * Confirm a nonce after successful transaction\n */\nexport const confirmNonce = (\n nonceService: NonceServiceShape,\n params: {\n account: Address;\n chainId: number;\n nonce: number | bigint;\n reserved: boolean;\n }\n): Effect.Effect<void> =>\n Effect.gen(function* () {\n if (!params.reserved) {\n return;\n }\n\n yield* nonceService.confirm({\n address: params.account,\n chainId: params.chainId,\n nonce: nonceToBigInt(params.nonce),\n });\n });\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAYhC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAOvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAA2B,EAC3B,MAIC,EACoF,EAAE,CACvF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACnD;QACE,YAAY,CAAC;YACX,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtD,kBAAkB,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KACvD,EACD,EAAE,WAAW,EAAE,CAAC,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,GAAG,MAAM,CAAC,aAAa;QACvB,GAAG,YAAY;QACf,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,IAAI,WAAW;KAC/B,CAAC;AACrB,CAAC,CAAC,CAAC;AASL,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAIjC,MAA2B,EAC3B,MAAwC,EACxC,aAA4B,EAC5B,MAAgB,EAShB,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAElB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7C,GAAG,MAAM;QACT,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC;IAGH,MAAM,UAAU,GAAG,uBAAuB,CAAC,YAAY,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAGpF,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC;IACxD,MAAM,QAAQ,GAAG,WAAW,IAAI,UAAU,CAAC;IAG3C,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEtF,OAAO;QACL,QAAQ;QACR,gBAAgB,EAAE;YAChB,GAAG,aAAa;YAChB,GAAG,EAAE,QAAQ;SACd;KACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAYhC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAOvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAA2B,EAC3B,MAIC,EACoF,EAAE,CACvF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACnD;QACE,YAAY,CAAC;YACX,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtD,kBAAkB,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KACvD,EACD,EAAE,WAAW,EAAE,CAAC,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,GAAG,MAAM,CAAC,aAAa;QACvB,GAAG,YAAY;QACf,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,IAAI,WAAW;KAC/B,CAAC;AACrB,CAAC,CAAC,CAAC;AASL,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAIjC,MAA2B,EAC3B,MAAwC,EACxC,aAA4B,EAC5B,MAAgB,EAShB,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAElB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7C,GAAG,MAAM;QACT,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC;IAGH,MAAM,UAAU,GAAG,uBAAuB,CAAC,YAAY,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAGpF,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC;IACxD,MAAM,QAAQ,GAAG,WAAW,IAAI,UAAU,CAAC;IAG3C,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEtF,OAAO;QACL,QAAQ;QACR,gBAAgB,EAAE;YAChB,GAAG,aAAa;YAChB,GAAG,EAAE,QAAQ;SACd;KACF,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { Effect } from \"effect\";\nimport type { Abi } from \"viem\";\nimport type { ContractWriterShape } from \"@/src/contract/index.js\";\nimport type {\n ClientNotFoundError,\n ContractReadError,\n GasEstimationError,\n InsufficientFundsError,\n SimulationFailedError,\n UserRejectedError,\n} from \"@/src/core/index.js\";\nimport type { GasPriceUnavailableError, GasServiceShape } from \"@/src/gas/index.js\";\nimport { GasService } from \"@/src/gas/index.js\";\nimport type { TxPolicy } from \"@/src/tx/index.js\";\nimport { deriveFeeOverrides, deriveTxType } from \"@/src/tx/index.js\";\nimport type {\n ContractFunctionName,\n FeeOverrides,\n TxOverrides,\n WriteParams,\n} from \"@/src/types/index.js\";\nimport { applyGasLimitMultiplier } from \"./helpers.js\";\n\nexport type BaseOverrides = TxOverrides & FeeOverrides;\n\n/**\n * Derive transaction type and fee overrides in parallel\n */\nexport const deriveBaseOverrides = (\n gasService: GasServiceShape,\n params: {\n chainId: number;\n policy: TxPolicy;\n userOverrides?: TxOverrides;\n }\n): Effect.Effect<BaseOverrides, GasPriceUnavailableError | ClientNotFoundError, never> =>\n Effect.gen(function* () {\n const [derivedType, feeOverrides] = yield* Effect.all(\n [\n deriveTxType({\n chainId: params.chainId,\n policy: params.policy,\n userOverrides: params.userOverrides,\n }).pipe(Effect.provideService(GasService, gasService)),\n\n deriveFeeOverrides({\n chainId: params.chainId,\n policy: params.policy,\n userOverrides: params.userOverrides,\n }).pipe(Effect.provideService(GasService, gasService)),\n ],\n { concurrency: 2 }\n );\n\n return {\n ...params.userOverrides,\n ...feeOverrides,\n type: params.userOverrides?.type ?? derivedType,\n } as BaseOverrides;\n });\n\n/**\n * Estimate gas and simulate transaction.\n *\n * Gas estimation is done BEFORE simulation to provide a reasonable gas limit.\n * Some RPC nodes default to max uint64 when no gas limit is provided, which\n * causes \"insufficient funds\" errors during the balance check.\n */\nexport const simulateAndEstimate = <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"nonpayable\" | \"payable\">,\n>(\n writer: ContractWriterShape,\n params: WriteParams<TAbi, TFunctionName>,\n baseOverrides: BaseOverrides,\n policy: TxPolicy\n): Effect.Effect<\n { finalGas: bigint; overridesWithGas: BaseOverrides & { gas: bigint } },\n | SimulationFailedError\n | ContractReadError\n | GasEstimationError\n | ClientNotFoundError\n | InsufficientFundsError\n | UserRejectedError\n> =>\n Effect.gen(function* () {\n // Estimate gas first to get a reasonable limit for simulation\n const estimatedGas = yield* writer.estimateGas({\n ...params,\n overrides: baseOverrides,\n });\n // Apply multiplier to add safety margin; this buffered value is used for\n // both simulation (balance check) and the final transaction.\n const derivedGas = applyGasLimitMultiplier(estimatedGas, policy.gasLimitMultiplier);\n\n // Use explicit gas if provided, otherwise use derived\n const explicitGas = params.overrides?.gas ?? params.gas;\n const finalGas = explicitGas ?? derivedGas;\n\n // Simulate with the gas limit to ensure proper balance checks\n yield* writer.simulate({ ...params, overrides: { ...baseOverrides, gas: finalGas } });\n\n return {\n finalGas,\n overridesWithGas: {\n ...baseOverrides,\n gas: finalGas,\n },\n };\n });\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
2
|
import type { Hash, TransactionReceipt } from "viem";
|
|
3
|
-
import type { ClientNotFoundError, ReceiptTimeoutError,
|
|
3
|
+
import type { ClientNotFoundError, ReceiptTimeoutError, TxFailedError } from "../../../core/index.js";
|
|
4
4
|
import type { TxManagerShape, TxPolicy } from "../../../tx/index.js";
|
|
5
5
|
export type OnReplacedCallback = (oldHash: Hash, newHash: Hash, reason: string) => Effect.Effect<void>;
|
|
6
6
|
export declare const waitForReceiptFollowingReplacements: (txManager: TxManagerShape, params: {
|
|
@@ -8,5 +8,5 @@ export declare const waitForReceiptFollowingReplacements: (txManager: TxManagerS
|
|
|
8
8
|
hash: Hash;
|
|
9
9
|
policy: TxPolicy;
|
|
10
10
|
onReplaced?: OnReplacedCallback;
|
|
11
|
-
}) => Effect.Effect<TransactionReceipt,
|
|
11
|
+
}) => Effect.Effect<TransactionReceipt, TxFailedError | ReceiptTimeoutError | ClientNotFoundError>;
|
|
12
12
|
//# sourceMappingURL=receipt.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACrD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAMzB,eAAO,MAAM,mCAAmC,GAC9C,WAAW,cAAc,EACzB,QAAQ;IACN,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,QAAQ,CAAC;IACjB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC,KACA,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,aAAa,GAAG,mBAAmB,GAAG,mBAAmB,CA4B1F,CAAC"}
|
|
@@ -9,7 +9,7 @@ export const waitForReceiptFollowingReplacements = (txManager, params) => Effect
|
|
|
9
9
|
return exit.right;
|
|
10
10
|
}
|
|
11
11
|
const error = exit.left;
|
|
12
|
-
if (error._tag === "
|
|
12
|
+
if (error._tag === "TxReplacedError") {
|
|
13
13
|
const oldHash = error.oldHash;
|
|
14
14
|
const newHash = error.newHash;
|
|
15
15
|
if (params.onReplaced) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAehC,MAAM,CAAC,MAAM,mCAAmC,GAAG,CACjD,SAAyB,EACzB,MAKC,EAC6F,EAAE,CAChG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAE3B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,SAAS;aAC1B,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;aACvD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAe,CAAC;YACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAe,CAAC;YAEtC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3D,CAAC;YAED,QAAQ,GAAG,OAAO,CAAC;YACnB,SAAS;QACX,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC","sourcesContent":["import { Effect } from \"effect\";\nimport type { Hash, TransactionReceipt } from \"viem\";\nimport type { ClientNotFoundError, ReceiptTimeoutError, TxFailedError } from \"@/src/core/index.js\";\nimport type { TxManagerShape, TxPolicy } from \"@/src/tx/index.js\";\n\nexport type OnReplacedCallback = (\n oldHash: Hash,\n newHash: Hash,\n reason: string\n) => Effect.Effect<void>;\n\n/**\n * Wait for receipt, following any transaction replacements.\n * The onReplaced callback is invoked each time a replacement is detected.\n */\nexport const waitForReceiptFollowingReplacements = (\n txManager: TxManagerShape,\n params: {\n chainId: number;\n hash: Hash;\n policy: TxPolicy;\n onReplaced?: OnReplacedCallback;\n }\n): Effect.Effect<TransactionReceipt, TxFailedError | ReceiptTimeoutError | ClientNotFoundError> =>\n Effect.gen(function* () {\n let waitHash = params.hash;\n\n while (true) {\n const exit = yield* txManager\n .waitForReceipt(params.chainId, waitHash, params.policy)\n .pipe(Effect.either);\n\n if (exit._tag === \"Right\") {\n return exit.right;\n }\n\n const error = exit.left;\n if (error._tag === \"TxReplacedError\") {\n const oldHash = error.oldHash as Hash;\n const newHash = error.newHash as Hash;\n\n if (params.onReplaced) {\n yield* params.onReplaced(oldHash, newHash, error.reason);\n }\n\n waitHash = newHash;\n continue;\n }\n\n return yield* Effect.fail(error);\n }\n });\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../../src/contract/pipeline/live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAC9C,gBAAgB,EAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC;IACzC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;IAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IAErC,MAAM,iBAAiB,GAAG;QACxB,WAAW;QACX,UAAU;QACV,YAAY;QACZ,mBAAmB;QACnB,SAAS;QACT,aAAa;QACb,MAAM;KACP,CAAC;IAEF,MAAM,gBAAgB,GAAG;QACvB,WAAW;QACX,UAAU;QACV,YAAY;QACZ,SAAS;QACT,MAAM;KACP,CAAC;IAEF,OAAO,gBAAgB,CAAC,EAAE,CAAC;QACzB,aAAa,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;QACnD,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;KACjD,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"live.js","sourceRoot":"","sources":["../../../src/contract/pipeline/live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAC9C,gBAAgB,EAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC;IACzC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;IAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IAErC,MAAM,iBAAiB,GAAG;QACxB,WAAW;QACX,UAAU;QACV,YAAY;QACZ,mBAAmB;QACnB,SAAS;QACT,aAAa;QACb,MAAM;KACP,CAAC;IAEF,MAAM,gBAAgB,GAAG;QACvB,WAAW;QACX,UAAU;QACV,YAAY;QACZ,SAAS;QACT,MAAM;KACP,CAAC;IAEF,OAAO,gBAAgB,CAAC,EAAE,CAAC;QACzB,aAAa,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;QACnD,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;KACjD,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC","sourcesContent":["import { Effect, Layer } from \"effect\";\nimport { ContractWriter } from \"@/src/contract/index.js\";\nimport { PublicClientService } from \"@/src/core/index.js\";\nimport { EventStream } from \"@/src/events/index.js\";\nimport { GasService } from \"@/src/gas/index.js\";\nimport { NonceService } from \"@/src/nonce/index.js\";\nimport { TxManager, TxReplacement } from \"@/src/tx/index.js\";\nimport { ContractPipeline } from \"./service.js\";\nimport { makeWriteAndTrack } from \"./write-and-track.js\";\nimport { makeWriteAndWait } from \"./write-and-wait.js\";\n\nexport const ContractPipelineLive = Layer.effect(\n ContractPipeline,\n Effect.gen(function* () {\n const writer = yield* ContractWriter;\n const txManager = yield* TxManager;\n const eventStream = yield* EventStream;\n const nonceService = yield* NonceService;\n const txReplacement = yield* TxReplacement;\n const publicClientService = yield* PublicClientService;\n const gasService = yield* GasService;\n\n const writeAndTrackDeps = {\n eventStream,\n gasService,\n nonceService,\n publicClientService,\n txManager,\n txReplacement,\n writer,\n };\n\n const writeAndWaitDeps = {\n eventStream,\n gasService,\n nonceService,\n txManager,\n writer,\n };\n\n return ContractPipeline.of({\n writeAndTrack: makeWriteAndTrack(writeAndTrackDeps),\n writeAndWait: makeWriteAndWait(writeAndWaitDeps),\n });\n })\n);\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Effect, Scope, SubscriptionRef } from "effect";
|
|
2
2
|
import { Context } from "effect";
|
|
3
3
|
import type { Abi, Hash } from "viem";
|
|
4
|
-
import type { ClientNotFoundError,
|
|
4
|
+
import type { ClientNotFoundError, TxFailedError, WalletNotConnectedError } from "../../core/index.js";
|
|
5
5
|
import type { GasPriceUnavailableError } from "../../gas/index.js";
|
|
6
6
|
import type { TxPolicy, TxState } from "../../tx/index.js";
|
|
7
7
|
import type { ContractFunctionName } from "../../types/index.js";
|
|
@@ -10,8 +10,8 @@ export type ContractPipelineShape = {
|
|
|
10
10
|
readonly writeAndTrack: <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, "nonpayable" | "payable">>(params: WriteAndTrackParams<TAbi, TFunctionName>) => Effect.Effect<{
|
|
11
11
|
stateRef: SubscriptionRef.SubscriptionRef<TxState>;
|
|
12
12
|
actions: {
|
|
13
|
-
readonly speedup: (policy?: TxPolicy) => Effect.Effect<Hash,
|
|
14
|
-
readonly cancel: (policy?: TxPolicy) => Effect.Effect<Hash,
|
|
13
|
+
readonly speedup: (policy?: TxPolicy) => Effect.Effect<Hash, TxFailedError | WalletNotConnectedError | ClientNotFoundError | GasPriceUnavailableError | Error>;
|
|
14
|
+
readonly cancel: (policy?: TxPolicy) => Effect.Effect<Hash, TxFailedError | WalletNotConnectedError | ClientNotFoundError | GasPriceUnavailableError | Error>;
|
|
15
15
|
};
|
|
16
16
|
result: Effect.Effect<WriteAndTrackResult<TAbi>, WriteAndTrackError>;
|
|
17
17
|
}, never, Scope.Scope>;
|