boing-sdk 0.3.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.
Files changed (186) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +191 -0
  3. package/dist/accessList.d.ts +22 -0
  4. package/dist/accessList.d.ts.map +1 -0
  5. package/dist/accessList.js +45 -0
  6. package/dist/bincode.d.ts +92 -0
  7. package/dist/bincode.d.ts.map +1 -0
  8. package/dist/bincode.js +154 -0
  9. package/dist/callAbi.d.ts +119 -0
  10. package/dist/callAbi.d.ts.map +1 -0
  11. package/dist/callAbi.js +156 -0
  12. package/dist/calldata.d.ts +35 -0
  13. package/dist/calldata.d.ts.map +1 -0
  14. package/dist/calldata.js +93 -0
  15. package/dist/canonicalDeployArtifacts.d.ts +154 -0
  16. package/dist/canonicalDeployArtifacts.d.ts.map +1 -0
  17. package/dist/canonicalDeployArtifacts.js +271 -0
  18. package/dist/canonicalTestnet.d.ts +15 -0
  19. package/dist/canonicalTestnet.d.ts.map +1 -0
  20. package/dist/canonicalTestnet.js +15 -0
  21. package/dist/canonicalTestnetDex.d.ts +17 -0
  22. package/dist/canonicalTestnetDex.d.ts.map +1 -0
  23. package/dist/canonicalTestnetDex.js +17 -0
  24. package/dist/chainIds.d.ts +18 -0
  25. package/dist/chainIds.d.ts.map +1 -0
  26. package/dist/chainIds.js +56 -0
  27. package/dist/client.d.ts +223 -0
  28. package/dist/client.d.ts.map +1 -0
  29. package/dist/client.js +659 -0
  30. package/dist/connectionMonitor.d.ts +47 -0
  31. package/dist/connectionMonitor.d.ts.map +1 -0
  32. package/dist/connectionMonitor.js +93 -0
  33. package/dist/create2.d.ts +94 -0
  34. package/dist/create2.d.ts.map +1 -0
  35. package/dist/create2.js +225 -0
  36. package/dist/dappDeploy.d.ts +100 -0
  37. package/dist/dappDeploy.d.ts.map +1 -0
  38. package/dist/dappDeploy.js +140 -0
  39. package/dist/dappUiHelpers.d.ts +28 -0
  40. package/dist/dappUiHelpers.d.ts.map +1 -0
  41. package/dist/dappUiHelpers.js +69 -0
  42. package/dist/defaultReferenceFungibleSecuredRuntimeBytecodeHex.d.ts +6 -0
  43. package/dist/defaultReferenceFungibleSecuredRuntimeBytecodeHex.d.ts.map +1 -0
  44. package/dist/defaultReferenceFungibleSecuredRuntimeBytecodeHex.js +5 -0
  45. package/dist/defaultReferenceFungibleSecuredTemplateBytecodeHex.d.ts +6 -0
  46. package/dist/defaultReferenceFungibleSecuredTemplateBytecodeHex.d.ts.map +1 -0
  47. package/dist/defaultReferenceFungibleSecuredTemplateBytecodeHex.js +5 -0
  48. package/dist/defaultReferenceFungibleTemplateBytecodeHex.d.ts +6 -0
  49. package/dist/defaultReferenceFungibleTemplateBytecodeHex.d.ts.map +1 -0
  50. package/dist/defaultReferenceFungibleTemplateBytecodeHex.js +5 -0
  51. package/dist/defaultReferenceNftCollectionTemplateBytecodeHex.d.ts +7 -0
  52. package/dist/defaultReferenceNftCollectionTemplateBytecodeHex.d.ts.map +1 -0
  53. package/dist/defaultReferenceNftCollectionTemplateBytecodeHex.js +6 -0
  54. package/dist/dexIntegration.d.ts +61 -0
  55. package/dist/dexIntegration.d.ts.map +1 -0
  56. package/dist/dexIntegration.js +193 -0
  57. package/dist/erc721Logs.d.ts +21 -0
  58. package/dist/erc721Logs.d.ts.map +1 -0
  59. package/dist/erc721Logs.js +69 -0
  60. package/dist/errors.d.ts +60 -0
  61. package/dist/errors.d.ts.map +1 -0
  62. package/dist/errors.js +153 -0
  63. package/dist/hex.d.ts +27 -0
  64. package/dist/hex.d.ts.map +1 -0
  65. package/dist/hex.js +82 -0
  66. package/dist/index.d.ts +83 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +78 -0
  69. package/dist/indexerBatch.d.ts +111 -0
  70. package/dist/indexerBatch.d.ts.map +1 -0
  71. package/dist/indexerBatch.js +253 -0
  72. package/dist/indexerGaps.d.ts +50 -0
  73. package/dist/indexerGaps.d.ts.map +1 -0
  74. package/dist/indexerGaps.js +117 -0
  75. package/dist/indexerSync.d.ts +61 -0
  76. package/dist/indexerSync.d.ts.map +1 -0
  77. package/dist/indexerSync.js +100 -0
  78. package/dist/nativeAmm.d.ts +64 -0
  79. package/dist/nativeAmm.d.ts.map +1 -0
  80. package/dist/nativeAmm.js +174 -0
  81. package/dist/nativeAmmLogs.d.ts +48 -0
  82. package/dist/nativeAmmLogs.d.ts.map +1 -0
  83. package/dist/nativeAmmLogs.js +114 -0
  84. package/dist/nativeAmmLpVault.d.ts +94 -0
  85. package/dist/nativeAmmLpVault.d.ts.map +1 -0
  86. package/dist/nativeAmmLpVault.js +205 -0
  87. package/dist/nativeAmmPool.d.ts +124 -0
  88. package/dist/nativeAmmPool.d.ts.map +1 -0
  89. package/dist/nativeAmmPool.js +245 -0
  90. package/dist/nativeContractSubmit.d.ts +26 -0
  91. package/dist/nativeContractSubmit.d.ts.map +1 -0
  92. package/dist/nativeContractSubmit.js +23 -0
  93. package/dist/nativeDexDirectory.d.ts +83 -0
  94. package/dist/nativeDexDirectory.d.ts.map +1 -0
  95. package/dist/nativeDexDirectory.js +147 -0
  96. package/dist/nativeDexDirectoryApi.d.ts +121 -0
  97. package/dist/nativeDexDirectoryApi.d.ts.map +1 -0
  98. package/dist/nativeDexDirectoryApi.js +408 -0
  99. package/dist/nativeDexFactory.d.ts +25 -0
  100. package/dist/nativeDexFactory.d.ts.map +1 -0
  101. package/dist/nativeDexFactory.js +72 -0
  102. package/dist/nativeDexFactoryLogs.d.ts +19 -0
  103. package/dist/nativeDexFactoryLogs.d.ts.map +1 -0
  104. package/dist/nativeDexFactoryLogs.js +61 -0
  105. package/dist/nativeDexFactoryPool.d.ts +61 -0
  106. package/dist/nativeDexFactoryPool.d.ts.map +1 -0
  107. package/dist/nativeDexFactoryPool.js +120 -0
  108. package/dist/nativeDexIndexerStats.d.ts +96 -0
  109. package/dist/nativeDexIndexerStats.d.ts.map +1 -0
  110. package/dist/nativeDexIndexerStats.js +448 -0
  111. package/dist/nativeDexLedgerRouter.d.ts +67 -0
  112. package/dist/nativeDexLedgerRouter.d.ts.map +1 -0
  113. package/dist/nativeDexLedgerRouter.js +108 -0
  114. package/dist/nativeDexLpPositions.d.ts +39 -0
  115. package/dist/nativeDexLpPositions.d.ts.map +1 -0
  116. package/dist/nativeDexLpPositions.js +69 -0
  117. package/dist/nativeDexNftIndexer.d.ts +26 -0
  118. package/dist/nativeDexNftIndexer.d.ts.map +1 -0
  119. package/dist/nativeDexNftIndexer.js +50 -0
  120. package/dist/nativeDexPoolHistory.d.ts +40 -0
  121. package/dist/nativeDexPoolHistory.d.ts.map +1 -0
  122. package/dist/nativeDexPoolHistory.js +110 -0
  123. package/dist/nativeDexReceiptArchive.d.ts +25 -0
  124. package/dist/nativeDexReceiptArchive.d.ts.map +1 -0
  125. package/dist/nativeDexReceiptArchive.js +47 -0
  126. package/dist/nativeDexRouting.d.ts +160 -0
  127. package/dist/nativeDexRouting.d.ts.map +1 -0
  128. package/dist/nativeDexRouting.js +345 -0
  129. package/dist/nativeDexSeamless.d.ts +86 -0
  130. package/dist/nativeDexSeamless.d.ts.map +1 -0
  131. package/dist/nativeDexSeamless.js +131 -0
  132. package/dist/nativeDexSwap2Router.d.ts +45 -0
  133. package/dist/nativeDexSwap2Router.d.ts.map +1 -0
  134. package/dist/nativeDexSwap2Router.js +276 -0
  135. package/dist/nativeLpShareToken.d.ts +54 -0
  136. package/dist/nativeLpShareToken.d.ts.map +1 -0
  137. package/dist/nativeLpShareToken.js +135 -0
  138. package/dist/nativeTokenSecurity.d.ts +59 -0
  139. package/dist/nativeTokenSecurity.d.ts.map +1 -0
  140. package/dist/nativeTokenSecurity.js +59 -0
  141. package/dist/networkProfile.d.ts +8 -0
  142. package/dist/networkProfile.d.ts.map +1 -0
  143. package/dist/networkProfile.js +29 -0
  144. package/dist/newHeadsWs.d.ts +43 -0
  145. package/dist/newHeadsWs.d.ts.map +1 -0
  146. package/dist/newHeadsWs.js +139 -0
  147. package/dist/preflightGate.d.ts +16 -0
  148. package/dist/preflightGate.d.ts.map +1 -0
  149. package/dist/preflightGate.js +29 -0
  150. package/dist/receiptLogs.d.ts +29 -0
  151. package/dist/receiptLogs.d.ts.map +1 -0
  152. package/dist/receiptLogs.js +66 -0
  153. package/dist/referenceFungibleSecuredDeployBytecode.d.ts +54 -0
  154. package/dist/referenceFungibleSecuredDeployBytecode.d.ts.map +1 -0
  155. package/dist/referenceFungibleSecuredDeployBytecode.js +274 -0
  156. package/dist/referenceNft.d.ts +14 -0
  157. package/dist/referenceNft.d.ts.map +1 -0
  158. package/dist/referenceNft.js +34 -0
  159. package/dist/referenceToken.d.ts +14 -0
  160. package/dist/referenceToken.d.ts.map +1 -0
  161. package/dist/referenceToken.js +29 -0
  162. package/dist/retryAfter.d.ts +6 -0
  163. package/dist/retryAfter.d.ts.map +1 -0
  164. package/dist/retryAfter.js +24 -0
  165. package/dist/rpcCapabilities.d.ts +43 -0
  166. package/dist/rpcCapabilities.d.ts.map +1 -0
  167. package/dist/rpcCapabilities.js +159 -0
  168. package/dist/rpcDoctor.d.ts +27 -0
  169. package/dist/rpcDoctor.d.ts.map +1 -0
  170. package/dist/rpcDoctor.js +66 -0
  171. package/dist/rpcSurfaceUi.d.ts +32 -0
  172. package/dist/rpcSurfaceUi.d.ts.map +1 -0
  173. package/dist/rpcSurfaceUi.js +49 -0
  174. package/dist/submitFlow.d.ts +70 -0
  175. package/dist/submitFlow.d.ts.map +1 -0
  176. package/dist/submitFlow.js +121 -0
  177. package/dist/transactionBuilder.d.ts +55 -0
  178. package/dist/transactionBuilder.d.ts.map +1 -0
  179. package/dist/transactionBuilder.js +100 -0
  180. package/dist/types.d.ts +436 -0
  181. package/dist/types.d.ts.map +1 -0
  182. package/dist/types.js +4 -0
  183. package/dist/walletProvider.d.ts +46 -0
  184. package/dist/walletProvider.d.ts.map +1 -0
  185. package/dist/walletProvider.js +126 -0
  186. package/package.json +44 -0
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Ledger router: forwards native CP calldata to a pool via `Call`.
3
+ * **v1:** **128-byte** inner. **v2:** **160-byte** inner (v5 `swap_to`). **v3:** **192-byte** inner (v5 `remove_liquidity_to`).
4
+ * Matches `boing_execution::native_dex_ledger_router`. See `docs/NATIVE-DEX-LEDGER-ROUTER.md`.
5
+ */
6
+ import type { SimulateResult } from './types.js';
7
+ /** v1 `forward_pool_call` selector (low byte of word0). */
8
+ export declare const SELECTOR_NATIVE_DEX_LEDGER_ROUTER_FORWARD = 224;
9
+ /** v2 forward selector — **224-byte** outer calldata, **160-byte** inner. */
10
+ export declare const SELECTOR_NATIVE_DEX_LEDGER_ROUTER_FORWARD_V2 = 225;
11
+ /** v3 forward selector — **256-byte** outer calldata, **192-byte** inner. */
12
+ export declare const SELECTOR_NATIVE_DEX_LEDGER_ROUTER_FORWARD_V3 = 226;
13
+ /**
14
+ * Build **192** bytes: router selector + pool + inner pool calldata (**128** bytes).
15
+ * `innerPoolCalldata128` must be exactly **128** bytes (same layout as native CP pool swap / add / remove).
16
+ */
17
+ export declare function encodeNativeDexLedgerRouterForwardCalldata(poolHex32: string, innerPoolCalldata128: Uint8Array): Uint8Array;
18
+ export declare function encodeNativeDexLedgerRouterForwardCalldataHex(poolHex32: string, innerPoolCalldata128: Uint8Array): string;
19
+ /**
20
+ * Build **224** bytes: router selector **`0xE1`** + pool + inner pool calldata (**160** bytes, e.g. v5 `swap_to` from `encodeNativeAmmSwapToCalldata`).
21
+ */
22
+ export declare function encodeNativeDexLedgerRouterForwardCalldataV2(poolHex32: string, innerPoolCalldata160: Uint8Array): Uint8Array;
23
+ export declare function encodeNativeDexLedgerRouterForwardCalldataV2Hex(poolHex32: string, innerPoolCalldata160: Uint8Array): string;
24
+ /**
25
+ * Build **256** bytes: router selector **`0xE2`** + pool + inner pool calldata (**192** bytes, e.g. `encodeNativeAmmRemoveLiquidityToCalldata`).
26
+ */
27
+ export declare function encodeNativeDexLedgerRouterForwardCalldataV3(poolHex32: string, innerPoolCalldata192: Uint8Array): Uint8Array;
28
+ export declare function encodeNativeDexLedgerRouterForwardCalldataV3Hex(poolHex32: string, innerPoolCalldata192: Uint8Array): string;
29
+ /**
30
+ * Access list: signer, router, and **pool** (router `Call`s pool state).
31
+ */
32
+ export declare function buildNativeDexLedgerRouterAccessList(senderHex32: string, routerHex32: string, poolHex32: string): {
33
+ read: string[];
34
+ write: string[];
35
+ };
36
+ export declare function buildNativeDexLedgerRouterContractCallTx(senderHex32: string, routerHex32: string, poolHex32: string, innerPoolCalldata128: Uint8Array): {
37
+ type: 'contract_call';
38
+ contract: string;
39
+ calldata: string;
40
+ access_list: {
41
+ read: string[];
42
+ write: string[];
43
+ };
44
+ };
45
+ export declare function mergeNativeDexLedgerRouterAccessListWithSimulation(senderHex32: string, routerHex32: string, poolHex32: string, sim: SimulateResult): {
46
+ read: string[];
47
+ write: string[];
48
+ };
49
+ export declare function buildNativeDexLedgerRouterV2ContractCallTx(senderHex32: string, routerHex32: string, poolHex32: string, innerPoolCalldata160: Uint8Array): {
50
+ type: 'contract_call';
51
+ contract: string;
52
+ calldata: string;
53
+ access_list: {
54
+ read: string[];
55
+ write: string[];
56
+ };
57
+ };
58
+ export declare function buildNativeDexLedgerRouterV3ContractCallTx(senderHex32: string, routerHex32: string, poolHex32: string, innerPoolCalldata192: Uint8Array): {
59
+ type: 'contract_call';
60
+ contract: string;
61
+ calldata: string;
62
+ access_list: {
63
+ read: string[];
64
+ write: string[];
65
+ };
66
+ };
67
+ //# sourceMappingURL=nativeDexLedgerRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeDexLedgerRouter.d.ts","sourceRoot":"","sources":["../src/nativeDexLedgerRouter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,2DAA2D;AAC3D,eAAO,MAAM,yCAAyC,MAAO,CAAC;AAC9D,6EAA6E;AAC7E,eAAO,MAAM,4CAA4C,MAAO,CAAC;AACjE,6EAA6E;AAC7E,eAAO,MAAM,4CAA4C,MAAO,CAAC;AAQjE;;;GAGG;AACH,wBAAgB,0CAA0C,CACxD,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,UAAU,GAC/B,UAAU,CAUZ;AAED,wBAAgB,6CAA6C,CAC3D,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,UAAU,GAC/B,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,4CAA4C,CAC1D,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,UAAU,GAC/B,UAAU,CAUZ;AAED,wBAAgB,+CAA+C,CAC7D,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,UAAU,GAC/B,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,4CAA4C,CAC1D,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,UAAU,GAC/B,UAAU,CAUZ;AAED,wBAAgB,+CAA+C,CAC7D,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,UAAU,GAC/B,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,oCAAoC,CAClD,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAMrC;AAED,wBAAgB,wCAAwC,CACtD,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,UAAU,GAC/B;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAClD,CAOA;AAED,wBAAgB,kDAAkD,CAChE,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,cAAc,GAClB;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAGrC;AAED,wBAAgB,0CAA0C,CACxD,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,UAAU,GAC/B;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAClD,CAOA;AAED,wBAAgB,0CAA0C,CACxD,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,oBAAoB,EAAE,UAAU,GAC/B;IACD,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAClD,CAOA"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Ledger router: forwards native CP calldata to a pool via `Call`.
3
+ * **v1:** **128-byte** inner. **v2:** **160-byte** inner (v5 `swap_to`). **v3:** **192-byte** inner (v5 `remove_liquidity_to`).
4
+ * Matches `boing_execution::native_dex_ledger_router`. See `docs/NATIVE-DEX-LEDGER-ROUTER.md`.
5
+ */
6
+ import { bytesToHex, hexToBytes, validateHex32 } from './hex.js';
7
+ import { mergeAccessListWithSimulation } from './accessList.js';
8
+ /** v1 `forward_pool_call` selector (low byte of word0). */
9
+ export const SELECTOR_NATIVE_DEX_LEDGER_ROUTER_FORWARD = 0xe0;
10
+ /** v2 forward selector — **224-byte** outer calldata, **160-byte** inner. */
11
+ export const SELECTOR_NATIVE_DEX_LEDGER_ROUTER_FORWARD_V2 = 0xe1;
12
+ /** v3 forward selector — **256-byte** outer calldata, **192-byte** inner. */
13
+ export const SELECTOR_NATIVE_DEX_LEDGER_ROUTER_FORWARD_V3 = 0xe2;
14
+ function selectorWord(selector) {
15
+ const w = new Uint8Array(32);
16
+ w[31] = selector & 0xff;
17
+ return w;
18
+ }
19
+ /**
20
+ * Build **192** bytes: router selector + pool + inner pool calldata (**128** bytes).
21
+ * `innerPoolCalldata128` must be exactly **128** bytes (same layout as native CP pool swap / add / remove).
22
+ */
23
+ export function encodeNativeDexLedgerRouterForwardCalldata(poolHex32, innerPoolCalldata128) {
24
+ if (innerPoolCalldata128.length !== 128) {
25
+ throw new Error(`inner pool calldata must be 128 bytes, got ${innerPoolCalldata128.length}`);
26
+ }
27
+ const pool = hexToBytes(validateHex32(poolHex32));
28
+ const out = new Uint8Array(192);
29
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_LEDGER_ROUTER_FORWARD));
30
+ out.set(pool, 32);
31
+ out.set(innerPoolCalldata128, 64);
32
+ return out;
33
+ }
34
+ export function encodeNativeDexLedgerRouterForwardCalldataHex(poolHex32, innerPoolCalldata128) {
35
+ return bytesToHex(encodeNativeDexLedgerRouterForwardCalldata(poolHex32, innerPoolCalldata128));
36
+ }
37
+ /**
38
+ * Build **224** bytes: router selector **`0xE1`** + pool + inner pool calldata (**160** bytes, e.g. v5 `swap_to` from `encodeNativeAmmSwapToCalldata`).
39
+ */
40
+ export function encodeNativeDexLedgerRouterForwardCalldataV2(poolHex32, innerPoolCalldata160) {
41
+ if (innerPoolCalldata160.length !== 160) {
42
+ throw new Error(`inner pool calldata must be 160 bytes, got ${innerPoolCalldata160.length}`);
43
+ }
44
+ const pool = hexToBytes(validateHex32(poolHex32));
45
+ const out = new Uint8Array(224);
46
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_LEDGER_ROUTER_FORWARD_V2));
47
+ out.set(pool, 32);
48
+ out.set(innerPoolCalldata160, 64);
49
+ return out;
50
+ }
51
+ export function encodeNativeDexLedgerRouterForwardCalldataV2Hex(poolHex32, innerPoolCalldata160) {
52
+ return bytesToHex(encodeNativeDexLedgerRouterForwardCalldataV2(poolHex32, innerPoolCalldata160));
53
+ }
54
+ /**
55
+ * Build **256** bytes: router selector **`0xE2`** + pool + inner pool calldata (**192** bytes, e.g. `encodeNativeAmmRemoveLiquidityToCalldata`).
56
+ */
57
+ export function encodeNativeDexLedgerRouterForwardCalldataV3(poolHex32, innerPoolCalldata192) {
58
+ if (innerPoolCalldata192.length !== 192) {
59
+ throw new Error(`inner pool calldata must be 192 bytes, got ${innerPoolCalldata192.length}`);
60
+ }
61
+ const pool = hexToBytes(validateHex32(poolHex32));
62
+ const out = new Uint8Array(256);
63
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_LEDGER_ROUTER_FORWARD_V3));
64
+ out.set(pool, 32);
65
+ out.set(innerPoolCalldata192, 64);
66
+ return out;
67
+ }
68
+ export function encodeNativeDexLedgerRouterForwardCalldataV3Hex(poolHex32, innerPoolCalldata192) {
69
+ return bytesToHex(encodeNativeDexLedgerRouterForwardCalldataV3(poolHex32, innerPoolCalldata192));
70
+ }
71
+ /**
72
+ * Access list: signer, router, and **pool** (router `Call`s pool state).
73
+ */
74
+ export function buildNativeDexLedgerRouterAccessList(senderHex32, routerHex32, poolHex32) {
75
+ const s = validateHex32(senderHex32).toLowerCase();
76
+ const r = validateHex32(routerHex32).toLowerCase();
77
+ const p = validateHex32(poolHex32).toLowerCase();
78
+ const xs = [s, r, p].sort();
79
+ return { read: xs, write: xs };
80
+ }
81
+ export function buildNativeDexLedgerRouterContractCallTx(senderHex32, routerHex32, poolHex32, innerPoolCalldata128) {
82
+ return {
83
+ type: 'contract_call',
84
+ contract: validateHex32(routerHex32).toLowerCase(),
85
+ calldata: encodeNativeDexLedgerRouterForwardCalldataHex(poolHex32, innerPoolCalldata128),
86
+ access_list: buildNativeDexLedgerRouterAccessList(senderHex32, routerHex32, poolHex32),
87
+ };
88
+ }
89
+ export function mergeNativeDexLedgerRouterAccessListWithSimulation(senderHex32, routerHex32, poolHex32, sim) {
90
+ const base = buildNativeDexLedgerRouterAccessList(senderHex32, routerHex32, poolHex32);
91
+ return mergeAccessListWithSimulation(base.read, base.write, sim);
92
+ }
93
+ export function buildNativeDexLedgerRouterV2ContractCallTx(senderHex32, routerHex32, poolHex32, innerPoolCalldata160) {
94
+ return {
95
+ type: 'contract_call',
96
+ contract: validateHex32(routerHex32).toLowerCase(),
97
+ calldata: encodeNativeDexLedgerRouterForwardCalldataV2Hex(poolHex32, innerPoolCalldata160),
98
+ access_list: buildNativeDexLedgerRouterAccessList(senderHex32, routerHex32, poolHex32),
99
+ };
100
+ }
101
+ export function buildNativeDexLedgerRouterV3ContractCallTx(senderHex32, routerHex32, poolHex32, innerPoolCalldata192) {
102
+ return {
103
+ type: 'contract_call',
104
+ contract: validateHex32(routerHex32).toLowerCase(),
105
+ calldata: encodeNativeDexLedgerRouterForwardCalldataV3Hex(poolHex32, innerPoolCalldata192),
106
+ access_list: buildNativeDexLedgerRouterAccessList(senderHex32, routerHex32, poolHex32),
107
+ };
108
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Resolve native LP **vault → pool / share token** from on-chain storage (model **A** path) and
3
+ * read **LP share balances** for an owner. Replaces static env maps when the vault is configured.
4
+ *
5
+ * See [NATIVE-AMM-LP-VAULT.md](../docs/NATIVE-AMM-LP-VAULT.md), [PROTOCOL_NATIVE_DEX_RPC_AND_INDEXING_ROADMAP.md](../docs/PROTOCOL_NATIVE_DEX_RPC_AND_INDEXING_ROADMAP.md) §2.
6
+ */
7
+ import type { BoingClient } from './client.js';
8
+ export type NativeAmmVaultPoolResolution = {
9
+ vaultHex: `0x${string}`;
10
+ configured: boolean;
11
+ poolHex: `0x${string}` | null;
12
+ shareTokenHex: `0x${string}` | null;
13
+ };
14
+ /**
15
+ * Read **`configure(pool, share)`** storage for one vault (`boing_getContractStorage`).
16
+ */
17
+ export declare function resolveNativeAmmVaultPoolMapping(client: BoingClient, vaultHex32: string): Promise<NativeAmmVaultPoolResolution>;
18
+ /**
19
+ * Parallel **`resolveNativeAmmVaultPoolMapping`** (bounded concurrency).
20
+ */
21
+ export declare function resolveNativeAmmVaultPoolMappings(client: BoingClient, vaultHexes: readonly string[], concurrency?: number): Promise<NativeAmmVaultPoolResolution[]>;
22
+ export type NativeDexLpVaultSharePositionForOwner = {
23
+ vaultHex: `0x${string}`;
24
+ ownerHex: `0x${string}`;
25
+ poolHex: `0x${string}` | null;
26
+ shareTokenHex: `0x${string}` | null;
27
+ /** LP share units (u128) when vault configured and share token known; otherwise `null`. */
28
+ shareBalanceRaw: bigint | null;
29
+ note: string;
30
+ };
31
+ /**
32
+ * **Model A (vault + share token):** resolve vault storage, then read holder balance on the share token.
33
+ * Does not prove minter is the vault — use **`fetchNativeAmmLpVaultProductReadiness`** for product gating.
34
+ */
35
+ export declare function fetchNativeDexLpVaultSharePositionForOwner(client: BoingClient, input: {
36
+ vaultHex32: string;
37
+ ownerHex32: string;
38
+ }): Promise<NativeDexLpVaultSharePositionForOwner>;
39
+ //# sourceMappingURL=nativeDexLpPositions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeDexLpPositions.d.ts","sourceRoot":"","sources":["../src/nativeDexLpPositions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF;;GAEG;AACH,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,4BAA4B,CAAC,CASvC;AAED;;GAEG;AACH,wBAAsB,iCAAiC,CACrD,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,WAAW,GAAE,MAAU,GACtB,OAAO,CAAC,4BAA4B,EAAE,CAAC,CAIzC;AAED,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,2FAA2F;IAC3F,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;;GAGG;AACH,wBAAsB,0CAA0C,CAC9D,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,qCAAqC,CAAC,CAkChD"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Resolve native LP **vault → pool / share token** from on-chain storage (model **A** path) and
3
+ * read **LP share balances** for an owner. Replaces static env maps when the vault is configured.
4
+ *
5
+ * See [NATIVE-AMM-LP-VAULT.md](../docs/NATIVE-AMM-LP-VAULT.md), [PROTOCOL_NATIVE_DEX_RPC_AND_INDEXING_ROADMAP.md](../docs/PROTOCOL_NATIVE_DEX_RPC_AND_INDEXING_ROADMAP.md) §2.
6
+ */
7
+ import { validateHex32 } from './hex.js';
8
+ import { mapWithConcurrencyLimit } from './indexerBatch.js';
9
+ import { fetchNativeAmmLpVaultStorageSnapshot } from './nativeAmmLpVault.js';
10
+ import { fetchLpShareTokenBalanceRaw } from './nativeLpShareToken.js';
11
+ /**
12
+ * Read **`configure(pool, share)`** storage for one vault (`boing_getContractStorage`).
13
+ */
14
+ export async function resolveNativeAmmVaultPoolMapping(client, vaultHex32) {
15
+ const vaultHex = validateHex32(vaultHex32).toLowerCase();
16
+ const snap = await fetchNativeAmmLpVaultStorageSnapshot(client, vaultHex);
17
+ return {
18
+ vaultHex,
19
+ configured: snap.configured,
20
+ poolHex: snap.poolHex,
21
+ shareTokenHex: snap.shareTokenHex,
22
+ };
23
+ }
24
+ /**
25
+ * Parallel **`resolveNativeAmmVaultPoolMapping`** (bounded concurrency).
26
+ */
27
+ export async function resolveNativeAmmVaultPoolMappings(client, vaultHexes, concurrency = 4) {
28
+ return mapWithConcurrencyLimit([...vaultHexes], concurrency, (v) => resolveNativeAmmVaultPoolMapping(client, v));
29
+ }
30
+ /**
31
+ * **Model A (vault + share token):** resolve vault storage, then read holder balance on the share token.
32
+ * Does not prove minter is the vault — use **`fetchNativeAmmLpVaultProductReadiness`** for product gating.
33
+ */
34
+ export async function fetchNativeDexLpVaultSharePositionForOwner(client, input) {
35
+ const vaultHex = validateHex32(input.vaultHex32).toLowerCase();
36
+ const ownerHex = validateHex32(input.ownerHex32).toLowerCase();
37
+ const snap = await fetchNativeAmmLpVaultStorageSnapshot(client, vaultHex);
38
+ if (!snap.configured || snap.shareTokenHex == null) {
39
+ return {
40
+ vaultHex,
41
+ ownerHex,
42
+ poolHex: snap.poolHex,
43
+ shareTokenHex: snap.shareTokenHex,
44
+ shareBalanceRaw: null,
45
+ note: snap.configured ? 'vault_missing_share_token' : 'vault_not_configured',
46
+ };
47
+ }
48
+ try {
49
+ const shareBalanceRaw = await fetchLpShareTokenBalanceRaw(client, snap.shareTokenHex, ownerHex);
50
+ return {
51
+ vaultHex,
52
+ ownerHex,
53
+ poolHex: snap.poolHex,
54
+ shareTokenHex: snap.shareTokenHex,
55
+ shareBalanceRaw,
56
+ note: 'ok',
57
+ };
58
+ }
59
+ catch (e) {
60
+ return {
61
+ vaultHex,
62
+ ownerHex,
63
+ poolHex: snap.poolHex,
64
+ shareTokenHex: snap.shareTokenHex,
65
+ shareBalanceRaw: null,
66
+ note: e instanceof Error ? e.message : String(e),
67
+ };
68
+ }
69
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Collect latest **ERC-721 `Transfer`** ownership rows for one contract over a block range.
3
+ * Used by **`native-dex-indexer`** D1 table **`directory_nft_owner`** (snapshot per sync).
4
+ */
5
+ import type { BoingClient } from './client.js';
6
+ export type NativeDexIndexedNftOwnerRow = {
7
+ contractHex: string;
8
+ /** Decimal string (arbitrary size uint256). */
9
+ tokenIdDec: string;
10
+ ownerHex: string;
11
+ lastBlockHeight: number;
12
+ txId: string;
13
+ logIndex: number;
14
+ };
15
+ export type CollectNftOwnersFromErc721TransfersOptions = {
16
+ fromBlock: number;
17
+ toBlock: number;
18
+ maxConcurrent?: number;
19
+ };
20
+ /**
21
+ * **`boing_getLogs`** on **`contractHex`** for **`Transfer`**, then fold to **last** owner per **`tokenId`**
22
+ * within the merged log order `(block_height, tx_index, log_index)`.
23
+ */
24
+ export declare function collectNftOwnersFromErc721Transfers(client: BoingClient, contractHex32: string, opts: CollectNftOwnersFromErc721TransfersOptions): Promise<NativeDexIndexedNftOwnerRow[]>;
25
+ export { ERC721_TRANSFER_TOPIC0_HEX } from './erc721Logs.js';
26
+ //# sourceMappingURL=nativeDexNftIndexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeDexNftIndexer.d.ts","sourceRoot":"","sources":["../src/nativeDexNftIndexer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,MAAM,MAAM,2BAA2B,GAAG;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,0CAA0C,GAAG;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,mCAAmC,CACvD,MAAM,EAAE,WAAW,EACnB,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,0CAA0C,GAC/C,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAyCxC;AAED,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Collect latest **ERC-721 `Transfer`** ownership rows for one contract over a block range.
3
+ * Used by **`native-dex-indexer`** D1 table **`directory_nft_owner`** (snapshot per sync).
4
+ */
5
+ import { ERC721_TRANSFER_TOPIC0_HEX, filterMapErc721TransferRpcLogs } from './erc721Logs.js';
6
+ import { validateHex32 } from './hex.js';
7
+ import { getLogsChunked } from './indexerBatch.js';
8
+ /**
9
+ * **`boing_getLogs`** on **`contractHex`** for **`Transfer`**, then fold to **last** owner per **`tokenId`**
10
+ * within the merged log order `(block_height, tx_index, log_index)`.
11
+ */
12
+ export async function collectNftOwnersFromErc721Transfers(client, contractHex32, opts) {
13
+ const contract = validateHex32(String(contractHex32).trim()).toLowerCase();
14
+ const fromB = Math.max(0, Math.floor(opts.fromBlock));
15
+ const toB = Math.max(fromB, Math.floor(opts.toBlock));
16
+ const logs = await getLogsChunked(client, {
17
+ fromBlock: fromB,
18
+ toBlock: toB,
19
+ address: contract,
20
+ topics: [ERC721_TRANSFER_TOPIC0_HEX],
21
+ }, { maxConcurrent: opts.maxConcurrent ?? 1 });
22
+ const parsed = filterMapErc721TransferRpcLogs(logs);
23
+ const latest = new Map();
24
+ for (const t of parsed) {
25
+ const tokenIdDec = t.tokenId.toString(10);
26
+ const prev = latest.get(tokenIdDec);
27
+ if (prev == null ||
28
+ t.blockHeight > prev.lastBlockHeight ||
29
+ (t.blockHeight === prev.lastBlockHeight && t.txId.localeCompare(prev.txId) > 0) ||
30
+ (t.blockHeight === prev.lastBlockHeight && t.txId === prev.txId && t.logIndex > prev.logIndex)) {
31
+ latest.set(tokenIdDec, {
32
+ contractHex: contract,
33
+ tokenIdDec,
34
+ ownerHex: t.toHex,
35
+ lastBlockHeight: t.blockHeight,
36
+ txId: t.txId,
37
+ logIndex: t.logIndex,
38
+ });
39
+ }
40
+ }
41
+ return [...latest.values()].sort((a, b) => {
42
+ if (a.lastBlockHeight !== b.lastBlockHeight)
43
+ return a.lastBlockHeight - b.lastBlockHeight;
44
+ const c = a.txId.localeCompare(b.txId);
45
+ if (c !== 0)
46
+ return c;
47
+ return a.logIndex - b.logIndex;
48
+ });
49
+ }
50
+ export { ERC721_TRANSFER_TOPIC0_HEX } from './erc721Logs.js';
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Collect native AMM **`Log2`** events for pools over a block range (materialized snapshot input).
3
+ * Used by the **`native-dex-indexer`** Worker D1 table **`directory_pool_events`** — **not** reorg-safe;
4
+ * see [PROTOCOL_NATIVE_DEX_RPC_AND_INDEXING_ROADMAP.md](../docs/PROTOCOL_NATIVE_DEX_RPC_AND_INDEXING_ROADMAP.md) §3.
5
+ */
6
+ import type { BoingClient } from './client.js';
7
+ import { type NativeAmmLog2Kind, type NativeAmmRpcLogParsed } from './nativeAmmLogs.js';
8
+ export type NativeDexMaterializedPoolEvent = {
9
+ kind: NativeAmmLog2Kind;
10
+ poolHex: string;
11
+ blockHeight: number;
12
+ /** Block hash from **`boing_getBlockByHeight`** at ingest time (`null` if node omitted `hash`). */
13
+ blockHash: string | null;
14
+ txId: string;
15
+ logIndex: number;
16
+ callerHex: string;
17
+ /** Stringified integers for JSON columns. */
18
+ payload: Record<string, string>;
19
+ };
20
+ export declare function materializeNativeAmmPoolEvent(ev: NativeAmmRpcLogParsed, poolHexLower: string): NativeDexMaterializedPoolEvent;
21
+ export type CollectNativeDexPoolEventsOptions = {
22
+ /** Inclusive; clamped to `>= 0`. */
23
+ fromBlock: number;
24
+ /** Inclusive. */
25
+ toBlock: number;
26
+ maxConcurrent?: number;
27
+ /**
28
+ * When **`true`** (default), batch **`boing_getBlockByHeight`** to fill **`blockHash`** on each event.
29
+ */
30
+ attachBlockHashes?: boolean;
31
+ };
32
+ /**
33
+ * Set **`blockHash`** on each event from **`boing_getBlockByHeight(blockHeight)`** (deduped per height).
34
+ */
35
+ export declare function hydrateNativeDexPoolEventsWithBlockHashes(client: BoingClient, events: NativeDexMaterializedPoolEvent[]): Promise<void>;
36
+ /**
37
+ * For each pool, **`boing_getLogs`** over **`[fromBlock, toBlock]`** and return parsed native AMM **`Log2`** rows.
38
+ */
39
+ export declare function collectNativeDexPoolEventsForPools(client: BoingClient, poolHexes: readonly string[], opts: CollectNativeDexPoolEventsOptions): Promise<NativeDexMaterializedPoolEvent[]>;
40
+ //# sourceMappingURL=nativeDexPoolHistory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeDexPoolHistory.d.ts","sourceRoot":"","sources":["../src/nativeDexPoolHistory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC3B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,mGAAmG;IACnG,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AA2BF,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,qBAAqB,EACzB,YAAY,EAAE,MAAM,GACnB,8BAA8B,CAWhC;AAED,MAAM,MAAM,iCAAiC,GAAG;IAC9C,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,wBAAsB,yCAAyC,CAC7D,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,8BAA8B,EAAE,GACvC,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;GAEG;AACH,wBAAsB,kCAAkC,CACtD,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,IAAI,EAAE,iCAAiC,GACtC,OAAO,CAAC,8BAA8B,EAAE,CAAC,CAyC3C"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Collect native AMM **`Log2`** events for pools over a block range (materialized snapshot input).
3
+ * Used by the **`native-dex-indexer`** Worker D1 table **`directory_pool_events`** — **not** reorg-safe;
4
+ * see [PROTOCOL_NATIVE_DEX_RPC_AND_INDEXING_ROADMAP.md](../docs/PROTOCOL_NATIVE_DEX_RPC_AND_INDEXING_ROADMAP.md) §3.
5
+ */
6
+ import { validateHex32 } from './hex.js';
7
+ import { getLogsChunked } from './indexerBatch.js';
8
+ import { filterMapNativeAmmRpcLogs, } from './nativeAmmLogs.js';
9
+ function payloadFromParsed(ev) {
10
+ switch (ev.kind) {
11
+ case 'swap':
12
+ return {
13
+ direction: ev.direction.toString(),
14
+ amountIn: ev.amountIn.toString(),
15
+ amountOutAfterFee: ev.amountOutAfterFee.toString(),
16
+ };
17
+ case 'addLiquidity':
18
+ return {
19
+ amountA: ev.amountA.toString(),
20
+ amountB: ev.amountB.toString(),
21
+ lpMinted: ev.lpMinted.toString(),
22
+ };
23
+ case 'removeLiquidity':
24
+ return {
25
+ liquidityBurned: ev.liquidityBurned.toString(),
26
+ amountAOut: ev.amountAOut.toString(),
27
+ amountBOut: ev.amountBOut.toString(),
28
+ };
29
+ default:
30
+ return {};
31
+ }
32
+ }
33
+ export function materializeNativeAmmPoolEvent(ev, poolHexLower) {
34
+ return {
35
+ kind: ev.kind,
36
+ poolHex: poolHexLower,
37
+ blockHeight: ev.block_height,
38
+ blockHash: null,
39
+ txId: ev.tx_id,
40
+ logIndex: ev.log_index,
41
+ callerHex: ev.callerHex,
42
+ payload: payloadFromParsed(ev),
43
+ };
44
+ }
45
+ /**
46
+ * Set **`blockHash`** on each event from **`boing_getBlockByHeight(blockHeight)`** (deduped per height).
47
+ */
48
+ export async function hydrateNativeDexPoolEventsWithBlockHashes(client, events) {
49
+ if (events.length === 0)
50
+ return;
51
+ const heights = [...new Set(events.map((e) => e.blockHeight))].sort((a, b) => a - b);
52
+ const hashByHeight = new Map();
53
+ for (const h of heights) {
54
+ try {
55
+ const blk = await client.getBlockByHeight(h, false);
56
+ const raw = blk?.hash;
57
+ const norm = typeof raw === 'string' && /^0x[0-9a-f]{64}$/i.test(raw) ? raw.toLowerCase() : null;
58
+ hashByHeight.set(h, norm);
59
+ }
60
+ catch {
61
+ hashByHeight.set(h, null);
62
+ }
63
+ }
64
+ for (const ev of events) {
65
+ ev.blockHash = hashByHeight.get(ev.blockHeight) ?? null;
66
+ }
67
+ }
68
+ /**
69
+ * For each pool, **`boing_getLogs`** over **`[fromBlock, toBlock]`** and return parsed native AMM **`Log2`** rows.
70
+ */
71
+ export async function collectNativeDexPoolEventsForPools(client, poolHexes, opts) {
72
+ const fromB = Math.max(0, Math.floor(opts.fromBlock));
73
+ const toB = Math.max(fromB, Math.floor(opts.toBlock));
74
+ const out = [];
75
+ const maxConcurrent = opts.maxConcurrent ?? 1;
76
+ for (const raw of poolHexes) {
77
+ let pool;
78
+ try {
79
+ pool = validateHex32(String(raw).trim()).toLowerCase();
80
+ }
81
+ catch {
82
+ continue;
83
+ }
84
+ try {
85
+ const logs = await getLogsChunked(client, { fromBlock: fromB, toBlock: toB, address: pool }, { maxConcurrent });
86
+ const parsed = filterMapNativeAmmRpcLogs(logs);
87
+ for (const ev of parsed) {
88
+ if (ev.address && ev.address.toLowerCase() !== pool)
89
+ continue;
90
+ out.push(materializeNativeAmmPoolEvent(ev, pool));
91
+ }
92
+ }
93
+ catch {
94
+ /* skip pool on RPC errors */
95
+ }
96
+ }
97
+ out.sort((a, b) => {
98
+ if (a.blockHeight !== b.blockHeight)
99
+ return a.blockHeight - b.blockHeight;
100
+ const c = a.txId.localeCompare(b.txId);
101
+ if (c !== 0)
102
+ return c;
103
+ return a.logIndex - b.logIndex;
104
+ });
105
+ const attach = opts.attachBlockHashes !== false;
106
+ if (attach && out.length > 0) {
107
+ await hydrateNativeDexPoolEventsWithBlockHashes(client, out);
108
+ }
109
+ return out;
110
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Bounded **execution log** rows from **`boing_getBlockByHeight(..., true)`** (receipts included).
3
+ * For optional **`directory_receipt_log`** in the native-dex-indexer Worker — not full-chain history.
4
+ */
5
+ import type { BoingClient } from './client.js';
6
+ export type NativeDexArchivedReceiptLogRow = {
7
+ blockHeight: number;
8
+ blockHash: string | null;
9
+ txId: string;
10
+ /** Index within **`receipt.logs`** for this transaction. */
11
+ logIndex: number;
12
+ topic0Hex: string | null;
13
+ topicsJson: string;
14
+ dataHex: string;
15
+ };
16
+ export type CollectArchivedReceiptLogRowsOptions = {
17
+ maxConcurrent?: number;
18
+ /** Safety cap per sync (default **3000**). */
19
+ maxRows?: number;
20
+ };
21
+ /**
22
+ * Walk **`[fromHeight, toHeight]`** inclusive; missing blocks are **omitted** (`onMissingBlock: 'omit'`).
23
+ */
24
+ export declare function collectArchivedReceiptLogRows(client: BoingClient, fromHeight: number, toHeight: number, options?: CollectArchivedReceiptLogRowsOptions): Promise<NativeDexArchivedReceiptLogRow[]>;
25
+ //# sourceMappingURL=nativeDexReceiptArchive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeDexReceiptArchive.d.ts","sourceRoot":"","sources":["../src/nativeDexReceiptArchive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,MAAM,MAAM,8BAA8B,GAAG;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,oCAAoC,GAC7C,OAAO,CAAC,8BAA8B,EAAE,CAAC,CAoC3C"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Bounded **execution log** rows from **`boing_getBlockByHeight(..., true)`** (receipts included).
3
+ * For optional **`directory_receipt_log`** in the native-dex-indexer Worker — not full-chain history.
4
+ */
5
+ import { fetchBlocksWithReceiptsForHeightRange } from './indexerBatch.js';
6
+ import { iterBlockReceiptLogs, logTopic0 } from './receiptLogs.js';
7
+ /**
8
+ * Walk **`[fromHeight, toHeight]`** inclusive; missing blocks are **omitted** (`onMissingBlock: 'omit'`).
9
+ */
10
+ export async function collectArchivedReceiptLogRows(client, fromHeight, toHeight, options) {
11
+ const fromB = Math.max(0, Math.floor(fromHeight));
12
+ const toB = Math.max(fromB, Math.floor(toHeight));
13
+ const maxRows = options?.maxRows ?? 3000;
14
+ const bundles = await fetchBlocksWithReceiptsForHeightRange(client, fromB, toB, {
15
+ onMissingBlock: 'omit',
16
+ maxConcurrent: options?.maxConcurrent ?? 1,
17
+ });
18
+ const out = [];
19
+ for (const { height, block } of bundles) {
20
+ const bh = block.hash;
21
+ const blockHash = typeof bh === 'string' && /^0x[0-9a-f]{64}$/i.test(bh) ? bh.toLowerCase() : null;
22
+ for (const { receipt, log, logIndex } of iterBlockReceiptLogs(block)) {
23
+ if (out.length >= maxRows)
24
+ return out;
25
+ let topic0Hex = null;
26
+ try {
27
+ topic0Hex = logTopic0(log) ?? null;
28
+ }
29
+ catch {
30
+ topic0Hex = null;
31
+ }
32
+ const topics = log.topics ?? [];
33
+ const topicsJson = JSON.stringify(topics.map((t) => String(t).toLowerCase()));
34
+ const dataHex = String(log.data || '0x').toLowerCase();
35
+ out.push({
36
+ blockHeight: height,
37
+ blockHash,
38
+ txId: receipt.tx_id,
39
+ logIndex,
40
+ topic0Hex,
41
+ topicsJson,
42
+ dataHex,
43
+ });
44
+ }
45
+ }
46
+ return out;
47
+ }