@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,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IntentSettlement Viem Contract Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Phase E: Contract Deployment & Live Settlement
|
|
5
|
+
*
|
|
6
|
+
* A viem-native interface to the deployed `IntentSettlement.sol` contract.
|
|
7
|
+
* Replaces the old ethers.js-based `IntentSettlementContract` for live
|
|
8
|
+
* on-chain settlement calls.
|
|
9
|
+
*
|
|
10
|
+
* Unlike the ethers wrapper, this implementation:
|
|
11
|
+
* - Uses `viem`'s `getContract` + `walletClient` for signing and broadcasting
|
|
12
|
+
* - Parses `IntentFilled` events directly from transaction receipts
|
|
13
|
+
* - Returns tx hash as a plain string for easy tracking
|
|
14
|
+
*
|
|
15
|
+
* Stage 3 — Phase E
|
|
16
|
+
*/
|
|
17
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
18
|
+
// ABI
|
|
19
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
20
|
+
export const INTENT_SETTLEMENT_ABI = [
|
|
21
|
+
// open() - called by swapper to lock funds intent
|
|
22
|
+
{
|
|
23
|
+
type: "function",
|
|
24
|
+
name: "open",
|
|
25
|
+
stateMutability: "nonpayable",
|
|
26
|
+
inputs: [
|
|
27
|
+
{
|
|
28
|
+
name: "order",
|
|
29
|
+
type: "tuple",
|
|
30
|
+
components: [
|
|
31
|
+
{ name: "settlementContract", type: "address" },
|
|
32
|
+
{ name: "swapper", type: "address" },
|
|
33
|
+
{ name: "nonce", type: "uint256" },
|
|
34
|
+
{ name: "originChainId", type: "uint32" },
|
|
35
|
+
{ name: "initiateDeadline", type: "uint32" },
|
|
36
|
+
{ name: "fillDeadline", type: "uint32" },
|
|
37
|
+
{ name: "orderData", type: "bytes" },
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
{ name: "signature", type: "bytes" },
|
|
41
|
+
{ name: "orderData", type: "bytes" },
|
|
42
|
+
],
|
|
43
|
+
outputs: [],
|
|
44
|
+
},
|
|
45
|
+
// claim() - alternative to fill(), called by solver after target-chain proof
|
|
46
|
+
{
|
|
47
|
+
type: "function",
|
|
48
|
+
name: "claim",
|
|
49
|
+
stateMutability: "nonpayable",
|
|
50
|
+
inputs: [
|
|
51
|
+
{
|
|
52
|
+
name: "order",
|
|
53
|
+
type: "tuple",
|
|
54
|
+
components: [
|
|
55
|
+
{ name: "settlementContract", type: "address" },
|
|
56
|
+
{ name: "swapper", type: "address" },
|
|
57
|
+
{ name: "nonce", type: "uint256" },
|
|
58
|
+
{ name: "originChainId", type: "uint32" },
|
|
59
|
+
{ name: "initiateDeadline", type: "uint32" },
|
|
60
|
+
{ name: "fillDeadline", type: "uint32" },
|
|
61
|
+
{ name: "orderData", type: "bytes" },
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
{ name: "signature", type: "bytes" },
|
|
65
|
+
],
|
|
66
|
+
outputs: [],
|
|
67
|
+
},
|
|
68
|
+
// refund() - returns locked funds to swapper after fillDeadline expires
|
|
69
|
+
{
|
|
70
|
+
type: "function",
|
|
71
|
+
name: "refund",
|
|
72
|
+
stateMutability: "nonpayable",
|
|
73
|
+
inputs: [
|
|
74
|
+
{
|
|
75
|
+
name: "order",
|
|
76
|
+
type: "tuple",
|
|
77
|
+
components: [
|
|
78
|
+
{ name: "settlementContract", type: "address" },
|
|
79
|
+
{ name: "swapper", type: "address" },
|
|
80
|
+
{ name: "nonce", type: "uint256" },
|
|
81
|
+
{ name: "originChainId", type: "uint32" },
|
|
82
|
+
{ name: "initiateDeadline", type: "uint32" },
|
|
83
|
+
{ name: "fillDeadline", type: "uint32" },
|
|
84
|
+
{ name: "orderData", type: "bytes" },
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
outputs: [],
|
|
89
|
+
},
|
|
90
|
+
// isIntentSettled()
|
|
91
|
+
{
|
|
92
|
+
type: "function",
|
|
93
|
+
name: "isIntentSettled",
|
|
94
|
+
stateMutability: "view",
|
|
95
|
+
inputs: [{ name: "intentId", type: "bytes32" }],
|
|
96
|
+
outputs: [{ name: "", type: "bool" }],
|
|
97
|
+
},
|
|
98
|
+
// Events
|
|
99
|
+
{
|
|
100
|
+
type: "event",
|
|
101
|
+
name: "FundsLocked",
|
|
102
|
+
inputs: [
|
|
103
|
+
{ name: "intentId", type: "bytes32", indexed: true },
|
|
104
|
+
{ name: "swapper", type: "address", indexed: true },
|
|
105
|
+
{ name: "token", type: "address", indexed: false },
|
|
106
|
+
{ name: "amount", type: "uint256", indexed: false },
|
|
107
|
+
],
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: "event",
|
|
111
|
+
name: "FundsClaimed",
|
|
112
|
+
inputs: [
|
|
113
|
+
{ name: "intentId", type: "bytes32", indexed: true },
|
|
114
|
+
{ name: "solver", type: "address", indexed: true },
|
|
115
|
+
{ name: "amount", type: "uint256", indexed: false },
|
|
116
|
+
],
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
type: "event",
|
|
120
|
+
name: "IntentFilled",
|
|
121
|
+
inputs: [
|
|
122
|
+
{ name: "orderId", type: "bytes32", indexed: true },
|
|
123
|
+
{ name: "filler", type: "address", indexed: true },
|
|
124
|
+
{ name: "originData", type: "bytes", indexed: false },
|
|
125
|
+
{ name: "fillerData", type: "bytes", indexed: false },
|
|
126
|
+
],
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
130
|
+
// ViemSettlementContract
|
|
131
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
132
|
+
/**
|
|
133
|
+
* Viem-native wrapper around the deployed `IntentSettlement.sol`.
|
|
134
|
+
*
|
|
135
|
+
* Usage:
|
|
136
|
+
* const settlement = new ViemSettlementContract(contractAddress, publicClient, walletClient);
|
|
137
|
+
* const result = await settlement.claim(order, solverSignature);
|
|
138
|
+
* console.log("Settled intent in tx:", result.txHash);
|
|
139
|
+
*/
|
|
140
|
+
export class ViemSettlementContract {
|
|
141
|
+
address;
|
|
142
|
+
publicClient;
|
|
143
|
+
walletClient;
|
|
144
|
+
constructor(address, publicClient, walletClient) {
|
|
145
|
+
this.address = address;
|
|
146
|
+
this.publicClient = publicClient;
|
|
147
|
+
this.walletClient = walletClient;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Check if a specific intent ID has already been settled on this contract.
|
|
151
|
+
*/
|
|
152
|
+
async isSettled(intentId) {
|
|
153
|
+
return await this.publicClient.readContract({
|
|
154
|
+
address: this.address,
|
|
155
|
+
abi: INTENT_SETTLEMENT_ABI,
|
|
156
|
+
functionName: "isIntentSettled",
|
|
157
|
+
args: [intentId],
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Call `claim()` using a solver signature as proof.
|
|
162
|
+
* Alternative to fill() for the claim-based settlement flow.
|
|
163
|
+
*/
|
|
164
|
+
async claim(order, solverSignature) {
|
|
165
|
+
console.log("claim log 1");
|
|
166
|
+
if (!this.walletClient.account) {
|
|
167
|
+
throw new Error("WalletClient has no account attached");
|
|
168
|
+
}
|
|
169
|
+
// Step 1: Simulate the tx first to catch reverts early
|
|
170
|
+
try {
|
|
171
|
+
await this.publicClient.simulateContract({
|
|
172
|
+
address: this.address,
|
|
173
|
+
abi: INTENT_SETTLEMENT_ABI,
|
|
174
|
+
functionName: "claim",
|
|
175
|
+
args: [order, solverSignature],
|
|
176
|
+
account: this.walletClient.account,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.error(`[Settlement] Simulation failed for claim():`);
|
|
181
|
+
const fs = require('fs');
|
|
182
|
+
fs.writeFileSync('debug.json', JSON.stringify(error, (key, value) => typeof value === 'bigint' ? value.toString() : value, 2));
|
|
183
|
+
throw new Error(`Simulation failed: ${error.message}`);
|
|
184
|
+
}
|
|
185
|
+
const txHash = await this.walletClient.writeContract({
|
|
186
|
+
chain: this.walletClient.chain,
|
|
187
|
+
address: this.address,
|
|
188
|
+
abi: INTENT_SETTLEMENT_ABI,
|
|
189
|
+
functionName: "claim",
|
|
190
|
+
args: [order, solverSignature],
|
|
191
|
+
account: this.walletClient.account,
|
|
192
|
+
});
|
|
193
|
+
console.log(`[Settlement] Broadcasted claim() tx: ${txHash}`);
|
|
194
|
+
const receipt = await this.publicClient.waitForTransactionReceipt({ hash: txHash });
|
|
195
|
+
if (receipt.status !== "success") {
|
|
196
|
+
throw new Error(`Claim transaction reverted: ${txHash}`);
|
|
197
|
+
}
|
|
198
|
+
return { txHash, blockNumber: receipt.blockNumber };
|
|
199
|
+
}
|
|
200
|
+
getAddress() {
|
|
201
|
+
return this.address;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=viem-settlement-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"viem-settlement-contract.js","sourceRoot":"","sources":["../../../../src/solver/contracts/intent-settlement/viem-settlement-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IntentSolver — Phase K
|
|
3
|
+
*
|
|
4
|
+
* Public-facing wrapper class that encapsulates all solver subsystems
|
|
5
|
+
* into a single, easy-to-use interface.
|
|
6
|
+
*/
|
|
7
|
+
import { LiquidityAgent } from "./agent/liquidity-agent";
|
|
8
|
+
import { type LiquidityAgentConfig } from "./agent/agent-config";
|
|
9
|
+
import { InventoryManager } from "./inventory/inventory-manager";
|
|
10
|
+
import { DynamicPricing } from "./pricing/dynamic-pricing";
|
|
11
|
+
import { SettlementManager } from "./settlement/settlement-manager";
|
|
12
|
+
import { ProofGenerator } from "./settlement/proof-generator";
|
|
13
|
+
import { ProofVerifier } from "./settlement/proof-verifier";
|
|
14
|
+
import { IntentSettlementContract } from "./contracts/intent-settlement/intent-settlement";
|
|
15
|
+
import { WalletManager } from "../shared/wallet-manager/wallet-manager";
|
|
16
|
+
import { RPCProviderManager } from "../shared/rpc/provider-manager";
|
|
17
|
+
import { ChainRegistry } from "../shared/chain-registry/registry";
|
|
18
|
+
import { TokenRegistry } from "../shared/token-registry/registry";
|
|
19
|
+
import { MempoolMonitor } from "./mempool/mempool-monitor";
|
|
20
|
+
import { MempoolClient } from "./mempool/mempool-client";
|
|
21
|
+
import { IntentFilter } from "./mempool/intent-filter";
|
|
22
|
+
import { SolutionSubmitter } from "./mempool/solution-submitter";
|
|
23
|
+
import { ProfitTracker } from "./monitoring/profit-tracker";
|
|
24
|
+
import type { SolverIntent } from "./types/intent";
|
|
25
|
+
import type { SolutionResult } from "./types/agent";
|
|
26
|
+
import type { PricingResult } from "./types/pricing";
|
|
27
|
+
export declare class IntentSolver {
|
|
28
|
+
readonly config: LiquidityAgentConfig;
|
|
29
|
+
readonly chainRegistry: ChainRegistry;
|
|
30
|
+
readonly tokenRegistry: TokenRegistry;
|
|
31
|
+
readonly rpcProviderManager: RPCProviderManager;
|
|
32
|
+
readonly walletManager: WalletManager;
|
|
33
|
+
readonly inventoryManager: InventoryManager;
|
|
34
|
+
readonly dynamicPricing: DynamicPricing;
|
|
35
|
+
readonly proofGenerator: ProofGenerator;
|
|
36
|
+
readonly proofVerifier: ProofVerifier;
|
|
37
|
+
readonly settlementContract: IntentSettlementContract;
|
|
38
|
+
readonly settlementManager: SettlementManager;
|
|
39
|
+
readonly agent: LiquidityAgent;
|
|
40
|
+
readonly mempoolClient: MempoolClient;
|
|
41
|
+
readonly intentFilter: IntentFilter;
|
|
42
|
+
readonly solutionSubmitter: SolutionSubmitter;
|
|
43
|
+
readonly profitTracker: ProfitTracker;
|
|
44
|
+
readonly mempoolMonitor: MempoolMonitor;
|
|
45
|
+
constructor(userConfig: Partial<LiquidityAgentConfig> & {
|
|
46
|
+
agent: {
|
|
47
|
+
privateKey: string;
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
/**
|
|
51
|
+
* Initialize non-blocking resources (e.g. fetch initial balances, derive address)
|
|
52
|
+
* Must be called before `solve` or `start`.
|
|
53
|
+
*/
|
|
54
|
+
initialize(): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Start the background mempool listener to automatically process intents
|
|
57
|
+
*/
|
|
58
|
+
start(mempoolUrl: string): void;
|
|
59
|
+
/**
|
|
60
|
+
* Stop background processes and disconnect WebSockets
|
|
61
|
+
*/
|
|
62
|
+
stop(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Get a quote for a bridge intent
|
|
65
|
+
*/
|
|
66
|
+
getQuote(intent: SolverIntent): PricingResult;
|
|
67
|
+
/**
|
|
68
|
+
* Check if the agent wants and can solve this intent
|
|
69
|
+
*/
|
|
70
|
+
canSolve(intent: SolverIntent): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Attempt to solve an intent directly (bypasses mempool listener)
|
|
73
|
+
*/
|
|
74
|
+
solve(intent: SolverIntent): Promise<SolutionResult>;
|
|
75
|
+
/**
|
|
76
|
+
* Check the current state of the agent
|
|
77
|
+
*/
|
|
78
|
+
getStatus(): import("..").AgentStatus;
|
|
79
|
+
/**
|
|
80
|
+
* Fetch profit and operational metrics
|
|
81
|
+
*/
|
|
82
|
+
getStats(): {
|
|
83
|
+
profitStats: import("./monitoring").ProfitStats;
|
|
84
|
+
mempoolStats: import("./mempool").MempoolStats;
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/solver/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAI5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,qBAAa,YAAY;IACrB,SAAgB,MAAM,EAAE,oBAAoB,CAAC;IAG7C,SAAgB,aAAa,EAAE,aAAa,CAAC;IAC7C,SAAgB,aAAa,EAAE,aAAa,CAAC;IAC7C,SAAgB,kBAAkB,EAAE,kBAAkB,CAAC;IACvD,SAAgB,aAAa,EAAE,aAAa,CAAC;IAC7C,SAAgB,gBAAgB,EAAE,gBAAgB,CAAC;IACnD,SAAgB,cAAc,EAAE,cAAc,CAAC;IAC/C,SAAgB,cAAc,EAAE,cAAc,CAAC;IAC/C,SAAgB,aAAa,EAAE,aAAa,CAAC;IAC7C,SAAgB,kBAAkB,EAAE,wBAAwB,CAAC;IAC7D,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,SAAgB,KAAK,EAAE,cAAc,CAAC;IAGtC,SAAgB,aAAa,EAAE,aAAa,CAAC;IAC7C,SAAgB,YAAY,EAAE,YAAY,CAAC;IAC3C,SAAgB,iBAAiB,EAAE,iBAAiB,CAAC;IACrD,SAAgB,aAAa,EAAE,aAAa,CAAC;IAC7C,SAAgB,cAAc,EAAE,cAAc,CAAC;gBAEnC,UAAU,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG;QAAE,KAAK,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;IAwFzF;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAK/B;;OAEG;IACH,IAAI,IAAI,IAAI;IAKZ;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa;IAI7C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO;IAIvC;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAe1D;;OAEG;IACH,SAAS;IAIT;;OAEG;IACH,QAAQ;;;;CAMX"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IntentSolver — Phase K
|
|
3
|
+
*
|
|
4
|
+
* Public-facing wrapper class that encapsulates all solver subsystems
|
|
5
|
+
* into a single, easy-to-use interface.
|
|
6
|
+
*/
|
|
7
|
+
import { LiquidityAgent } from "./agent/liquidity-agent";
|
|
8
|
+
import { buildAgentConfig } from "./agent/agent-config";
|
|
9
|
+
import { InventoryManager } from "./inventory/inventory-manager";
|
|
10
|
+
import { DynamicPricing } from "./pricing/dynamic-pricing";
|
|
11
|
+
import { SettlementManager } from "./settlement/settlement-manager";
|
|
12
|
+
import { ProofGenerator } from "./settlement/proof-generator";
|
|
13
|
+
import { ProofVerifier } from "./settlement/proof-verifier";
|
|
14
|
+
import { IntentSettlementContract } from "./contracts/intent-settlement/intent-settlement";
|
|
15
|
+
import { WalletManager } from "../shared/wallet-manager/wallet-manager";
|
|
16
|
+
import { RPCProviderManager } from "../shared/rpc/provider-manager";
|
|
17
|
+
import { ChainRegistry } from "../shared/chain-registry/registry";
|
|
18
|
+
import { SUPPORTED_CHAINS } from "../config/chains";
|
|
19
|
+
import { TokenRegistry } from "../shared/token-registry/registry";
|
|
20
|
+
import { MempoolMonitor } from "./mempool/mempool-monitor";
|
|
21
|
+
import { MempoolClient } from "./mempool/mempool-client";
|
|
22
|
+
import { IntentFilter } from "./mempool/intent-filter";
|
|
23
|
+
import { SolutionSubmitter } from "./mempool/solution-submitter";
|
|
24
|
+
import { ProfitTracker } from "./monitoring/profit-tracker";
|
|
25
|
+
import { ethers } from "ethers";
|
|
26
|
+
export class IntentSolver {
|
|
27
|
+
config;
|
|
28
|
+
// Core Subsystems exposed if advanced users need them
|
|
29
|
+
chainRegistry;
|
|
30
|
+
tokenRegistry;
|
|
31
|
+
rpcProviderManager;
|
|
32
|
+
walletManager;
|
|
33
|
+
inventoryManager;
|
|
34
|
+
dynamicPricing;
|
|
35
|
+
proofGenerator;
|
|
36
|
+
proofVerifier;
|
|
37
|
+
settlementContract;
|
|
38
|
+
settlementManager;
|
|
39
|
+
agent;
|
|
40
|
+
// Mempool & Monitoring
|
|
41
|
+
mempoolClient;
|
|
42
|
+
intentFilter;
|
|
43
|
+
solutionSubmitter;
|
|
44
|
+
profitTracker;
|
|
45
|
+
mempoolMonitor;
|
|
46
|
+
constructor(userConfig) {
|
|
47
|
+
// Deep merge user config with SDK defaults
|
|
48
|
+
this.config = buildAgentConfig(userConfig);
|
|
49
|
+
// 1. Foundation layer
|
|
50
|
+
this.chainRegistry = new ChainRegistry();
|
|
51
|
+
this.chainRegistry.registerAll(SUPPORTED_CHAINS);
|
|
52
|
+
this.tokenRegistry = new TokenRegistry();
|
|
53
|
+
this.rpcProviderManager = new RPCProviderManager();
|
|
54
|
+
const signerFactory = (privateKey, chainId) => {
|
|
55
|
+
// Provide a basic wrapper compatible with both ethers and our WalletSigner interface
|
|
56
|
+
const wallet = new ethers.Wallet(privateKey);
|
|
57
|
+
return {
|
|
58
|
+
getAddress: () => wallet.address,
|
|
59
|
+
signMessage: async (msg) => wallet.signMessage(msg),
|
|
60
|
+
signTypedData: async (domain, types, value) => wallet.signTypedData(domain, types, value)
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
this.walletManager = new WalletManager(this.config.agent.privateKey, signerFactory);
|
|
64
|
+
// 2. Inventory & Pricing
|
|
65
|
+
this.inventoryManager = new InventoryManager(this.walletManager, this.tokenRegistry, this.chainRegistry, this.rpcProviderManager, this.config.inventory);
|
|
66
|
+
this.dynamicPricing = new DynamicPricing(this.config.pricing, this.inventoryManager);
|
|
67
|
+
// 3. Settlement
|
|
68
|
+
// Create an adapter for IProviderForProof
|
|
69
|
+
const providerForProof = {
|
|
70
|
+
getTransactionReceipt: async (chainId, txHash) => {
|
|
71
|
+
const provider = this.rpcProviderManager.getProvider(chainId);
|
|
72
|
+
return provider.getTransactionReceipt(txHash);
|
|
73
|
+
},
|
|
74
|
+
getBlockNumber: async (chainId) => {
|
|
75
|
+
return this.rpcProviderManager.getProvider(chainId).getBlockNumber();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
// Use the primary chain signer as the proof signer
|
|
79
|
+
const primaryChain = this.config.agent.supportedChains[0] || 1;
|
|
80
|
+
const proofSigner = this.walletManager.getSigner(primaryChain);
|
|
81
|
+
this.proofGenerator = new ProofGenerator(proofSigner, providerForProof);
|
|
82
|
+
this.proofVerifier = new ProofVerifier();
|
|
83
|
+
// Initialize the contract wrapper with ethers.Wallet for proper signing
|
|
84
|
+
const settlementSigner = new ethers.Wallet(this.config.agent.privateKey);
|
|
85
|
+
this.settlementContract = new IntentSettlementContract(this.config.contractAddress, settlementSigner);
|
|
86
|
+
this.settlementManager = new SettlementManager(this.proofGenerator, this.proofVerifier, this.settlementContract, this.config.settlement);
|
|
87
|
+
// 4. Core Agent Orchestrator
|
|
88
|
+
this.agent = new LiquidityAgent(this.inventoryManager, this.dynamicPricing, this.settlementManager, this.walletManager, this.config);
|
|
89
|
+
// 5. Monitoring
|
|
90
|
+
this.profitTracker = new ProfitTracker();
|
|
91
|
+
// 6. Mempool integration
|
|
92
|
+
this.mempoolClient = new MempoolClient();
|
|
93
|
+
this.intentFilter = new IntentFilter(this.agent);
|
|
94
|
+
this.solutionSubmitter = new SolutionSubmitter(this.mempoolClient);
|
|
95
|
+
this.mempoolMonitor = new MempoolMonitor(this.mempoolClient, this.intentFilter, this.agent, this.solutionSubmitter);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Initialize non-blocking resources (e.g. fetch initial balances, derive address)
|
|
99
|
+
* Must be called before `solve` or `start`.
|
|
100
|
+
*/
|
|
101
|
+
async initialize() {
|
|
102
|
+
// Inject provider into settlement signer
|
|
103
|
+
const primaryChain = this.config.agent.supportedChains[0] || 1;
|
|
104
|
+
const config = this.chainRegistry.get(primaryChain);
|
|
105
|
+
if (config && config.rpcUrl) {
|
|
106
|
+
const provider = new ethers.JsonRpcProvider(config.rpcUrl);
|
|
107
|
+
const connectedSigner = new ethers.Wallet(this.config.agent.privateKey, provider);
|
|
108
|
+
this.settlementContract.updateSigner(connectedSigner);
|
|
109
|
+
}
|
|
110
|
+
await this.agent.initialize();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Start the background mempool listener to automatically process intents
|
|
114
|
+
*/
|
|
115
|
+
start(mempoolUrl) {
|
|
116
|
+
this.mempoolClient.connect(mempoolUrl);
|
|
117
|
+
this.mempoolMonitor.start();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Stop background processes and disconnect WebSockets
|
|
121
|
+
*/
|
|
122
|
+
stop() {
|
|
123
|
+
this.mempoolMonitor.stop();
|
|
124
|
+
this.agent.stop();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get a quote for a bridge intent
|
|
128
|
+
*/
|
|
129
|
+
getQuote(intent) {
|
|
130
|
+
return this.agent.getQuote(intent);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Check if the agent wants and can solve this intent
|
|
134
|
+
*/
|
|
135
|
+
canSolve(intent) {
|
|
136
|
+
return this.agent.canSolve(intent);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Attempt to solve an intent directly (bypasses mempool listener)
|
|
140
|
+
*/
|
|
141
|
+
async solve(intent) {
|
|
142
|
+
// Track standalone solves as well
|
|
143
|
+
if (this.canSolve(intent)) {
|
|
144
|
+
const pricing = this.getQuote(intent);
|
|
145
|
+
this.profitTracker.recordAttempt(intent.intentId, pricing);
|
|
146
|
+
}
|
|
147
|
+
const result = await this.agent.solve(intent);
|
|
148
|
+
this.profitTracker.recordResult(intent.intentId, result.success, result.gasUsed || "0");
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Check the current state of the agent
|
|
153
|
+
*/
|
|
154
|
+
getStatus() {
|
|
155
|
+
return this.agent.getStatus();
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Fetch profit and operational metrics
|
|
159
|
+
*/
|
|
160
|
+
getStats() {
|
|
161
|
+
return {
|
|
162
|
+
profitStats: this.profitTracker.getStats(),
|
|
163
|
+
mempoolStats: this.mempoolMonitor.getStats()
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/solver/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/solver/inventory/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/solver/inventory/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inventory Manager
|
|
3
|
+
*
|
|
4
|
+
* Tracks USDC/token balances across all supported chains.
|
|
5
|
+
* Handles locking/unlocking for pending intents and
|
|
6
|
+
* balance snapshots for decision-making.
|
|
7
|
+
*
|
|
8
|
+
* Lifecycle per intent:
|
|
9
|
+
* loadBalances() → canFulfill() → lockAmount()
|
|
10
|
+
* → (success) confirmDeduction() → unlockAmount()
|
|
11
|
+
* → (failure) unlockAmount()
|
|
12
|
+
*/
|
|
13
|
+
import type { ChainId } from "../../types/common";
|
|
14
|
+
import type { InventorySnapshot } from "../types/inventory";
|
|
15
|
+
import type { TokenRegistry } from "../../shared/token-registry/registry";
|
|
16
|
+
import type { ChainRegistry } from "../../shared/chain-registry/registry";
|
|
17
|
+
import type { RPCProviderManager } from "../../shared/rpc/provider-manager";
|
|
18
|
+
import type { WalletManager } from "../../shared/wallet-manager/wallet-manager";
|
|
19
|
+
/**
|
|
20
|
+
* Parameters untuk konstruksi InventoryManager
|
|
21
|
+
*/
|
|
22
|
+
export interface InventoryManagerConfig {
|
|
23
|
+
/** Minimum reserve percentage to always keep per chain (0–1) */
|
|
24
|
+
minReservePercent: number;
|
|
25
|
+
}
|
|
26
|
+
export declare class InventoryManager {
|
|
27
|
+
private readonly walletManager;
|
|
28
|
+
private readonly tokenRegistry;
|
|
29
|
+
private readonly chainRegistry;
|
|
30
|
+
private readonly providerManager;
|
|
31
|
+
private readonly config;
|
|
32
|
+
/**
|
|
33
|
+
* Map of chainId:tokenSymbol → InventoryBalance
|
|
34
|
+
* Format key: `${chainId}:${token}` e.g. "137:USDC"
|
|
35
|
+
*/
|
|
36
|
+
private balances;
|
|
37
|
+
/**
|
|
38
|
+
* Track active locks per intent: intentId → list of lock keys
|
|
39
|
+
* Used to release all locks by intentId on success/failure.
|
|
40
|
+
*/
|
|
41
|
+
private locks;
|
|
42
|
+
constructor(walletManager: WalletManager, tokenRegistry: TokenRegistry, chainRegistry: ChainRegistry, providerManager: RPCProviderManager, config: InventoryManagerConfig);
|
|
43
|
+
/** Generate composite map key */
|
|
44
|
+
private key;
|
|
45
|
+
/**
|
|
46
|
+
* Load on-chain balances for all registered chains and supported tokens.
|
|
47
|
+
*
|
|
48
|
+
* Calls ERC20.balanceOf(agentAddress) on each (chain, token) pair.
|
|
49
|
+
* Safe to call repeatedly (e.g., from InventoryMonitor polling).
|
|
50
|
+
* Preserves existing locked amounts so in-flight intent locks are not lost.
|
|
51
|
+
*/
|
|
52
|
+
loadBalances(): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Refresh the balance of a specific token on a specific chain.
|
|
55
|
+
* Useful for targeted updates after a successful transfer without
|
|
56
|
+
* reloading the entire multi-chain inventory.
|
|
57
|
+
*
|
|
58
|
+
* @param chainId - Chain to query
|
|
59
|
+
* @param tokenSymbol - Token symbol to query (e.g. "USDC")
|
|
60
|
+
*/
|
|
61
|
+
refreshBalance(chainId: ChainId, tokenSymbol: string): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Get current available balance (available - locked) for a token on a chain.
|
|
64
|
+
*
|
|
65
|
+
* @param chainId - Chain to query
|
|
66
|
+
* @param token - Token symbol (e.g. "USDC")
|
|
67
|
+
* @returns Available balance in token's smallest unit. Returns 0n if not tracked.
|
|
68
|
+
*/
|
|
69
|
+
getBalance(chainId: ChainId, token: string): bigint;
|
|
70
|
+
/**
|
|
71
|
+
* Get total available balance across all chains for a token.
|
|
72
|
+
*
|
|
73
|
+
* Useful for global profitability checks.
|
|
74
|
+
*
|
|
75
|
+
* @param token - Token symbol (e.g. "USDC")
|
|
76
|
+
* @returns Sum of (available - locked) across all chains
|
|
77
|
+
*/
|
|
78
|
+
getTotalBalance(token: string): bigint;
|
|
79
|
+
/**
|
|
80
|
+
* Check if we have enough balance to fulfill an intent.
|
|
81
|
+
*
|
|
82
|
+
* Must maintain minReservePercent after the deduction.
|
|
83
|
+
* Formula: available - locked - amount >= total * minReservePercent
|
|
84
|
+
*
|
|
85
|
+
* @param chainId - Target chain for fulfillment
|
|
86
|
+
* @param token - Token to send
|
|
87
|
+
* @param amount - Amount required (in smallest unit)
|
|
88
|
+
* @returns true if we can safely fill without breaching reserve
|
|
89
|
+
*/
|
|
90
|
+
canFulfill(chainId: ChainId, token: string, amount: bigint): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Lock an amount for a pending intent (reserve it).
|
|
93
|
+
*
|
|
94
|
+
* Throws InsufficientInventoryError if not enough available.
|
|
95
|
+
* Throws InventoryLockError if lock already exists for intentId+token+chain.
|
|
96
|
+
*
|
|
97
|
+
* @param chainId - Chain where funds will be sent
|
|
98
|
+
* @param token - Token to lock
|
|
99
|
+
* @param amount - Amount to lock
|
|
100
|
+
* @param intentId - Intent ID for tracking (used in unlock/confirm)
|
|
101
|
+
*/
|
|
102
|
+
lockAmount(chainId: ChainId, token: string, amount: bigint, intentId: string): void;
|
|
103
|
+
/**
|
|
104
|
+
* Release a previously locked amount (on success or failure).
|
|
105
|
+
*
|
|
106
|
+
* Safe to call even if intent wasn't locked (idempotent).
|
|
107
|
+
* Throws in dev mode if `amount` does not match the stored lock amount
|
|
108
|
+
* (helps catch accounting bugs early).
|
|
109
|
+
*
|
|
110
|
+
* @param chainId - Chain of the lock
|
|
111
|
+
* @param token - Token to unlock
|
|
112
|
+
* @param amount - Expected amount to unlock (validated against stored lock)
|
|
113
|
+
* @param intentId - Intent ID (must match the original lockAmount call)
|
|
114
|
+
*/
|
|
115
|
+
unlockAmount(chainId: ChainId, token: string, amount: bigint, intentId: string): void;
|
|
116
|
+
/**
|
|
117
|
+
* Permanently deduct balance after successfully sending to user.
|
|
118
|
+
*
|
|
119
|
+
* Called after the target chain tx is confirmed. Reduces both
|
|
120
|
+
* available and locked (since we locked it first).
|
|
121
|
+
*
|
|
122
|
+
* @param chainId - Chain where send happened
|
|
123
|
+
* @param token - Token that was sent
|
|
124
|
+
* @param amount - Amount sent
|
|
125
|
+
* @param intentId - Intent ID for tracking
|
|
126
|
+
*/
|
|
127
|
+
confirmDeduction(chainId: ChainId, token: string, amount: bigint, intentId: string): void;
|
|
128
|
+
/**
|
|
129
|
+
* Get a full snapshot of all current balances and total USD value.
|
|
130
|
+
*
|
|
131
|
+
* @returns InventorySnapshot with all chain balances and a timestamp
|
|
132
|
+
*/
|
|
133
|
+
getSnapshot(): InventorySnapshot;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=inventory-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory-manager.d.ts","sourceRoot":"","sources":["../../../src/solver/inventory/inventory-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAE1E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAIhF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,gBAAgB;IAcrB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAjB3B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAA4C;IAE5D;;;OAGG;IACH,OAAO,CAAC,KAAK,CAAkE;gBAG1D,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,kBAAkB,EACnC,MAAM,EAAE,sBAAsB;IAOnD,iCAAiC;IACjC,OAAO,CAAC,GAAG;IAQX;;;;;;OAMG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCnC;;;;;;;OAOG;IACG,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B1E;;;;;;OAMG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAWnD;;;;;;;OAOG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IActC;;;;;;;;;;OAUG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAyBpE;;;;;;;;;;OAUG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAsCnF;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAwCrF;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAkCzF;;;;OAIG;IACH,WAAW,IAAI,iBAAiB;CAoBnC"}
|