otto-intel-mcp 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/README.md +76 -18
  2. package/dist/account-userop-policy-definition.d.ts +14 -0
  3. package/dist/account-userop-policy-definition.js +12 -0
  4. package/dist/account-userop-policy-relation.d.ts +371 -0
  5. package/dist/account-userop-policy-relation.js +87 -0
  6. package/dist/adapter/cdp-signer.d.ts +76 -9
  7. package/dist/adapter/cdp-signer.js +274 -33
  8. package/dist/adapter/evm-call-failure.d.ts +29 -0
  9. package/dist/adapter/evm-call-failure.js +109 -0
  10. package/dist/adapter/refusal.d.ts +1 -1
  11. package/dist/adapter/refusal.js +13 -0
  12. package/dist/adapter/route-simulator.d.ts +91 -0
  13. package/dist/adapter/route-simulator.js +143 -0
  14. package/dist/adapter-cdp-index.d.ts +1 -1
  15. package/dist/executable-equities.d.ts +55 -0
  16. package/dist/executable-equities.js +116 -0
  17. package/dist/executable-yield-markets.d.ts +261 -0
  18. package/dist/executable-yield-markets.js +154 -0
  19. package/dist/execution-account-gas-quote.d.ts +141 -0
  20. package/dist/execution-account-gas-quote.js +443 -0
  21. package/dist/execution-account-gas-review.d.ts +123 -0
  22. package/dist/execution-account-gas-review.js +104 -0
  23. package/dist/execution-account-gas-runtime.d.ts +33 -0
  24. package/dist/execution-account-gas-runtime.js +131 -0
  25. package/dist/execution-account-gas-view.d.ts +936 -0
  26. package/dist/execution-account-gas-view.js +56 -0
  27. package/dist/execution-config.d.ts +3 -0
  28. package/dist/execution-config.js +4 -0
  29. package/dist/execution-delegated-definition.d.ts +7 -6
  30. package/dist/execution-delegated-definition.js +13 -2
  31. package/dist/execution-delegation-admin-definition.d.ts +127 -5
  32. package/dist/execution-delegation-admin-definition.js +155 -5
  33. package/dist/execution-delegation-admin.d.ts +48 -2
  34. package/dist/execution-delegation-admin.js +422 -12
  35. package/dist/execution-delegation-cap-store.d.ts +386 -0
  36. package/dist/execution-delegation-cap-store.js +1150 -0
  37. package/dist/execution-delegation-exit-definition.d.ts +309 -0
  38. package/dist/execution-delegation-exit-definition.js +204 -0
  39. package/dist/execution-delegation-exit-store.d.ts +114 -0
  40. package/dist/execution-delegation-exit-store.js +671 -0
  41. package/dist/execution-delegation-exit.d.ts +4 -0
  42. package/dist/execution-delegation-exit.js +614 -0
  43. package/dist/execution-delegation-finality.d.ts +22 -0
  44. package/dist/execution-delegation-finality.js +90 -0
  45. package/dist/execution-delegation-operation-store.d.ts +129 -0
  46. package/dist/execution-delegation-operation-store.js +1107 -0
  47. package/dist/execution-delegation-operations-definition.d.ts +282 -0
  48. package/dist/execution-delegation-operations-definition.js +117 -0
  49. package/dist/execution-delegation-operations.d.ts +6 -0
  50. package/dist/execution-delegation-operations.js +282 -0
  51. package/dist/execution-delegation-policy.d.ts +154 -8
  52. package/dist/execution-delegation-policy.js +273 -40
  53. package/dist/execution-delegation.d.ts +51 -0
  54. package/dist/execution-delegation.js +441 -31
  55. package/dist/execution-errors.d.ts +1 -1
  56. package/dist/execution-errors.js +122 -0
  57. package/dist/execution-index.d.ts +7 -2
  58. package/dist/execution-index.js +7 -2
  59. package/dist/execution-journal-schema.d.ts +96 -0
  60. package/dist/execution-journal-schema.js +368 -0
  61. package/dist/execution-journal-tables.d.ts +14 -0
  62. package/dist/execution-journal-tables.js +227 -0
  63. package/dist/execution-policy-compatibility.d.ts +34 -0
  64. package/dist/execution-policy-compatibility.js +76 -0
  65. package/dist/execution-registration.d.ts +54 -2
  66. package/dist/execution-registration.js +151 -5
  67. package/dist/execution-sponsored-account-profile.d.ts +32 -0
  68. package/dist/execution-sponsored-account-profile.js +59 -0
  69. package/dist/execution-sponsored-account.d.ts +1519 -0
  70. package/dist/execution-sponsored-account.js +222 -0
  71. package/dist/execution-sponsored-definition.d.ts +1713 -0
  72. package/dist/execution-sponsored-definition.js +185 -0
  73. package/dist/execution-sponsored-gas-policy.d.ts +27 -0
  74. package/dist/execution-sponsored-gas-policy.js +110 -0
  75. package/dist/execution-sponsored-hosted.d.ts +3 -0
  76. package/dist/execution-sponsored-hosted.js +71 -0
  77. package/dist/execution-sponsored-index.d.ts +1322 -0
  78. package/dist/execution-sponsored-index.js +102 -0
  79. package/dist/execution-sponsored-mcp-definition.d.ts +1662 -0
  80. package/dist/execution-sponsored-mcp-definition.js +94 -0
  81. package/dist/execution-sponsored-receipt.d.ts +47 -0
  82. package/dist/execution-sponsored-receipt.js +74 -0
  83. package/dist/execution-sponsored-registration.d.ts +14 -0
  84. package/dist/execution-sponsored-registration.js +77 -0
  85. package/dist/execution-sponsored-runtime.d.ts +84 -0
  86. package/dist/execution-sponsored-runtime.js +149 -0
  87. package/dist/execution-sponsored-settlement.d.ts +15 -0
  88. package/dist/execution-sponsored-settlement.js +88 -0
  89. package/dist/execution-sponsored-store.d.ts +67 -0
  90. package/dist/execution-sponsored-store.js +517 -0
  91. package/dist/execution-sponsored-transport.d.ts +90 -0
  92. package/dist/execution-sponsored-transport.js +180 -0
  93. package/dist/execution-tool-definitions.d.ts +21 -21
  94. package/dist/execution-tool-definitions.js +0 -7
  95. package/dist/execution-tools.d.ts +53 -1
  96. package/dist/execution-tools.js +171 -13
  97. package/dist/execution-worker-guard.d.ts +28 -0
  98. package/dist/execution-worker-guard.js +124 -0
  99. package/dist/hybrid-yield-index.d.ts +10 -0
  100. package/dist/hybrid-yield-index.js +11 -0
  101. package/dist/hybrid-yield-markets.d.ts +96 -0
  102. package/dist/hybrid-yield-markets.js +124 -0
  103. package/dist/hybrid-yield.d.ts +411 -0
  104. package/dist/hybrid-yield.js +155 -0
  105. package/dist/hyperliquid-order-builder.js +4 -0
  106. package/dist/lifi-execution-client.d.ts +6 -0
  107. package/dist/lifi-execution-client.js +3 -0
  108. package/dist/lp-userop-account.d.ts +461 -0
  109. package/dist/lp-userop-account.js +417 -0
  110. package/dist/lp-userop-authority.d.ts +49 -0
  111. package/dist/lp-userop-authority.js +211 -0
  112. package/dist/lp-userop-definition.d.ts +233 -0
  113. package/dist/lp-userop-definition.js +85 -0
  114. package/dist/lp-userop-hosted.d.ts +3 -0
  115. package/dist/lp-userop-hosted.js +73 -0
  116. package/dist/lp-userop-index.d.ts +1569 -0
  117. package/dist/lp-userop-index.js +112 -0
  118. package/dist/lp-userop-mcp-definition.d.ts +1220 -0
  119. package/dist/lp-userop-mcp-definition.js +46 -0
  120. package/dist/lp-userop-operation.d.ts +1230 -0
  121. package/dist/lp-userop-operation.js +140 -0
  122. package/dist/lp-userop-registration.d.ts +14 -0
  123. package/dist/lp-userop-registration.js +70 -0
  124. package/dist/lp-userop-settlement.d.ts +89 -0
  125. package/dist/lp-userop-settlement.js +184 -0
  126. package/dist/lp-userop.d.ts +643 -0
  127. package/dist/lp-userop.js +343 -0
  128. package/dist/native-yield-account-definition.d.ts +1192 -0
  129. package/dist/native-yield-account-definition.js +232 -0
  130. package/dist/native-yield-account-gas.d.ts +58 -0
  131. package/dist/native-yield-account-gas.js +228 -0
  132. package/dist/native-yield-account-index.d.ts +23 -0
  133. package/dist/native-yield-account-index.js +28 -0
  134. package/dist/native-yield-account-policy.d.ts +168 -0
  135. package/dist/native-yield-account-policy.js +525 -0
  136. package/dist/native-yield-account-rpc.d.ts +8 -0
  137. package/dist/native-yield-account-rpc.js +128 -0
  138. package/dist/native-yield-account-runtime.d.ts +71 -0
  139. package/dist/native-yield-account-runtime.js +125 -0
  140. package/dist/native-yield-account-store.d.ts +40 -0
  141. package/dist/native-yield-account-store.js +307 -0
  142. package/dist/native-yield-account.d.ts +662 -0
  143. package/dist/native-yield-account.js +371 -0
  144. package/dist/native-yield-consent-store.d.ts +20 -0
  145. package/dist/native-yield-consent-store.js +317 -0
  146. package/dist/native-yield-definition.d.ts +288 -0
  147. package/dist/native-yield-definition.js +105 -0
  148. package/dist/native-yield-reader.d.ts +4 -0
  149. package/dist/native-yield-reader.js +137 -0
  150. package/dist/native-yield-settlement.d.ts +48 -0
  151. package/dist/native-yield-settlement.js +167 -0
  152. package/dist/native-yield-simulation.d.ts +18 -0
  153. package/dist/native-yield-simulation.js +45 -0
  154. package/dist/native-yield-userop-account.d.ts +675 -0
  155. package/dist/native-yield-userop-account.js +357 -0
  156. package/dist/native-yield-userop-authority.d.ts +214 -0
  157. package/dist/native-yield-userop-authority.js +296 -0
  158. package/dist/native-yield-userop-definition.d.ts +331 -0
  159. package/dist/native-yield-userop-definition.js +105 -0
  160. package/dist/native-yield-userop-hosted.d.ts +3 -0
  161. package/dist/native-yield-userop-hosted.js +71 -0
  162. package/dist/native-yield-userop-index.d.ts +1522 -0
  163. package/dist/native-yield-userop-index.js +142 -0
  164. package/dist/native-yield-userop-mcp-definition.d.ts +1356 -0
  165. package/dist/native-yield-userop-mcp-definition.js +50 -0
  166. package/dist/native-yield-userop-operation.d.ts +845 -0
  167. package/dist/native-yield-userop-operation.js +127 -0
  168. package/dist/native-yield-userop-policy.d.ts +23 -0
  169. package/dist/native-yield-userop-policy.js +25 -0
  170. package/dist/native-yield-userop-registration.d.ts +17 -0
  171. package/dist/native-yield-userop-registration.js +76 -0
  172. package/dist/native-yield-userop-settlement.d.ts +8 -0
  173. package/dist/native-yield-userop-settlement.js +79 -0
  174. package/dist/native-yield-userop-simulation.d.ts +18 -0
  175. package/dist/native-yield-userop-simulation.js +34 -0
  176. package/dist/native-yield-userop.d.ts +35 -0
  177. package/dist/native-yield-userop.js +156 -0
  178. package/dist/native-yield-verify.d.ts +30 -0
  179. package/dist/native-yield-verify.js +141 -0
  180. package/dist/native-yield.d.ts +17 -0
  181. package/dist/native-yield.js +119 -0
  182. package/dist/stdio-main.js +0 -0
  183. package/dist/stock-buy-definition.d.ts +338 -0
  184. package/dist/stock-buy-definition.js +127 -0
  185. package/dist/stock-buy-oracle.d.ts +8 -0
  186. package/dist/stock-buy-oracle.js +22 -0
  187. package/dist/stock-buy.d.ts +17 -0
  188. package/dist/stock-buy.js +164 -0
  189. package/dist/tool-definitions.d.ts +3 -1
  190. package/dist/tool-definitions.js +55 -2
  191. package/dist/vendor/lp-v3/lp-v3-atomic-contract.d.ts +445 -0
  192. package/dist/vendor/lp-v3/lp-v3-atomic-contract.js +90 -0
  193. package/dist/vendor/lp-v3/lp-v3-atomic-evidence.d.ts +14 -0
  194. package/dist/vendor/lp-v3/lp-v3-atomic-evidence.js +82 -0
  195. package/dist/vendor/lp-v3/lp-v3-atomic-index.d.ts +80 -0
  196. package/dist/vendor/lp-v3/lp-v3-atomic-index.js +19 -0
  197. package/dist/vendor/lp-v3/lp-v3-atomic-plan.d.ts +43 -0
  198. package/dist/vendor/lp-v3/lp-v3-atomic-plan.js +112 -0
  199. package/dist/vendor/lp-v3/lp-v3-atomic-read-contract.d.ts +312 -0
  200. package/dist/vendor/lp-v3/lp-v3-atomic-read-contract.js +41 -0
  201. package/dist/vendor/lp-v3/lp-v3-atomic-read-index.d.ts +3 -0
  202. package/dist/vendor/lp-v3/lp-v3-atomic-read-index.js +3 -0
  203. package/dist/vendor/lp-v3/lp-v3-atomic-read-rpc.d.ts +49 -0
  204. package/dist/vendor/lp-v3/lp-v3-atomic-read-rpc.js +88 -0
  205. package/dist/vendor/lp-v3/lp-v3-atomic-read.d.ts +17 -0
  206. package/dist/vendor/lp-v3/lp-v3-atomic-read.js +232 -0
  207. package/dist/vendor/lp-v3/lp-v3-atomic-settlement.d.ts +105 -0
  208. package/dist/vendor/lp-v3/lp-v3-atomic-settlement.js +162 -0
  209. package/dist/vendor/lp-v3/lp-v3-collect-protocol-contract.d.ts +606 -0
  210. package/dist/vendor/lp-v3/lp-v3-collect-protocol-contract.js +59 -0
  211. package/dist/vendor/lp-v3/lp-v3-collect-protocol-index.d.ts +168 -0
  212. package/dist/vendor/lp-v3/lp-v3-collect-protocol-index.js +23 -0
  213. package/dist/vendor/lp-v3/lp-v3-collect-protocol-observation.d.ts +32 -0
  214. package/dist/vendor/lp-v3/lp-v3-collect-protocol-observation.js +228 -0
  215. package/dist/vendor/lp-v3/lp-v3-collect-protocol-plan.d.ts +11 -0
  216. package/dist/vendor/lp-v3/lp-v3-collect-protocol-plan.js +91 -0
  217. package/dist/vendor/lp-v3/lp-v3-collect-protocol-reconcile.d.ts +9 -0
  218. package/dist/vendor/lp-v3/lp-v3-collect-protocol-reconcile.js +124 -0
  219. package/dist/vendor/lp-v3/lp-v3-contract.d.ts +538 -0
  220. package/dist/vendor/lp-v3/lp-v3-contract.js +137 -0
  221. package/dist/vendor/lp-v3/lp-v3-evidence.d.ts +25 -0
  222. package/dist/vendor/lp-v3/lp-v3-evidence.js +168 -0
  223. package/dist/vendor/lp-v3/lp-v3-plan.d.ts +22 -0
  224. package/dist/vendor/lp-v3/lp-v3-plan.js +135 -0
  225. package/dist/vendor/lp-v3/types.d.ts +131 -0
  226. package/dist/vendor/lp-v3/types.js +6 -0
  227. package/dist/vendor/lp-v3/v4-math.d.ts +18 -0
  228. package/dist/vendor/lp-v3/v4-math.js +90 -0
  229. package/dist/yield-deposit-definition.d.ts +374 -0
  230. package/dist/yield-deposit-definition.js +123 -0
  231. package/dist/yield-deposit.d.ts +16 -0
  232. package/dist/yield-deposit.js +149 -0
  233. package/dist/yield-route-semantics.d.ts +27 -0
  234. package/dist/yield-route-semantics.js +71 -0
  235. package/dist/yield-withdraw-definition.d.ts +357 -0
  236. package/dist/yield-withdraw-definition.js +90 -0
  237. package/dist/yield-withdraw.d.ts +11 -0
  238. package/dist/yield-withdraw.js +122 -0
  239. package/package.json +239 -7
@@ -0,0 +1,49 @@
1
+ import { type Hex } from 'viem';
2
+ import { z } from 'zod';
3
+ import type { LpV3AtomicCall } from './lp-v3-atomic-contract.js';
4
+ import type { LpV3JournalTransaction, LpV3ReadHoldReason } from './lp-v3-atomic-read-contract.js';
5
+ import type { LpV3AtomicSettlementEvidence } from './lp-v3-atomic-settlement.js';
6
+ export declare class LpV3ReadFailure extends Error {
7
+ readonly reason: LpV3ReadHoldReason;
8
+ constructor(reason: LpV3ReadHoldReason);
9
+ }
10
+ export declare function requireRead(value: unknown, reason: LpV3ReadHoldReason): asserts value;
11
+ export interface LpV3ReadBlock {
12
+ number: string;
13
+ hash: Hex;
14
+ parentHash: Hex;
15
+ timestamp: number;
16
+ transactions: Hex[];
17
+ }
18
+ export declare function readBlock(raw: unknown, reason: LpV3ReadHoldReason): LpV3ReadBlock;
19
+ declare const rawTransaction: z.ZodObject<{
20
+ type: z.ZodLiteral<"0x2">;
21
+ hash: z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>;
22
+ chainId: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
23
+ from: z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>;
24
+ to: z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>;
25
+ value: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
26
+ input: z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>;
27
+ nonce: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
28
+ gas: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
29
+ maxFeePerGas: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
30
+ maxPriorityFeePerGas: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
31
+ accessList: z.ZodArray<z.ZodObject<{
32
+ address: z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>;
33
+ storageKeys: z.ZodArray<z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>>;
34
+ }, z.core.$strip>>;
35
+ r: z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>;
36
+ s: z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>;
37
+ yParity: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
38
+ v: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
39
+ blockNumber: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
40
+ blockHash: z.ZodPipe<z.ZodString, z.ZodTransform<`0x${string}`, string>>;
41
+ transactionIndex: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
42
+ }, z.core.$strip>;
43
+ export type LpV3ReadTransaction = z.infer<typeof rawTransaction>;
44
+ /** Reconstruct the exact signed EIP-1559 envelope. A provider's hash/from labels
45
+ * cannot substitute for the journal hash or recovered signer. No key is used.
46
+ */
47
+ export declare function readSignedTransaction(raw: unknown, expected: LpV3JournalTransaction, call: LpV3AtomicCall): Promise<LpV3ReadTransaction>;
48
+ export declare function readReceipt(raw: unknown, tx: LpV3ReadTransaction, block: LpV3ReadBlock): LpV3AtomicSettlementEvidence['receipts'][number];
49
+ export {};
@@ -0,0 +1,88 @@
1
+ import { keccak256, recoverAddress, toRlp } from 'viem';
2
+ import { z } from 'zod';
3
+ export class LpV3ReadFailure extends Error {
4
+ reason;
5
+ constructor(reason) {
6
+ super(reason);
7
+ this.reason = reason;
8
+ }
9
+ }
10
+ export function requireRead(value, reason) { if (!value)
11
+ throw new LpV3ReadFailure(reason); }
12
+ const quantity = z.string().regex(/^0x(?:0|[1-9a-fA-F][0-9a-fA-F]{0,63})$/).transform(s => s.toLowerCase());
13
+ const data = z.string().regex(/^0x(?:[0-9a-fA-F]{2})*$/).transform(s => s.toLowerCase());
14
+ const address = z.string().regex(/^0x[0-9a-fA-F]{40}$/).transform(s => s.toLowerCase());
15
+ const word = z.string().regex(/^0x[0-9a-fA-F]{64}$/).transform(s => s.toLowerCase());
16
+ const hash = word.refine(s => !/^0x0{64}$/.test(s));
17
+ const number = (value) => { const n = BigInt(value); requireRead(n <= BigInt(Number.MAX_SAFE_INTEGER), 'RECEIPT_MISMATCH'); return Number(n); };
18
+ const parsedBlock = z.object({ number: quantity, hash, parentHash: word, timestamp: quantity, transactions: z.array(hash).max(100_000) });
19
+ export function readBlock(raw, reason) {
20
+ const p = parsedBlock.safeParse(raw);
21
+ requireRead(p.success, reason);
22
+ const b = p.data, timestamp = number(b.timestamp);
23
+ requireRead(timestamp > 0, reason);
24
+ requireRead(new Set(b.transactions).size === b.transactions.length, reason);
25
+ return { number: BigInt(b.number).toString(), hash: b.hash, parentHash: b.parentHash, timestamp, transactions: b.transactions };
26
+ }
27
+ const rawTransaction = z.object({
28
+ type: z.literal('0x2'), hash, chainId: quantity, from: address, to: address, value: quantity,
29
+ input: data, nonce: quantity, gas: quantity, maxFeePerGas: quantity, maxPriorityFeePerGas: quantity,
30
+ accessList: z.array(z.object({ address, storageKeys: z.array(word).max(1024) })).max(1024),
31
+ r: word, s: word, yParity: quantity.optional(), v: quantity.optional(),
32
+ blockNumber: quantity, blockHash: hash, transactionIndex: quantity,
33
+ });
34
+ const curveN = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n;
35
+ function rlpQuantity(value) { const n = BigInt(value); if (n === 0n)
36
+ return '0x'; const hex = n.toString(16); return `0x${hex.length % 2 ? '0' : ''}${hex}`; }
37
+ /** Reconstruct the exact signed EIP-1559 envelope. A provider's hash/from labels
38
+ * cannot substitute for the journal hash or recovered signer. No key is used.
39
+ */
40
+ export async function readSignedTransaction(raw, expected, call) {
41
+ requireRead(raw !== null && typeof raw === 'object' && raw.blockHash !== null, 'TRANSACTION_UNAVAILABLE');
42
+ const p = rawTransaction.safeParse(raw);
43
+ requireRead(p.success, 'TRANSACTION_MISMATCH');
44
+ const tx = p.data;
45
+ requireRead(tx.hash === expected.transactionHash && BigInt(tx.nonce).toString() === expected.nonce && BigInt(tx.nonce) < 1n << 64n
46
+ && BigInt(tx.chainId) === 8453n && tx.from === call.from && tx.to === call.to && tx.input === call.data && BigInt(tx.value).toString() === call.value
47
+ && BigInt(tx.gas) > 0n && BigInt(tx.maxPriorityFeePerGas) <= BigInt(tx.maxFeePerGas), 'TRANSACTION_MISMATCH');
48
+ const normalizeParity = (v) => { const n = BigInt(v); return n === 27n || n === 28n ? n - 27n : n; };
49
+ const parity = tx.yParity !== undefined ? BigInt(tx.yParity) : tx.v !== undefined ? normalizeParity(tx.v) : -1n;
50
+ requireRead((parity === 0n || parity === 1n) && (tx.v === undefined || normalizeParity(tx.v) === parity), 'TRANSACTION_MISMATCH');
51
+ requireRead(BigInt(tx.r) > 0n && BigInt(tx.r) < curveN && BigInt(tx.s) > 0n && BigInt(tx.s) <= curveN / 2n, 'TRANSACTION_MISMATCH');
52
+ const fields = [rlpQuantity(tx.chainId), rlpQuantity(tx.nonce), rlpQuantity(tx.maxPriorityFeePerGas), rlpQuantity(tx.maxFeePerGas), rlpQuantity(tx.gas), tx.to, rlpQuantity(tx.value), tx.input, tx.accessList.map(a => [a.address, a.storageKeys])];
53
+ const unsigned = `0x02${toRlp(fields).slice(2)}`;
54
+ requireRead(unsigned === expected.request.transaction.toLowerCase(), 'TRANSACTION_MISMATCH');
55
+ const signed = `0x02${toRlp([...fields, rlpQuantity(`0x${parity.toString(16)}`), rlpQuantity(tx.r), rlpQuantity(tx.s)]).slice(2)}`;
56
+ requireRead(keccak256(signed) === expected.transactionHash, 'TRANSACTION_MISMATCH');
57
+ try {
58
+ requireRead((await recoverAddress({ hash: keccak256(unsigned), signature: { r: tx.r, s: tx.s, yParity: Number(parity) } })).toLowerCase() === call.from, 'TRANSACTION_MISMATCH');
59
+ }
60
+ catch {
61
+ throw new LpV3ReadFailure('TRANSACTION_MISMATCH');
62
+ }
63
+ return tx;
64
+ }
65
+ const rawLog = z.object({ address, topics: z.array(word).min(1).max(4), data, logIndex: quantity,
66
+ transactionHash: hash, transactionIndex: quantity, blockNumber: quantity, blockHash: hash, removed: z.literal(false) });
67
+ const rawReceipt = z.object({ transactionHash: hash, from: address, to: address, blockNumber: quantity, blockHash: hash,
68
+ transactionIndex: quantity, status: z.enum(['0x0', '0x1']), type: z.literal('0x2'), gasUsed: quantity, effectiveGasPrice: quantity,
69
+ logs: z.array(rawLog).max(4096) });
70
+ export function readReceipt(raw, tx, block) {
71
+ requireRead(raw !== null, 'RECEIPT_UNAVAILABLE');
72
+ const p = rawReceipt.safeParse(raw);
73
+ requireRead(p.success, 'RECEIPT_MISMATCH');
74
+ const r = p.data;
75
+ requireRead(r.status === '0x1', 'TRANSACTION_REVERTED');
76
+ requireRead(r.transactionHash === tx.hash && r.from === tx.from && r.to === tx.to && r.blockNumber === tx.blockNumber && r.blockHash === tx.blockHash && r.transactionIndex === tx.transactionIndex
77
+ && BigInt(r.blockNumber).toString() === block.number && r.blockHash === block.hash && block.transactions[number(r.transactionIndex)] === r.transactionHash
78
+ && BigInt(r.gasUsed) > 0n && BigInt(r.gasUsed) <= BigInt(tx.gas) && BigInt(r.effectiveGasPrice) <= BigInt(tx.maxFeePerGas), 'RECEIPT_MISMATCH');
79
+ const logs = r.logs.map((l, i) => {
80
+ requireRead(l.transactionHash === r.transactionHash && l.transactionIndex === r.transactionIndex && l.blockHash === r.blockHash && l.blockNumber === r.blockNumber
81
+ && (i === 0 || BigInt(l.logIndex) > BigInt(r.logs[i - 1].logIndex)), 'RECEIPT_MISMATCH');
82
+ return { address: l.address, topics: l.topics, data: l.data, logIndex: number(l.logIndex) };
83
+ });
84
+ return { chainId: 8453, transactionHash: tx.hash, blockHash: block.hash, blockNumber: block.number,
85
+ blockTimestamp: block.timestamp, transactionIndex: number(r.transactionIndex), canonical: true, status: 'success',
86
+ from: tx.from, to: tx.to, input: tx.input, value: BigInt(tx.value).toString(), logs };
87
+ }
88
+ //# sourceMappingURL=lp-v3-atomic-read-rpc.js.map
@@ -0,0 +1,17 @@
1
+ import { type LpV3GuardDeployment } from './lp-v3-atomic-contract.js';
2
+ import { type LpV3FinalityPolicy, type LpV3SettlementReadClient, type LpV3SettlementReadResult } from './lp-v3-atomic-read-contract.js';
3
+ export interface LpV3SettlementReaderOptions {
4
+ client: LpV3SettlementReadClient;
5
+ finalityPolicy: LpV3FinalityPolicy;
6
+ guardDeployments?: readonly LpV3GuardDeployment[];
7
+ /** Trusted host clock only. An independent monotonic deadline also bounds reads. */
8
+ nowSeconds?: () => number;
9
+ }
10
+ /** No default finality policy, HTTP provider, signer, database or worker. Each
11
+ * invocation consumes a copied projection from an already validated host journal.
12
+ * This EOA reader cannot process bundler/UserOperation transactions or release claims.
13
+ */
14
+ export declare function createLpV3AtomicSettlementReader(options: LpV3SettlementReaderOptions): Readonly<{
15
+ policyCommitment: `0x${string}`;
16
+ reconcile(raw: unknown): Promise<LpV3SettlementReadResult>;
17
+ }>;
@@ -0,0 +1,232 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { canonicalJson, commitment, deepFreeze } from './lp-v3-contract.js';
3
+ import { createLpV3AtomicLibrary } from './lp-v3-atomic-index.js';
4
+ import { reviewedGuardPolicy, lpV3AtomicChainEvidenceSchema } from './lp-v3-atomic-contract.js';
5
+ import { lpV3FinalityPolicySchema, lpV3SettlementReadInputSchema } from './lp-v3-atomic-read-contract.js';
6
+ import { LpV3ReadFailure, requireRead, readBlock, readSignedTransaction, readReceipt } from './lp-v3-atomic-read-rpc.js';
7
+ const READ_METHODS = new Set(['eth_chainId', 'eth_getBlockByNumber', 'eth_getCode', 'eth_getStorageAt', 'eth_call', 'eth_getBalance', 'eth_getTransactionByHash', 'eth_getTransactionReceipt']);
8
+ const NO_AUTHORITY = { executionAuthorized: false, claimReleased: false, retainClaim: true, retrySafe: false };
9
+ const quantity = (value) => `0x${BigInt(value).toString(16)}`;
10
+ const summary = (b) => ({ number: b.number, hash: b.hash, timestamp: b.timestamp });
11
+ const sameBlock = (a, b) => canonicalJson(a) === canonicalJson(b);
12
+ const stateOnly = (e) => { const { observedAt: _, ...state } = e; return state; };
13
+ /** No default finality policy, HTTP provider, signer, database or worker. Each
14
+ * invocation consumes a copied projection from an already validated host journal.
15
+ * This EOA reader cannot process bundler/UserOperation transactions or release claims.
16
+ */
17
+ export function createLpV3AtomicSettlementReader(options) {
18
+ let policy, guards;
19
+ try {
20
+ policy = deepFreeze(lpV3FinalityPolicySchema.parse(options.finalityPolicy));
21
+ guards = reviewedGuardPolicy(options.guardDeployments);
22
+ if (!options.client || typeof options.client.request !== 'function')
23
+ throw new Error('client');
24
+ }
25
+ catch {
26
+ throw new Error('LP_ATOMIC_READER_INVALID_CONFIGURATION');
27
+ }
28
+ const library = createLpV3AtomicLibrary(guards), policyCommitment = commitment(policy);
29
+ const requestRpc = options.client.request.bind(options.client), now = options.nowSeconds ?? (() => Math.floor(Date.now() / 1000));
30
+ return Object.freeze({ policyCommitment,
31
+ async reconcile(raw) {
32
+ let input;
33
+ let stopped = false;
34
+ let stoppedFailure;
35
+ const startedMonotonic = performance.now();
36
+ let startedAt = 0;
37
+ let lastClock = 0;
38
+ const clock = () => {
39
+ const t = now();
40
+ requireRead(Number.isSafeInteger(t) && t > 0 && t >= lastClock, 'INVALID_CLOCK');
41
+ lastClock = t;
42
+ return t;
43
+ };
44
+ const checkTime = () => {
45
+ if (stopped)
46
+ throw stoppedFailure ?? new LpV3ReadFailure('READ_STALE');
47
+ const t = clock();
48
+ requireRead(t >= startedAt && t - startedAt <= policy.maxReadDurationSeconds
49
+ && performance.now() - startedMonotonic <= policy.maxReadDurationSeconds * 1000, 'READ_STALE');
50
+ return t;
51
+ };
52
+ const rpc = async (request) => {
53
+ checkTime();
54
+ requireRead(READ_METHODS.has(request.method), 'RPC_UNAVAILABLE');
55
+ let timer;
56
+ try {
57
+ const remaining = Math.max(1, policy.maxReadDurationSeconds * 1000 - (performance.now() - startedMonotonic));
58
+ const result = await Promise.race([
59
+ requestRpc(request),
60
+ new Promise((_resolve, reject) => { timer = setTimeout(() => reject(new LpV3ReadFailure('READ_STALE')), remaining); }),
61
+ ]);
62
+ checkTime();
63
+ return result;
64
+ }
65
+ catch (error) {
66
+ stopped = true;
67
+ stoppedFailure = error instanceof LpV3ReadFailure ? error : new LpV3ReadFailure('RPC_UNAVAILABLE');
68
+ throw stoppedFailure;
69
+ }
70
+ finally {
71
+ if (timer !== undefined)
72
+ clearTimeout(timer);
73
+ }
74
+ };
75
+ const chain = async () => {
76
+ const value = await rpc({ method: 'eth_chainId' });
77
+ requireRead(typeof value === 'string' && /^0x(?:0|[1-9a-fA-F][0-9a-fA-F]*)$/.test(value) && BigInt(value) === 8453n, 'WRONG_CHAIN');
78
+ };
79
+ const blocks = new Map();
80
+ const canonicalBlock = async (number) => {
81
+ const block = readBlock(await rpc({ method: 'eth_getBlockByNumber', params: [quantity(number), false] }), 'BLOCK_REORG');
82
+ requireRead(block.number === number, 'BLOCK_REORG');
83
+ const previous = blocks.get(number);
84
+ requireRead(!previous || sameBlock(previous, block), 'BLOCK_REORG');
85
+ const parent = BigInt(number) > 0n ? blocks.get((BigInt(number) - 1n).toString()) : undefined;
86
+ const child = blocks.get((BigInt(number) + 1n).toString());
87
+ requireRead((!parent || block.parentHash === parent.hash) && (!child || child.parentHash === block.hash), 'BLOCK_REORG');
88
+ blocks.set(number, block);
89
+ return block;
90
+ };
91
+ const heads = async () => {
92
+ const latest = readBlock(await rpc({ method: 'eth_getBlockByNumber', params: ['latest', false] }), 'FINALITY_UNAVAILABLE');
93
+ const finalized = readBlock(await rpc({ method: 'eth_getBlockByNumber', params: ['finalized', false] }), 'FINALITY_UNAVAILABLE');
94
+ const time = checkTime();
95
+ requireRead(latest.timestamp <= time && time - latest.timestamp <= policy.maxHeadAgeSeconds
96
+ && finalized.timestamp <= latest.timestamp && latest.timestamp - finalized.timestamp <= policy.maxFinalizedLagSeconds
97
+ && BigInt(finalized.number) <= BigInt(latest.number), 'FINALITY_STALE');
98
+ if (finalized.number === latest.number)
99
+ requireRead(sameBlock(finalized, latest), 'BLOCK_REORG');
100
+ const prior = blocks.get(finalized.number);
101
+ requireRead(!prior || sameBlock(prior, finalized), 'BLOCK_REORG');
102
+ blocks.set(finalized.number, finalized);
103
+ return { latest, finalized };
104
+ };
105
+ try {
106
+ const parsed = lpV3SettlementReadInputSchema.safeParse(raw);
107
+ requireRead(parsed.success, 'INVALID_INPUT');
108
+ input = deepFreeze(parsed.data);
109
+ startedAt = clock();
110
+ const { plan, journal } = input, transactions = journal.transactions;
111
+ requireRead(journal.operationId === plan.intent.operationId && journal.planCommitment === plan.planCommitment
112
+ && canonicalJson(journal.independentIntent) === canonicalJson(plan.intent) && journal.originalVerifiedAt <= startedAt
113
+ && transactions.length === plan.calls.length, 'JOURNAL_MISMATCH');
114
+ const hashes = new Set(), requestIds = new Set();
115
+ for (const [i, tx] of transactions.entries()) {
116
+ requireRead(tx.callIndex === i && tx.request.userId === journal.userId && tx.request.address.toLowerCase() === plan.intent.account
117
+ && tx.requestDigest === createHash('sha256').update(JSON.stringify(tx.request)).digest('hex')
118
+ && !hashes.has(tx.transactionHash) && !requestIds.has(tx.request.idempotencyKey)
119
+ && (i === 0 || BigInt(tx.nonce) > BigInt(transactions[i - 1].nonce)), 'JOURNAL_MISMATCH');
120
+ hashes.add(tx.transactionHash);
121
+ requestIds.add(tx.request.idempotencyKey);
122
+ }
123
+ await chain();
124
+ // Seal the finalized boundary BEFORE collecting any transaction/receipt/state.
125
+ const initial = await heads(), sealed = initial.finalized;
126
+ requireRead(BigInt(journal.baseline.blockNumber) <= BigInt(sealed.number), 'NOT_FINALIZED');
127
+ const baselineBlock = await canonicalBlock(journal.baseline.blockNumber);
128
+ requireRead(baselineBlock.hash === journal.baseline.blockHash && baselineBlock.timestamp === journal.baseline.blockTimestamp, 'BASELINE_MISMATCH');
129
+ let context;
130
+ try {
131
+ context = library.verifyForSettlement(plan, journal.independentIntent, journal.baseline, {
132
+ operationId: journal.operationId, planCommitment: journal.planCommitment, canonical: true,
133
+ blockNumber: baselineBlock.number, blockHash: baselineBlock.hash,
134
+ originalVerifiedAt: journal.originalVerifiedAt, canonicalCheckedAt: checkTime(),
135
+ }, { now: checkTime });
136
+ }
137
+ catch {
138
+ throw new LpV3ReadFailure('SETTLEMENT_UNPROVEN');
139
+ }
140
+ /** Explicit historical adapter for the already reviewed hash-pinned reader.
141
+ * Its internal validation clock is the selected block's timestamp, never
142
+ * presented as a fresh observation. Every actual state read stays at this
143
+ * exact hash; the public result receives the real completion timestamp.
144
+ */
145
+ const historical = async (anchor) => {
146
+ let adapterFailure;
147
+ try {
148
+ const pinned = { blockHash: anchor.hash, requireCanonical: true };
149
+ let initialAnchorRead = false;
150
+ const result = await library.collectEvidence(journal.independentIntent, {
151
+ nowSeconds: () => anchor.timestamp,
152
+ client: { async request(request) {
153
+ try {
154
+ if (request.method === 'eth_getBlockByNumber') {
155
+ const tag = request.params?.[0];
156
+ requireRead((tag === 'latest' && !initialAnchorRead) || (tag === quantity(anchor.number) && initialAnchorRead), 'HISTORY_UNAVAILABLE');
157
+ initialAnchorRead = true;
158
+ const rawBlock = await rpc({ method: 'eth_getBlockByNumber', params: [quantity(anchor.number), false] });
159
+ requireRead(sameBlock(readBlock(rawBlock, 'HISTORY_UNAVAILABLE'), anchor), 'BLOCK_REORG');
160
+ return rawBlock;
161
+ }
162
+ if (request.method !== 'eth_chainId')
163
+ requireRead(initialAnchorRead && canonicalJson(request.params?.at(-1)) === canonicalJson(pinned), 'HISTORY_UNAVAILABLE');
164
+ return await rpc(request);
165
+ }
166
+ catch (error) {
167
+ if (error instanceof LpV3ReadFailure)
168
+ adapterFailure ??= error;
169
+ throw error;
170
+ }
171
+ } },
172
+ });
173
+ return lpV3AtomicChainEvidenceSchema.parse({ ...result, observedAt: checkTime() });
174
+ }
175
+ catch {
176
+ checkTime();
177
+ throw adapterFailure ?? new LpV3ReadFailure('HISTORY_UNAVAILABLE');
178
+ }
179
+ };
180
+ const baseline = await historical(baselineBlock);
181
+ requireRead(canonicalJson(stateOnly(baseline)) === canonicalJson(stateOnly(journal.baseline)), 'BASELINE_MISMATCH');
182
+ const receipts = [];
183
+ let minimumDepth;
184
+ for (const [i, expected] of transactions.entries()) {
185
+ const tx = await readSignedTransaction(await rpc({ method: 'eth_getTransactionByHash', params: [expected.transactionHash] }), expected, plan.calls[i]);
186
+ const txBlockNumber = BigInt(tx.blockNumber).toString();
187
+ const block = await canonicalBlock(txBlockNumber);
188
+ requireRead(block.hash === tx.blockHash && BigInt(block.number) > BigInt(baselineBlock.number), 'RECEIPT_MISMATCH');
189
+ const depth = BigInt(sealed.number) - BigInt(block.number) + 1n;
190
+ requireRead(depth >= BigInt(policy.minFinalizedConfirmations), 'NOT_FINALIZED');
191
+ minimumDepth = minimumDepth === undefined || depth < minimumDepth ? depth : minimumDepth;
192
+ const receipt = readReceipt(await rpc({ method: 'eth_getTransactionReceipt', params: [expected.transactionHash] }), tx, block);
193
+ const previous = receipts.at(-1);
194
+ requireRead(!previous || BigInt(receipt.blockNumber) > BigInt(previous.blockNumber)
195
+ || (receipt.blockNumber === previous.blockNumber && receipt.transactionIndex > previous.transactionIndex
196
+ && (!previous.logs.length || !receipt.logs.length || receipt.logs[0].logIndex > previous.logs.at(-1).logIndex)), 'RECEIPT_MISMATCH');
197
+ receipts.push(receipt);
198
+ }
199
+ const postBlock = blocks.get(receipts.at(-1).blockNumber);
200
+ const post = await historical(postBlock);
201
+ // No cached assertion substitutes for a fresh canonical-number mapping.
202
+ for (const number of [...blocks.keys()])
203
+ await canonicalBlock(number);
204
+ const final = await heads();
205
+ await chain();
206
+ requireRead(BigInt(final.latest.number) >= BigInt(initial.latest.number) && BigInt(final.finalized.number) >= BigInt(sealed.number), 'BLOCK_REORG');
207
+ const observedAt = checkTime();
208
+ post.observedAt = observedAt;
209
+ const evidence = { schemaVersion: 2, planCommitment: plan.planCommitment, receipts, post };
210
+ let result;
211
+ try {
212
+ result = library.verifySettlement(context, evidence, { now: () => observedAt });
213
+ }
214
+ catch {
215
+ throw new LpV3ReadFailure('SETTLEMENT_UNPROVEN');
216
+ }
217
+ return deepFreeze({ ...NO_AUTHORITY, status: 'SETTLEMENT_VERIFIED', operationId: journal.operationId, planCommitment: plan.planCommitment,
218
+ journalCommitment: commitment(input), evidence, result,
219
+ finality: { policyCommitment, observedAt, latest: summary(final.latest), finalized: summary(sealed), minimumObservedFinalizedConfirmations: minimumDepth.toString() } });
220
+ }
221
+ catch (error) {
222
+ return deepFreeze({ ...NO_AUTHORITY, status: 'HELD', settlement: 'UNKNOWN',
223
+ reason: error instanceof LpV3ReadFailure ? error.reason : 'RPC_UNAVAILABLE',
224
+ operationId: input?.journal.operationId ?? null, planCommitment: input?.plan.planCommitment ?? null });
225
+ }
226
+ finally {
227
+ stopped = true;
228
+ }
229
+ },
230
+ });
231
+ }
232
+ //# sourceMappingURL=lp-v3-atomic-read.js.map
@@ -0,0 +1,105 @@
1
+ import { z } from 'zod';
2
+ import { type LpV3GuardDeployment } from './lp-v3-atomic-contract.js';
3
+ import { type LpV3AtomicSettlementContext } from './lp-v3-atomic-plan.js';
4
+ import type { LpV3VerifyOptions } from './lp-v3-plan.js';
5
+ export declare const lpV3AtomicSettlementEvidenceSchema: z.ZodObject<{
6
+ schemaVersion: z.ZodLiteral<2>;
7
+ planCommitment: z.ZodString;
8
+ receipts: z.ZodArray<z.ZodObject<{
9
+ chainId: z.ZodLiteral<8453>;
10
+ transactionHash: z.ZodString;
11
+ blockHash: z.ZodString;
12
+ blockNumber: z.ZodString;
13
+ blockTimestamp: z.ZodNumber;
14
+ transactionIndex: z.ZodNumber;
15
+ canonical: z.ZodLiteral<true>;
16
+ status: z.ZodLiteral<"success">;
17
+ from: z.ZodString;
18
+ to: z.ZodString;
19
+ input: z.ZodString;
20
+ value: z.ZodLiteral<"0">;
21
+ logs: z.ZodArray<z.ZodObject<{
22
+ address: z.ZodString;
23
+ topics: z.ZodArray<z.ZodString>;
24
+ data: z.ZodString;
25
+ logIndex: z.ZodNumber;
26
+ }, z.core.$strict>>;
27
+ }, z.core.$strict>>;
28
+ post: z.ZodObject<{
29
+ chainId: z.ZodLiteral<8453>;
30
+ blockNumber: z.ZodString;
31
+ blockHash: z.ZodString;
32
+ blockTimestamp: z.ZodNumber;
33
+ observedAt: z.ZodNumber;
34
+ canonical: z.ZodLiteral<true>;
35
+ account: z.ZodString;
36
+ accountCode: z.ZodLiteral<"0x">;
37
+ balances: z.ZodTuple<[z.ZodString, z.ZodString], null>;
38
+ allowances: z.ZodTuple<[z.ZodString, z.ZodString], null>;
39
+ manager: z.ZodLiteral<"0x03a520b32c04bf3beef7beb72e919cf822ed34f1">;
40
+ managerFactory: z.ZodLiteral<"0x33128a8fc17869897dce68ed026d694621f6fdfd">;
41
+ factory: z.ZodLiteral<"0x33128a8fc17869897dce68ed026d694621f6fdfd">;
42
+ factoryPool: z.ZodString;
43
+ factoryCodeHash: z.ZodLiteral<`0x${string}`>;
44
+ managerCodeHash: z.ZodLiteral<`0x${string}`>;
45
+ token0CodeHash: z.ZodLiteral<`0x${string}`>;
46
+ token1CodeHash: z.ZodLiteral<`0x${string}`>;
47
+ usdcImplementation: z.ZodLiteral<"0x2ce6311ddae708829bc0784c967b7d77d19fd779">;
48
+ usdcImplementationCodeHash: z.ZodLiteral<`0x${string}`>;
49
+ usdcPaused: z.ZodLiteral<false>;
50
+ accountBlacklisted: z.ZodLiteral<false>;
51
+ managerBlacklisted: z.ZodLiteral<false>;
52
+ pool: z.ZodString;
53
+ poolFactory: z.ZodLiteral<"0x33128a8fc17869897dce68ed026d694621f6fdfd">;
54
+ token0: z.ZodLiteral<"0x4200000000000000000000000000000000000006">;
55
+ token1: z.ZodLiteral<"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913">;
56
+ fee: z.ZodNumber;
57
+ tickSpacing: z.ZodNumber;
58
+ tick: z.ZodNumber;
59
+ sqrtPriceX96: z.ZodString;
60
+ unlocked: z.ZodLiteral<true>;
61
+ schemaVersion: z.ZodLiteral<2>;
62
+ position: z.ZodObject<{
63
+ tokenId: z.ZodString;
64
+ owner: z.ZodString;
65
+ token0: z.ZodString;
66
+ token1: z.ZodString;
67
+ fee: z.ZodNumber;
68
+ tickLower: z.ZodNumber;
69
+ tickUpper: z.ZodNumber;
70
+ liquidity: z.ZodString;
71
+ tokensOwed: z.ZodTuple<[z.ZodString, z.ZodString], null>;
72
+ approved: z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<"0x0000000000000000000000000000000000000000">]>;
73
+ }, z.core.$strict>;
74
+ managerNativeBalance: z.ZodString;
75
+ guard: z.ZodNullable<z.ZodObject<{
76
+ address: z.ZodString;
77
+ runtimeCodeHash: z.ZodString;
78
+ configurationHash: z.ZodString;
79
+ deploymentChainId: z.ZodLiteral<8453>;
80
+ ownerApprovalForAll: z.ZodLiteral<false>;
81
+ guardBlacklisted: z.ZodLiteral<false>;
82
+ poolBlacklisted: z.ZodLiteral<false>;
83
+ tokenAllowances: z.ZodTuple<[z.ZodLiteral<"0">, z.ZodLiteral<"0">], null>;
84
+ tokenBalances: z.ZodTuple<[z.ZodString, z.ZodString], null>;
85
+ }, z.core.$strict>>;
86
+ }, z.core.$strict>;
87
+ }, z.core.$strict>;
88
+ export type LpV3AtomicSettlementEvidence = z.infer<typeof lpV3AtomicSettlementEvidenceSchema>;
89
+ export interface LpV3AtomicSettlementResult {
90
+ status: 'SETTLED';
91
+ action: 'increase' | 'collect';
92
+ planCommitment: string;
93
+ tokenId: string;
94
+ depositedRaw: [string, string];
95
+ collectedRaw: [string, string];
96
+ liquidityDelta: string;
97
+ erc20AllowancesCleared: true;
98
+ nftTokenApprovalCleared: true;
99
+ profitClassification: 'UNKNOWN';
100
+ distributableProfitRaw: null;
101
+ }
102
+ /** The protected host supplies independently collected, journal-bound transactions
103
+ * and canonical logs/post-state. No client assertion is a receipt or finality proof.
104
+ */
105
+ export declare function verifyLpV3AtomicSettlement(context: LpV3AtomicSettlementContext, input: unknown, policy: readonly LpV3GuardDeployment[], options?: LpV3VerifyOptions): LpV3AtomicSettlementResult;