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.
- package/CHANGELOG.md +26 -0
- package/README.md +191 -0
- package/dist/accessList.d.ts +22 -0
- package/dist/accessList.d.ts.map +1 -0
- package/dist/accessList.js +45 -0
- package/dist/bincode.d.ts +92 -0
- package/dist/bincode.d.ts.map +1 -0
- package/dist/bincode.js +154 -0
- package/dist/callAbi.d.ts +119 -0
- package/dist/callAbi.d.ts.map +1 -0
- package/dist/callAbi.js +156 -0
- package/dist/calldata.d.ts +35 -0
- package/dist/calldata.d.ts.map +1 -0
- package/dist/calldata.js +93 -0
- package/dist/canonicalDeployArtifacts.d.ts +154 -0
- package/dist/canonicalDeployArtifacts.d.ts.map +1 -0
- package/dist/canonicalDeployArtifacts.js +271 -0
- package/dist/canonicalTestnet.d.ts +15 -0
- package/dist/canonicalTestnet.d.ts.map +1 -0
- package/dist/canonicalTestnet.js +15 -0
- package/dist/canonicalTestnetDex.d.ts +17 -0
- package/dist/canonicalTestnetDex.d.ts.map +1 -0
- package/dist/canonicalTestnetDex.js +17 -0
- package/dist/chainIds.d.ts +18 -0
- package/dist/chainIds.d.ts.map +1 -0
- package/dist/chainIds.js +56 -0
- package/dist/client.d.ts +223 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +659 -0
- package/dist/connectionMonitor.d.ts +47 -0
- package/dist/connectionMonitor.d.ts.map +1 -0
- package/dist/connectionMonitor.js +93 -0
- package/dist/create2.d.ts +94 -0
- package/dist/create2.d.ts.map +1 -0
- package/dist/create2.js +225 -0
- package/dist/dappDeploy.d.ts +100 -0
- package/dist/dappDeploy.d.ts.map +1 -0
- package/dist/dappDeploy.js +140 -0
- package/dist/dappUiHelpers.d.ts +28 -0
- package/dist/dappUiHelpers.d.ts.map +1 -0
- package/dist/dappUiHelpers.js +69 -0
- package/dist/defaultReferenceFungibleSecuredRuntimeBytecodeHex.d.ts +6 -0
- package/dist/defaultReferenceFungibleSecuredRuntimeBytecodeHex.d.ts.map +1 -0
- package/dist/defaultReferenceFungibleSecuredRuntimeBytecodeHex.js +5 -0
- package/dist/defaultReferenceFungibleSecuredTemplateBytecodeHex.d.ts +6 -0
- package/dist/defaultReferenceFungibleSecuredTemplateBytecodeHex.d.ts.map +1 -0
- package/dist/defaultReferenceFungibleSecuredTemplateBytecodeHex.js +5 -0
- package/dist/defaultReferenceFungibleTemplateBytecodeHex.d.ts +6 -0
- package/dist/defaultReferenceFungibleTemplateBytecodeHex.d.ts.map +1 -0
- package/dist/defaultReferenceFungibleTemplateBytecodeHex.js +5 -0
- package/dist/defaultReferenceNftCollectionTemplateBytecodeHex.d.ts +7 -0
- package/dist/defaultReferenceNftCollectionTemplateBytecodeHex.d.ts.map +1 -0
- package/dist/defaultReferenceNftCollectionTemplateBytecodeHex.js +6 -0
- package/dist/dexIntegration.d.ts +61 -0
- package/dist/dexIntegration.d.ts.map +1 -0
- package/dist/dexIntegration.js +193 -0
- package/dist/erc721Logs.d.ts +21 -0
- package/dist/erc721Logs.d.ts.map +1 -0
- package/dist/erc721Logs.js +69 -0
- package/dist/errors.d.ts +60 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +153 -0
- package/dist/hex.d.ts +27 -0
- package/dist/hex.d.ts.map +1 -0
- package/dist/hex.js +82 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/indexerBatch.d.ts +111 -0
- package/dist/indexerBatch.d.ts.map +1 -0
- package/dist/indexerBatch.js +253 -0
- package/dist/indexerGaps.d.ts +50 -0
- package/dist/indexerGaps.d.ts.map +1 -0
- package/dist/indexerGaps.js +117 -0
- package/dist/indexerSync.d.ts +61 -0
- package/dist/indexerSync.d.ts.map +1 -0
- package/dist/indexerSync.js +100 -0
- package/dist/nativeAmm.d.ts +64 -0
- package/dist/nativeAmm.d.ts.map +1 -0
- package/dist/nativeAmm.js +174 -0
- package/dist/nativeAmmLogs.d.ts +48 -0
- package/dist/nativeAmmLogs.d.ts.map +1 -0
- package/dist/nativeAmmLogs.js +114 -0
- package/dist/nativeAmmLpVault.d.ts +94 -0
- package/dist/nativeAmmLpVault.d.ts.map +1 -0
- package/dist/nativeAmmLpVault.js +205 -0
- package/dist/nativeAmmPool.d.ts +124 -0
- package/dist/nativeAmmPool.d.ts.map +1 -0
- package/dist/nativeAmmPool.js +245 -0
- package/dist/nativeContractSubmit.d.ts +26 -0
- package/dist/nativeContractSubmit.d.ts.map +1 -0
- package/dist/nativeContractSubmit.js +23 -0
- package/dist/nativeDexDirectory.d.ts +83 -0
- package/dist/nativeDexDirectory.d.ts.map +1 -0
- package/dist/nativeDexDirectory.js +147 -0
- package/dist/nativeDexDirectoryApi.d.ts +121 -0
- package/dist/nativeDexDirectoryApi.d.ts.map +1 -0
- package/dist/nativeDexDirectoryApi.js +408 -0
- package/dist/nativeDexFactory.d.ts +25 -0
- package/dist/nativeDexFactory.d.ts.map +1 -0
- package/dist/nativeDexFactory.js +72 -0
- package/dist/nativeDexFactoryLogs.d.ts +19 -0
- package/dist/nativeDexFactoryLogs.d.ts.map +1 -0
- package/dist/nativeDexFactoryLogs.js +61 -0
- package/dist/nativeDexFactoryPool.d.ts +61 -0
- package/dist/nativeDexFactoryPool.d.ts.map +1 -0
- package/dist/nativeDexFactoryPool.js +120 -0
- package/dist/nativeDexIndexerStats.d.ts +96 -0
- package/dist/nativeDexIndexerStats.d.ts.map +1 -0
- package/dist/nativeDexIndexerStats.js +448 -0
- package/dist/nativeDexLedgerRouter.d.ts +67 -0
- package/dist/nativeDexLedgerRouter.d.ts.map +1 -0
- package/dist/nativeDexLedgerRouter.js +108 -0
- package/dist/nativeDexLpPositions.d.ts +39 -0
- package/dist/nativeDexLpPositions.d.ts.map +1 -0
- package/dist/nativeDexLpPositions.js +69 -0
- package/dist/nativeDexNftIndexer.d.ts +26 -0
- package/dist/nativeDexNftIndexer.d.ts.map +1 -0
- package/dist/nativeDexNftIndexer.js +50 -0
- package/dist/nativeDexPoolHistory.d.ts +40 -0
- package/dist/nativeDexPoolHistory.d.ts.map +1 -0
- package/dist/nativeDexPoolHistory.js +110 -0
- package/dist/nativeDexReceiptArchive.d.ts +25 -0
- package/dist/nativeDexReceiptArchive.d.ts.map +1 -0
- package/dist/nativeDexReceiptArchive.js +47 -0
- package/dist/nativeDexRouting.d.ts +160 -0
- package/dist/nativeDexRouting.d.ts.map +1 -0
- package/dist/nativeDexRouting.js +345 -0
- package/dist/nativeDexSeamless.d.ts +86 -0
- package/dist/nativeDexSeamless.d.ts.map +1 -0
- package/dist/nativeDexSeamless.js +131 -0
- package/dist/nativeDexSwap2Router.d.ts +45 -0
- package/dist/nativeDexSwap2Router.d.ts.map +1 -0
- package/dist/nativeDexSwap2Router.js +276 -0
- package/dist/nativeLpShareToken.d.ts +54 -0
- package/dist/nativeLpShareToken.d.ts.map +1 -0
- package/dist/nativeLpShareToken.js +135 -0
- package/dist/nativeTokenSecurity.d.ts +59 -0
- package/dist/nativeTokenSecurity.d.ts.map +1 -0
- package/dist/nativeTokenSecurity.js +59 -0
- package/dist/networkProfile.d.ts +8 -0
- package/dist/networkProfile.d.ts.map +1 -0
- package/dist/networkProfile.js +29 -0
- package/dist/newHeadsWs.d.ts +43 -0
- package/dist/newHeadsWs.d.ts.map +1 -0
- package/dist/newHeadsWs.js +139 -0
- package/dist/preflightGate.d.ts +16 -0
- package/dist/preflightGate.d.ts.map +1 -0
- package/dist/preflightGate.js +29 -0
- package/dist/receiptLogs.d.ts +29 -0
- package/dist/receiptLogs.d.ts.map +1 -0
- package/dist/receiptLogs.js +66 -0
- package/dist/referenceFungibleSecuredDeployBytecode.d.ts +54 -0
- package/dist/referenceFungibleSecuredDeployBytecode.d.ts.map +1 -0
- package/dist/referenceFungibleSecuredDeployBytecode.js +274 -0
- package/dist/referenceNft.d.ts +14 -0
- package/dist/referenceNft.d.ts.map +1 -0
- package/dist/referenceNft.js +34 -0
- package/dist/referenceToken.d.ts +14 -0
- package/dist/referenceToken.d.ts.map +1 -0
- package/dist/referenceToken.js +29 -0
- package/dist/retryAfter.d.ts +6 -0
- package/dist/retryAfter.d.ts.map +1 -0
- package/dist/retryAfter.js +24 -0
- package/dist/rpcCapabilities.d.ts +43 -0
- package/dist/rpcCapabilities.d.ts.map +1 -0
- package/dist/rpcCapabilities.js +159 -0
- package/dist/rpcDoctor.d.ts +27 -0
- package/dist/rpcDoctor.d.ts.map +1 -0
- package/dist/rpcDoctor.js +66 -0
- package/dist/rpcSurfaceUi.d.ts +32 -0
- package/dist/rpcSurfaceUi.d.ts.map +1 -0
- package/dist/rpcSurfaceUi.js +49 -0
- package/dist/submitFlow.d.ts +70 -0
- package/dist/submitFlow.d.ts.map +1 -0
- package/dist/submitFlow.js +121 -0
- package/dist/transactionBuilder.d.ts +55 -0
- package/dist/transactionBuilder.d.ts.map +1 -0
- package/dist/transactionBuilder.js +100 -0
- package/dist/types.d.ts +436 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/walletProvider.d.ts +46 -0
- package/dist/walletProvider.d.ts.map +1 -0
- package/dist/walletProvider.js +126 -0
- package/package.json +44 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse native constant-product pool **`Log2`** rows (`topic0` + caller `topic1` + 96-byte `data`).
|
|
3
|
+
* Matches `native_amm` emission and `docs/NATIVE-AMM-CALLDATA.md` § Logs.
|
|
4
|
+
*/
|
|
5
|
+
import { NATIVE_AMM_TOPIC_ADD_LIQUIDITY_HEX, NATIVE_AMM_TOPIC_REMOVE_LIQUIDITY_HEX, NATIVE_AMM_TOPIC_SWAP_HEX, } from './nativeAmm.js';
|
|
6
|
+
import { decodeNativeAmmLogDataU128Triple } from './nativeAmmPool.js';
|
|
7
|
+
import { iterReceiptLogs, normalizeTopicWord } from './receiptLogs.js';
|
|
8
|
+
const T0_SWAP = normalizeTopicWord(NATIVE_AMM_TOPIC_SWAP_HEX);
|
|
9
|
+
const T0_ADD = normalizeTopicWord(NATIVE_AMM_TOPIC_ADD_LIQUIDITY_HEX);
|
|
10
|
+
const T0_REMOVE = normalizeTopicWord(NATIVE_AMM_TOPIC_REMOVE_LIQUIDITY_HEX);
|
|
11
|
+
function kindFromNormalizedTopic0(t0) {
|
|
12
|
+
if (t0 === T0_SWAP)
|
|
13
|
+
return 'swap';
|
|
14
|
+
if (t0 === T0_ADD)
|
|
15
|
+
return 'addLiquidity';
|
|
16
|
+
if (t0 === T0_REMOVE)
|
|
17
|
+
return 'removeLiquidity';
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
/** True if `topic` (any casing / optional `0x`) is one of the three native AMM `Log2` topic0 values. */
|
|
21
|
+
export function isNativeAmmLog2Topic0(topic) {
|
|
22
|
+
try {
|
|
23
|
+
return kindFromNormalizedTopic0(normalizeTopicWord(topic)) != null;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* True if `log` looks like a native AMM `Log2` (two topics, known topic0). Does not validate `data`.
|
|
31
|
+
*/
|
|
32
|
+
export function isNativeAmmLog2Shape(log) {
|
|
33
|
+
if (log.topics.length !== 2)
|
|
34
|
+
return false;
|
|
35
|
+
return isNativeAmmLog2Topic0(log.topics[0]);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Parse one receipt / RPC log into a typed event, or `null` if shape or `data` does not match.
|
|
39
|
+
*/
|
|
40
|
+
export function tryParseNativeAmmLog2(log) {
|
|
41
|
+
try {
|
|
42
|
+
if (log.topics.length !== 2)
|
|
43
|
+
return null;
|
|
44
|
+
const t0 = normalizeTopicWord(log.topics[0]);
|
|
45
|
+
const t1 = normalizeTopicWord(log.topics[1]);
|
|
46
|
+
const kind = kindFromNormalizedTopic0(t0);
|
|
47
|
+
if (kind == null)
|
|
48
|
+
return null;
|
|
49
|
+
const [w0, w1, w2] = decodeNativeAmmLogDataU128Triple(log.data);
|
|
50
|
+
const callerHex = t1;
|
|
51
|
+
switch (kind) {
|
|
52
|
+
case 'swap':
|
|
53
|
+
return {
|
|
54
|
+
kind: 'swap',
|
|
55
|
+
callerHex,
|
|
56
|
+
direction: w0,
|
|
57
|
+
amountIn: w1,
|
|
58
|
+
amountOutAfterFee: w2,
|
|
59
|
+
};
|
|
60
|
+
case 'addLiquidity':
|
|
61
|
+
return {
|
|
62
|
+
kind: 'addLiquidity',
|
|
63
|
+
callerHex,
|
|
64
|
+
amountA: w0,
|
|
65
|
+
amountB: w1,
|
|
66
|
+
lpMinted: w2,
|
|
67
|
+
};
|
|
68
|
+
case 'removeLiquidity':
|
|
69
|
+
return {
|
|
70
|
+
kind: 'removeLiquidity',
|
|
71
|
+
callerHex,
|
|
72
|
+
liquidityBurned: w0,
|
|
73
|
+
amountAOut: w1,
|
|
74
|
+
amountBOut: w2,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function tryParseNativeAmmRpcLogEntry(entry) {
|
|
83
|
+
const event = tryParseNativeAmmLog2(entry);
|
|
84
|
+
if (!event)
|
|
85
|
+
return null;
|
|
86
|
+
return {
|
|
87
|
+
...event,
|
|
88
|
+
block_height: entry.block_height,
|
|
89
|
+
tx_index: entry.tx_index,
|
|
90
|
+
tx_id: entry.tx_id,
|
|
91
|
+
log_index: entry.log_index,
|
|
92
|
+
address: entry.address,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/** Keep only `RpcLogEntry` rows that parse as native AMM `Log2`, with placement fields attached. */
|
|
96
|
+
export function filterMapNativeAmmRpcLogs(entries) {
|
|
97
|
+
const out = [];
|
|
98
|
+
for (const e of entries) {
|
|
99
|
+
const p = tryParseNativeAmmRpcLogEntry(e);
|
|
100
|
+
if (p)
|
|
101
|
+
out.push(p);
|
|
102
|
+
}
|
|
103
|
+
return out;
|
|
104
|
+
}
|
|
105
|
+
/** All successfully parsed native AMM logs in one receipt (in log order). */
|
|
106
|
+
export function collectNativeAmmLog2FromReceipt(receipt) {
|
|
107
|
+
const out = [];
|
|
108
|
+
for (const { log, logIndex } of iterReceiptLogs(receipt)) {
|
|
109
|
+
const event = tryParseNativeAmmLog2(log);
|
|
110
|
+
if (event)
|
|
111
|
+
out.push({ logIndex, event });
|
|
112
|
+
}
|
|
113
|
+
return out;
|
|
114
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native AMM LP vault calldata + Express / JSON-RPC access lists. Matches `boing_execution::native_amm_lp_vault`.
|
|
3
|
+
* See `docs/NATIVE-AMM-LP-VAULT.md`.
|
|
4
|
+
*/
|
|
5
|
+
import type { BoingClient } from './client.js';
|
|
6
|
+
import type { SimulateResult } from './types.js';
|
|
7
|
+
/** `configure(pool, share_token)` — **96** bytes. */
|
|
8
|
+
export declare const SELECTOR_NATIVE_AMM_LP_VAULT_CONFIGURE = 192;
|
|
9
|
+
/** `deposit_add(inner_add_liquidity_128, min_lp)` — **192** bytes. */
|
|
10
|
+
export declare const SELECTOR_NATIVE_AMM_LP_VAULT_DEPOSIT_ADD = 193;
|
|
11
|
+
/** `boing_getContractStorage` — non-zero after successful **`configure`**. */
|
|
12
|
+
export declare const NATIVE_AMM_LP_VAULT_KEY_CONFIGURED_HEX: `0x${string}`;
|
|
13
|
+
/** Configured native CP **pool** `AccountId`. */
|
|
14
|
+
export declare const NATIVE_AMM_LP_VAULT_KEY_POOL_HEX: `0x${string}`;
|
|
15
|
+
/** Configured **LP share token** `AccountId`. */
|
|
16
|
+
export declare const NATIVE_AMM_LP_VAULT_KEY_SHARE_TOKEN_HEX: `0x${string}`;
|
|
17
|
+
export type NativeAmmLpVaultStorageSnapshot = {
|
|
18
|
+
/** `configure` has been executed (configured word ≠ 0). */
|
|
19
|
+
configured: boolean;
|
|
20
|
+
poolHex: `0x${string}` | null;
|
|
21
|
+
shareTokenHex: `0x${string}` | null;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Read vault **`configure`** state from **`boing_getContractStorage`** (three parallel reads).
|
|
25
|
+
*/
|
|
26
|
+
export declare function fetchNativeAmmLpVaultStorageSnapshot(client: BoingClient, vaultHex32: string): Promise<NativeAmmLpVaultStorageSnapshot>;
|
|
27
|
+
export type NativeAmmLpVaultProductReadiness = {
|
|
28
|
+
/** False when **`boing_getContractStorage`** fails for the vault (missing account, RPC error, etc.). */
|
|
29
|
+
vaultRpcOk: boolean;
|
|
30
|
+
vaultRpcError?: string;
|
|
31
|
+
vault: NativeAmmLpVaultStorageSnapshot;
|
|
32
|
+
/** From share token minter slot. */
|
|
33
|
+
shareMinterHex: `0x${string}` | null;
|
|
34
|
+
/**
|
|
35
|
+
* Vault configured, share minter equals vault, stored share id matches **`shareHex32`**, and
|
|
36
|
+
* **`expectedPoolHex32`** when provided equals stored pool.
|
|
37
|
+
*/
|
|
38
|
+
depositAddReady: boolean;
|
|
39
|
+
/** Human-readable blockers for UI (empty when **`depositAddReady`**). */
|
|
40
|
+
blockingReasons: string[];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Probe whether the **LP vault product path** is safe to expose (**`deposit_add`**): vault
|
|
44
|
+
* **`configure(pool, share)`** done and LP share **`set_minter_once`** set the vault as minter.
|
|
45
|
+
* Optional **`expectedPoolHex32`** enforces the configured pool matches integration defaults.
|
|
46
|
+
*/
|
|
47
|
+
export declare function fetchNativeAmmLpVaultProductReadiness(client: BoingClient, input: {
|
|
48
|
+
vaultHex32: string;
|
|
49
|
+
shareHex32: string;
|
|
50
|
+
expectedPoolHex32?: string | undefined;
|
|
51
|
+
}): Promise<NativeAmmLpVaultProductReadiness>;
|
|
52
|
+
export declare function encodeNativeAmmLpVaultConfigureCalldata(poolHex32: string, shareTokenHex32: string): Uint8Array;
|
|
53
|
+
export declare function encodeNativeAmmLpVaultConfigureCalldataHex(poolHex32: string, shareTokenHex32: string): string;
|
|
54
|
+
export declare function encodeNativeAmmLpVaultDepositAddCalldata(innerAddLiquidity128: Uint8Array, minLp: bigint): Uint8Array;
|
|
55
|
+
export declare function encodeNativeAmmLpVaultDepositAddCalldataHex(innerAddLiquidity128: Uint8Array, minLp: bigint): string;
|
|
56
|
+
/** `read` / `write`: signer + vault (parallel scheduling minimum for configure-only). */
|
|
57
|
+
export declare function buildNativeAmmLpVaultConfigureAccessList(senderHex32: string, vaultHex32: string): {
|
|
58
|
+
read: string[];
|
|
59
|
+
write: string[];
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* `read` / `write`: signer + vault + pool + share token (`deposit_add` nested `Call`s).
|
|
63
|
+
*/
|
|
64
|
+
export declare function buildNativeAmmLpVaultDepositAddAccessList(senderHex32: string, vaultHex32: string, poolHex32: string, shareTokenHex32: string): {
|
|
65
|
+
read: string[];
|
|
66
|
+
write: string[];
|
|
67
|
+
};
|
|
68
|
+
export declare function mergeNativeAmmLpVaultConfigureAccessListWithSimulation(senderHex32: string, vaultHex32: string, sim: SimulateResult): {
|
|
69
|
+
read: string[];
|
|
70
|
+
write: string[];
|
|
71
|
+
};
|
|
72
|
+
export declare function mergeNativeAmmLpVaultDepositAddAccessListWithSimulation(senderHex32: string, vaultHex32: string, poolHex32: string, shareTokenHex32: string, sim: SimulateResult): {
|
|
73
|
+
read: string[];
|
|
74
|
+
write: string[];
|
|
75
|
+
};
|
|
76
|
+
export declare function buildNativeAmmLpVaultConfigureContractCallTx(senderHex32: string, vaultHex32: string, calldataHex: string): {
|
|
77
|
+
type: 'contract_call';
|
|
78
|
+
contract: string;
|
|
79
|
+
calldata: string;
|
|
80
|
+
access_list: {
|
|
81
|
+
read: string[];
|
|
82
|
+
write: string[];
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
export declare function buildNativeAmmLpVaultDepositAddContractCallTx(senderHex32: string, vaultHex32: string, poolHex32: string, shareTokenHex32: string, calldataHex: string): {
|
|
86
|
+
type: 'contract_call';
|
|
87
|
+
contract: string;
|
|
88
|
+
calldata: string;
|
|
89
|
+
access_list: {
|
|
90
|
+
read: string[];
|
|
91
|
+
write: string[];
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=nativeAmmLpVault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeAmmLpVault.d.ts","sourceRoot":"","sources":["../src/nativeAmmLpVault.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native AMM LP vault calldata + Express / JSON-RPC access lists. Matches `boing_execution::native_amm_lp_vault`.
|
|
3
|
+
* See `docs/NATIVE-AMM-LP-VAULT.md`.
|
|
4
|
+
*/
|
|
5
|
+
import { mergeAccessListWithSimulation } from './accessList.js';
|
|
6
|
+
import { bytesToHex, decodeBoingStorageWordAccountId, ensureHex, hexToBytes, validateHex32, } from './hex.js';
|
|
7
|
+
import { decodeBoingStorageWordU128 } from './nativeAmmPool.js';
|
|
8
|
+
import { fetchLpShareTokenMinterAccountHex } from './nativeLpShareToken.js';
|
|
9
|
+
/** `configure(pool, share_token)` — **96** bytes. */
|
|
10
|
+
export const SELECTOR_NATIVE_AMM_LP_VAULT_CONFIGURE = 0xc0;
|
|
11
|
+
/** `deposit_add(inner_add_liquidity_128, min_lp)` — **192** bytes. */
|
|
12
|
+
export const SELECTOR_NATIVE_AMM_LP_VAULT_DEPOSIT_ADD = 0xc1;
|
|
13
|
+
function nativeAmmLpVaultStorageKeyHex(lastByte) {
|
|
14
|
+
const k = new Uint8Array(32);
|
|
15
|
+
k[31] = lastByte & 0xff;
|
|
16
|
+
return validateHex32(bytesToHex(k));
|
|
17
|
+
}
|
|
18
|
+
/** `boing_getContractStorage` — non-zero after successful **`configure`**. */
|
|
19
|
+
export const NATIVE_AMM_LP_VAULT_KEY_CONFIGURED_HEX = nativeAmmLpVaultStorageKeyHex(0xd1);
|
|
20
|
+
/** Configured native CP **pool** `AccountId`. */
|
|
21
|
+
export const NATIVE_AMM_LP_VAULT_KEY_POOL_HEX = nativeAmmLpVaultStorageKeyHex(0xd2);
|
|
22
|
+
/** Configured **LP share token** `AccountId`. */
|
|
23
|
+
export const NATIVE_AMM_LP_VAULT_KEY_SHARE_TOKEN_HEX = nativeAmmLpVaultStorageKeyHex(0xd3);
|
|
24
|
+
/**
|
|
25
|
+
* Read vault **`configure`** state from **`boing_getContractStorage`** (three parallel reads).
|
|
26
|
+
*/
|
|
27
|
+
export async function fetchNativeAmmLpVaultStorageSnapshot(client, vaultHex32) {
|
|
28
|
+
const vault = validateHex32(vaultHex32);
|
|
29
|
+
const [wc, wp, ws] = await Promise.all([
|
|
30
|
+
client.getContractStorage(vault, NATIVE_AMM_LP_VAULT_KEY_CONFIGURED_HEX),
|
|
31
|
+
client.getContractStorage(vault, NATIVE_AMM_LP_VAULT_KEY_POOL_HEX),
|
|
32
|
+
client.getContractStorage(vault, NATIVE_AMM_LP_VAULT_KEY_SHARE_TOKEN_HEX),
|
|
33
|
+
]);
|
|
34
|
+
const configured = decodeBoingStorageWordU128(wc.value) !== 0n;
|
|
35
|
+
return {
|
|
36
|
+
configured,
|
|
37
|
+
poolHex: decodeBoingStorageWordAccountId(wp.value),
|
|
38
|
+
shareTokenHex: decodeBoingStorageWordAccountId(ws.value),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Probe whether the **LP vault product path** is safe to expose (**`deposit_add`**): vault
|
|
43
|
+
* **`configure(pool, share)`** done and LP share **`set_minter_once`** set the vault as minter.
|
|
44
|
+
* Optional **`expectedPoolHex32`** enforces the configured pool matches integration defaults.
|
|
45
|
+
*/
|
|
46
|
+
export async function fetchNativeAmmLpVaultProductReadiness(client, input) {
|
|
47
|
+
const vaultNorm = validateHex32(input.vaultHex32).toLowerCase();
|
|
48
|
+
const shareNorm = validateHex32(input.shareHex32).toLowerCase();
|
|
49
|
+
const expectedPool = input.expectedPoolHex32 != null && String(input.expectedPoolHex32).trim()
|
|
50
|
+
? validateHex32(String(input.expectedPoolHex32).trim()).toLowerCase()
|
|
51
|
+
: undefined;
|
|
52
|
+
let vaultRpcOk = true;
|
|
53
|
+
let vaultRpcError;
|
|
54
|
+
let vault = {
|
|
55
|
+
configured: false,
|
|
56
|
+
poolHex: null,
|
|
57
|
+
shareTokenHex: null,
|
|
58
|
+
};
|
|
59
|
+
let shareMinterHex = null;
|
|
60
|
+
try {
|
|
61
|
+
vault = await fetchNativeAmmLpVaultStorageSnapshot(client, vaultNorm);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
vaultRpcOk = false;
|
|
65
|
+
vaultRpcError = e instanceof Error ? e.message : String(e);
|
|
66
|
+
}
|
|
67
|
+
let shareMinterReadError;
|
|
68
|
+
try {
|
|
69
|
+
shareMinterHex = await fetchLpShareTokenMinterAccountHex(client, shareNorm);
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
shareMinterReadError = e instanceof Error ? e.message : String(e);
|
|
73
|
+
}
|
|
74
|
+
const blockingReasons = [];
|
|
75
|
+
if (!vaultRpcOk) {
|
|
76
|
+
blockingReasons.push(vaultRpcError != null ? `vault_storage: ${vaultRpcError}` : 'vault_storage: error');
|
|
77
|
+
}
|
|
78
|
+
if (!vault.configured) {
|
|
79
|
+
blockingReasons.push('vault_not_configured');
|
|
80
|
+
}
|
|
81
|
+
if (vault.shareTokenHex == null || vault.shareTokenHex.toLowerCase() !== shareNorm) {
|
|
82
|
+
blockingReasons.push('vault_share_mismatch');
|
|
83
|
+
}
|
|
84
|
+
if (expectedPool != null && (vault.poolHex == null || vault.poolHex.toLowerCase() !== expectedPool)) {
|
|
85
|
+
blockingReasons.push('vault_pool_mismatch');
|
|
86
|
+
}
|
|
87
|
+
if (shareMinterReadError != null) {
|
|
88
|
+
blockingReasons.push(`share_minter_read: ${shareMinterReadError}`);
|
|
89
|
+
}
|
|
90
|
+
else if (shareMinterHex == null || shareMinterHex.toLowerCase() !== vaultNorm) {
|
|
91
|
+
blockingReasons.push('share_minter_not_vault');
|
|
92
|
+
}
|
|
93
|
+
const depositAddReady = blockingReasons.length === 0;
|
|
94
|
+
return {
|
|
95
|
+
vaultRpcOk,
|
|
96
|
+
...(vaultRpcError != null ? { vaultRpcError } : {}),
|
|
97
|
+
vault,
|
|
98
|
+
shareMinterHex,
|
|
99
|
+
depositAddReady,
|
|
100
|
+
blockingReasons: depositAddReady ? [] : blockingReasons,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function selectorWord(selector) {
|
|
104
|
+
const w = new Uint8Array(32);
|
|
105
|
+
w[31] = selector & 0xff;
|
|
106
|
+
return w;
|
|
107
|
+
}
|
|
108
|
+
const CALldata_HEX_RE = /^[0-9a-fA-F]+$/;
|
|
109
|
+
function normalizeCalldataHex(calldataHex) {
|
|
110
|
+
const h = ensureHex(calldataHex.trim());
|
|
111
|
+
const raw = h.slice(2);
|
|
112
|
+
if (raw.length % 2 !== 0) {
|
|
113
|
+
throw new Error('calldata must be even-length hex');
|
|
114
|
+
}
|
|
115
|
+
if (!CALldata_HEX_RE.test(raw)) {
|
|
116
|
+
throw new Error('calldata: invalid hex');
|
|
117
|
+
}
|
|
118
|
+
return `0x${raw.toLowerCase()}`;
|
|
119
|
+
}
|
|
120
|
+
function sortedUniqueAccounts(hex32List) {
|
|
121
|
+
const seen = new Set();
|
|
122
|
+
const out = [];
|
|
123
|
+
for (const x of hex32List) {
|
|
124
|
+
const h = validateHex32(x).toLowerCase();
|
|
125
|
+
if (!seen.has(h)) {
|
|
126
|
+
seen.add(h);
|
|
127
|
+
out.push(h);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
out.sort();
|
|
131
|
+
return out;
|
|
132
|
+
}
|
|
133
|
+
function amountWord(amount) {
|
|
134
|
+
const w = new Uint8Array(32);
|
|
135
|
+
if (amount < 0n || amount > (1n << 128n) - 1n) {
|
|
136
|
+
throw new RangeError('amount must fit in u128');
|
|
137
|
+
}
|
|
138
|
+
const be = new Uint8Array(16);
|
|
139
|
+
let x = amount;
|
|
140
|
+
for (let i = 15; i >= 0; i--) {
|
|
141
|
+
be[i] = Number(x & 0xffn);
|
|
142
|
+
x >>= 8n;
|
|
143
|
+
}
|
|
144
|
+
w.set(be, 16);
|
|
145
|
+
return w;
|
|
146
|
+
}
|
|
147
|
+
export function encodeNativeAmmLpVaultConfigureCalldata(poolHex32, shareTokenHex32) {
|
|
148
|
+
const out = new Uint8Array(96);
|
|
149
|
+
out.set(selectorWord(SELECTOR_NATIVE_AMM_LP_VAULT_CONFIGURE));
|
|
150
|
+
out.set(hexToBytes(validateHex32(poolHex32)), 32);
|
|
151
|
+
out.set(hexToBytes(validateHex32(shareTokenHex32)), 64);
|
|
152
|
+
return out;
|
|
153
|
+
}
|
|
154
|
+
export function encodeNativeAmmLpVaultConfigureCalldataHex(poolHex32, shareTokenHex32) {
|
|
155
|
+
return bytesToHex(encodeNativeAmmLpVaultConfigureCalldata(poolHex32, shareTokenHex32));
|
|
156
|
+
}
|
|
157
|
+
export function encodeNativeAmmLpVaultDepositAddCalldata(innerAddLiquidity128, minLp) {
|
|
158
|
+
if (innerAddLiquidity128.length !== 128) {
|
|
159
|
+
throw new Error('inner add_liquidity calldata must be 128 bytes');
|
|
160
|
+
}
|
|
161
|
+
const out = new Uint8Array(192);
|
|
162
|
+
out.set(selectorWord(SELECTOR_NATIVE_AMM_LP_VAULT_DEPOSIT_ADD));
|
|
163
|
+
out.set(innerAddLiquidity128, 32);
|
|
164
|
+
out.set(amountWord(minLp), 160);
|
|
165
|
+
return out;
|
|
166
|
+
}
|
|
167
|
+
export function encodeNativeAmmLpVaultDepositAddCalldataHex(innerAddLiquidity128, minLp) {
|
|
168
|
+
return bytesToHex(encodeNativeAmmLpVaultDepositAddCalldata(innerAddLiquidity128, minLp));
|
|
169
|
+
}
|
|
170
|
+
/** `read` / `write`: signer + vault (parallel scheduling minimum for configure-only). */
|
|
171
|
+
export function buildNativeAmmLpVaultConfigureAccessList(senderHex32, vaultHex32) {
|
|
172
|
+
const accounts = sortedUniqueAccounts([senderHex32, vaultHex32]);
|
|
173
|
+
return { read: accounts, write: [...accounts] };
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* `read` / `write`: signer + vault + pool + share token (`deposit_add` nested `Call`s).
|
|
177
|
+
*/
|
|
178
|
+
export function buildNativeAmmLpVaultDepositAddAccessList(senderHex32, vaultHex32, poolHex32, shareTokenHex32) {
|
|
179
|
+
const accounts = sortedUniqueAccounts([senderHex32, vaultHex32, poolHex32, shareTokenHex32]);
|
|
180
|
+
return { read: accounts, write: [...accounts] };
|
|
181
|
+
}
|
|
182
|
+
export function mergeNativeAmmLpVaultConfigureAccessListWithSimulation(senderHex32, vaultHex32, sim) {
|
|
183
|
+
const base = buildNativeAmmLpVaultConfigureAccessList(senderHex32, vaultHex32);
|
|
184
|
+
return mergeAccessListWithSimulation(base.read, base.write, sim);
|
|
185
|
+
}
|
|
186
|
+
export function mergeNativeAmmLpVaultDepositAddAccessListWithSimulation(senderHex32, vaultHex32, poolHex32, shareTokenHex32, sim) {
|
|
187
|
+
const base = buildNativeAmmLpVaultDepositAddAccessList(senderHex32, vaultHex32, poolHex32, shareTokenHex32);
|
|
188
|
+
return mergeAccessListWithSimulation(base.read, base.write, sim);
|
|
189
|
+
}
|
|
190
|
+
export function buildNativeAmmLpVaultConfigureContractCallTx(senderHex32, vaultHex32, calldataHex) {
|
|
191
|
+
return {
|
|
192
|
+
type: 'contract_call',
|
|
193
|
+
contract: validateHex32(vaultHex32).toLowerCase(),
|
|
194
|
+
calldata: normalizeCalldataHex(calldataHex),
|
|
195
|
+
access_list: buildNativeAmmLpVaultConfigureAccessList(senderHex32, vaultHex32),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
export function buildNativeAmmLpVaultDepositAddContractCallTx(senderHex32, vaultHex32, poolHex32, shareTokenHex32, calldataHex) {
|
|
199
|
+
return {
|
|
200
|
+
type: 'contract_call',
|
|
201
|
+
contract: validateHex32(vaultHex32).toLowerCase(),
|
|
202
|
+
calldata: normalizeCalldataHex(calldataHex),
|
|
203
|
+
access_list: buildNativeAmmLpVaultDepositAddAccessList(senderHex32, vaultHex32, poolHex32, shareTokenHex32),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native constant-product pool — `contract_call` + access list for Boing Express / JSON-RPC.
|
|
3
|
+
* Matches `Transaction::suggested_parallel_access_list` for `ContractCall` when only sender + pool touch state.
|
|
4
|
+
*
|
|
5
|
+
* Storage layout matches `boing_execution::native_amm`:
|
|
6
|
+
* reserves (`reserve_a_key` / `reserve_b_key`), total LP (`total_lp_supply_key`), per-signer LP (`lp_balance_storage_key`);
|
|
7
|
+
* **v3/v4:** `swap_fee_bps_key` (`k[31] == 0x07`).
|
|
8
|
+
* Amounts are u128 BE in the **low 16 bytes** of each 32-byte word.
|
|
9
|
+
*/
|
|
10
|
+
import type { BoingClient } from './client.js';
|
|
11
|
+
import type { SimulateResult } from './types.js';
|
|
12
|
+
/** Optional accounts merged into native CP `contract_call` access lists (forward-compatible). */
|
|
13
|
+
export type NativePoolAccessListOptions = {
|
|
14
|
+
/**
|
|
15
|
+
* Extra 32-byte account ids (e.g. reference-token contracts). **Required** for **v2** pools on `swap` / `remove_liquidity` when token slots are set (pool `CALL`s those contracts).
|
|
16
|
+
* Duplicates and ids equal to sender/pool are ignored; extras are appended in sorted hex order after signer + pool.
|
|
17
|
+
*/
|
|
18
|
+
additionalAccountsHex32?: string[];
|
|
19
|
+
};
|
|
20
|
+
/** `read` and `write` both include signer + pool (parallel-scheduling minimum for pool-only bytecode). */
|
|
21
|
+
export declare function buildNativeConstantProductPoolAccessList(senderHex32: string, poolHex32: string, options?: NativePoolAccessListOptions): {
|
|
22
|
+
read: string[];
|
|
23
|
+
write: string[];
|
|
24
|
+
};
|
|
25
|
+
/** Params for `boing_sendTransaction` / Express `contract_call` with explicit access list. */
|
|
26
|
+
export declare function buildNativeConstantProductContractCallTx(senderHex32: string, poolHex32: string, calldataHex: string, options?: NativePoolAccessListOptions): {
|
|
27
|
+
type: 'contract_call';
|
|
28
|
+
contract: string;
|
|
29
|
+
calldata: string;
|
|
30
|
+
access_list: {
|
|
31
|
+
read: string[];
|
|
32
|
+
write: string[];
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Access list for **`contract_call`** into the native **multihop router**: signer, router, each pool in path order (deduped), then sorted extras (e.g. reference tokens).
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildNativeDexMultihopRouterAccessList(senderHex32: string, routerHex32: string, poolHex32List: readonly string[], options?: NativePoolAccessListOptions): {
|
|
39
|
+
read: string[];
|
|
40
|
+
write: string[];
|
|
41
|
+
};
|
|
42
|
+
/** Multihop router **`contract_call`** with {@link buildNativeDexMultihopRouterAccessList}. */
|
|
43
|
+
export declare function buildNativeDexMultihopRouterContractCallTx(senderHex32: string, routerHex32: string, calldataHex: string, poolHex32List: readonly string[], options?: NativePoolAccessListOptions): {
|
|
44
|
+
type: 'contract_call';
|
|
45
|
+
contract: string;
|
|
46
|
+
calldata: string;
|
|
47
|
+
access_list: {
|
|
48
|
+
read: string[];
|
|
49
|
+
write: string[];
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Widen multihop router access list with `sim.suggested_access_list` (e.g. after `boing_simulateTransaction`).
|
|
54
|
+
*/
|
|
55
|
+
export declare function mergeNativeDexMultihopRouterAccessListWithSimulation(senderHex32: string, routerHex32: string, poolHex32List: readonly string[], sim: SimulateResult, options?: NativePoolAccessListOptions): {
|
|
56
|
+
read: string[];
|
|
57
|
+
write: string[];
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Widen `read`/`write` with `sim.suggested_access_list` (e.g. after `boing_simulateTransaction`).
|
|
61
|
+
*/
|
|
62
|
+
export declare function mergeNativePoolAccessListWithSimulation(senderHex32: string, poolHex32: string, sim: SimulateResult, options?: NativePoolAccessListOptions): {
|
|
63
|
+
read: string[];
|
|
64
|
+
write: string[];
|
|
65
|
+
};
|
|
66
|
+
/** `boing_getContractStorage` key for reserve A (`native_amm::reserve_a_key`). */
|
|
67
|
+
export declare const NATIVE_CONSTANT_PRODUCT_RESERVE_A_KEY_HEX: `0x${string}01`;
|
|
68
|
+
/** `boing_getContractStorage` key for reserve B (`native_amm::reserve_b_key`). */
|
|
69
|
+
export declare const NATIVE_CONSTANT_PRODUCT_RESERVE_B_KEY_HEX: `0x${string}02`;
|
|
70
|
+
/** Total LP supply key (`native_amm::total_lp_supply_key`, `k[31] == 0x03`). */
|
|
71
|
+
export declare const NATIVE_CONSTANT_PRODUCT_TOTAL_LP_KEY_HEX: `0x${string}03`;
|
|
72
|
+
/** **v2:** On-chain reference-token id for reserve side A (`token_a_key`, `k[31] == 0x04`). */
|
|
73
|
+
export declare const NATIVE_CONSTANT_PRODUCT_TOKEN_A_KEY_HEX: `0x${string}04`;
|
|
74
|
+
/** **v2:** Reference-token id for side B (`k[31] == 0x05`). */
|
|
75
|
+
export declare const NATIVE_CONSTANT_PRODUCT_TOKEN_B_KEY_HEX: `0x${string}05`;
|
|
76
|
+
/** **v2:** Non-zero after successful `set_tokens` (`k[31] == 0x06`). */
|
|
77
|
+
export declare const NATIVE_CONSTANT_PRODUCT_TOKENS_CONFIGURED_KEY_HEX: `0x${string}06`;
|
|
78
|
+
/** **v3/v4:** Swap fee bps on output (`swap_fee_bps_key`, `k[31] == 0x07`). **`0`** = unset until first `add_liquidity` (then defaults to **`NATIVE_CP_SWAP_FEE_BPS`** on-chain). */
|
|
79
|
+
export declare const NATIVE_CONSTANT_PRODUCT_SWAP_FEE_BPS_KEY_HEX: `0x${string}07`;
|
|
80
|
+
/**
|
|
81
|
+
* `boing_getContractStorage` key for the caller's LP balance (`native_amm::lp_balance_storage_key`).
|
|
82
|
+
*/
|
|
83
|
+
export declare function nativeAmmLpBalanceStorageKeyHex(senderHex32: string): string;
|
|
84
|
+
/**
|
|
85
|
+
* Decode **u128** from a 32-byte Boing contract storage word (`value` from `boing_getContractStorage`):
|
|
86
|
+
* big-endian integer in the **low 16 bytes** (high 16 bytes ignored), matching reference-token amount words.
|
|
87
|
+
*/
|
|
88
|
+
export declare function decodeBoingStorageWordU128(valueHex: string): bigint;
|
|
89
|
+
/**
|
|
90
|
+
* Decode successful native pool **`add_liquidity`** contract return data: **exactly 32 bytes** (64 hex
|
|
91
|
+
* chars), **u128** LP minted in the **low 16 bytes**; high 16 bytes must be zero (canonical amount word).
|
|
92
|
+
*/
|
|
93
|
+
export declare function decodeNativeAmmAddLiquidityReturnLpMinted(returnDataHex: string): bigint;
|
|
94
|
+
/**
|
|
95
|
+
* Decode native AMM `Log2` **data** (96 bytes): three u128 words (low 16 bytes of each 32-byte word), per `NATIVE-AMM-CALLDATA.md` § Logs.
|
|
96
|
+
*/
|
|
97
|
+
export declare function decodeNativeAmmLogDataU128Triple(dataHex: string): readonly [bigint, bigint, bigint];
|
|
98
|
+
/**
|
|
99
|
+
* Read both in-ledger reserves for the MVP constant-product pool (`Promise.all` of two storage reads).
|
|
100
|
+
*/
|
|
101
|
+
export declare function fetchNativeConstantProductReserves(client: BoingClient, poolHex32: string): Promise<{
|
|
102
|
+
reserveA: bigint;
|
|
103
|
+
reserveB: bigint;
|
|
104
|
+
}>;
|
|
105
|
+
/** Single `boing_getContractStorage` read for **`total_lp_supply_key`**. */
|
|
106
|
+
export declare function fetchNativeConstantProductTotalLpSupply(client: BoingClient, poolHex32: string): Promise<bigint>;
|
|
107
|
+
/** **v3/v4:** Raw u128 at **`swap_fee_bps_key`**. Use **`0n`** → default fee **`NATIVE_CP_SWAP_FEE_BPS`** when quoting swaps. */
|
|
108
|
+
export declare function fetchNativeConstantProductSwapFeeBps(client: BoingClient, poolHex32: string): Promise<bigint>;
|
|
109
|
+
/** LP balance for **`signerHex32`** in **`poolHex32`** (XOR-derived storage key). */
|
|
110
|
+
export declare function fetchNativeAmmSignerLpBalance(client: BoingClient, poolHex32: string, signerHex32: string): Promise<bigint>;
|
|
111
|
+
export interface NativeConstantProductPoolSnapshot {
|
|
112
|
+
reserveA: bigint;
|
|
113
|
+
reserveB: bigint;
|
|
114
|
+
totalLpSupply: bigint;
|
|
115
|
+
/** Present only when **`options.signerHex32`** was set. */
|
|
116
|
+
signerLpBalance?: bigint;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* One round-trip batch: reserves + total LP, and optionally the given signer's LP balance (**3** or **4** parallel storage reads).
|
|
120
|
+
*/
|
|
121
|
+
export declare function fetchNativeConstantProductPoolSnapshot(client: BoingClient, poolHex32: string, options?: {
|
|
122
|
+
signerHex32?: string;
|
|
123
|
+
}): Promise<NativeConstantProductPoolSnapshot>;
|
|
124
|
+
//# sourceMappingURL=nativeAmmPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeAmmPool.d.ts","sourceRoot":"","sources":["../src/nativeAmmPool.ts"],"names":[],"mappings":"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"}
|