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,131 @@
1
+ /**
2
+ * Copy, preflight, and one-shot tx helpers for native Boing DEX integration.
3
+ * Reinforces that Boing is **not** a drop-in Uniswap/EVM router and keeps flows **Boing-RPC-only**.
4
+ */
5
+ import { bytesToHex, validateHex32 } from './hex.js';
6
+ import { encodeNativeAmmSwapCalldata } from './nativeAmm.js';
7
+ import { buildNativeConstantProductContractCallTx, buildNativeDexMultihopRouterContractCallTx, mergeNativeDexMultihopRouterAccessListWithSimulation, } from './nativeAmmPool.js';
8
+ import { encodeNativeDexMultihopRouterCalldata128FromRoute, encodeNativeDexMultihopRouterCalldata160FromRoute, minOutPerHopFromQuotedRouteSlippageBps, uniqueSortedTokenHex32FromCpRoute, } from './nativeDexRouting.js';
9
+ import { assertBoingRpcEnvironment } from './preflightGate.js';
10
+ /** Short line for tooltips / footers. */
11
+ export const BOING_NATIVE_DEX_NOT_EVM_TAGLINE = 'Boing native DEX uses 32-byte account ids, explicit access lists, and VM-specific calldata—not a paste-any-Uniswap-address router.';
12
+ /** Bullet list for onboarding modals or docs snippets. */
13
+ export const BOING_NATIVE_DEX_NOT_EVM_BULLETS = [
14
+ 'Accounts are 32-byte Boing AccountIds (64 hex chars), not 20-byte Ethereum contract addresses.',
15
+ 'Each `contract_call` needs calldata per NATIVE-AMM / NATIVE-DEX specs plus explicit `access_list` read/write sets.',
16
+ 'Pool, factory, multihop router, ledger forwarders, and LP vault/share ids resolve via RPC `end_user` hints, `fetchNativeDexIntegrationDefaults`, env overrides, or CREATE2 prediction—there is no universal router ABI.',
17
+ ];
18
+ export function formatBoingNativeDexNotEvmDisclaimer() {
19
+ const bullets = BOING_NATIVE_DEX_NOT_EVM_BULLETS.map((b) => `• ${b}`).join('\n');
20
+ return `${BOING_NATIVE_DEX_NOT_EVM_TAGLINE}\n\n${bullets}`;
21
+ }
22
+ /**
23
+ * Surfaces missing operator hints so UIs can link to ops runbooks instead of failing silently.
24
+ */
25
+ export function describeNativeDexDefaultGaps(defaults) {
26
+ const out = [];
27
+ if (defaults.nativeCpPoolAccountHex == null) {
28
+ out.push('No resolved native constant-product pool id: set node env BOING_CANONICAL_NATIVE_CP_POOL, use chain 6913 embedded fallback, or pass a pool override in your app.');
29
+ }
30
+ if (defaults.nativeDexFactoryAccountHex == null) {
31
+ out.push('No native DEX factory id: set BOING_CANONICAL_NATIVE_DEX_FACTORY on the node or pass a factory override so directory scans and pair resolution can run.');
32
+ }
33
+ if (defaults.nativeDexMultihopSwapRouterAccountHex == null) {
34
+ out.push('No native multihop swap router id: set BOING_CANONICAL_NATIVE_DEX_MULTIHOP_SWAP_ROUTER, use chain 6913 embedded fallback, or pass a router override to submit bundled multi-pool swaps in one tx.');
35
+ }
36
+ return out;
37
+ }
38
+ /** RPC methods a typical native DEX dApp (read + simulate + logs) expects from **boing-node**. */
39
+ export const BOING_NATIVE_DEX_TOOLKIT_RPC_METHODS = [
40
+ 'boing_getNetworkInfo',
41
+ 'boing_simulateTransaction',
42
+ 'boing_getLogs',
43
+ 'boing_getContractStorage',
44
+ ];
45
+ /**
46
+ * {@link assertBoingRpcEnvironment} with {@link BOING_NATIVE_DEX_TOOLKIT_RPC_METHODS}.
47
+ * Throws {@link BoingRpcPreflightError} when the endpoint is missing methods or failing discovery.
48
+ */
49
+ export async function assertBoingNativeDexToolkitRpc(client) {
50
+ return assertBoingRpcEnvironment(client, {
51
+ requiredMethods: [...BOING_NATIVE_DEX_TOOLKIT_RPC_METHODS],
52
+ });
53
+ }
54
+ /** User-facing text when {@link assertBoingNativeDexToolkitRpc} fails (QA / pruned / old node). */
55
+ export function formatNativeDexToolkitPreflightForUi(err) {
56
+ const lines = [
57
+ 'This screen needs a Boing JSON-RPC endpoint that supports simulate, bounded logs, contract storage, and network info.',
58
+ 'Deploy and sensitive paths stay gated by protocol QA—use the SDK preflight helpers and show users a clear review step.',
59
+ '',
60
+ ...err.doctor.messages,
61
+ ];
62
+ return lines.join('\n');
63
+ }
64
+ /**
65
+ * One-shot **`contract_call`** object for **`boing_sendTransaction`** / Boing Express: native CP **`swap`** calldata + pool access list.
66
+ */
67
+ export function buildNativeCpPoolSwapExpressTx(input) {
68
+ const calldata = bytesToHex(encodeNativeAmmSwapCalldata(input.direction, input.amountIn, input.minOut));
69
+ return buildNativeConstantProductContractCallTx(input.senderHex32, input.poolHex32, calldata, input.poolAccessListOptions);
70
+ }
71
+ function mergeMultihopPoolAccessListOptions(route, base, includeVenueTokenAccounts) {
72
+ const fromRoute = includeVenueTokenAccounts ? uniqueSortedTokenHex32FromCpRoute(route) : [];
73
+ const fromBase = base?.additionalAccountsHex32 ?? [];
74
+ if (fromRoute.length === 0 && fromBase.length === 0 && !base)
75
+ return undefined;
76
+ if (fromRoute.length === 0 && fromBase.length === 0)
77
+ return base;
78
+ const set = new Set();
79
+ for (const x of fromBase)
80
+ set.add(validateHex32(x).toLowerCase());
81
+ for (const x of fromRoute)
82
+ set.add(x);
83
+ return {
84
+ ...base,
85
+ additionalAccountsHex32: [...set].sort(),
86
+ };
87
+ }
88
+ /**
89
+ * Recompute **`access_list`** after **`boing_simulateTransaction`** using {@link mergeNativeDexMultihopRouterAccessListWithSimulation}.
90
+ * **`poolHex32List`** and **`poolAccessListOptions`** should match the pools / extras used to build **`tx`**.
91
+ */
92
+ export function applyNativeDexMultihopSimulationToContractCallTx(tx, input) {
93
+ const access_list = mergeNativeDexMultihopRouterAccessListWithSimulation(input.senderHex32, tx.contract, input.poolHex32List, input.sim, input.poolAccessListOptions);
94
+ return { ...tx, access_list };
95
+ }
96
+ function resolveMultihopMinOutPerHop(route, minOutPerHop, slippageBps) {
97
+ if (minOutPerHop != null) {
98
+ if (minOutPerHop.length !== route.hops.length) {
99
+ throw new RangeError('minOutPerHop length must match route.hops.length');
100
+ }
101
+ return [...minOutPerHop];
102
+ }
103
+ if (slippageBps !== undefined) {
104
+ return minOutPerHopFromQuotedRouteSlippageBps(route, slippageBps);
105
+ }
106
+ throw new Error('Pass minOutPerHop or slippageBps');
107
+ }
108
+ export function buildNativeDexMultihopSwapExpressTxFromRoute128(input) {
109
+ if (input.route.hops.length < 2) {
110
+ throw new RangeError('multihop route must have at least 2 hops');
111
+ }
112
+ const minOutPerHop = resolveMultihopMinOutPerHop(input.route, input.minOutPerHop, input.slippageBps);
113
+ const calldata = bytesToHex(encodeNativeDexMultihopRouterCalldata128FromRoute(input.route, { minOutPerHop }));
114
+ const pools = input.route.hops.map((h) => h.venue.poolHex);
115
+ const poolOpts = mergeMultihopPoolAccessListOptions(input.route, input.poolAccessListOptions, input.includeVenueTokenAccounts);
116
+ return buildNativeDexMultihopRouterContractCallTx(input.senderHex32, input.routerHex32, calldata, pools, poolOpts);
117
+ }
118
+ export function buildNativeDexMultihopSwapExpressTxFromRoute160(input) {
119
+ if (input.route.hops.length < 2) {
120
+ throw new RangeError('multihop route must have at least 2 hops');
121
+ }
122
+ const minOutPerHop = resolveMultihopMinOutPerHop(input.route, input.minOutPerHop, input.slippageBps);
123
+ const calldata = bytesToHex(encodeNativeDexMultihopRouterCalldata160FromRoute(input.route, {
124
+ minOutPerHop,
125
+ routerAccountHex32: input.routerHex32,
126
+ finalRecipientHex32: input.finalRecipientHex32,
127
+ }));
128
+ const pools = input.route.hops.map((h) => h.venue.poolHex);
129
+ const poolOpts = mergeMultihopPoolAccessListOptions(input.route, input.poolAccessListOptions, input.includeVenueTokenAccounts);
130
+ return buildNativeDexMultihopRouterContractCallTx(input.senderHex32, input.routerHex32, calldata, pools, poolOpts);
131
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Multihop swap router: **2–6** sequential pool `Call`s in one transaction.
3
+ * Matches `boing_execution::native_dex_multihop_swap_router`. See `docs/NATIVE-DEX-MULTIHOP-SWAP-ROUTER.md`.
4
+ */
5
+ /** **352-byte** outer calldata; **128-byte** inners (v1/v3 `swap`). */
6
+ export declare const SELECTOR_NATIVE_DEX_SWAP2_ROUTER_128 = 229;
7
+ /** **416-byte** outer calldata; **160-byte** inners (v5 `swap_to`). */
8
+ export declare const SELECTOR_NATIVE_DEX_SWAP2_ROUTER_160 = 230;
9
+ /** **512-byte** outer; **128-byte** inners. */
10
+ export declare const SELECTOR_NATIVE_DEX_SWAP3_ROUTER_128 = 231;
11
+ /** **608-byte** outer; **160-byte** inners. */
12
+ export declare const SELECTOR_NATIVE_DEX_SWAP3_ROUTER_160 = 232;
13
+ /** **672-byte** outer; **128-byte** inners. */
14
+ export declare const SELECTOR_NATIVE_DEX_SWAP4_ROUTER_128 = 233;
15
+ /** **800-byte** outer; **160-byte** inners. */
16
+ export declare const SELECTOR_NATIVE_DEX_SWAP4_ROUTER_160 = 234;
17
+ /** **832-byte** outer; **128-byte** inners. */
18
+ export declare const SELECTOR_NATIVE_DEX_SWAP5_ROUTER_128 = 235;
19
+ /** **992-byte** outer; **160-byte** inners. */
20
+ export declare const SELECTOR_NATIVE_DEX_SWAP5_ROUTER_160 = 236;
21
+ /** **992-byte** outer; **128-byte** inners. */
22
+ export declare const SELECTOR_NATIVE_DEX_SWAP6_ROUTER_128 = 237;
23
+ /** **1184-byte** outer; **160-byte** inners. */
24
+ export declare const SELECTOR_NATIVE_DEX_SWAP6_ROUTER_160 = 238;
25
+ export declare function encodeNativeDexSwap2RouterCalldata128(pool1Hex32: string, inner1_128: Uint8Array, pool2Hex32: string, inner2_128: Uint8Array): Uint8Array;
26
+ export declare function encodeNativeDexSwap2RouterCalldata128Hex(pool1Hex32: string, inner1_128: Uint8Array, pool2Hex32: string, inner2_128: Uint8Array): string;
27
+ export declare function encodeNativeDexSwap2RouterCalldata160(pool1Hex32: string, inner1_160: Uint8Array, pool2Hex32: string, inner2_160: Uint8Array): Uint8Array;
28
+ export declare function encodeNativeDexSwap2RouterCalldata160Hex(pool1Hex32: string, inner1_160: Uint8Array, pool2Hex32: string, inner2_160: Uint8Array): string;
29
+ export declare function encodeNativeDexSwap3RouterCalldata128(pool1Hex32: string, inner1_128: Uint8Array, pool2Hex32: string, inner2_128: Uint8Array, pool3Hex32: string, inner3_128: Uint8Array): Uint8Array;
30
+ export declare function encodeNativeDexSwap3RouterCalldata128Hex(pool1Hex32: string, inner1_128: Uint8Array, pool2Hex32: string, inner2_128: Uint8Array, pool3Hex32: string, inner3_128: Uint8Array): string;
31
+ export declare function encodeNativeDexSwap3RouterCalldata160(pool1Hex32: string, inner1_160: Uint8Array, pool2Hex32: string, inner2_160: Uint8Array, pool3Hex32: string, inner3_160: Uint8Array): Uint8Array;
32
+ export declare function encodeNativeDexSwap3RouterCalldata160Hex(pool1Hex32: string, inner1_160: Uint8Array, pool2Hex32: string, inner2_160: Uint8Array, pool3Hex32: string, inner3_160: Uint8Array): string;
33
+ export declare function encodeNativeDexSwap4RouterCalldata128(pool1Hex32: string, inner1_128: Uint8Array, pool2Hex32: string, inner2_128: Uint8Array, pool3Hex32: string, inner3_128: Uint8Array, pool4Hex32: string, inner4_128: Uint8Array): Uint8Array;
34
+ export declare function encodeNativeDexSwap4RouterCalldata128Hex(pool1Hex32: string, inner1_128: Uint8Array, pool2Hex32: string, inner2_128: Uint8Array, pool3Hex32: string, inner3_128: Uint8Array, pool4Hex32: string, inner4_128: Uint8Array): string;
35
+ export declare function encodeNativeDexSwap4RouterCalldata160(pool1Hex32: string, inner1_160: Uint8Array, pool2Hex32: string, inner2_160: Uint8Array, pool3Hex32: string, inner3_160: Uint8Array, pool4Hex32: string, inner4_160: Uint8Array): Uint8Array;
36
+ export declare function encodeNativeDexSwap4RouterCalldata160Hex(pool1Hex32: string, inner1_160: Uint8Array, pool2Hex32: string, inner2_160: Uint8Array, pool3Hex32: string, inner3_160: Uint8Array, pool4Hex32: string, inner4_160: Uint8Array): string;
37
+ export declare function encodeNativeDexSwap5RouterCalldata128(pool1Hex32: string, inner1_128: Uint8Array, pool2Hex32: string, inner2_128: Uint8Array, pool3Hex32: string, inner3_128: Uint8Array, pool4Hex32: string, inner4_128: Uint8Array, pool5Hex32: string, inner5_128: Uint8Array): Uint8Array;
38
+ export declare function encodeNativeDexSwap5RouterCalldata128Hex(pool1Hex32: string, inner1_128: Uint8Array, pool2Hex32: string, inner2_128: Uint8Array, pool3Hex32: string, inner3_128: Uint8Array, pool4Hex32: string, inner4_128: Uint8Array, pool5Hex32: string, inner5_128: Uint8Array): string;
39
+ export declare function encodeNativeDexSwap5RouterCalldata160(pool1Hex32: string, inner1_160: Uint8Array, pool2Hex32: string, inner2_160: Uint8Array, pool3Hex32: string, inner3_160: Uint8Array, pool4Hex32: string, inner4_160: Uint8Array, pool5Hex32: string, inner5_160: Uint8Array): Uint8Array;
40
+ export declare function encodeNativeDexSwap5RouterCalldata160Hex(pool1Hex32: string, inner1_160: Uint8Array, pool2Hex32: string, inner2_160: Uint8Array, pool3Hex32: string, inner3_160: Uint8Array, pool4Hex32: string, inner4_160: Uint8Array, pool5Hex32: string, inner5_160: Uint8Array): string;
41
+ export declare function encodeNativeDexSwap6RouterCalldata128(pool1Hex32: string, inner1_128: Uint8Array, pool2Hex32: string, inner2_128: Uint8Array, pool3Hex32: string, inner3_128: Uint8Array, pool4Hex32: string, inner4_128: Uint8Array, pool5Hex32: string, inner5_128: Uint8Array, pool6Hex32: string, inner6_128: Uint8Array): Uint8Array;
42
+ export declare function encodeNativeDexSwap6RouterCalldata128Hex(pool1Hex32: string, inner1_128: Uint8Array, pool2Hex32: string, inner2_128: Uint8Array, pool3Hex32: string, inner3_128: Uint8Array, pool4Hex32: string, inner4_128: Uint8Array, pool5Hex32: string, inner5_128: Uint8Array, pool6Hex32: string, inner6_128: Uint8Array): string;
43
+ export declare function encodeNativeDexSwap6RouterCalldata160(pool1Hex32: string, inner1_160: Uint8Array, pool2Hex32: string, inner2_160: Uint8Array, pool3Hex32: string, inner3_160: Uint8Array, pool4Hex32: string, inner4_160: Uint8Array, pool5Hex32: string, inner5_160: Uint8Array, pool6Hex32: string, inner6_160: Uint8Array): Uint8Array;
44
+ export declare function encodeNativeDexSwap6RouterCalldata160Hex(pool1Hex32: string, inner1_160: Uint8Array, pool2Hex32: string, inner2_160: Uint8Array, pool3Hex32: string, inner3_160: Uint8Array, pool4Hex32: string, inner4_160: Uint8Array, pool5Hex32: string, inner5_160: Uint8Array, pool6Hex32: string, inner6_160: Uint8Array): string;
45
+ //# sourceMappingURL=nativeDexSwap2Router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeDexSwap2Router.d.ts","sourceRoot":"","sources":["../src/nativeDexSwap2Router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Multihop swap router: **2–6** sequential pool `Call`s in one transaction.
3
+ * Matches `boing_execution::native_dex_multihop_swap_router`. See `docs/NATIVE-DEX-MULTIHOP-SWAP-ROUTER.md`.
4
+ */
5
+ import { bytesToHex, hexToBytes, validateHex32 } from './hex.js';
6
+ /** **352-byte** outer calldata; **128-byte** inners (v1/v3 `swap`). */
7
+ export const SELECTOR_NATIVE_DEX_SWAP2_ROUTER_128 = 0xe5;
8
+ /** **416-byte** outer calldata; **160-byte** inners (v5 `swap_to`). */
9
+ export const SELECTOR_NATIVE_DEX_SWAP2_ROUTER_160 = 0xe6;
10
+ /** **512-byte** outer; **128-byte** inners. */
11
+ export const SELECTOR_NATIVE_DEX_SWAP3_ROUTER_128 = 0xe7;
12
+ /** **608-byte** outer; **160-byte** inners. */
13
+ export const SELECTOR_NATIVE_DEX_SWAP3_ROUTER_160 = 0xe8;
14
+ /** **672-byte** outer; **128-byte** inners. */
15
+ export const SELECTOR_NATIVE_DEX_SWAP4_ROUTER_128 = 0xe9;
16
+ /** **800-byte** outer; **160-byte** inners. */
17
+ export const SELECTOR_NATIVE_DEX_SWAP4_ROUTER_160 = 0xea;
18
+ /** **832-byte** outer; **128-byte** inners. */
19
+ export const SELECTOR_NATIVE_DEX_SWAP5_ROUTER_128 = 0xeb;
20
+ /** **992-byte** outer; **160-byte** inners. */
21
+ export const SELECTOR_NATIVE_DEX_SWAP5_ROUTER_160 = 0xec;
22
+ /** **992-byte** outer; **128-byte** inners. */
23
+ export const SELECTOR_NATIVE_DEX_SWAP6_ROUTER_128 = 0xed;
24
+ /** **1184-byte** outer; **160-byte** inners. */
25
+ export const SELECTOR_NATIVE_DEX_SWAP6_ROUTER_160 = 0xee;
26
+ function selectorWord(selector) {
27
+ const w = new Uint8Array(32);
28
+ w[31] = selector & 0xff;
29
+ return w;
30
+ }
31
+ export function encodeNativeDexSwap2RouterCalldata128(pool1Hex32, inner1_128, pool2Hex32, inner2_128) {
32
+ if (inner1_128.length !== 128 || inner2_128.length !== 128) {
33
+ throw new Error('inner calldata must be 128 bytes per hop');
34
+ }
35
+ const p1 = hexToBytes(validateHex32(pool1Hex32));
36
+ const p2 = hexToBytes(validateHex32(pool2Hex32));
37
+ const out = new Uint8Array(352);
38
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_SWAP2_ROUTER_128));
39
+ out.set(p1, 32);
40
+ out.set(inner1_128, 64);
41
+ out.set(p2, 192);
42
+ out.set(inner2_128, 224);
43
+ return out;
44
+ }
45
+ export function encodeNativeDexSwap2RouterCalldata128Hex(pool1Hex32, inner1_128, pool2Hex32, inner2_128) {
46
+ return bytesToHex(encodeNativeDexSwap2RouterCalldata128(pool1Hex32, inner1_128, pool2Hex32, inner2_128));
47
+ }
48
+ export function encodeNativeDexSwap2RouterCalldata160(pool1Hex32, inner1_160, pool2Hex32, inner2_160) {
49
+ if (inner1_160.length !== 160 || inner2_160.length !== 160) {
50
+ throw new Error('inner calldata must be 160 bytes per hop');
51
+ }
52
+ const p1 = hexToBytes(validateHex32(pool1Hex32));
53
+ const p2 = hexToBytes(validateHex32(pool2Hex32));
54
+ const out = new Uint8Array(416);
55
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_SWAP2_ROUTER_160));
56
+ out.set(p1, 32);
57
+ out.set(inner1_160, 64);
58
+ out.set(p2, 224);
59
+ out.set(inner2_160, 256);
60
+ return out;
61
+ }
62
+ export function encodeNativeDexSwap2RouterCalldata160Hex(pool1Hex32, inner1_160, pool2Hex32, inner2_160) {
63
+ return bytesToHex(encodeNativeDexSwap2RouterCalldata160(pool1Hex32, inner1_160, pool2Hex32, inner2_160));
64
+ }
65
+ export function encodeNativeDexSwap3RouterCalldata128(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128) {
66
+ for (const inner of [inner1_128, inner2_128, inner3_128]) {
67
+ if (inner.length !== 128) {
68
+ throw new Error('inner calldata must be 128 bytes per hop');
69
+ }
70
+ }
71
+ const p1 = hexToBytes(validateHex32(pool1Hex32));
72
+ const p2 = hexToBytes(validateHex32(pool2Hex32));
73
+ const p3 = hexToBytes(validateHex32(pool3Hex32));
74
+ const out = new Uint8Array(512);
75
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_SWAP3_ROUTER_128));
76
+ out.set(p1, 32);
77
+ out.set(inner1_128, 64);
78
+ out.set(p2, 192);
79
+ out.set(inner2_128, 224);
80
+ out.set(p3, 352);
81
+ out.set(inner3_128, 384);
82
+ return out;
83
+ }
84
+ export function encodeNativeDexSwap3RouterCalldata128Hex(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128) {
85
+ return bytesToHex(encodeNativeDexSwap3RouterCalldata128(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128));
86
+ }
87
+ export function encodeNativeDexSwap3RouterCalldata160(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160) {
88
+ for (const inner of [inner1_160, inner2_160, inner3_160]) {
89
+ if (inner.length !== 160) {
90
+ throw new Error('inner calldata must be 160 bytes per hop');
91
+ }
92
+ }
93
+ const p1 = hexToBytes(validateHex32(pool1Hex32));
94
+ const p2 = hexToBytes(validateHex32(pool2Hex32));
95
+ const p3 = hexToBytes(validateHex32(pool3Hex32));
96
+ const out = new Uint8Array(608);
97
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_SWAP3_ROUTER_160));
98
+ out.set(p1, 32);
99
+ out.set(inner1_160, 64);
100
+ out.set(p2, 224);
101
+ out.set(inner2_160, 256);
102
+ out.set(p3, 416);
103
+ out.set(inner3_160, 448);
104
+ return out;
105
+ }
106
+ export function encodeNativeDexSwap3RouterCalldata160Hex(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160) {
107
+ return bytesToHex(encodeNativeDexSwap3RouterCalldata160(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160));
108
+ }
109
+ export function encodeNativeDexSwap4RouterCalldata128(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128, pool4Hex32, inner4_128) {
110
+ for (const inner of [inner1_128, inner2_128, inner3_128, inner4_128]) {
111
+ if (inner.length !== 128) {
112
+ throw new Error('inner calldata must be 128 bytes per hop');
113
+ }
114
+ }
115
+ const p1 = hexToBytes(validateHex32(pool1Hex32));
116
+ const p2 = hexToBytes(validateHex32(pool2Hex32));
117
+ const p3 = hexToBytes(validateHex32(pool3Hex32));
118
+ const p4 = hexToBytes(validateHex32(pool4Hex32));
119
+ const out = new Uint8Array(672);
120
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_SWAP4_ROUTER_128));
121
+ out.set(p1, 32);
122
+ out.set(inner1_128, 64);
123
+ out.set(p2, 192);
124
+ out.set(inner2_128, 224);
125
+ out.set(p3, 352);
126
+ out.set(inner3_128, 384);
127
+ out.set(p4, 512);
128
+ out.set(inner4_128, 544);
129
+ return out;
130
+ }
131
+ export function encodeNativeDexSwap4RouterCalldata128Hex(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128, pool4Hex32, inner4_128) {
132
+ return bytesToHex(encodeNativeDexSwap4RouterCalldata128(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128, pool4Hex32, inner4_128));
133
+ }
134
+ export function encodeNativeDexSwap4RouterCalldata160(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160, pool4Hex32, inner4_160) {
135
+ for (const inner of [inner1_160, inner2_160, inner3_160, inner4_160]) {
136
+ if (inner.length !== 160) {
137
+ throw new Error('inner calldata must be 160 bytes per hop');
138
+ }
139
+ }
140
+ const p1 = hexToBytes(validateHex32(pool1Hex32));
141
+ const p2 = hexToBytes(validateHex32(pool2Hex32));
142
+ const p3 = hexToBytes(validateHex32(pool3Hex32));
143
+ const p4 = hexToBytes(validateHex32(pool4Hex32));
144
+ const out = new Uint8Array(800);
145
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_SWAP4_ROUTER_160));
146
+ out.set(p1, 32);
147
+ out.set(inner1_160, 64);
148
+ out.set(p2, 224);
149
+ out.set(inner2_160, 256);
150
+ out.set(p3, 416);
151
+ out.set(inner3_160, 448);
152
+ out.set(p4, 608);
153
+ out.set(inner4_160, 640);
154
+ return out;
155
+ }
156
+ export function encodeNativeDexSwap4RouterCalldata160Hex(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160, pool4Hex32, inner4_160) {
157
+ return bytesToHex(encodeNativeDexSwap4RouterCalldata160(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160, pool4Hex32, inner4_160));
158
+ }
159
+ export function encodeNativeDexSwap5RouterCalldata128(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128, pool4Hex32, inner4_128, pool5Hex32, inner5_128) {
160
+ for (const inner of [inner1_128, inner2_128, inner3_128, inner4_128, inner5_128]) {
161
+ if (inner.length !== 128) {
162
+ throw new Error('inner calldata must be 128 bytes per hop');
163
+ }
164
+ }
165
+ const p1 = hexToBytes(validateHex32(pool1Hex32));
166
+ const p2 = hexToBytes(validateHex32(pool2Hex32));
167
+ const p3 = hexToBytes(validateHex32(pool3Hex32));
168
+ const p4 = hexToBytes(validateHex32(pool4Hex32));
169
+ const p5 = hexToBytes(validateHex32(pool5Hex32));
170
+ const out = new Uint8Array(832);
171
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_SWAP5_ROUTER_128));
172
+ out.set(p1, 32);
173
+ out.set(inner1_128, 64);
174
+ out.set(p2, 192);
175
+ out.set(inner2_128, 224);
176
+ out.set(p3, 352);
177
+ out.set(inner3_128, 384);
178
+ out.set(p4, 512);
179
+ out.set(inner4_128, 544);
180
+ out.set(p5, 672);
181
+ out.set(inner5_128, 704);
182
+ return out;
183
+ }
184
+ export function encodeNativeDexSwap5RouterCalldata128Hex(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128, pool4Hex32, inner4_128, pool5Hex32, inner5_128) {
185
+ return bytesToHex(encodeNativeDexSwap5RouterCalldata128(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128, pool4Hex32, inner4_128, pool5Hex32, inner5_128));
186
+ }
187
+ export function encodeNativeDexSwap5RouterCalldata160(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160, pool4Hex32, inner4_160, pool5Hex32, inner5_160) {
188
+ for (const inner of [inner1_160, inner2_160, inner3_160, inner4_160, inner5_160]) {
189
+ if (inner.length !== 160) {
190
+ throw new Error('inner calldata must be 160 bytes per hop');
191
+ }
192
+ }
193
+ const p1 = hexToBytes(validateHex32(pool1Hex32));
194
+ const p2 = hexToBytes(validateHex32(pool2Hex32));
195
+ const p3 = hexToBytes(validateHex32(pool3Hex32));
196
+ const p4 = hexToBytes(validateHex32(pool4Hex32));
197
+ const p5 = hexToBytes(validateHex32(pool5Hex32));
198
+ const out = new Uint8Array(992);
199
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_SWAP5_ROUTER_160));
200
+ out.set(p1, 32);
201
+ out.set(inner1_160, 64);
202
+ out.set(p2, 224);
203
+ out.set(inner2_160, 256);
204
+ out.set(p3, 416);
205
+ out.set(inner3_160, 448);
206
+ out.set(p4, 608);
207
+ out.set(inner4_160, 640);
208
+ out.set(p5, 800);
209
+ out.set(inner5_160, 832);
210
+ return out;
211
+ }
212
+ export function encodeNativeDexSwap5RouterCalldata160Hex(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160, pool4Hex32, inner4_160, pool5Hex32, inner5_160) {
213
+ return bytesToHex(encodeNativeDexSwap5RouterCalldata160(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160, pool4Hex32, inner4_160, pool5Hex32, inner5_160));
214
+ }
215
+ export function encodeNativeDexSwap6RouterCalldata128(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128, pool4Hex32, inner4_128, pool5Hex32, inner5_128, pool6Hex32, inner6_128) {
216
+ for (const inner of [inner1_128, inner2_128, inner3_128, inner4_128, inner5_128, inner6_128]) {
217
+ if (inner.length !== 128) {
218
+ throw new Error('inner calldata must be 128 bytes per hop');
219
+ }
220
+ }
221
+ const p1 = hexToBytes(validateHex32(pool1Hex32));
222
+ const p2 = hexToBytes(validateHex32(pool2Hex32));
223
+ const p3 = hexToBytes(validateHex32(pool3Hex32));
224
+ const p4 = hexToBytes(validateHex32(pool4Hex32));
225
+ const p5 = hexToBytes(validateHex32(pool5Hex32));
226
+ const p6 = hexToBytes(validateHex32(pool6Hex32));
227
+ const out = new Uint8Array(992);
228
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_SWAP6_ROUTER_128));
229
+ out.set(p1, 32);
230
+ out.set(inner1_128, 64);
231
+ out.set(p2, 192);
232
+ out.set(inner2_128, 224);
233
+ out.set(p3, 352);
234
+ out.set(inner3_128, 384);
235
+ out.set(p4, 512);
236
+ out.set(inner4_128, 544);
237
+ out.set(p5, 672);
238
+ out.set(inner5_128, 704);
239
+ out.set(p6, 832);
240
+ out.set(inner6_128, 864);
241
+ return out;
242
+ }
243
+ export function encodeNativeDexSwap6RouterCalldata128Hex(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128, pool4Hex32, inner4_128, pool5Hex32, inner5_128, pool6Hex32, inner6_128) {
244
+ return bytesToHex(encodeNativeDexSwap6RouterCalldata128(pool1Hex32, inner1_128, pool2Hex32, inner2_128, pool3Hex32, inner3_128, pool4Hex32, inner4_128, pool5Hex32, inner5_128, pool6Hex32, inner6_128));
245
+ }
246
+ export function encodeNativeDexSwap6RouterCalldata160(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160, pool4Hex32, inner4_160, pool5Hex32, inner5_160, pool6Hex32, inner6_160) {
247
+ for (const inner of [inner1_160, inner2_160, inner3_160, inner4_160, inner5_160, inner6_160]) {
248
+ if (inner.length !== 160) {
249
+ throw new Error('inner calldata must be 160 bytes per hop');
250
+ }
251
+ }
252
+ const p1 = hexToBytes(validateHex32(pool1Hex32));
253
+ const p2 = hexToBytes(validateHex32(pool2Hex32));
254
+ const p3 = hexToBytes(validateHex32(pool3Hex32));
255
+ const p4 = hexToBytes(validateHex32(pool4Hex32));
256
+ const p5 = hexToBytes(validateHex32(pool5Hex32));
257
+ const p6 = hexToBytes(validateHex32(pool6Hex32));
258
+ const out = new Uint8Array(1184);
259
+ out.set(selectorWord(SELECTOR_NATIVE_DEX_SWAP6_ROUTER_160));
260
+ out.set(p1, 32);
261
+ out.set(inner1_160, 64);
262
+ out.set(p2, 224);
263
+ out.set(inner2_160, 256);
264
+ out.set(p3, 416);
265
+ out.set(inner3_160, 448);
266
+ out.set(p4, 608);
267
+ out.set(inner4_160, 640);
268
+ out.set(p5, 800);
269
+ out.set(inner5_160, 832);
270
+ out.set(p6, 992);
271
+ out.set(inner6_160, 1024);
272
+ return out;
273
+ }
274
+ export function encodeNativeDexSwap6RouterCalldata160Hex(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160, pool4Hex32, inner4_160, pool5Hex32, inner5_160, pool6Hex32, inner6_160) {
275
+ return bytesToHex(encodeNativeDexSwap6RouterCalldata160(pool1Hex32, inner1_160, pool2Hex32, inner2_160, pool3Hex32, inner3_160, pool4Hex32, inner4_160, pool5Hex32, inner5_160, pool6Hex32, inner6_160));
276
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * LP share token calldata (minter-gated `mint` + `transfer`) + Express / JSON-RPC access lists.
3
+ * Matches `boing_execution::native_lp_share_token`.
4
+ * See `docs/NATIVE-LP-SHARE-TOKEN.md`.
5
+ */
6
+ import type { BoingClient } from './client.js';
7
+ import type { SimulateResult } from './types.js';
8
+ /** `transfer(to, amount)` — **96** bytes. */
9
+ export declare const SELECTOR_LP_SHARE_TRANSFER = 1;
10
+ /** `mint(to, amount)` — **96** bytes; only minter may call. */
11
+ export declare const SELECTOR_LP_SHARE_MINT = 6;
12
+ /** `set_minter_once(minter)` — **64** bytes. */
13
+ export declare const SELECTOR_LP_SHARE_SET_MINTER_ONCE = 7;
14
+ /** Storage key for minter slot (`k[31] == 0xb1`), 32-byte word. */
15
+ export declare const LP_SHARE_MINTER_KEY_U8: Uint8Array;
16
+ /** `boing_getContractStorage` key for LP share **minter** (`native_lp_share_token::LP_SHARE_MINTER_KEY`). */
17
+ export declare const LP_SHARE_MINTER_KEY_HEX: `0x${string}`;
18
+ /**
19
+ * `boing_getContractStorage` key for **`holder`**'s LP share balance (`account_id ^ LP_SHARE_BALANCE_XOR`).
20
+ */
21
+ export declare function lpShareTokenBalanceStorageKeyHex(holderHex32: string): string;
22
+ /**
23
+ * Read **holder**'s LP share balance (u128 in storage word) from the share token contract.
24
+ */
25
+ export declare function fetchLpShareTokenBalanceRaw(client: BoingClient, shareTokenHex32: string, holderHex32: string): Promise<bigint>;
26
+ /**
27
+ * Read designated **minter** `AccountId` for the LP share token, or **`null`** if unset (all-zero word).
28
+ */
29
+ export declare function fetchLpShareTokenMinterAccountHex(client: BoingClient, shareHex32: string): Promise<`0x${string}` | null>;
30
+ export declare function encodeLpShareTransferCalldata(toHex32: string, amount: bigint): Uint8Array;
31
+ export declare function encodeLpShareTransferCalldataHex(toHex32: string, amount: bigint): string;
32
+ export declare function encodeLpShareMintCalldata(toHex32: string, amount: bigint): Uint8Array;
33
+ export declare function encodeLpShareMintCalldataHex(toHex32: string, amount: bigint): string;
34
+ export declare function encodeLpShareSetMinterOnceCalldata(minterHex32: string): Uint8Array;
35
+ export declare function encodeLpShareSetMinterOnceCalldataHex(minterHex32: string): string;
36
+ /** `read` / `write`: signer + share token contract (parallel-scheduling minimum). */
37
+ export declare function buildLpShareTokenAccessList(senderHex32: string, shareTokenHex32: string): {
38
+ read: string[];
39
+ write: string[];
40
+ };
41
+ export declare function buildLpShareTokenContractCallTx(senderHex32: string, shareTokenHex32: string, calldataHex: string): {
42
+ type: 'contract_call';
43
+ contract: string;
44
+ calldata: string;
45
+ access_list: {
46
+ read: string[];
47
+ write: string[];
48
+ };
49
+ };
50
+ export declare function mergeLpShareTokenAccessListWithSimulation(senderHex32: string, shareTokenHex32: string, sim: SimulateResult): {
51
+ read: string[];
52
+ write: string[];
53
+ };
54
+ //# sourceMappingURL=nativeLpShareToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nativeLpShareToken.d.ts","sourceRoot":"","sources":["../src/nativeLpShareToken.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,6CAA6C;AAC7C,eAAO,MAAM,0BAA0B,IAAO,CAAC;AAC/C,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,IAAO,CAAC;AAC3C,gDAAgD;AAChD,eAAO,MAAM,iCAAiC,IAAO,CAAC;AAEtD,mEAAmE;AACnE,eAAO,MAAM,sBAAsB,EAAE,UAIjC,CAAC;AAEL,6GAA6G;AAC7G,eAAO,MAAM,uBAAuB,EAAwD,KAAK,MAAM,EAAE,CAAC;AAS1G;;GAEG;AACH,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,WAAW,EACnB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED;;GAEG;AACH,wBAAsB,iCAAiC,CACrD,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,KAAK,MAAM,EAAE,GAAG,IAAI,CAAC,CAI/B;AAuBD,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAMzF;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAExF;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAMrF;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAKlF;AAED,wBAAgB,qCAAqC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEjF;AAgBD,qFAAqF;AACrF,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,GACtB;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAIrC;AAED,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,GAClB;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,yCAAyC,CACvD,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,cAAc,GAClB;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAGrC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * LP share token calldata (minter-gated `mint` + `transfer`) + Express / JSON-RPC access lists.
3
+ * Matches `boing_execution::native_lp_share_token`.
4
+ * See `docs/NATIVE-LP-SHARE-TOKEN.md`.
5
+ */
6
+ import { mergeAccessListWithSimulation } from './accessList.js';
7
+ import { bytesToHex, decodeBoingStorageWordAccountId, ensureHex, hexToBytes, validateHex32 } from './hex.js';
8
+ import { decodeBoingStorageWordU128 } from './nativeAmmPool.js';
9
+ /** `transfer(to, amount)` — **96** bytes. */
10
+ export const SELECTOR_LP_SHARE_TRANSFER = 0x01;
11
+ /** `mint(to, amount)` — **96** bytes; only minter may call. */
12
+ export const SELECTOR_LP_SHARE_MINT = 0x06;
13
+ /** `set_minter_once(minter)` — **64** bytes. */
14
+ export const SELECTOR_LP_SHARE_SET_MINTER_ONCE = 0x07;
15
+ /** Storage key for minter slot (`k[31] == 0xb1`), 32-byte word. */
16
+ export const LP_SHARE_MINTER_KEY_U8 = (() => {
17
+ const k = new Uint8Array(32);
18
+ k[31] = 0xb1;
19
+ return k;
20
+ })();
21
+ /** `boing_getContractStorage` key for LP share **minter** (`native_lp_share_token::LP_SHARE_MINTER_KEY`). */
22
+ export const LP_SHARE_MINTER_KEY_HEX = validateHex32(bytesToHex(LP_SHARE_MINTER_KEY_U8));
23
+ /** XOR mask for balance slots (`native_lp_share_token::LP_SHARE_BALANCE_XOR`): UTF-8 `BOING_LP_SHARE_BAL_V1` zero-padded to 32 bytes. */
24
+ const LP_SHARE_BALANCE_XOR_U8 = (() => {
25
+ const u8 = new Uint8Array(32);
26
+ u8.set(new TextEncoder().encode('BOING_LP_SHARE_BAL_V1'));
27
+ return u8;
28
+ })();
29
+ /**
30
+ * `boing_getContractStorage` key for **`holder`**'s LP share balance (`account_id ^ LP_SHARE_BALANCE_XOR`).
31
+ */
32
+ export function lpShareTokenBalanceStorageKeyHex(holderHex32) {
33
+ const raw = validateHex32(holderHex32).slice(2).toLowerCase();
34
+ let out = '';
35
+ for (let i = 0; i < 32; i++) {
36
+ const b = parseInt(raw.slice(i * 2, i * 2 + 2), 16) ^ LP_SHARE_BALANCE_XOR_U8[i];
37
+ out += b.toString(16).padStart(2, '0');
38
+ }
39
+ return `0x${out}`;
40
+ }
41
+ /**
42
+ * Read **holder**'s LP share balance (u128 in storage word) from the share token contract.
43
+ */
44
+ export async function fetchLpShareTokenBalanceRaw(client, shareTokenHex32, holderHex32) {
45
+ const share = validateHex32(shareTokenHex32);
46
+ const key = lpShareTokenBalanceStorageKeyHex(holderHex32);
47
+ const w = await client.getContractStorage(share, key);
48
+ return decodeBoingStorageWordU128(w.value);
49
+ }
50
+ /**
51
+ * Read designated **minter** `AccountId` for the LP share token, or **`null`** if unset (all-zero word).
52
+ */
53
+ export async function fetchLpShareTokenMinterAccountHex(client, shareHex32) {
54
+ const share = validateHex32(shareHex32);
55
+ const w = await client.getContractStorage(share, LP_SHARE_MINTER_KEY_HEX);
56
+ return decodeBoingStorageWordAccountId(w.value);
57
+ }
58
+ function selectorWord(selector) {
59
+ const w = new Uint8Array(32);
60
+ w[31] = selector & 0xff;
61
+ return w;
62
+ }
63
+ function amountWord(amount) {
64
+ const w = new Uint8Array(32);
65
+ if (amount < 0n || amount > (1n << 128n) - 1n) {
66
+ throw new RangeError('amount must fit in u128');
67
+ }
68
+ const be = new Uint8Array(16);
69
+ let x = amount;
70
+ for (let i = 15; i >= 0; i--) {
71
+ be[i] = Number(x & 0xffn);
72
+ x >>= 8n;
73
+ }
74
+ w.set(be, 16);
75
+ return w;
76
+ }
77
+ export function encodeLpShareTransferCalldata(toHex32, amount) {
78
+ const out = new Uint8Array(96);
79
+ out.set(selectorWord(SELECTOR_LP_SHARE_TRANSFER));
80
+ out.set(hexToBytes(validateHex32(toHex32)), 32);
81
+ out.set(amountWord(amount), 64);
82
+ return out;
83
+ }
84
+ export function encodeLpShareTransferCalldataHex(toHex32, amount) {
85
+ return bytesToHex(encodeLpShareTransferCalldata(toHex32, amount));
86
+ }
87
+ export function encodeLpShareMintCalldata(toHex32, amount) {
88
+ const out = new Uint8Array(96);
89
+ out.set(selectorWord(SELECTOR_LP_SHARE_MINT));
90
+ out.set(hexToBytes(validateHex32(toHex32)), 32);
91
+ out.set(amountWord(amount), 64);
92
+ return out;
93
+ }
94
+ export function encodeLpShareMintCalldataHex(toHex32, amount) {
95
+ return bytesToHex(encodeLpShareMintCalldata(toHex32, amount));
96
+ }
97
+ export function encodeLpShareSetMinterOnceCalldata(minterHex32) {
98
+ const out = new Uint8Array(64);
99
+ out.set(selectorWord(SELECTOR_LP_SHARE_SET_MINTER_ONCE));
100
+ out.set(hexToBytes(validateHex32(minterHex32)), 32);
101
+ return out;
102
+ }
103
+ export function encodeLpShareSetMinterOnceCalldataHex(minterHex32) {
104
+ return bytesToHex(encodeLpShareSetMinterOnceCalldata(minterHex32));
105
+ }
106
+ const CALldata_HEX_RE = /^[0-9a-fA-F]+$/;
107
+ function normalizeCalldataHex(calldataHex) {
108
+ const h = ensureHex(calldataHex.trim());
109
+ const raw = h.slice(2);
110
+ if (raw.length % 2 !== 0) {
111
+ throw new Error('calldata must be even-length hex');
112
+ }
113
+ if (!CALldata_HEX_RE.test(raw)) {
114
+ throw new Error('calldata: invalid hex');
115
+ }
116
+ return `0x${raw.toLowerCase()}`;
117
+ }
118
+ /** `read` / `write`: signer + share token contract (parallel-scheduling minimum). */
119
+ export function buildLpShareTokenAccessList(senderHex32, shareTokenHex32) {
120
+ const s = validateHex32(senderHex32).toLowerCase();
121
+ const c = validateHex32(shareTokenHex32).toLowerCase();
122
+ return { read: [s, c], write: [s, c] };
123
+ }
124
+ export function buildLpShareTokenContractCallTx(senderHex32, shareTokenHex32, calldataHex) {
125
+ return {
126
+ type: 'contract_call',
127
+ contract: validateHex32(shareTokenHex32).toLowerCase(),
128
+ calldata: normalizeCalldataHex(calldataHex),
129
+ access_list: buildLpShareTokenAccessList(senderHex32, shareTokenHex32),
130
+ };
131
+ }
132
+ export function mergeLpShareTokenAccessListWithSimulation(senderHex32, shareTokenHex32, sim) {
133
+ const base = buildLpShareTokenAccessList(senderHex32, shareTokenHex32);
134
+ return mergeAccessListWithSimulation(base.read, base.write, sim);
135
+ }