@moon-cx/sdk 0.0.0-stage → 2.0.1

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 (155) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +2 -2
  3. package/dist/adapters/sender.d.ts +88 -0
  4. package/dist/adapters/sender.d.ts.map +1 -0
  5. package/dist/adapters/sender.js +62 -0
  6. package/dist/adapters/sender.js.map +1 -0
  7. package/dist/adapters/tonclient.d.ts +13 -0
  8. package/dist/adapters/tonclient.d.ts.map +1 -0
  9. package/dist/adapters/tonclient.js +17 -0
  10. package/dist/adapters/tonclient.js.map +1 -0
  11. package/dist/api/index.d.ts +210 -0
  12. package/dist/api/index.d.ts.map +1 -0
  13. package/dist/api/index.js +364 -0
  14. package/dist/api/index.js.map +1 -0
  15. package/dist/codec/bins.d.ts +26 -0
  16. package/dist/codec/bins.d.ts.map +1 -0
  17. package/dist/codec/bins.js +67 -0
  18. package/dist/codec/bins.js.map +1 -0
  19. package/dist/codec/clmm.d.ts +87 -0
  20. package/dist/codec/clmm.d.ts.map +1 -0
  21. package/dist/codec/clmm.js +119 -0
  22. package/dist/codec/clmm.js.map +1 -0
  23. package/dist/codec/cpmm.d.ts +112 -0
  24. package/dist/codec/cpmm.d.ts.map +1 -0
  25. package/dist/codec/cpmm.js +146 -0
  26. package/dist/codec/cpmm.js.map +1 -0
  27. package/dist/codec/jetton.d.ts +30 -0
  28. package/dist/codec/jetton.d.ts.map +1 -0
  29. package/dist/codec/jetton.js +37 -0
  30. package/dist/codec/jetton.js.map +1 -0
  31. package/dist/codec/mempad.d.ts +109 -0
  32. package/dist/codec/mempad.d.ts.map +1 -0
  33. package/dist/codec/mempad.js +162 -0
  34. package/dist/codec/mempad.js.map +1 -0
  35. package/dist/core/amount.d.ts +33 -0
  36. package/dist/core/amount.d.ts.map +1 -0
  37. package/dist/core/amount.js +81 -0
  38. package/dist/core/amount.js.map +1 -0
  39. package/dist/core/asset.d.ts +82 -0
  40. package/dist/core/asset.d.ts.map +1 -0
  41. package/dist/core/asset.js +143 -0
  42. package/dist/core/asset.js.map +1 -0
  43. package/dist/core/errors.d.ts +70 -0
  44. package/dist/core/errors.d.ts.map +1 -0
  45. package/dist/core/errors.js +114 -0
  46. package/dist/core/errors.js.map +1 -0
  47. package/dist/core/fee.d.ts +36 -0
  48. package/dist/core/fee.d.ts.map +1 -0
  49. package/dist/core/fee.js +40 -0
  50. package/dist/core/fee.js.map +1 -0
  51. package/dist/core/gas.d.ts +112 -0
  52. package/dist/core/gas.d.ts.map +1 -0
  53. package/dist/core/gas.js +265 -0
  54. package/dist/core/gas.js.map +1 -0
  55. package/dist/core/percent.d.ts +27 -0
  56. package/dist/core/percent.d.ts.map +1 -0
  57. package/dist/core/percent.js +71 -0
  58. package/dist/core/percent.js.map +1 -0
  59. package/dist/core/tx.d.ts +36 -0
  60. package/dist/core/tx.d.ts.map +1 -0
  61. package/dist/core/tx.js +17 -0
  62. package/dist/core/tx.js.map +1 -0
  63. package/dist/index.d.ts +63 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +41 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/jetton/index.d.ts +53 -0
  68. package/dist/jetton/index.d.ts.map +1 -0
  69. package/dist/jetton/index.js +90 -0
  70. package/dist/jetton/index.js.map +1 -0
  71. package/dist/math/clmm-swap.d.ts +80 -0
  72. package/dist/math/clmm-swap.d.ts.map +1 -0
  73. package/dist/math/clmm-swap.js +277 -0
  74. package/dist/math/clmm-swap.js.map +1 -0
  75. package/dist/math/clmm.d.ts +234 -0
  76. package/dist/math/clmm.d.ts.map +1 -0
  77. package/dist/math/clmm.js +270 -0
  78. package/dist/math/clmm.js.map +1 -0
  79. package/dist/math/cpmm.d.ts +170 -0
  80. package/dist/math/cpmm.d.ts.map +1 -0
  81. package/dist/math/cpmm.js +175 -0
  82. package/dist/math/cpmm.js.map +1 -0
  83. package/dist/math/integer.d.ts +10 -0
  84. package/dist/math/integer.d.ts.map +1 -0
  85. package/dist/math/integer.js +44 -0
  86. package/dist/math/integer.js.map +1 -0
  87. package/dist/math/q128.d.ts +45 -0
  88. package/dist/math/q128.d.ts.map +1 -0
  89. package/dist/math/q128.js +108 -0
  90. package/dist/math/q128.js.map +1 -0
  91. package/dist/moon.d.ts +245 -0
  92. package/dist/moon.d.ts.map +1 -0
  93. package/dist/moon.js +332 -0
  94. package/dist/moon.js.map +1 -0
  95. package/dist/ops/jetton-input.d.ts +3 -0
  96. package/dist/ops/jetton-input.d.ts.map +1 -0
  97. package/dist/ops/jetton-input.js +8 -0
  98. package/dist/ops/jetton-input.js.map +1 -0
  99. package/dist/ops/liquidity.d.ts +157 -0
  100. package/dist/ops/liquidity.d.ts.map +1 -0
  101. package/dist/ops/liquidity.js +413 -0
  102. package/dist/ops/liquidity.js.map +1 -0
  103. package/dist/ops/mempad.d.ts +143 -0
  104. package/dist/ops/mempad.d.ts.map +1 -0
  105. package/dist/ops/mempad.js +248 -0
  106. package/dist/ops/mempad.js.map +1 -0
  107. package/dist/ops/pool.d.ts +75 -0
  108. package/dist/ops/pool.d.ts.map +1 -0
  109. package/dist/ops/pool.js +129 -0
  110. package/dist/ops/pool.js.map +1 -0
  111. package/dist/ops/position.d.ts +47 -0
  112. package/dist/ops/position.d.ts.map +1 -0
  113. package/dist/ops/position.js +73 -0
  114. package/dist/ops/position.js.map +1 -0
  115. package/dist/ops/swap.d.ts +104 -0
  116. package/dist/ops/swap.d.ts.map +1 -0
  117. package/dist/ops/swap.js +248 -0
  118. package/dist/ops/swap.js.map +1 -0
  119. package/dist/pool/amounts.d.ts +36 -0
  120. package/dist/pool/amounts.d.ts.map +1 -0
  121. package/dist/pool/amounts.js +68 -0
  122. package/dist/pool/amounts.js.map +1 -0
  123. package/dist/pool/assets.d.ts +45 -0
  124. package/dist/pool/assets.d.ts.map +1 -0
  125. package/dist/pool/assets.js +57 -0
  126. package/dist/pool/assets.js.map +1 -0
  127. package/dist/pool/clmm.d.ts +309 -0
  128. package/dist/pool/clmm.d.ts.map +1 -0
  129. package/dist/pool/clmm.js +561 -0
  130. package/dist/pool/clmm.js.map +1 -0
  131. package/dist/pool/cpmm.d.ts +228 -0
  132. package/dist/pool/cpmm.d.ts.map +1 -0
  133. package/dist/pool/cpmm.js +332 -0
  134. package/dist/pool/cpmm.js.map +1 -0
  135. package/dist/protocol/generated.d.ts +2752 -0
  136. package/dist/protocol/generated.d.ts.map +1 -0
  137. package/dist/protocol/generated.js +3564 -0
  138. package/dist/protocol/generated.js.map +1 -0
  139. package/dist/protocol/index.d.ts +19 -0
  140. package/dist/protocol/index.d.ts.map +1 -0
  141. package/dist/protocol/index.js +49 -0
  142. package/dist/protocol/index.js.map +1 -0
  143. package/dist/state/address.d.ts +121 -0
  144. package/dist/state/address.d.ts.map +1 -0
  145. package/dist/state/address.js +143 -0
  146. package/dist/state/address.js.map +1 -0
  147. package/dist/state/source.d.ts +26 -0
  148. package/dist/state/source.d.ts.map +1 -0
  149. package/dist/state/source.js +32 -0
  150. package/dist/state/source.js.map +1 -0
  151. package/dist/state/storage.d.ts +218 -0
  152. package/dist/state/storage.d.ts.map +1 -0
  153. package/dist/state/storage.js +273 -0
  154. package/dist/state/storage.js.map +1 -0
  155. package/package.json +74 -4
@@ -0,0 +1,119 @@
1
+ import { Address, beginCell } from '@ton/core';
2
+ import { opcodeOf } from "../protocol/index.js";
3
+ import { binFlagsToDict, depositBinsToDict, sumBins } from "./bins.js";
4
+ /** Field order this codec writes. Checked against the protocol by the drift test. */
5
+ export const CLMM_LAYOUTS = {
6
+ MsgCreatePool: ['queryId', 'xMaster', 'yMaster', 'binStep', 'initBin'],
7
+ MsgSwap: ['queryId', 'swapParams'],
8
+ TonSwapParams: ['swapAmount', 'excess', 'sqrtPriceLimit', 'nextFulfill', 'nextReject'],
9
+ JettonSwapPayload: ['swapParams'],
10
+ JettonSwapParams: ['excess', 'sqrtPriceLimit', 'nextFulfill', 'nextReject'],
11
+ MsgDepositLiquidity: ['queryId', 'depositAmount', 'isSingle', 'depositBins'],
12
+ JettonDepositLiquidityPayload: ['isSingle', 'depositBins'],
13
+ MsgWithdrawLiqudity: ['queryId', 'withdrawBins'],
14
+ MsgWithdrawFees: ['queryId'],
15
+ MsgLockLiquidity: ['queryId'],
16
+ };
17
+ const op = (struct) => opcodeOf('clmm', struct);
18
+ function storeMaybeRef(builder, cell) {
19
+ if (cell === null)
20
+ builder.storeBit(0);
21
+ else
22
+ builder.storeBit(1).storeRef(cell);
23
+ }
24
+ /** `MsgSwap` — native TON leg. Sent to the range, not to the pool. */
25
+ export function encodeSwap(args) {
26
+ const body = beginCell()
27
+ .storeUint(op('MsgSwap'), 32)
28
+ .storeUint(args.queryId, 64)
29
+ .storeCoins(args.swapAmount)
30
+ .storeAddress(args.excess)
31
+ .storeUint(args.sqrtPriceLimit, 256);
32
+ storeMaybeRef(body, args.nextFulfill ?? null);
33
+ storeMaybeRef(body, args.nextReject ?? null);
34
+ return body.endCell();
35
+ }
36
+ /** `JettonSwapPayload` — jetton leg. No query id, no amount: both come from the transfer. */
37
+ export function encodeJettonSwapPayload(args) {
38
+ const body = beginCell()
39
+ .storeUint(op('JettonSwapPayload'), 32)
40
+ .storeAddress(args.excess)
41
+ .storeUint(args.sqrtPriceLimit, 256);
42
+ storeMaybeRef(body, args.nextFulfill ?? null);
43
+ storeMaybeRef(body, args.nextReject ?? null);
44
+ return body.endCell();
45
+ }
46
+ /**
47
+ * `MsgCreatePool`.
48
+ *
49
+ * `initBin` is signed: a pool priced below 1 starts at a negative index.
50
+ * `binStep` is in basis points and the factory only accepts 25, 50, 100 or 200.
51
+ */
52
+ export function encodeCreatePool(args) {
53
+ return beginCell()
54
+ .storeUint(op('MsgCreatePool'), 32)
55
+ .storeUint(args.queryId, 64)
56
+ .storeAddress(args.xMaster)
57
+ .storeAddress(args.yMaster)
58
+ .storeUint(args.binStep, 16)
59
+ .storeInt(args.initBin, 64)
60
+ .endCell();
61
+ }
62
+ /** `MsgDepositLiquidity` — native TON leg. Native TON is always the X side. */
63
+ export function encodeDepositLiquidity(args) {
64
+ const totals = sumBins(args.bins);
65
+ const depositAmount = args.side === 'x' ? totals.x : totals.y;
66
+ return beginCell()
67
+ .storeUint(op('MsgDepositLiquidity'), 32)
68
+ .storeUint(args.queryId, 64)
69
+ .storeCoins(depositAmount)
70
+ .storeBit(args.isSingle)
71
+ .storeDict(depositBinsToDict(args.bins))
72
+ .endCell();
73
+ }
74
+ /** `JettonDepositLiquidityPayload` — jetton leg. Amount comes from the transfer. */
75
+ export function encodeJettonDepositPayload(args) {
76
+ return beginCell()
77
+ .storeUint(op('JettonDepositLiquidityPayload'), 32)
78
+ .storeBit(args.isSingle)
79
+ .storeDict(depositBinsToDict(args.bins))
80
+ .endCell();
81
+ }
82
+ /**
83
+ * `MsgWithdrawLiqudity` — sent to the LP position.
84
+ *
85
+ * The misspelling is the protocol's own message name, kept so the two match.
86
+ * The body carries which bins to empty; there is no partial amount.
87
+ */
88
+ export function encodeWithdrawLiquidity(args) {
89
+ if (args.binIds.length === 0)
90
+ throw new TypeError('withdraw needs at least one bin');
91
+ return beginCell()
92
+ .storeUint(op('MsgWithdrawLiqudity'), 32)
93
+ .storeUint(args.queryId, 64)
94
+ .storeDict(binFlagsToDict(args.binIds))
95
+ .endCell();
96
+ }
97
+ /** `MsgWithdrawFees` — collects accrued fees, leaving liquidity in place. */
98
+ export function encodeWithdrawFees(args) {
99
+ return beginCell().storeUint(op('MsgWithdrawFees'), 32).storeUint(args.queryId, 64).endCell();
100
+ }
101
+ /** `MsgLockLiquidity` — locks the position permanently. */
102
+ export function encodeLockLiquidity(args) {
103
+ return beginCell().storeUint(op('MsgLockLiquidity'), 32).storeUint(args.queryId, 64).endCell();
104
+ }
105
+ /** Parses a `MsgSwap` body. For tests and debugging. */
106
+ export function decodeSwap(cell) {
107
+ const slice = cell.beginParse();
108
+ const opcode = slice.loadUint(32);
109
+ if (opcode !== op('MsgSwap'))
110
+ throw new Error(`expected MsgSwap, got opcode 0x${opcode.toString(16)}`);
111
+ const queryId = slice.loadUintBig(64);
112
+ const swapAmount = slice.loadCoins();
113
+ const excess = slice.loadAddress();
114
+ const sqrtPriceLimit = slice.loadUintBig(256);
115
+ const nextFulfill = slice.loadBit() ? slice.loadRef() : null;
116
+ const nextReject = slice.loadBit() ? slice.loadRef() : null;
117
+ return { queryId, swapAmount, excess, sqrtPriceLimit, nextFulfill, nextReject };
118
+ }
119
+ //# sourceMappingURL=clmm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clmm.js","sourceRoot":"","sources":["../../src/codec/clmm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ import { Address, type Cell } from '@ton/core';
2
+ /** Field order this codec writes, per message. Checked against the protocol by the drift test. */
3
+ export declare const CPMM_LAYOUTS: {
4
+ readonly MsgCreatePool: readonly ["queryId", "xMaster", "yMaster", "feeBps"];
5
+ readonly MsgSwap: readonly ["queryId", "swapParams"];
6
+ readonly TonSwapParams: readonly ["swapAmount", "excess", "minOut", "nextFulfill", "nextReject"];
7
+ readonly JettonSwapPayload: readonly ["swapParams"];
8
+ readonly JettonSwapParams: readonly ["excess", "minOut", "nextFulfill", "nextReject"];
9
+ readonly MsgDepositLiquidity: readonly ["queryId", "minLpOut", "locked", "split"];
10
+ readonly JettonDepositLiquidityPayload: readonly ["minLpOut", "locked", "split"];
11
+ readonly LpSplit: readonly ["aRecipient", "aBps", "bRecipient"];
12
+ readonly MsgWithdrawLiquidity: readonly ["queryId", "amount"];
13
+ readonly MsgWithdrawFees: readonly ["queryId"];
14
+ readonly MsgLockLiquidity: readonly ["queryId"];
15
+ };
16
+ export type CpmmSwapParams = {
17
+ /** Amount being swapped, in the input asset's smallest unit. */
18
+ swapAmount: bigint;
19
+ /** Where leftover TON goes. Sits before the minimum output — omitting it shifts every later byte. */
20
+ excess: Address;
21
+ /** Minimum acceptable output. Zero disables slippage protection entirely. */
22
+ minOut: bigint;
23
+ nextFulfill?: Cell | null;
24
+ nextReject?: Cell | null;
25
+ };
26
+ /** `MsgSwap` — swapping native TON. Sent straight to the pool. */
27
+ export declare function encodeSwap(args: {
28
+ queryId: bigint;
29
+ } & CpmmSwapParams): Cell;
30
+ /** `JettonSwapPayload` — jetton leg. No query id, no amount: both come from the transfer. */
31
+ export declare function encodeJettonSwapPayload(args: Omit<CpmmSwapParams, 'swapAmount'>): Cell;
32
+ /**
33
+ * `MsgCreatePool`. A null master means native TON. `feeBps` is fixed for the
34
+ * pool's lifetime; the factory derives the protocol share itself.
35
+ */
36
+ export declare function encodeCreatePool(args: {
37
+ queryId: bigint;
38
+ xMaster: Address | null;
39
+ yMaster: Address | null;
40
+ } & ({
41
+ feeBps: number;
42
+ feebps?: never;
43
+ } | {
44
+ /** @deprecated Use feeBps, matching the on-chain field. */
45
+ feebps: number;
46
+ feeBps?: never;
47
+ })): Cell;
48
+ /**
49
+ * How a deposit's LP is divided between two recipients. Only the first deposit
50
+ * into a pool may carry one; otherwise the deposit is refunded. `aBps` is the
51
+ * first recipient's share; the rest goes to the second.
52
+ */
53
+ export type CpmmLpSplit = {
54
+ aRecipient: Address;
55
+ /** 0..10000. The pool rejects anything above FEE_DIVIDER. */
56
+ aBps: number;
57
+ bRecipient: Address;
58
+ };
59
+ /** `LpSplit` as its own cell — what the `split` field references. */
60
+ export declare function encodeLpSplit(split: CpmmLpSplit): Cell;
61
+ /**
62
+ * Fields every deposit carries on both legs. They are always written: the
63
+ * pool parses the whole body, and a body without them exits with code 9.
64
+ */
65
+ export type CpmmDepositExtras = {
66
+ /**
67
+ * Mint the position already locked: its liquidity can never be withdrawn —
68
+ * there is no unlock message anywhere in the protocol. Fees stay collectable.
69
+ */
70
+ locked?: boolean;
71
+ split?: CpmmLpSplit | null;
72
+ };
73
+ /** `MsgDepositLiquidity` — native TON leg, sent to the pool. */
74
+ export declare function encodeDepositLiquidity(args: {
75
+ queryId: bigint;
76
+ minLpOut: bigint;
77
+ } & CpmmDepositExtras): Cell;
78
+ /** `JettonDepositLiquidityPayload` — jetton leg. Query id comes from the transfer. */
79
+ export declare function encodeJettonDepositPayload(args: {
80
+ minLpOut: bigint;
81
+ } & CpmmDepositExtras): Cell;
82
+ /** `MsgWithdrawLiquidity` — sent to the LP position, not the pool. */
83
+ export declare function encodeWithdrawLiquidity(args: {
84
+ queryId: bigint;
85
+ amount: bigint;
86
+ }): Cell;
87
+ /** `MsgWithdrawFees` — collects accrued fees, leaving liquidity in place. */
88
+ export declare function encodeWithdrawFees(args: {
89
+ queryId: bigint;
90
+ }): Cell;
91
+ /**
92
+ * `MsgLockLiquidity` — locks the position permanently. There is no unlock;
93
+ * fees stay collectable.
94
+ */
95
+ export declare function encodeLockLiquidity(args: {
96
+ queryId: bigint;
97
+ }): Cell;
98
+ /** Parses a `MsgSwap` body. For tests and debugging. */
99
+ export declare function decodeSwapBody(cell: Cell): {
100
+ queryId: bigint;
101
+ } & CpmmSwapParams;
102
+ /** Parses a `MsgWithdrawLiquidity` body. For tests and debugging. */
103
+ export declare function decodeWithdrawLiquidity(cell: Cell): {
104
+ queryId: bigint;
105
+ amount: bigint;
106
+ };
107
+ /** Parses the leading fields of a `MsgDepositLiquidity` body. For tests and debugging. */
108
+ export declare function decodeDepositLiquidity(cell: Cell): {
109
+ queryId: bigint;
110
+ minLpOut: bigint;
111
+ };
112
+ //# sourceMappingURL=cpmm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpmm.d.ts","sourceRoot":"","sources":["../../src/codec/cpmm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ import { Address, beginCell } from '@ton/core';
2
+ import { opcodeOf } from "../protocol/index.js";
3
+ /** Field order this codec writes, per message. Checked against the protocol by the drift test. */
4
+ export const CPMM_LAYOUTS = {
5
+ MsgCreatePool: ['queryId', 'xMaster', 'yMaster', 'feeBps'],
6
+ MsgSwap: ['queryId', 'swapParams'],
7
+ TonSwapParams: ['swapAmount', 'excess', 'minOut', 'nextFulfill', 'nextReject'],
8
+ JettonSwapPayload: ['swapParams'],
9
+ JettonSwapParams: ['excess', 'minOut', 'nextFulfill', 'nextReject'],
10
+ MsgDepositLiquidity: ['queryId', 'minLpOut', 'locked', 'split'],
11
+ JettonDepositLiquidityPayload: ['minLpOut', 'locked', 'split'],
12
+ LpSplit: ['aRecipient', 'aBps', 'bRecipient'],
13
+ MsgWithdrawLiquidity: ['queryId', 'amount'],
14
+ MsgWithdrawFees: ['queryId'],
15
+ MsgLockLiquidity: ['queryId'],
16
+ };
17
+ const op = (struct) => opcodeOf('cpmm', struct);
18
+ /** Optional ref, written as `Maybe ^Cell`. */
19
+ function storeMaybeRef(builder, cell) {
20
+ if (cell === null)
21
+ builder.storeBit(0);
22
+ else
23
+ builder.storeBit(1).storeRef(cell);
24
+ }
25
+ /** `MsgSwap` — swapping native TON. Sent straight to the pool. */
26
+ export function encodeSwap(args) {
27
+ const body = beginCell()
28
+ .storeUint(op('MsgSwap'), 32)
29
+ .storeUint(args.queryId, 64)
30
+ .storeCoins(args.swapAmount)
31
+ .storeAddress(args.excess)
32
+ .storeCoins(args.minOut);
33
+ storeMaybeRef(body, args.nextFulfill ?? null);
34
+ storeMaybeRef(body, args.nextReject ?? null);
35
+ return body.endCell();
36
+ }
37
+ /** `JettonSwapPayload` — jetton leg. No query id, no amount: both come from the transfer. */
38
+ export function encodeJettonSwapPayload(args) {
39
+ const body = beginCell()
40
+ .storeUint(op('JettonSwapPayload'), 32)
41
+ .storeAddress(args.excess)
42
+ .storeCoins(args.minOut);
43
+ storeMaybeRef(body, args.nextFulfill ?? null);
44
+ storeMaybeRef(body, args.nextReject ?? null);
45
+ return body.endCell();
46
+ }
47
+ /**
48
+ * `MsgCreatePool`. A null master means native TON. `feeBps` is fixed for the
49
+ * pool's lifetime; the factory derives the protocol share itself.
50
+ */
51
+ export function encodeCreatePool(args) {
52
+ const feeBps = args.feeBps ?? args.feebps;
53
+ return beginCell()
54
+ .storeUint(op('MsgCreatePool'), 32)
55
+ .storeUint(args.queryId, 64)
56
+ .storeAddress(args.xMaster)
57
+ .storeAddress(args.yMaster)
58
+ .storeUint(feeBps, 8)
59
+ .endCell();
60
+ }
61
+ /** `LpSplit` as its own cell — what the `split` field references. */
62
+ export function encodeLpSplit(split) {
63
+ if (!Number.isInteger(split.aBps) || split.aBps < 0 || split.aBps > 10_000) {
64
+ throw new TypeError('aBps must be an integer in 0..10000');
65
+ }
66
+ return beginCell()
67
+ .storeAddress(split.aRecipient)
68
+ .storeUint(split.aBps, 16)
69
+ .storeAddress(split.bRecipient)
70
+ .endCell();
71
+ }
72
+ function storeDepositExtras(builder, extras) {
73
+ builder.storeBit(extras.locked ? 1 : 0);
74
+ storeMaybeRef(builder, extras.split ? encodeLpSplit(extras.split) : null);
75
+ }
76
+ /** `MsgDepositLiquidity` — native TON leg, sent to the pool. */
77
+ export function encodeDepositLiquidity(args) {
78
+ const body = beginCell()
79
+ .storeUint(op('MsgDepositLiquidity'), 32)
80
+ .storeUint(args.queryId, 64)
81
+ .storeCoins(args.minLpOut);
82
+ storeDepositExtras(body, args);
83
+ return body.endCell();
84
+ }
85
+ /** `JettonDepositLiquidityPayload` — jetton leg. Query id comes from the transfer. */
86
+ export function encodeJettonDepositPayload(args) {
87
+ const body = beginCell()
88
+ .storeUint(op('JettonDepositLiquidityPayload'), 32)
89
+ .storeCoins(args.minLpOut);
90
+ storeDepositExtras(body, args);
91
+ return body.endCell();
92
+ }
93
+ /** `MsgWithdrawLiquidity` — sent to the LP position, not the pool. */
94
+ export function encodeWithdrawLiquidity(args) {
95
+ if (args.amount <= 0n)
96
+ throw new TypeError('withdraw amount must be positive');
97
+ return beginCell()
98
+ .storeUint(op('MsgWithdrawLiquidity'), 32)
99
+ .storeUint(args.queryId, 64)
100
+ .storeCoins(args.amount)
101
+ .endCell();
102
+ }
103
+ /** `MsgWithdrawFees` — collects accrued fees, leaving liquidity in place. */
104
+ export function encodeWithdrawFees(args) {
105
+ return beginCell().storeUint(op('MsgWithdrawFees'), 32).storeUint(args.queryId, 64).endCell();
106
+ }
107
+ /**
108
+ * `MsgLockLiquidity` — locks the position permanently. There is no unlock;
109
+ * fees stay collectable.
110
+ */
111
+ export function encodeLockLiquidity(args) {
112
+ return beginCell().storeUint(op('MsgLockLiquidity'), 32).storeUint(args.queryId, 64).endCell();
113
+ }
114
+ /** Parses a `MsgSwap` body. For tests and debugging. */
115
+ export function decodeSwapBody(cell) {
116
+ const slice = cell.beginParse();
117
+ const opcode = slice.loadUint(32);
118
+ if (opcode !== op('MsgSwap'))
119
+ throw new Error(`expected MsgSwap, got opcode 0x${opcode.toString(16)}`);
120
+ const queryId = slice.loadUintBig(64);
121
+ const swapAmount = slice.loadCoins();
122
+ const excess = slice.loadAddress();
123
+ const minOut = slice.loadCoins();
124
+ const nextFulfill = slice.loadBit() ? slice.loadRef() : null;
125
+ const nextReject = slice.loadBit() ? slice.loadRef() : null;
126
+ return { queryId, swapAmount, excess, minOut, nextFulfill, nextReject };
127
+ }
128
+ /** Parses a `MsgWithdrawLiquidity` body. For tests and debugging. */
129
+ export function decodeWithdrawLiquidity(cell) {
130
+ const slice = cell.beginParse();
131
+ const opcode = slice.loadUint(32);
132
+ if (opcode !== op('MsgWithdrawLiquidity')) {
133
+ throw new Error(`expected MsgWithdrawLiquidity, got opcode 0x${opcode.toString(16)}`);
134
+ }
135
+ return { queryId: slice.loadUintBig(64), amount: slice.loadCoins() };
136
+ }
137
+ /** Parses the leading fields of a `MsgDepositLiquidity` body. For tests and debugging. */
138
+ export function decodeDepositLiquidity(cell) {
139
+ const slice = cell.beginParse();
140
+ const opcode = slice.loadUint(32);
141
+ if (opcode !== op('MsgDepositLiquidity')) {
142
+ throw new Error(`expected MsgDepositLiquidity, got opcode 0x${opcode.toString(16)}`);
143
+ }
144
+ return { queryId: slice.loadUintBig(64), minLpOut: slice.loadCoins() };
145
+ }
146
+ //# sourceMappingURL=cpmm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cpmm.js","sourceRoot":"","sources":["../../src/codec/cpmm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { Address, type Cell } from '@ton/core';
2
+ /** TEP-74 `transfer`. The same on every jetton wallet. */
3
+ export declare const JETTON_TRANSFER_OP = 260734629;
4
+ export type JettonTransferArgs = {
5
+ queryId: bigint;
6
+ /** Jetton units to move. */
7
+ amount: bigint;
8
+ /** Who receives the jettons — a pool or a range, never the user. */
9
+ destination: Address;
10
+ /** Who gets the leftover TON back. Normally the sender. */
11
+ responseDestination: Address;
12
+ /**
13
+ * TON forwarded along with the notification. This is what the receiver
14
+ * sees as its gas, and every gate on the jetton path measures it.
15
+ */
16
+ forwardTonAmount: bigint;
17
+ /** The operation to perform on arrival. Always placed in a ref — see below. */
18
+ forwardPayload: Cell | null;
19
+ customPayload?: Cell | null;
20
+ };
21
+ /**
22
+ * Builds a jetton transfer carrying an operation for a moon.cx pool or range.
23
+ *
24
+ * The payload always goes into a ref, never inline. TEP-74 allows either form
25
+ * (`Either Cell ^Cell`), but both protocols declare `forwardPayload: cell?`,
26
+ * which is `Maybe ^Cell` — an inline payload is read as absent. The jettons
27
+ * still arrive, the operation simply never happens.
28
+ */
29
+ export declare function buildJettonTransfer(args: JettonTransferArgs): Cell;
30
+ //# sourceMappingURL=jetton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jetton.d.ts","sourceRoot":"","sources":["../../src/codec/jetton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzD,0DAA0D;AAC1D,eAAO,MAAM,kBAAkB,YAAa,CAAA;AAE5C,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,WAAW,EAAE,OAAO,CAAA;IACpB,2DAA2D;IAC3D,mBAAmB,EAAE,OAAO,CAAA;IAC5B;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAA;IACxB,+EAA+E;IAC/E,cAAc,EAAE,IAAI,GAAG,IAAI,CAAA;IAC3B,aAAa,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAC5B,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAwBlE"}
@@ -0,0 +1,37 @@
1
+ import { Address, beginCell } from '@ton/core';
2
+ /** TEP-74 `transfer`. The same on every jetton wallet. */
3
+ export const JETTON_TRANSFER_OP = 0x0f8a7ea5;
4
+ /**
5
+ * Builds a jetton transfer carrying an operation for a moon.cx pool or range.
6
+ *
7
+ * The payload always goes into a ref, never inline. TEP-74 allows either form
8
+ * (`Either Cell ^Cell`), but both protocols declare `forwardPayload: cell?`,
9
+ * which is `Maybe ^Cell` — an inline payload is read as absent. The jettons
10
+ * still arrive, the operation simply never happens.
11
+ */
12
+ export function buildJettonTransfer(args) {
13
+ if (args.amount <= 0n)
14
+ throw new TypeError('jetton transfer amount must be positive');
15
+ if (args.forwardTonAmount < 0n)
16
+ throw new TypeError('forwardTonAmount cannot be negative');
17
+ const body = beginCell()
18
+ .storeUint(JETTON_TRANSFER_OP, 32)
19
+ .storeUint(args.queryId, 64)
20
+ .storeCoins(args.amount)
21
+ .storeAddress(args.destination)
22
+ .storeAddress(args.responseDestination);
23
+ const custom = args.customPayload ?? null;
24
+ if (custom === null)
25
+ body.storeBit(0);
26
+ else
27
+ body.storeBit(1).storeRef(custom);
28
+ body.storeCoins(args.forwardTonAmount);
29
+ if (args.forwardPayload === null) {
30
+ body.storeBit(0);
31
+ }
32
+ else {
33
+ body.storeBit(1).storeRef(args.forwardPayload);
34
+ }
35
+ return body.endCell();
36
+ }
37
+ //# sourceMappingURL=jetton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jetton.js","sourceRoot":"","sources":["../../src/codec/jetton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAa,MAAM,WAAW,CAAA;AAEzD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAA;AAoB5C;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAwB;IAC1D,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAA;IACrF,IAAI,IAAI,CAAC,gBAAgB,GAAG,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC,qCAAqC,CAAC,CAAA;IAE1F,MAAM,IAAI,GAAG,SAAS,EAAE;SACrB,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;SACjC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;SAC3B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;SACvB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;SAC9B,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAA;IACzC,IAAI,MAAM,KAAK,IAAI;QAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;;QAChC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAEtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAEtC,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAChD,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,EAAE,CAAA;AACvB,CAAC"}
@@ -0,0 +1,109 @@
1
+ import { Address, type Cell } from '@ton/core';
2
+ /** Field order this codec writes, per message. Checked against the protocol by the drift test. */
3
+ export declare const MEMPAD_LAYOUTS: {
4
+ readonly MsgCreateLaunch: readonly ["queryId", "salt", "feeBps", "initialBuy", "content"];
5
+ readonly MsgBuy: readonly ["queryId", "minOut"];
6
+ readonly AskToBurn: readonly ["queryId", "jettonAmount", "sendExcessesTo", "customPayload"];
7
+ readonly LaunchContent: readonly ["name", "symbol", "image", "extra"];
8
+ readonly LaunchExtra: readonly ["description", "links"];
9
+ readonly LaunchLinks: readonly ["website", "twitter", "telegram"];
10
+ readonly CurveInitData: readonly ["factory", "creator", "salt"];
11
+ };
12
+ /**
13
+ * The 32-bit word that turns a burn into a sale. Without it the curve treats the
14
+ * burn as plain: refused with `WRONG_STATE` (555) while trading, and after
15
+ * graduation the tokens are destroyed with nothing paid out.
16
+ */
17
+ export declare const SELL_MARKER: number;
18
+ /**
19
+ * A string as the factory wants it: a strictly linear chain of raw UTF-8 bytes.
20
+ *
21
+ * - No TEP-64 `0x00` prefix: the factory adds it, and a second one would
22
+ * become part of the stored string.
23
+ * - Strictly linear: the factory asserts `refs == cells - 1`, so the chain
24
+ * cannot branch or be padded.
25
+ *
26
+ * Limits are in bytes, not characters.
27
+ */
28
+ export declare function snakeChain(text: string): Cell;
29
+ /** How many cells a string will occupy once chained. The factory caps this per field. */
30
+ export declare function snakeCells(text: string): number;
31
+ export type LaunchLinks = {
32
+ website?: string | null;
33
+ twitter?: string | null;
34
+ telegram?: string | null;
35
+ };
36
+ export type LaunchMetadata = {
37
+ name: string;
38
+ symbol: string;
39
+ /** URI of the token image. Mandatory: the factory asserts it is non-empty. */
40
+ image: string;
41
+ description?: string | null;
42
+ links?: LaunchLinks | null;
43
+ };
44
+ /**
45
+ * The `LaunchContent` cell: three mandatory refs plus an optional `extra`.
46
+ *
47
+ * `description` is mandatory inside `extra`, so links without a description
48
+ * are dropped.
49
+ */
50
+ export declare function encodeLaunchContent(meta: LaunchMetadata): Cell;
51
+ /**
52
+ * `MsgCreateLaunch` — deploys a token and its bonding curve.
53
+ *
54
+ * The factory reads the bit fields positionally, so their order and widths must
55
+ * match exactly. The `content` ref's position does not matter.
56
+ */
57
+ export declare function encodeCreateLaunch(args: {
58
+ queryId: bigint;
59
+ salt: bigint;
60
+ feeBps: number;
61
+ initialBuy: bigint;
62
+ content: Cell;
63
+ }): Cell;
64
+ /**
65
+ * `MsgBuy` — buys from the curve. The body carries no amount: the curve takes
66
+ * its overhead off the attached TON and spends the rest.
67
+ */
68
+ export declare function encodeBuy(args: {
69
+ queryId: bigint;
70
+ minOut: bigint;
71
+ }): Cell;
72
+ /**
73
+ * The custom payload that marks a burn as a sale: marker word, then `minOut`.
74
+ * No query id; the curve reads exactly these two fields.
75
+ */
76
+ export declare function encodeSellPayload(args: {
77
+ minOut: bigint;
78
+ }): Cell;
79
+ /**
80
+ * `AskToBurn` — sent to the seller's own jetton wallet, which forwards
81
+ * `customPayload` to the curve in the burn notification.
82
+ */
83
+ export declare function encodeAskToBurn(args: {
84
+ queryId: bigint;
85
+ jettonAmount: bigint;
86
+ sendExcessesTo: Address | null;
87
+ customPayload: Cell | null;
88
+ }): Cell;
89
+ /** Gas units the curve charges itself for a buy. */
90
+ export declare const MEMPAD_GAS_BUY: bigint;
91
+ /** What a jetton transfer costs, and exactly what a sell must attach. */
92
+ export declare const MEMPAD_VALUE_JETTON_TRANSFER: bigint;
93
+ /** The smallest purchase the curve accepts, after its overhead is removed. */
94
+ export declare const MEMPAD_VALUE_MIN_BUY: bigint;
95
+ /** The factory's own share of a deploy, on top of the launch fee. */
96
+ export declare const MEMPAD_VALUE_CREATE_LAUNCH: bigint;
97
+ /** Metadata limits, in bytes and cells, exactly as the factory asserts them. */
98
+ export declare const MEMPAD_META_LIMITS: {
99
+ readonly nameBytes: number;
100
+ readonly symbolBytes: number;
101
+ readonly imageBytes: number;
102
+ readonly imageCells: number;
103
+ readonly descriptionBytes: number;
104
+ readonly descriptionCells: number;
105
+ readonly linkBytes: number;
106
+ };
107
+ /** Asserts this codec still matches the protocol. Called by the drift test. */
108
+ export declare function assertMempadLayouts(): void;
109
+ //# sourceMappingURL=mempad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mempad.d.ts","sourceRoot":"","sources":["../../src/codec/mempad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,WAAW,CAAA;AAGzD,kGAAkG;AAClG,eAAO,MAAM,cAAc;;;;;;;;CAQjB,CAAA;AAIV;;;;GAIG;AACH,eAAO,MAAM,WAAW,QAA8C,CAAA;AAKtE;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAY7C;AAED,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/C;AAQD,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAC3B,CAAA;AAcD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAc9D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,IAAI,CAAA;CACd,GAAG,IAAI,CASP;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMzE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAEhE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,OAAO,GAAG,IAAI,CAAA;IAC9B,aAAa,EAAE,IAAI,GAAG,IAAI,CAAA;CAC3B,GAAG,IAAI,CAQP;AAED,oDAAoD;AACpD,eAAO,MAAM,cAAc,QAAkC,CAAA;AAC7D,yEAAyE;AACzE,eAAO,MAAM,4BAA4B,QAAgD,CAAA;AACzF,8EAA8E;AAC9E,eAAO,MAAM,oBAAoB,QAAwC,CAAA;AACzE,qEAAqE;AACrE,eAAO,MAAM,0BAA0B,QAA8C,CAAA;AAErF,gFAAgF;AAChF,eAAO,MAAM,kBAAkB;;;;;;;;CAQrB,CAAA;AAEV,+EAA+E;AAC/E,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C"}