@terkoizmy/intent-sdk 1.0.0
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/LICENSE +21 -0
- package/README.md +258 -0
- package/dist/config/chains.d.ts +25 -0
- package/dist/config/chains.d.ts.map +1 -0
- package/dist/config/chains.js +85 -0
- package/dist/config/chains.js.map +1 -0
- package/dist/config/default.d.ts +39 -0
- package/dist/config/default.d.ts.map +1 -0
- package/dist/config/default.js +46 -0
- package/dist/config/default.js.map +1 -0
- package/dist/config/testnets.d.ts +31 -0
- package/dist/config/testnets.d.ts.map +1 -0
- package/dist/config/testnets.js +99 -0
- package/dist/config/testnets.js.map +1 -0
- package/dist/errors/inventory-errors.d.ts +31 -0
- package/dist/errors/inventory-errors.d.ts.map +1 -0
- package/dist/errors/inventory-errors.js +45 -0
- package/dist/errors/inventory-errors.js.map +1 -0
- package/dist/errors/settlement-errors.d.ts +27 -0
- package/dist/errors/settlement-errors.d.ts.map +1 -0
- package/dist/errors/settlement-errors.js +39 -0
- package/dist/errors/settlement-errors.js.map +1 -0
- package/dist/errors/solver-errors.d.ts +45 -0
- package/dist/errors/solver-errors.d.ts.map +1 -0
- package/dist/errors/solver-errors.js +66 -0
- package/dist/errors/solver-errors.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/classifiers/intent-classifier.d.ts +40 -0
- package/dist/parser/classifiers/intent-classifier.d.ts.map +1 -0
- package/dist/parser/classifiers/intent-classifier.js +72 -0
- package/dist/parser/classifiers/intent-classifier.js.map +1 -0
- package/dist/parser/extractors/action.d.ts +32 -0
- package/dist/parser/extractors/action.d.ts.map +1 -0
- package/dist/parser/extractors/action.js +72 -0
- package/dist/parser/extractors/action.js.map +1 -0
- package/dist/parser/extractors/amount.d.ts +39 -0
- package/dist/parser/extractors/amount.d.ts.map +1 -0
- package/dist/parser/extractors/amount.js +113 -0
- package/dist/parser/extractors/amount.js.map +1 -0
- package/dist/parser/extractors/constraints.d.ts +37 -0
- package/dist/parser/extractors/constraints.d.ts.map +1 -0
- package/dist/parser/extractors/constraints.js +119 -0
- package/dist/parser/extractors/constraints.js.map +1 -0
- package/dist/parser/extractors/index.d.ts +5 -0
- package/dist/parser/extractors/index.d.ts.map +1 -0
- package/dist/parser/extractors/index.js +5 -0
- package/dist/parser/extractors/index.js.map +1 -0
- package/dist/parser/extractors/token.d.ts +24 -0
- package/dist/parser/extractors/token.d.ts.map +1 -0
- package/dist/parser/extractors/token.js +124 -0
- package/dist/parser/extractors/token.js.map +1 -0
- package/dist/parser/index.d.ts +125 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +293 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/template/bridge.d.ts +37 -0
- package/dist/parser/template/bridge.d.ts.map +1 -0
- package/dist/parser/template/bridge.js +80 -0
- package/dist/parser/template/bridge.js.map +1 -0
- package/dist/parser/template/claim.d.ts +15 -0
- package/dist/parser/template/claim.d.ts.map +1 -0
- package/dist/parser/template/claim.js +36 -0
- package/dist/parser/template/claim.js.map +1 -0
- package/dist/parser/template/index.d.ts +28 -0
- package/dist/parser/template/index.d.ts.map +1 -0
- package/dist/parser/template/index.js +50 -0
- package/dist/parser/template/index.js.map +1 -0
- package/dist/parser/template/nft.d.ts +3 -0
- package/dist/parser/template/nft.d.ts.map +1 -0
- package/dist/parser/template/nft.js +19 -0
- package/dist/parser/template/nft.js.map +1 -0
- package/dist/parser/template/send.d.ts +24 -0
- package/dist/parser/template/send.d.ts.map +1 -0
- package/dist/parser/template/send.js +61 -0
- package/dist/parser/template/send.js.map +1 -0
- package/dist/parser/template/swap.d.ts +3 -0
- package/dist/parser/template/swap.d.ts.map +1 -0
- package/dist/parser/template/swap.js +21 -0
- package/dist/parser/template/swap.js.map +1 -0
- package/dist/parser/template/unknown.d.ts +3 -0
- package/dist/parser/template/unknown.d.ts.map +1 -0
- package/dist/parser/template/unknown.js +11 -0
- package/dist/parser/template/unknown.js.map +1 -0
- package/dist/parser/template/yield.d.ts +3 -0
- package/dist/parser/template/yield.d.ts.map +1 -0
- package/dist/parser/template/yield.js +25 -0
- package/dist/parser/template/yield.js.map +1 -0
- package/dist/parser/utils/normalize.d.ts +41 -0
- package/dist/parser/utils/normalize.d.ts.map +1 -0
- package/dist/parser/utils/normalize.js +71 -0
- package/dist/parser/utils/normalize.js.map +1 -0
- package/dist/parser/utils/parser-helpers.d.ts +20 -0
- package/dist/parser/utils/parser-helpers.d.ts.map +1 -0
- package/dist/parser/utils/parser-helpers.js +282 -0
- package/dist/parser/utils/parser-helpers.js.map +1 -0
- package/dist/parser/validators/schema.d.ts +14 -0
- package/dist/parser/validators/schema.d.ts.map +1 -0
- package/dist/parser/validators/schema.js +81 -0
- package/dist/parser/validators/schema.js.map +1 -0
- package/dist/sdk-factory.d.ts +55 -0
- package/dist/sdk-factory.d.ts.map +1 -0
- package/dist/sdk-factory.js +49 -0
- package/dist/sdk-factory.js.map +1 -0
- package/dist/services/token-resolver.d.ts +142 -0
- package/dist/services/token-resolver.d.ts.map +1 -0
- package/dist/services/token-resolver.js +254 -0
- package/dist/services/token-resolver.js.map +1 -0
- package/dist/shared/chain-registry/chain-names.d.ts +22 -0
- package/dist/shared/chain-registry/chain-names.d.ts.map +1 -0
- package/dist/shared/chain-registry/chain-names.js +49 -0
- package/dist/shared/chain-registry/chain-names.js.map +1 -0
- package/dist/shared/chain-registry/configs/arbitrum-sepolia.d.ts +9 -0
- package/dist/shared/chain-registry/configs/arbitrum-sepolia.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/arbitrum-sepolia.js +9 -0
- package/dist/shared/chain-registry/configs/arbitrum-sepolia.js.map +1 -0
- package/dist/shared/chain-registry/configs/base-sepolia.d.ts +9 -0
- package/dist/shared/chain-registry/configs/base-sepolia.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/base-sepolia.js +9 -0
- package/dist/shared/chain-registry/configs/base-sepolia.js.map +1 -0
- package/dist/shared/chain-registry/configs/ethereum.d.ts +7 -0
- package/dist/shared/chain-registry/configs/ethereum.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/ethereum.js +7 -0
- package/dist/shared/chain-registry/configs/ethereum.js.map +1 -0
- package/dist/shared/chain-registry/configs/polygon.d.ts +7 -0
- package/dist/shared/chain-registry/configs/polygon.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/polygon.js +7 -0
- package/dist/shared/chain-registry/configs/polygon.js.map +1 -0
- package/dist/shared/chain-registry/configs/sepolia.d.ts +9 -0
- package/dist/shared/chain-registry/configs/sepolia.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/sepolia.js +9 -0
- package/dist/shared/chain-registry/configs/sepolia.js.map +1 -0
- package/dist/shared/chain-registry/configs/unichain-sepolia.d.ts +9 -0
- package/dist/shared/chain-registry/configs/unichain-sepolia.d.ts.map +1 -0
- package/dist/shared/chain-registry/configs/unichain-sepolia.js +9 -0
- package/dist/shared/chain-registry/configs/unichain-sepolia.js.map +1 -0
- package/dist/shared/chain-registry/registry.d.ts +50 -0
- package/dist/shared/chain-registry/registry.d.ts.map +1 -0
- package/dist/shared/chain-registry/registry.js +72 -0
- package/dist/shared/chain-registry/registry.js.map +1 -0
- package/dist/shared/rpc/provider-manager.d.ts +111 -0
- package/dist/shared/rpc/provider-manager.d.ts.map +1 -0
- package/dist/shared/rpc/provider-manager.js +116 -0
- package/dist/shared/rpc/provider-manager.js.map +1 -0
- package/dist/shared/rpc/viem-provider.d.ts +78 -0
- package/dist/shared/rpc/viem-provider.d.ts.map +1 -0
- package/dist/shared/rpc/viem-provider.js +187 -0
- package/dist/shared/rpc/viem-provider.js.map +1 -0
- package/dist/shared/token-registry/enrichment.d.ts +48 -0
- package/dist/shared/token-registry/enrichment.d.ts.map +1 -0
- package/dist/shared/token-registry/enrichment.js +69 -0
- package/dist/shared/token-registry/enrichment.js.map +1 -0
- package/dist/shared/token-registry/registry.d.ts +119 -0
- package/dist/shared/token-registry/registry.d.ts.map +1 -0
- package/dist/shared/token-registry/registry.js +200 -0
- package/dist/shared/token-registry/registry.js.map +1 -0
- package/dist/shared/utils/erc20-utils.d.ts +24 -0
- package/dist/shared/utils/erc20-utils.d.ts.map +1 -0
- package/dist/shared/utils/erc20-utils.js +31 -0
- package/dist/shared/utils/erc20-utils.js.map +1 -0
- package/dist/shared/utils/retry.d.ts +57 -0
- package/dist/shared/utils/retry.d.ts.map +1 -0
- package/dist/shared/utils/retry.js +104 -0
- package/dist/shared/utils/retry.js.map +1 -0
- package/dist/shared/wallet-manager/viem-signer.d.ts +68 -0
- package/dist/shared/wallet-manager/viem-signer.d.ts.map +1 -0
- package/dist/shared/wallet-manager/viem-signer.js +116 -0
- package/dist/shared/wallet-manager/viem-signer.js.map +1 -0
- package/dist/shared/wallet-manager/wallet-manager.d.ts +96 -0
- package/dist/shared/wallet-manager/wallet-manager.d.ts.map +1 -0
- package/dist/shared/wallet-manager/wallet-manager.js +104 -0
- package/dist/shared/wallet-manager/wallet-manager.js.map +1 -0
- package/dist/solver/agent/agent-config.d.ts +62 -0
- package/dist/solver/agent/agent-config.d.ts.map +1 -0
- package/dist/solver/agent/agent-config.js +59 -0
- package/dist/solver/agent/agent-config.js.map +1 -0
- package/dist/solver/agent/index.d.ts +6 -0
- package/dist/solver/agent/index.d.ts.map +1 -0
- package/dist/solver/agent/index.js +6 -0
- package/dist/solver/agent/index.js.map +1 -0
- package/dist/solver/agent/liquidity-agent.d.ts +118 -0
- package/dist/solver/agent/liquidity-agent.d.ts.map +1 -0
- package/dist/solver/agent/liquidity-agent.js +285 -0
- package/dist/solver/agent/liquidity-agent.js.map +1 -0
- package/dist/solver/contracts/intent-settlement/index.d.ts +2 -0
- package/dist/solver/contracts/intent-settlement/index.d.ts.map +1 -0
- package/dist/solver/contracts/intent-settlement/index.js +2 -0
- package/dist/solver/contracts/intent-settlement/index.js.map +1 -0
- package/dist/solver/contracts/intent-settlement/intent-settlement.d.ts +22 -0
- package/dist/solver/contracts/intent-settlement/intent-settlement.d.ts.map +1 -0
- package/dist/solver/contracts/intent-settlement/intent-settlement.js +58 -0
- package/dist/solver/contracts/intent-settlement/intent-settlement.js.map +1 -0
- package/dist/solver/contracts/intent-settlement/viem-settlement-contract.d.ts +226 -0
- package/dist/solver/contracts/intent-settlement/viem-settlement-contract.d.ts.map +1 -0
- package/dist/solver/contracts/intent-settlement/viem-settlement-contract.js +204 -0
- package/dist/solver/contracts/intent-settlement/viem-settlement-contract.js.map +1 -0
- package/dist/solver/index.d.ts +87 -0
- package/dist/solver/index.d.ts.map +1 -0
- package/dist/solver/index.js +167 -0
- package/dist/solver/index.js.map +1 -0
- package/dist/solver/inventory/index.d.ts +7 -0
- package/dist/solver/inventory/index.d.ts.map +1 -0
- package/dist/solver/inventory/index.js +7 -0
- package/dist/solver/inventory/index.js.map +1 -0
- package/dist/solver/inventory/inventory-manager.d.ts +135 -0
- package/dist/solver/inventory/inventory-manager.d.ts.map +1 -0
- package/dist/solver/inventory/inventory-manager.js +323 -0
- package/dist/solver/inventory/inventory-manager.js.map +1 -0
- package/dist/solver/inventory/inventory-monitor.d.ts +72 -0
- package/dist/solver/inventory/inventory-monitor.d.ts.map +1 -0
- package/dist/solver/inventory/inventory-monitor.js +123 -0
- package/dist/solver/inventory/inventory-monitor.js.map +1 -0
- package/dist/solver/inventory/rebalancer.d.ts +78 -0
- package/dist/solver/inventory/rebalancer.d.ts.map +1 -0
- package/dist/solver/inventory/rebalancer.js +210 -0
- package/dist/solver/inventory/rebalancer.js.map +1 -0
- package/dist/solver/mempool/index.d.ts +8 -0
- package/dist/solver/mempool/index.d.ts.map +1 -0
- package/dist/solver/mempool/index.js +8 -0
- package/dist/solver/mempool/index.js.map +1 -0
- package/dist/solver/mempool/intent-filter.d.ts +49 -0
- package/dist/solver/mempool/intent-filter.d.ts.map +1 -0
- package/dist/solver/mempool/intent-filter.js +75 -0
- package/dist/solver/mempool/intent-filter.js.map +1 -0
- package/dist/solver/mempool/mempool-client.d.ts +105 -0
- package/dist/solver/mempool/mempool-client.d.ts.map +1 -0
- package/dist/solver/mempool/mempool-client.js +161 -0
- package/dist/solver/mempool/mempool-client.js.map +1 -0
- package/dist/solver/mempool/mempool-monitor.d.ts +71 -0
- package/dist/solver/mempool/mempool-monitor.d.ts.map +1 -0
- package/dist/solver/mempool/mempool-monitor.js +127 -0
- package/dist/solver/mempool/mempool-monitor.js.map +1 -0
- package/dist/solver/mempool/solution-submitter.d.ts +41 -0
- package/dist/solver/mempool/solution-submitter.d.ts.map +1 -0
- package/dist/solver/mempool/solution-submitter.js +71 -0
- package/dist/solver/mempool/solution-submitter.js.map +1 -0
- package/dist/solver/monitoring/alert-manager.d.ts +43 -0
- package/dist/solver/monitoring/alert-manager.d.ts.map +1 -0
- package/dist/solver/monitoring/alert-manager.js +69 -0
- package/dist/solver/monitoring/alert-manager.js.map +1 -0
- package/dist/solver/monitoring/health-checker.d.ts +53 -0
- package/dist/solver/monitoring/health-checker.d.ts.map +1 -0
- package/dist/solver/monitoring/health-checker.js +94 -0
- package/dist/solver/monitoring/health-checker.js.map +1 -0
- package/dist/solver/monitoring/index.d.ts +7 -0
- package/dist/solver/monitoring/index.d.ts.map +1 -0
- package/dist/solver/monitoring/index.js +7 -0
- package/dist/solver/monitoring/index.js.map +1 -0
- package/dist/solver/monitoring/profit-tracker.d.ts +47 -0
- package/dist/solver/monitoring/profit-tracker.d.ts.map +1 -0
- package/dist/solver/monitoring/profit-tracker.js +112 -0
- package/dist/solver/monitoring/profit-tracker.js.map +1 -0
- package/dist/solver/pricing/dynamic-pricing.d.ts +86 -0
- package/dist/solver/pricing/dynamic-pricing.d.ts.map +1 -0
- package/dist/solver/pricing/dynamic-pricing.js +189 -0
- package/dist/solver/pricing/dynamic-pricing.js.map +1 -0
- package/dist/solver/pricing/fee-calculator.d.ts +101 -0
- package/dist/solver/pricing/fee-calculator.d.ts.map +1 -0
- package/dist/solver/pricing/fee-calculator.js +149 -0
- package/dist/solver/pricing/fee-calculator.js.map +1 -0
- package/dist/solver/pricing/index.d.ts +7 -0
- package/dist/solver/pricing/index.d.ts.map +1 -0
- package/dist/solver/pricing/index.js +7 -0
- package/dist/solver/pricing/index.js.map +1 -0
- package/dist/solver/pricing/slippage-capture.d.ts +47 -0
- package/dist/solver/pricing/slippage-capture.d.ts.map +1 -0
- package/dist/solver/pricing/slippage-capture.js +63 -0
- package/dist/solver/pricing/slippage-capture.js.map +1 -0
- package/dist/solver/protocols/aggregators/lifi.d.ts +109 -0
- package/dist/solver/protocols/aggregators/lifi.d.ts.map +1 -0
- package/dist/solver/protocols/aggregators/lifi.js +110 -0
- package/dist/solver/protocols/aggregators/lifi.js.map +1 -0
- package/dist/solver/protocols/aggregators/swing.d.ts +67 -0
- package/dist/solver/protocols/aggregators/swing.d.ts.map +1 -0
- package/dist/solver/protocols/aggregators/swing.js +212 -0
- package/dist/solver/protocols/aggregators/swing.js.map +1 -0
- package/dist/solver/protocols/base-protocol.d.ts +42 -0
- package/dist/solver/protocols/base-protocol.d.ts.map +1 -0
- package/dist/solver/protocols/base-protocol.js +16 -0
- package/dist/solver/protocols/base-protocol.js.map +1 -0
- package/dist/solver/protocols/index.d.ts +10 -0
- package/dist/solver/protocols/index.d.ts.map +1 -0
- package/dist/solver/protocols/index.js +10 -0
- package/dist/solver/protocols/index.js.map +1 -0
- package/dist/solver/protocols/lending/aave.d.ts +51 -0
- package/dist/solver/protocols/lending/aave.d.ts.map +1 -0
- package/dist/solver/protocols/lending/aave.js +172 -0
- package/dist/solver/protocols/lending/aave.js.map +1 -0
- package/dist/solver/protocols/protocol-registry.d.ts +28 -0
- package/dist/solver/protocols/protocol-registry.d.ts.map +1 -0
- package/dist/solver/protocols/protocol-registry.js +40 -0
- package/dist/solver/protocols/protocol-registry.js.map +1 -0
- package/dist/solver/settlement/index.d.ts +7 -0
- package/dist/solver/settlement/index.d.ts.map +1 -0
- package/dist/solver/settlement/index.js +7 -0
- package/dist/solver/settlement/index.js.map +1 -0
- package/dist/solver/settlement/live-settlement-manager.d.ts +62 -0
- package/dist/solver/settlement/live-settlement-manager.d.ts.map +1 -0
- package/dist/solver/settlement/live-settlement-manager.js +68 -0
- package/dist/solver/settlement/live-settlement-manager.js.map +1 -0
- package/dist/solver/settlement/proof-generator.d.ts +48 -0
- package/dist/solver/settlement/proof-generator.d.ts.map +1 -0
- package/dist/solver/settlement/proof-generator.js +100 -0
- package/dist/solver/settlement/proof-generator.js.map +1 -0
- package/dist/solver/settlement/proof-verifier.d.ts +31 -0
- package/dist/solver/settlement/proof-verifier.d.ts.map +1 -0
- package/dist/solver/settlement/proof-verifier.js +46 -0
- package/dist/solver/settlement/proof-verifier.js.map +1 -0
- package/dist/solver/settlement/settlement-manager.d.ts +97 -0
- package/dist/solver/settlement/settlement-manager.d.ts.map +1 -0
- package/dist/solver/settlement/settlement-manager.js +220 -0
- package/dist/solver/settlement/settlement-manager.js.map +1 -0
- package/dist/solver/types/agent.d.ts +92 -0
- package/dist/solver/types/agent.d.ts.map +1 -0
- package/dist/solver/types/agent.js +8 -0
- package/dist/solver/types/agent.js.map +1 -0
- package/dist/solver/types/execution.d.ts +70 -0
- package/dist/solver/types/execution.d.ts.map +1 -0
- package/dist/solver/types/execution.js +7 -0
- package/dist/solver/types/execution.js.map +1 -0
- package/dist/solver/types/index.d.ts +13 -0
- package/dist/solver/types/index.d.ts.map +1 -0
- package/dist/solver/types/index.js +13 -0
- package/dist/solver/types/index.js.map +1 -0
- package/dist/solver/types/intent.d.ts +82 -0
- package/dist/solver/types/intent.d.ts.map +1 -0
- package/dist/solver/types/intent.js +33 -0
- package/dist/solver/types/intent.js.map +1 -0
- package/dist/solver/types/inventory.d.ts +83 -0
- package/dist/solver/types/inventory.d.ts.map +1 -0
- package/dist/solver/types/inventory.js +8 -0
- package/dist/solver/types/inventory.js.map +1 -0
- package/dist/solver/types/pricing.d.ts +59 -0
- package/dist/solver/types/pricing.d.ts.map +1 -0
- package/dist/solver/types/pricing.js +8 -0
- package/dist/solver/types/pricing.js.map +1 -0
- package/dist/solver/types/settlement.d.ts +98 -0
- package/dist/solver/types/settlement.d.ts.map +1 -0
- package/dist/solver/types/settlement.js +9 -0
- package/dist/solver/types/settlement.js.map +1 -0
- package/dist/types/chain.d.ts +66 -0
- package/dist/types/chain.d.ts.map +1 -0
- package/dist/types/chain.js +7 -0
- package/dist/types/chain.js.map +1 -0
- package/dist/types/common.d.ts +44 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +8 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/entities.d.ts +61 -0
- package/dist/types/entities.d.ts.map +1 -0
- package/dist/types/entities.js +2 -0
- package/dist/types/entities.js.map +1 -0
- package/dist/types/index.d.ts +44 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/intent.d.ts +70 -0
- package/dist/types/intent.d.ts.map +1 -0
- package/dist/types/intent.js +2 -0
- package/dist/types/intent.js.map +1 -0
- package/dist/types/templates.d.ts +18 -0
- package/dist/types/templates.d.ts.map +1 -0
- package/dist/types/templates.js +2 -0
- package/dist/types/templates.js.map +1 -0
- package/dist/types/token.d.ts +132 -0
- package/dist/types/token.d.ts.map +1 -0
- package/dist/types/token.js +8 -0
- package/dist/types/token.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solver/settlement/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/solver/settlement/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Viem-based Live Settlement Manager
|
|
3
|
+
*
|
|
4
|
+
* Phase E: Contract Deployment & Live Settlement
|
|
5
|
+
*
|
|
6
|
+
* This manager replaces the ethers.js-based SettlementManager for
|
|
7
|
+
* live, on-chain settlement flows. It uses the ViemSettlementContract
|
|
8
|
+
* to call claim() on the deployed IntentSettlement.sol.
|
|
9
|
+
*
|
|
10
|
+
* The lifecycle is:
|
|
11
|
+
* 1. Solver sends tokens on target chain → gets txHash (Phase C)
|
|
12
|
+
* 2. Call settleOnChain() → builds & broadcasts claim() tx on source chain
|
|
13
|
+
* 3. Parse IntentFilled event from receipt
|
|
14
|
+
* 4. Return settlement record
|
|
15
|
+
*
|
|
16
|
+
* Stage 3 — Phase E
|
|
17
|
+
*/
|
|
18
|
+
import type { Address, Hash } from "../../types/common";
|
|
19
|
+
import { ViemSettlementContract } from "../contracts/intent-settlement/viem-settlement-contract";
|
|
20
|
+
export interface LiveSettlementParams {
|
|
21
|
+
/** Unique identifier for this intent */
|
|
22
|
+
intentId: string;
|
|
23
|
+
/** Address of the user who initiated the order */
|
|
24
|
+
swapper: Address;
|
|
25
|
+
/** Token address on the source chain */
|
|
26
|
+
token: Address;
|
|
27
|
+
/** Amount in token's smallest unit */
|
|
28
|
+
amount: bigint;
|
|
29
|
+
/** Recipient on target chain */
|
|
30
|
+
recipient: Address;
|
|
31
|
+
/** Nonce used in the original order */
|
|
32
|
+
nonce: bigint;
|
|
33
|
+
/** Origin chain (source chain where funds are locked) */
|
|
34
|
+
originChainId: number;
|
|
35
|
+
/** Deadline for order initiation */
|
|
36
|
+
initiateDeadline: number;
|
|
37
|
+
/** Deadline for order fill */
|
|
38
|
+
fillDeadline: number;
|
|
39
|
+
}
|
|
40
|
+
export interface LiveSettlementResult {
|
|
41
|
+
intentId: string;
|
|
42
|
+
fillTxHash: Hash;
|
|
43
|
+
blockNumber: bigint;
|
|
44
|
+
settledAt: number;
|
|
45
|
+
}
|
|
46
|
+
export declare class LiveSettlementManager {
|
|
47
|
+
private readonly settlementContract;
|
|
48
|
+
constructor(settlementContract: ViemSettlementContract);
|
|
49
|
+
/**
|
|
50
|
+
* Settle an intent on-chain by calling claim() on the IntentSettlement contract.
|
|
51
|
+
*
|
|
52
|
+
* @param params - The settlement parameters derived from the original intent
|
|
53
|
+
* @param signature - The solver or oracle signature verifying the cross-chain execution
|
|
54
|
+
* @returns LiveSettlementResult including the claim tx hash
|
|
55
|
+
*/
|
|
56
|
+
settleOnChain(params: LiveSettlementParams, signature: `0x${string}`): Promise<LiveSettlementResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Check if an intent has already been settled on the contract.
|
|
59
|
+
*/
|
|
60
|
+
isSettled(intentId: `0x${string}`): Promise<boolean>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=live-settlement-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-settlement-manager.d.ts","sourceRoot":"","sources":["../../../src/solver/settlement/live-settlement-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yDAAyD,CAAC;AAOjG,MAAM,WAAW,oBAAoB;IACjC,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAMD,qBAAa,qBAAqB;IAE1B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,sBAAsB;IAG/D;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmC1G;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAG7D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Viem-based Live Settlement Manager
|
|
3
|
+
*
|
|
4
|
+
* Phase E: Contract Deployment & Live Settlement
|
|
5
|
+
*
|
|
6
|
+
* This manager replaces the ethers.js-based SettlementManager for
|
|
7
|
+
* live, on-chain settlement flows. It uses the ViemSettlementContract
|
|
8
|
+
* to call claim() on the deployed IntentSettlement.sol.
|
|
9
|
+
*
|
|
10
|
+
* The lifecycle is:
|
|
11
|
+
* 1. Solver sends tokens on target chain → gets txHash (Phase C)
|
|
12
|
+
* 2. Call settleOnChain() → builds & broadcasts claim() tx on source chain
|
|
13
|
+
* 3. Parse IntentFilled event from receipt
|
|
14
|
+
* 4. Return settlement record
|
|
15
|
+
*
|
|
16
|
+
* Stage 3 — Phase E
|
|
17
|
+
*/
|
|
18
|
+
import { encodeAbiParameters } from "viem";
|
|
19
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
20
|
+
// LiveSettlementManager
|
|
21
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
22
|
+
export class LiveSettlementManager {
|
|
23
|
+
settlementContract;
|
|
24
|
+
constructor(settlementContract) {
|
|
25
|
+
this.settlementContract = settlementContract;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Settle an intent on-chain by calling claim() on the IntentSettlement contract.
|
|
29
|
+
*
|
|
30
|
+
* @param params - The settlement parameters derived from the original intent
|
|
31
|
+
* @param signature - The solver or oracle signature verifying the cross-chain execution
|
|
32
|
+
* @returns LiveSettlementResult including the claim tx hash
|
|
33
|
+
*/
|
|
34
|
+
async settleOnChain(params, signature) {
|
|
35
|
+
// Step 1: Build the orderData = abi.encode(token, amount) based on IntentSettlement.sol
|
|
36
|
+
// Wait, looking at IntentSettlement.sol, orderData is just (address inputToken, uint256 inputAmount)
|
|
37
|
+
const orderData = encodeAbiParameters([
|
|
38
|
+
{ type: "address", name: "token" },
|
|
39
|
+
{ type: "uint256", name: "amount" },
|
|
40
|
+
], [params.token, params.amount]);
|
|
41
|
+
const settlementAddress = this.settlementContract.getAddress();
|
|
42
|
+
// Step 2: Build the CrossChainOrder struct
|
|
43
|
+
const order = {
|
|
44
|
+
settlementContract: settlementAddress,
|
|
45
|
+
swapper: params.swapper,
|
|
46
|
+
nonce: params.nonce,
|
|
47
|
+
originChainId: params.originChainId,
|
|
48
|
+
initiateDeadline: params.initiateDeadline,
|
|
49
|
+
fillDeadline: params.fillDeadline,
|
|
50
|
+
orderData: orderData
|
|
51
|
+
};
|
|
52
|
+
// Step 3: Call claim()
|
|
53
|
+
const result = await this.settlementContract.claim(order, signature);
|
|
54
|
+
return {
|
|
55
|
+
intentId: params.intentId,
|
|
56
|
+
fillTxHash: result.txHash,
|
|
57
|
+
blockNumber: result.blockNumber,
|
|
58
|
+
settledAt: Math.floor(Date.now() / 1000),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Check if an intent has already been settled on the contract.
|
|
63
|
+
*/
|
|
64
|
+
async isSettled(intentId) {
|
|
65
|
+
return await this.settlementContract.isSettled(intentId);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=live-settlement-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-settlement-manager.js","sourceRoot":"","sources":["../../../src/solver/settlement/live-settlement-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,mBAAmB,EAAa,MAAM,MAAM,CAAC;AAkCtD,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,MAAM,OAAO,qBAAqB;IAET;IADrB,YACqB,kBAA0C;QAA1C,uBAAkB,GAAlB,kBAAkB,CAAwB;IAC3D,CAAC;IAEL;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CAAC,MAA4B,EAAE,SAAwB;QACtE,wFAAwF;QACxF,qGAAqG;QACrG,MAAM,SAAS,GAAG,mBAAmB,CACjC;YACI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;YAClC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;SACtC,EACD,CAAC,MAAM,CAAC,KAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,CACjD,CAAC;QAEF,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAmB,CAAC;QAEhF,2CAA2C;QAC3C,MAAM,KAAK,GAAG;YACV,kBAAkB,EAAE,iBAAiB;YACrC,OAAO,EAAE,MAAM,CAAC,OAAwB;YACxC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,SAAS,EAAE,SAAS;SACvB,CAAC;QAEF,uBAAuB;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAErE,OAAO;YACH,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,MAAM,CAAC,MAAM;YACzB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;SAC3C,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,QAAuB;QACnC,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;CACJ"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof Generator — Phase E
|
|
3
|
+
*
|
|
4
|
+
* Generates cross-chain proofs (EIP-191 personal signature) that attest
|
|
5
|
+
* the solver has fulfilled the intent on the target chain.
|
|
6
|
+
*
|
|
7
|
+
* Flow:
|
|
8
|
+
* 1. Solver sends funds on target chain → gets txHash
|
|
9
|
+
* 2. Wait for N confirmations on target chain
|
|
10
|
+
* 3. Sign message: keccak256(intentId, "FILLED", solverAddress)
|
|
11
|
+
* 4. Return CrossChainProof for use in claim()
|
|
12
|
+
*
|
|
13
|
+
* Used by: SettlementManager.settleIntent()
|
|
14
|
+
*/
|
|
15
|
+
import type { ChainId, Hash } from "../../types/common";
|
|
16
|
+
import type { CrossChainProof, IProofSigner, IProviderForProof, ProofGenerationParams } from "../types/settlement";
|
|
17
|
+
export declare class ProofGenerator {
|
|
18
|
+
private readonly signer;
|
|
19
|
+
private readonly provider;
|
|
20
|
+
constructor(signer: IProofSigner, provider: IProviderForProof);
|
|
21
|
+
/**
|
|
22
|
+
* Generate a cross-chain signature proof.
|
|
23
|
+
*
|
|
24
|
+
* Steps:
|
|
25
|
+
* 1. Wait for sufficient confirmations on target chain
|
|
26
|
+
* 2. Build digest from intentId and solver address
|
|
27
|
+
* 3. Sign with oracle's private key
|
|
28
|
+
* 4. Return CrossChainProof
|
|
29
|
+
*
|
|
30
|
+
* @param params - ProofGenerationParams
|
|
31
|
+
* @returns CrossChainProof ready for claim()
|
|
32
|
+
* @throws ProofGenerationError if tx not found, reverted, or signing fails
|
|
33
|
+
*/
|
|
34
|
+
generateSignatureProof(params: ProofGenerationParams): Promise<CrossChainProof>;
|
|
35
|
+
/**
|
|
36
|
+
* Wait until a transaction has enough block confirmations.
|
|
37
|
+
*
|
|
38
|
+
* Polls the chain every ~2 seconds until:
|
|
39
|
+
* currentBlock - txBlock >= requiredConfirmations
|
|
40
|
+
*
|
|
41
|
+
* @param txHash - Transaction hash to watch
|
|
42
|
+
* @param chainId - Chain ID where the tx lives
|
|
43
|
+
* @param confirmations - Number of confirmations required
|
|
44
|
+
* @throws ProofGenerationError if tx not found or reverted
|
|
45
|
+
*/
|
|
46
|
+
waitForConfirmations(txHash: Hash, chainId: ChainId, confirmations: number): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=proof-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof-generator.d.ts","sourceRoot":"","sources":["../../../src/solver/settlement/proof-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAQnH,qBAAa,cAAc;IAEnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,iBAAiB;IAOhD;;;;;;;;;;;;OAYG;IACG,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAoCrF;;;;;;;;;;OAUG;IACG,oBAAoB,CACtB,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC;CAoBnB"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof Generator — Phase E
|
|
3
|
+
*
|
|
4
|
+
* Generates cross-chain proofs (EIP-191 personal signature) that attest
|
|
5
|
+
* the solver has fulfilled the intent on the target chain.
|
|
6
|
+
*
|
|
7
|
+
* Flow:
|
|
8
|
+
* 1. Solver sends funds on target chain → gets txHash
|
|
9
|
+
* 2. Wait for N confirmations on target chain
|
|
10
|
+
* 3. Sign message: keccak256(intentId, "FILLED", solverAddress)
|
|
11
|
+
* 4. Return CrossChainProof for use in claim()
|
|
12
|
+
*
|
|
13
|
+
* Used by: SettlementManager.settleIntent()
|
|
14
|
+
*/
|
|
15
|
+
import { ethers } from "ethers";
|
|
16
|
+
import { ProofGenerationError } from "../../errors/settlement-errors";
|
|
17
|
+
// ─────────────────────────────────────────────
|
|
18
|
+
// ProofGenerator
|
|
19
|
+
// ─────────────────────────────────────────────
|
|
20
|
+
export class ProofGenerator {
|
|
21
|
+
signer;
|
|
22
|
+
provider;
|
|
23
|
+
constructor(signer, provider) {
|
|
24
|
+
this.signer = signer;
|
|
25
|
+
this.provider = provider;
|
|
26
|
+
}
|
|
27
|
+
// ─────────────────────────────────────────
|
|
28
|
+
// Public API
|
|
29
|
+
// ─────────────────────────────────────────
|
|
30
|
+
/**
|
|
31
|
+
* Generate a cross-chain signature proof.
|
|
32
|
+
*
|
|
33
|
+
* Steps:
|
|
34
|
+
* 1. Wait for sufficient confirmations on target chain
|
|
35
|
+
* 2. Build digest from intentId and solver address
|
|
36
|
+
* 3. Sign with oracle's private key
|
|
37
|
+
* 4. Return CrossChainProof
|
|
38
|
+
*
|
|
39
|
+
* @param params - ProofGenerationParams
|
|
40
|
+
* @returns CrossChainProof ready for claim()
|
|
41
|
+
* @throws ProofGenerationError if tx not found, reverted, or signing fails
|
|
42
|
+
*/
|
|
43
|
+
async generateSignatureProof(params) {
|
|
44
|
+
const confirmations = params.confirmations ?? 3;
|
|
45
|
+
await this.waitForConfirmations(params.targetTxHash, params.targetChainId, confirmations);
|
|
46
|
+
const receipt = await this.provider.getTransactionReceipt(params.targetChainId, params.targetTxHash);
|
|
47
|
+
if (!receipt) {
|
|
48
|
+
throw new ProofGenerationError(`Transaction ${params.targetTxHash} not found`);
|
|
49
|
+
}
|
|
50
|
+
if (receipt.status === 0) {
|
|
51
|
+
throw new ProofGenerationError(`Transaction ${params.targetTxHash} reverted`);
|
|
52
|
+
}
|
|
53
|
+
const solverAddress = await this.signer.getAddress();
|
|
54
|
+
// Keccak256(abi.encodePacked(intentId, "FILLED", solverAddress))
|
|
55
|
+
const digest = ethers.solidityPackedKeccak256(["bytes32", "string", "address"], [params.intentId, "FILLED", solverAddress]);
|
|
56
|
+
const signature = await this.signer.signMessage(ethers.getBytes(digest));
|
|
57
|
+
return {
|
|
58
|
+
txHash: params.targetTxHash,
|
|
59
|
+
chainId: params.targetChainId,
|
|
60
|
+
blockNumber: receipt.blockNumber,
|
|
61
|
+
solverSignature: signature,
|
|
62
|
+
signedData: {
|
|
63
|
+
intentId: params.intentId,
|
|
64
|
+
targetTxHash: params.targetTxHash,
|
|
65
|
+
amount: params.amount,
|
|
66
|
+
recipient: params.recipient,
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Wait until a transaction has enough block confirmations.
|
|
72
|
+
*
|
|
73
|
+
* Polls the chain every ~2 seconds until:
|
|
74
|
+
* currentBlock - txBlock >= requiredConfirmations
|
|
75
|
+
*
|
|
76
|
+
* @param txHash - Transaction hash to watch
|
|
77
|
+
* @param chainId - Chain ID where the tx lives
|
|
78
|
+
* @param confirmations - Number of confirmations required
|
|
79
|
+
* @throws ProofGenerationError if tx not found or reverted
|
|
80
|
+
*/
|
|
81
|
+
async waitForConfirmations(txHash, chainId, confirmations) {
|
|
82
|
+
const maxAttempts = 60; // Up to ~120 seconds
|
|
83
|
+
const delayMs = 2000;
|
|
84
|
+
for (let i = 0; i < maxAttempts; i++) {
|
|
85
|
+
const receipt = await this.provider.getTransactionReceipt(chainId, txHash);
|
|
86
|
+
if (receipt) {
|
|
87
|
+
if (receipt.status === 0) {
|
|
88
|
+
throw new ProofGenerationError(`Transaction ${txHash} reverted on chain ${chainId}`);
|
|
89
|
+
}
|
|
90
|
+
const currentBlock = await this.provider.getBlockNumber(chainId);
|
|
91
|
+
if (currentBlock - receipt.blockNumber >= confirmations) {
|
|
92
|
+
return; // Enough confirmations
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
96
|
+
}
|
|
97
|
+
throw new ProofGenerationError(`Timeout waiting for ${confirmations} confirmations on ${txHash}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=proof-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof-generator.js","sourceRoot":"","sources":["../../../src/solver/settlement/proof-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof Verifier — Phase E
|
|
3
|
+
*
|
|
4
|
+
* Verifies cross-chain proofs by recovering the signer from
|
|
5
|
+
* the EIP-712 signature and comparing to the expected solver address.
|
|
6
|
+
*
|
|
7
|
+
* Used by:
|
|
8
|
+
* - SettlementManager (pre-claim sanity check)
|
|
9
|
+
* - Contract's claim() also verifies on-chain, but we check off-chain first
|
|
10
|
+
* to avoid wasting gas on invalid proofs
|
|
11
|
+
*/
|
|
12
|
+
import type { Address } from "../../types/common";
|
|
13
|
+
import type { CrossChainProof } from "../types/settlement";
|
|
14
|
+
export declare class ProofVerifier {
|
|
15
|
+
/**
|
|
16
|
+
* Verify that a CrossChainProof was signed by the expected oracle/solver.
|
|
17
|
+
*
|
|
18
|
+
* Steps:
|
|
19
|
+
* 1. Reconstruct digest from intentId and expected solver address
|
|
20
|
+
* 2. Recover signer address from proof.solverSignature
|
|
21
|
+
* 3. Compare recovered address with expectedSigner
|
|
22
|
+
* 4. Return true if match, false otherwise
|
|
23
|
+
*
|
|
24
|
+
* @param proof - The CrossChainProof to verify
|
|
25
|
+
* @param expectedSigner - The address we expect to have signed (e.g. Oracle address)
|
|
26
|
+
* @param solverAddress - The solver address that was injected into the digest
|
|
27
|
+
* @returns true if proof is valid
|
|
28
|
+
*/
|
|
29
|
+
verifySignatureProof(proof: CrossChainProof, expectedSigner: Address, solverAddress: Address): Promise<boolean>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=proof-verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof-verifier.d.ts","sourceRoot":"","sources":["../../../src/solver/settlement/proof-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAM3D,qBAAa,aAAa;IAEtB;;;;;;;;;;;;;OAaG;IACG,oBAAoB,CACtB,KAAK,EAAE,eAAe,EACtB,cAAc,EAAE,OAAO,EACvB,aAAa,EAAE,OAAO,GACvB,OAAO,CAAC,OAAO,CAAC;CAmBtB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof Verifier — Phase E
|
|
3
|
+
*
|
|
4
|
+
* Verifies cross-chain proofs by recovering the signer from
|
|
5
|
+
* the EIP-712 signature and comparing to the expected solver address.
|
|
6
|
+
*
|
|
7
|
+
* Used by:
|
|
8
|
+
* - SettlementManager (pre-claim sanity check)
|
|
9
|
+
* - Contract's claim() also verifies on-chain, but we check off-chain first
|
|
10
|
+
* to avoid wasting gas on invalid proofs
|
|
11
|
+
*/
|
|
12
|
+
import { ethers } from "ethers";
|
|
13
|
+
// ─────────────────────────────────────────────
|
|
14
|
+
// ProofVerifier
|
|
15
|
+
// ─────────────────────────────────────────────
|
|
16
|
+
export class ProofVerifier {
|
|
17
|
+
/**
|
|
18
|
+
* Verify that a CrossChainProof was signed by the expected oracle/solver.
|
|
19
|
+
*
|
|
20
|
+
* Steps:
|
|
21
|
+
* 1. Reconstruct digest from intentId and expected solver address
|
|
22
|
+
* 2. Recover signer address from proof.solverSignature
|
|
23
|
+
* 3. Compare recovered address with expectedSigner
|
|
24
|
+
* 4. Return true if match, false otherwise
|
|
25
|
+
*
|
|
26
|
+
* @param proof - The CrossChainProof to verify
|
|
27
|
+
* @param expectedSigner - The address we expect to have signed (e.g. Oracle address)
|
|
28
|
+
* @param solverAddress - The solver address that was injected into the digest
|
|
29
|
+
* @returns true if proof is valid
|
|
30
|
+
*/
|
|
31
|
+
async verifySignatureProof(proof, expectedSigner, solverAddress) {
|
|
32
|
+
if (!proof.signedData || !proof.signedData.intentId) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const digest = ethers.solidityPackedKeccak256(["bytes32", "string", "address"], [proof.signedData.intentId, "FILLED", solverAddress]);
|
|
37
|
+
// Recover signer using EIP-191 personal sign recovery
|
|
38
|
+
const recoveredAddress = ethers.verifyMessage(ethers.getBytes(digest), proof.solverSignature);
|
|
39
|
+
return recoveredAddress.toLowerCase() === expectedSigner.toLowerCase();
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=proof-verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proof-verifier.js","sourceRoot":"","sources":["../../../src/solver/settlement/proof-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,gDAAgD;AAChD,gBAAgB;AAChB,gDAAgD;AAEhD,MAAM,OAAO,aAAa;IAEtB;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,oBAAoB,CACtB,KAAsB,EACtB,cAAuB,EACvB,aAAsB;QAEtB,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,uBAAuB,CACzC,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,EAChC,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC,CACvD,CAAC;YAEF,sDAAsD;YACtD,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;YAE9F,OAAO,gBAAgB,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC,WAAW,EAAE,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settlement Manager — Phase E
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the full settlement lifecycle:
|
|
5
|
+
* 1. Solver sends funds on target chain → gets targetTxHash
|
|
6
|
+
* 2. Wait for confirmations on target chain
|
|
7
|
+
* 3. Generate proof (EIP-191 Oracle signature)
|
|
8
|
+
* 4. Submit claim() on source chain contract
|
|
9
|
+
* 5. Track settlement status and handle failures
|
|
10
|
+
*
|
|
11
|
+
* Retry policy: max 3 attempts per intent.
|
|
12
|
+
* After 3 failures → status = "failed", requires manual review.
|
|
13
|
+
*
|
|
14
|
+
* Used by: LiquidityAgent.solve() (Phase F)
|
|
15
|
+
*/
|
|
16
|
+
import type { Address, Hash } from "../../types/common";
|
|
17
|
+
import type { Settlement, SettlementStatus } from "../types/settlement";
|
|
18
|
+
import type { SolverIntent } from "../types/intent";
|
|
19
|
+
import type { ProofGenerator } from "./proof-generator";
|
|
20
|
+
import type { ProofVerifier } from "./proof-verifier";
|
|
21
|
+
import type { IntentSettlementContract } from "../contracts/intent-settlement/intent-settlement";
|
|
22
|
+
export interface SettlementConfig {
|
|
23
|
+
/** Number of block confirmations before generating proof (default: 3) */
|
|
24
|
+
requiredConfirmations: number;
|
|
25
|
+
/** Max retry attempts for claim (default: 3) */
|
|
26
|
+
maxClaimRetries: number;
|
|
27
|
+
/** Interval (ms) for watchPendingSettlements polling (default: 30_000) */
|
|
28
|
+
watchIntervalMs: number;
|
|
29
|
+
/** Oracle address that signs the proof. If not provided, assumes solver is oracle (MVP). */
|
|
30
|
+
oracleAddress?: Address;
|
|
31
|
+
}
|
|
32
|
+
export declare const DEFAULT_SETTLEMENT_CONFIG: SettlementConfig;
|
|
33
|
+
export declare class SettlementManager {
|
|
34
|
+
private readonly proofGenerator;
|
|
35
|
+
private readonly proofVerifier;
|
|
36
|
+
private readonly contract;
|
|
37
|
+
private readonly config;
|
|
38
|
+
/** In-memory settlement records, keyed by intentId */
|
|
39
|
+
private settlements;
|
|
40
|
+
/** Cache of original intents to allow retries */
|
|
41
|
+
private intents;
|
|
42
|
+
/** Interval ID for watchPendingSettlements */
|
|
43
|
+
private watchInterval;
|
|
44
|
+
constructor(proofGenerator: ProofGenerator, proofVerifier: ProofVerifier, contract: IntentSettlementContract, config?: SettlementConfig);
|
|
45
|
+
/**
|
|
46
|
+
* Full settlement flow for a single intent.
|
|
47
|
+
*
|
|
48
|
+
* Steps:
|
|
49
|
+
* 1. Create Settlement record with status "pending"
|
|
50
|
+
* 2. Wait for confirmations on target chain
|
|
51
|
+
* 3. Generate proof → status "proving"
|
|
52
|
+
* 4. Verify proof off-chain (sanity check)
|
|
53
|
+
* 5. Call contract.claim() → status "claiming"
|
|
54
|
+
* 6. If success → status "completed"
|
|
55
|
+
* 7. If failure → handleClaimFailure()
|
|
56
|
+
*
|
|
57
|
+
* @param intent - SolverIntent being settled
|
|
58
|
+
* @param targetTxHash - Transaction hash of the fulfillment on target chain
|
|
59
|
+
* @returns Settlement record
|
|
60
|
+
* @throws SettlementError on unrecoverable failure
|
|
61
|
+
*/
|
|
62
|
+
settleIntent(intent: SolverIntent, targetTxHash: Hash): Promise<Settlement>;
|
|
63
|
+
/**
|
|
64
|
+
* Start watching for pending settlements and retry claims.
|
|
65
|
+
*
|
|
66
|
+
* Runs on an interval (default 30s). For each pending/failed settlement
|
|
67
|
+
* with remaining retries, attempt to re-settle.
|
|
68
|
+
*/
|
|
69
|
+
watchPendingSettlements(): void;
|
|
70
|
+
/**
|
|
71
|
+
* Stop watching pending settlements.
|
|
72
|
+
*/
|
|
73
|
+
stopWatching(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Handle a claim failure: increment attempts, update status.
|
|
76
|
+
*
|
|
77
|
+
* If attempts < maxClaimRetries → keep status "failed" (will be retried by watcher)
|
|
78
|
+
* If attempts >= maxClaimRetries → status "failed" permanently
|
|
79
|
+
*
|
|
80
|
+
* @param intentId - Intent whose claim failed
|
|
81
|
+
* @param error - Error that caused the failure
|
|
82
|
+
*/
|
|
83
|
+
handleClaimFailure(intentId: string, error: Error): Promise<void>;
|
|
84
|
+
/**
|
|
85
|
+
* Get a settlement record by intentId.
|
|
86
|
+
*/
|
|
87
|
+
getSettlement(intentId: string): Settlement | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Get all settlements with a specific status.
|
|
90
|
+
*/
|
|
91
|
+
getSettlementsByStatus(status: SettlementStatus): Settlement[];
|
|
92
|
+
/**
|
|
93
|
+
* Get all settlement records.
|
|
94
|
+
*/
|
|
95
|
+
getAllSettlements(): Settlement[];
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=settlement-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settlement-manager.d.ts","sourceRoot":"","sources":["../../../src/solver/settlement/settlement-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAExE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAQjG,MAAM,WAAW,gBAAgB;IAC7B,yEAAyE;IACzE,qBAAqB,EAAE,MAAM,CAAC;IAE9B,gDAAgD;IAChD,eAAe,EAAE,MAAM,CAAC;IAExB,0EAA0E;IAC1E,eAAe,EAAE,MAAM,CAAC;IAExB,4FAA4F;IAC5F,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,yBAAyB,EAAE,gBAIvC,CAAC;AAMF,qBAAa,iBAAiB;IAWtB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAb3B,sDAAsD;IACtD,OAAO,CAAC,WAAW,CAAsC;IAEzD,iDAAiD;IACjD,OAAO,CAAC,OAAO,CAAwC;IAEvD,8CAA8C;IAC9C,OAAO,CAAC,aAAa,CAA+C;gBAG/C,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,wBAAwB,EAClC,MAAM,GAAE,gBAA4C;IAOzE;;;;;;;;;;;;;;;;OAgBG;IACG,YAAY,CACd,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,IAAI,GACnB,OAAO,CAAC,UAAU,CAAC;IA0FtB;;;;;OAKG;IACH,uBAAuB,IAAI,IAAI;IAqB/B;;OAEG;IACH,YAAY,IAAI,IAAI;IAOpB;;;;;;;;OAQG;IACG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvE;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIvD;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,EAAE;IAI9D;;OAEG;IACH,iBAAiB,IAAI,UAAU,EAAE;CAGpC"}
|