@picon-finance/dlmm-sdk 1.1.0 → 1.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 (234) hide show
  1. package/README.md +107 -16
  2. package/dist/entities/admin_config.d.ts +23 -0
  3. package/dist/entities/admin_config.d.ts.map +1 -0
  4. package/dist/entities/admin_config.js +54 -0
  5. package/dist/entities/bin_array.d.ts +36 -0
  6. package/dist/entities/bin_array.d.ts.map +1 -0
  7. package/dist/entities/bin_array.js +62 -0
  8. package/dist/entities/dlmm_program.d.ts +50 -0
  9. package/dist/entities/dlmm_program.d.ts.map +1 -0
  10. package/dist/entities/dlmm_program.js +73 -0
  11. package/dist/entities/index.d.ts +7 -0
  12. package/dist/entities/index.d.ts.map +1 -0
  13. package/dist/entities/index.js +6 -0
  14. package/dist/entities/pool.d.ts +71 -0
  15. package/dist/entities/pool.d.ts.map +1 -0
  16. package/dist/entities/pool.js +189 -0
  17. package/dist/entities/position.d.ts +51 -0
  18. package/dist/entities/position.d.ts.map +1 -0
  19. package/dist/entities/position.js +248 -0
  20. package/dist/entities/position_pool.d.ts +7 -0
  21. package/dist/entities/position_pool.d.ts.map +1 -0
  22. package/dist/entities/position_pool.js +30 -0
  23. package/dist/entities/types.d.ts +5 -0
  24. package/dist/entities/types.d.ts.map +1 -0
  25. package/dist/entities/types.js +0 -0
  26. package/dist/events.d.ts +9 -1
  27. package/dist/events.d.ts.map +1 -1
  28. package/dist/events.js +48 -0
  29. package/dist/index.d.ts +2 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -1
  32. package/dist/picon_dlmm.json +8 -0
  33. package/dist/program_addresses.d.ts.map +1 -1
  34. package/dist/program_addresses.js +1 -7
  35. package/dist/utils/assert.d.ts +9 -0
  36. package/dist/utils/assert.d.ts.map +1 -0
  37. package/dist/utils/assert.js +10 -0
  38. package/dist/utils/ata.d.ts +1 -1
  39. package/dist/utils/ata.d.ts.map +1 -1
  40. package/dist/utils/ata.js +1 -2
  41. package/dist/utils/bin_location.d.ts +4 -0
  42. package/dist/utils/bin_location.d.ts.map +1 -1
  43. package/dist/utils/bin_location.js +0 -12
  44. package/dist/utils/chunk.d.ts +1 -0
  45. package/dist/utils/chunk.d.ts.map +1 -1
  46. package/dist/utils/chunk.js +4 -0
  47. package/dist/utils/constants.d.ts +3 -2
  48. package/dist/utils/constants.d.ts.map +1 -1
  49. package/dist/utils/constants.js +28 -10
  50. package/dist/utils/transfer_fee.d.ts +1 -1
  51. package/dist/utils/transfer_fee.d.ts.map +1 -1
  52. package/dist/utils/type_guards.d.ts +2 -0
  53. package/dist/utils/type_guards.d.ts.map +1 -1
  54. package/dist/utils/type_guards.js +7 -0
  55. package/package.json +1 -2
  56. package/src/entities/admin_config.ts +122 -0
  57. package/src/entities/bin_array.ts +156 -0
  58. package/src/entities/dlmm_program.ts +210 -0
  59. package/src/entities/index.ts +6 -0
  60. package/src/entities/pool.ts +392 -0
  61. package/src/entities/position.ts +444 -0
  62. package/src/entities/position_pool.ts +68 -0
  63. package/src/entities/types.ts +3 -0
  64. package/src/events.ts +77 -0
  65. package/src/index.ts +2 -1
  66. package/src/picon_dlmm.json +8 -0
  67. package/src/program_addresses.ts +2 -8
  68. package/src/utils/assert.ts +25 -0
  69. package/src/utils/ata.ts +1 -2
  70. package/src/utils/bin_location.ts +5 -12
  71. package/src/utils/chunk.ts +9 -0
  72. package/src/utils/constants.ts +31 -10
  73. package/src/utils/transfer_fee.ts +1 -1
  74. package/src/utils/type_guards.ts +12 -0
  75. package/dist/actions/accept_admin_authority.d.ts +0 -13
  76. package/dist/actions/accept_admin_authority.d.ts.map +0 -1
  77. package/dist/actions/accept_admin_authority.js +0 -7
  78. package/dist/actions/claim_fee.d.ts +0 -21
  79. package/dist/actions/claim_fee.d.ts.map +0 -1
  80. package/dist/actions/claim_fee.js +0 -40
  81. package/dist/actions/claim_multiple_fees.d.ts +0 -19
  82. package/dist/actions/claim_multiple_fees.d.ts.map +0 -1
  83. package/dist/actions/claim_multiple_fees.js +0 -81
  84. package/dist/actions/claim_protocol_fee.d.ts +0 -18
  85. package/dist/actions/claim_protocol_fee.d.ts.map +0 -1
  86. package/dist/actions/claim_protocol_fee.js +0 -33
  87. package/dist/actions/close_position.d.ts +0 -14
  88. package/dist/actions/close_position.d.ts.map +0 -1
  89. package/dist/actions/close_position.js +0 -14
  90. package/dist/actions/create_admin_config.d.ts +0 -15
  91. package/dist/actions/create_admin_config.d.ts.map +0 -1
  92. package/dist/actions/create_admin_config.js +0 -30
  93. package/dist/actions/create_bin_array.d.ts +0 -16
  94. package/dist/actions/create_bin_array.d.ts.map +0 -1
  95. package/dist/actions/create_bin_array.js +0 -10
  96. package/dist/actions/create_pool.d.ts +0 -21
  97. package/dist/actions/create_pool.d.ts.map +0 -1
  98. package/dist/actions/create_pool.js +0 -22
  99. package/dist/actions/delete_bin_array.d.ts +0 -16
  100. package/dist/actions/delete_bin_array.d.ts.map +0 -1
  101. package/dist/actions/delete_bin_array.js +0 -13
  102. package/dist/actions/deposit_by_weight.d.ts +0 -27
  103. package/dist/actions/deposit_by_weight.d.ts.map +0 -1
  104. package/dist/actions/deposit_by_weight.js +0 -52
  105. package/dist/actions/get_admin_config.d.ts +0 -4
  106. package/dist/actions/get_admin_config.d.ts.map +0 -1
  107. package/dist/actions/get_admin_config.js +0 -7
  108. package/dist/actions/get_bin_arrays_by_indices.d.ts +0 -5
  109. package/dist/actions/get_bin_arrays_by_indices.d.ts.map +0 -1
  110. package/dist/actions/get_bin_arrays_by_indices.js +0 -6
  111. package/dist/actions/get_pool.d.ts +0 -4
  112. package/dist/actions/get_pool.d.ts.map +0 -1
  113. package/dist/actions/get_pool.js +0 -5
  114. package/dist/actions/get_position.d.ts +0 -4
  115. package/dist/actions/get_position.d.ts.map +0 -1
  116. package/dist/actions/get_position.js +0 -5
  117. package/dist/actions/get_position_by_position_mint.d.ts +0 -4
  118. package/dist/actions/get_position_by_position_mint.d.ts.map +0 -1
  119. package/dist/actions/get_position_by_position_mint.js +0 -6
  120. package/dist/actions/get_positions_by_owner.d.ts +0 -5
  121. package/dist/actions/get_positions_by_owner.d.ts.map +0 -1
  122. package/dist/actions/get_positions_by_owner.js +0 -33
  123. package/dist/actions/get_positions_by_position_mints.d.ts +0 -5
  124. package/dist/actions/get_positions_by_position_mints.d.ts.map +0 -1
  125. package/dist/actions/get_positions_by_position_mints.js +0 -9
  126. package/dist/actions/helpers/build_swap_transaction_message.d.ts +0 -22
  127. package/dist/actions/helpers/build_swap_transaction_message.d.ts.map +0 -1
  128. package/dist/actions/helpers/build_swap_transaction_message.js +0 -50
  129. package/dist/actions/helpers/build_transaction_message.d.ts +0 -20
  130. package/dist/actions/helpers/build_transaction_message.d.ts.map +0 -1
  131. package/dist/actions/helpers/build_transaction_message.js +0 -5
  132. package/dist/actions/helpers/index.d.ts +0 -8
  133. package/dist/actions/helpers/index.d.ts.map +0 -1
  134. package/dist/actions/helpers/index.js +0 -7
  135. package/dist/actions/helpers/resolve_active_bin_and_mints.d.ts +0 -12
  136. package/dist/actions/helpers/resolve_active_bin_and_mints.d.ts.map +0 -1
  137. package/dist/actions/helpers/resolve_active_bin_and_mints.js +0 -13
  138. package/dist/actions/helpers/resolve_admin_config_address.d.ts +0 -3
  139. package/dist/actions/helpers/resolve_admin_config_address.d.ts.map +0 -1
  140. package/dist/actions/helpers/resolve_admin_config_address.js +0 -9
  141. package/dist/actions/helpers/resolve_mint_info.d.ts +0 -10
  142. package/dist/actions/helpers/resolve_mint_info.d.ts.map +0 -1
  143. package/dist/actions/helpers/resolve_mint_info.js +0 -20
  144. package/dist/actions/helpers/resolve_position_range.d.ts +0 -12
  145. package/dist/actions/helpers/resolve_position_range.d.ts.map +0 -1
  146. package/dist/actions/helpers/resolve_position_range.js +0 -12
  147. package/dist/actions/helpers/resolve_token_mints_and_programs.d.ts +0 -15
  148. package/dist/actions/helpers/resolve_token_mints_and_programs.d.ts.map +0 -1
  149. package/dist/actions/helpers/resolve_token_mints_and_programs.js +0 -29
  150. package/dist/actions/index.d.ts +0 -31
  151. package/dist/actions/index.d.ts.map +0 -1
  152. package/dist/actions/index.js +0 -28
  153. package/dist/actions/is_admin_config_active.d.ts +0 -4
  154. package/dist/actions/is_admin_config_active.d.ts.map +0 -1
  155. package/dist/actions/is_admin_config_active.js +0 -7
  156. package/dist/actions/on_event.d.ts +0 -11
  157. package/dist/actions/on_event.d.ts.map +0 -1
  158. package/dist/actions/on_event.js +0 -50
  159. package/dist/actions/open_position.d.ts +0 -17
  160. package/dist/actions/open_position.d.ts.map +0 -1
  161. package/dist/actions/open_position.js +0 -31
  162. package/dist/actions/quote.d.ts +0 -13
  163. package/dist/actions/quote.d.ts.map +0 -1
  164. package/dist/actions/quote.js +0 -43
  165. package/dist/actions/set_metadata_update_authority.d.ts +0 -14
  166. package/dist/actions/set_metadata_update_authority.d.ts.map +0 -1
  167. package/dist/actions/set_metadata_update_authority.js +0 -7
  168. package/dist/actions/set_pool_dynamic_fee_config.d.ts +0 -16
  169. package/dist/actions/set_pool_dynamic_fee_config.d.ts.map +0 -1
  170. package/dist/actions/set_pool_dynamic_fee_config.js +0 -7
  171. package/dist/actions/set_pool_protocol_share.d.ts +0 -15
  172. package/dist/actions/set_pool_protocol_share.d.ts.map +0 -1
  173. package/dist/actions/set_pool_protocol_share.js +0 -7
  174. package/dist/actions/swap.d.ts +0 -22
  175. package/dist/actions/swap.d.ts.map +0 -1
  176. package/dist/actions/swap.js +0 -19
  177. package/dist/actions/sync_pool.d.ts +0 -15
  178. package/dist/actions/sync_pool.d.ts.map +0 -1
  179. package/dist/actions/sync_pool.js +0 -26
  180. package/dist/actions/transfer_admin_authority.d.ts +0 -14
  181. package/dist/actions/transfer_admin_authority.d.ts.map +0 -1
  182. package/dist/actions/transfer_admin_authority.js +0 -7
  183. package/dist/actions/withdraw.d.ts +0 -22
  184. package/dist/actions/withdraw.d.ts.map +0 -1
  185. package/dist/actions/withdraw.js +0 -41
  186. package/dist/utils/admin_config.d.ts +0 -3
  187. package/dist/utils/admin_config.d.ts.map +0 -1
  188. package/dist/utils/admin_config.js +0 -4
  189. package/dist/utils/bin_array.d.ts +0 -8
  190. package/dist/utils/bin_array.d.ts.map +0 -1
  191. package/dist/utils/bin_array.js +0 -29
  192. package/dist/utils/compute_budget.d.ts +0 -11
  193. package/dist/utils/compute_budget.d.ts.map +0 -1
  194. package/dist/utils/compute_budget.js +0 -22
  195. package/src/actions/accept_admin_authority.ts +0 -17
  196. package/src/actions/claim_fee.ts +0 -84
  197. package/src/actions/claim_multiple_fees.ts +0 -123
  198. package/src/actions/claim_protocol_fee.ts +0 -68
  199. package/src/actions/close_position.ts +0 -21
  200. package/src/actions/create_admin_config.ts +0 -51
  201. package/src/actions/create_bin_array.ts +0 -30
  202. package/src/actions/create_pool.ts +0 -49
  203. package/src/actions/delete_bin_array.ts +0 -33
  204. package/src/actions/deposit_by_weight.ts +0 -107
  205. package/src/actions/get_admin_config.ts +0 -13
  206. package/src/actions/get_bin_arrays_by_indices.ts +0 -15
  207. package/src/actions/get_pool.ts +0 -8
  208. package/src/actions/get_position.ts +0 -8
  209. package/src/actions/get_position_by_position_mint.ts +0 -14
  210. package/src/actions/get_positions_by_owner.ts +0 -48
  211. package/src/actions/get_positions_by_position_mints.ts +0 -21
  212. package/src/actions/helpers/build_swap_transaction_message.ts +0 -86
  213. package/src/actions/helpers/build_transaction_message.ts +0 -45
  214. package/src/actions/helpers/index.ts +0 -7
  215. package/src/actions/helpers/resolve_active_bin_and_mints.ts +0 -21
  216. package/src/actions/helpers/resolve_admin_config_address.ts +0 -11
  217. package/src/actions/helpers/resolve_mint_info.ts +0 -36
  218. package/src/actions/helpers/resolve_position_range.ts +0 -21
  219. package/src/actions/helpers/resolve_token_mints_and_programs.ts +0 -56
  220. package/src/actions/index.ts +0 -34
  221. package/src/actions/is_admin_config_active.ts +0 -14
  222. package/src/actions/on_event.ts +0 -78
  223. package/src/actions/open_position.ts +0 -66
  224. package/src/actions/quote.ts +0 -70
  225. package/src/actions/set_metadata_update_authority.ts +0 -17
  226. package/src/actions/set_pool_dynamic_fee_config.ts +0 -17
  227. package/src/actions/set_pool_protocol_share.ts +0 -17
  228. package/src/actions/swap.ts +0 -56
  229. package/src/actions/sync_pool.ts +0 -35
  230. package/src/actions/transfer_admin_authority.ts +0 -17
  231. package/src/actions/withdraw.ts +0 -87
  232. package/src/utils/admin_config.ts +0 -6
  233. package/src/utils/bin_array.ts +0 -45
  234. package/src/utils/compute_budget.ts +0 -58
@@ -0,0 +1,30 @@
1
+ import { getAddressDecoder, parseBase64RpcAccount, } from "@solana/kit";
2
+ import { fetchInChunks } from "../utils/chunk";
3
+ import { MAX_ACCOUNTS_PER_RPC_BATCH } from "../utils/constants";
4
+ export async function fetchAllMaybePositionPoolsChunked(rpc, addresses, config) {
5
+ return await fetchInChunks(addresses, MAX_ACCOUNTS_PER_RPC_BATCH, chunkAddresses => fetchAllMaybePositionPools(rpc, chunkAddresses, config));
6
+ }
7
+ const POSITION_POOL_SLICE = Object.freeze({ offset: 8, length: 32 });
8
+ async function fetchAllMaybePositionPools(rpc, addresses, config) {
9
+ const { abortSignal, ...rpcConfig } = config ?? {};
10
+ const { value: accounts } = await rpc.getMultipleAccounts(addresses, {
11
+ ...rpcConfig,
12
+ dataSlice: POSITION_POOL_SLICE,
13
+ encoding: "base64",
14
+ }).send({ abortSignal });
15
+ return decodeAllMaybePositionPools(addresses, accounts);
16
+ }
17
+ const addressDecoder = getAddressDecoder();
18
+ function decodeMaybePositionPool(address, account) {
19
+ if (!account) {
20
+ return;
21
+ }
22
+ const pool = addressDecoder.decode(parseBase64RpcAccount(address, account).data);
23
+ return { address, pool };
24
+ }
25
+ function decodeAllMaybePositionPools(addresses, accounts) {
26
+ return accounts.map((account, i) => {
27
+ const address = addresses[i];
28
+ return decodeMaybePositionPool(address, account);
29
+ });
30
+ }
@@ -0,0 +1,5 @@
1
+ import { type Address } from "@solana/kit";
2
+ export type ProgramConfig = {
3
+ programAddress: Address;
4
+ };
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/entities/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC"}
File without changes
package/dist/events.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { type Address } from "@solana/kit";
1
+ import { type Address, type Commitment, type createSolanaRpcSubscriptions } from "@solana/kit";
2
2
  export type CreatePoolEvent = {
3
3
  pool: Address;
4
4
  binStep: number;
@@ -90,4 +90,12 @@ export type DlmmEvent = {
90
90
  };
91
91
  export declare function decodeEventFromLogLine(logLine: string): DlmmEvent | undefined;
92
92
  export declare function decodeEventsFromLogs(logs: readonly string[], programAddress?: Address): DlmmEvent[];
93
+ type RpcSubscriptions = ReturnType<typeof createSolanaRpcSubscriptions>;
94
+ export declare function onEvent(rpcSubscriptions: RpcSubscriptions, handler: (event: DlmmEvent) => void, { address, programAddress, commitment, onError, }?: {
95
+ address?: Address;
96
+ programAddress?: Address;
97
+ commitment?: Commitment;
98
+ onError?: (error: unknown) => void;
99
+ }): Promise<() => void>;
100
+ export {};
93
101
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
package/dist/events.js CHANGED
@@ -164,3 +164,51 @@ export function decodeEventsFromLogs(logs, programAddress = PICON_DLMM_PROGRAM_A
164
164
  }
165
165
  return events;
166
166
  }
167
+ // `address` defaults to `programAddress` (every pool the program touches); pass a pool
168
+ // address to scope it. `programAddress` also scopes CPI-log filtering (see decodeEventsFromLogs
169
+ // above), so it should match whatever cluster's program this subscription is watching —
170
+ // defaults to mainnet. Resolves once the subscription is active, with an unsubscribe function.
171
+ // Errors — from the stream itself (e.g. a dropped websocket) or thrown by `handler` — are
172
+ // reported to `onError` instead of rejecting an unheld promise; a `handler` throw only drops
173
+ // that one event, the subscription keeps running.
174
+ export async function onEvent(rpcSubscriptions, handler, { address, programAddress = PICON_DLMM_PROGRAM_ADDRESS, commitment, onError, } = {}) {
175
+ const abortController = new AbortController();
176
+ const eventStream = await subscribeToEvents(rpcSubscriptions, {
177
+ address: address ?? programAddress,
178
+ programAddress,
179
+ commitment,
180
+ abortSignal: abortController.signal,
181
+ });
182
+ (async () => {
183
+ try {
184
+ for await (const event of eventStream) {
185
+ try {
186
+ handler(event);
187
+ }
188
+ catch (error) {
189
+ onError?.(error);
190
+ }
191
+ }
192
+ }
193
+ catch (error) {
194
+ if (!abortController.signal.aborted) {
195
+ onError?.(error);
196
+ }
197
+ }
198
+ })();
199
+ return () => abortController.abort();
200
+ }
201
+ // Resolves once the subscription is active, so callers know they won't miss anything.
202
+ async function subscribeToEvents(rpcSubscriptions, { address, programAddress, commitment = "confirmed", abortSignal, }) {
203
+ const notifications = await rpcSubscriptions
204
+ .logsNotifications({ mentions: [address] }, { commitment })
205
+ .subscribe({ abortSignal });
206
+ return (async function* () {
207
+ for await (const notification of notifications) {
208
+ if (notification.value.err != null) {
209
+ continue;
210
+ }
211
+ yield* decodeEventsFromLogs(notification.value.logs, programAddress);
212
+ }
213
+ })();
214
+ }
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  export * as generated from "./generated";
2
2
  export { DistributionMode } from "./generated/types/distributionMode";
3
3
  export * as events from "./events";
4
+ export * from "./entities";
4
5
  export * from "./utils/constants";
5
6
  export { NATIVE_MINT_ADDRESS } from "./utils/ata";
6
- export * from "./actions";
7
+ export type { QuoteInput, QuoteOutput, PoolState, TransferFee } from "./quote";
7
8
  export * from "./program_addresses";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC/E,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export * as generated from "./generated";
2
2
  export { DistributionMode } from "./generated/types/distributionMode";
3
3
  export * as events from "./events";
4
+ export * from "./entities";
4
5
  export * from "./utils/constants";
5
6
  export { NATIVE_MINT_ADDRESS } from "./utils/ata";
6
- export * from "./actions";
7
7
  export * from "./program_addresses";
@@ -2327,6 +2327,14 @@
2327
2327
  "type": "i32",
2328
2328
  "value": "100"
2329
2329
  },
2330
+ {
2331
+ "name": "DYNAMIC_FEE_DIVISOR",
2332
+ "docs": [
2333
+ "Divisor for `dynamic_fee_control`."
2334
+ ],
2335
+ "type": "u128",
2336
+ "value": "100000000000"
2337
+ },
2330
2338
  {
2331
2339
  "name": "FEE_PRECISION",
2332
2340
  "type": "u128",
@@ -1 +1 @@
1
- {"version":3,"file":"program_addresses.d.ts","sourceRoot":"","sources":["../src/program_addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAW,MAAM,aAAa,CAAC;AAKpD,OAAO,EAAE,0BAA0B,IAAI,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAIpF,eAAO,MAAM,sBAAsB,EAAE,OAAgE,CAAC"}
1
+ {"version":3,"file":"program_addresses.d.ts","sourceRoot":"","sources":["../src/program_addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,0BAA0B,IAAI,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACpF,eAAO,MAAM,sBAAsB,EAAoD,OAAO,CAAC"}
@@ -1,8 +1,2 @@
1
- import { address } from "@solana/kit";
2
- // SDK codegen always targets the mainnet IDL (see package.json's `copy-idl`), so this is the
3
- // same value as `generated.PICON_DLMM_PROGRAM_ADDRESS` — exported under a clearer name here
4
- // since it's meant to be read standalone, not discovered via the generated namespace.
5
1
  export { PICON_DLMM_PROGRAM_ADDRESS as MAINNET_PROGRAM_ADDRESS } from "./generated";
6
- // Not baked into codegen (the IDL's structure is identical across clusters — only the address
7
- // differs) — pass this as the `programAddress` argument on any SDK action to target devnet.
8
- export const DEVNET_PROGRAM_ADDRESS = address("tDLMMKoxBt7UkZapYHsEgLGydmFvSQXh5mGzrRovoeM");
2
+ export const DEVNET_PROGRAM_ADDRESS = "tDLMMKoxBt7UkZapYHsEgLGydmFvSQXh5mGzrRovoeM";
@@ -0,0 +1,9 @@
1
+ import type { Address } from "@solana/kit";
2
+ import type { BinIdRange } from "./bin_location";
3
+ export declare function assertRangeWithinRange(inner: BinIdRange, outer: BinIdRange): void;
4
+ export declare function assertPositionBelongsToPool(position: {
5
+ pool: Address;
6
+ }, pool: {
7
+ address: Address;
8
+ }): void;
9
+ //# sourceMappingURL=assert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../src/utils/assert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,UAAU,GAChB,IAAI,CAMN;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAC3B,IAAI,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACzB,IAAI,CAMN"}
@@ -0,0 +1,10 @@
1
+ export function assertRangeWithinRange(inner, outer) {
2
+ if (inner.lowerBinId < outer.lowerBinId || inner.upperBinId > outer.upperBinId) {
3
+ throw new RangeError(`Range (${inner.lowerBinId} to ${inner.upperBinId}) must be inside range (${outer.lowerBinId} to ${outer.upperBinId})`);
4
+ }
5
+ }
6
+ export function assertPositionBelongsToPool(position, pool) {
7
+ if (position.pool !== pool.address) {
8
+ throw new Error(`Position's pool (${position.pool}) does not match expected pool (${pool.address})`);
9
+ }
10
+ }
@@ -1,5 +1,5 @@
1
1
  import { type Address, type Instruction, type TransactionSigner } from "@solana/kit";
2
- export declare const NATIVE_MINT_ADDRESS: Address<"So11111111111111111111111111111111111111112">;
2
+ export declare const NATIVE_MINT_ADDRESS: Address;
3
3
  export declare function findAssociatedTokenPdaByTokenProgram(params: {
4
4
  owner: Address;
5
5
  mint: Address;
@@ -1 +1 @@
1
- {"version":3,"file":"ata.d.ts","sourceRoot":"","sources":["../../src/utils/ata.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAerB,eAAO,MAAM,mBAAmB,wDAAyD,CAAC;AAE1F,wBAAsB,oCAAoC,CAAC,MAAM,EAAE;IACjE,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACvB,4BAIA;AAID,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,YAAY,GACb,EAAE;IACD,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnB;AAID,wBAAsB,mBAAmB,CAAC,EACxC,IAAI,EACJ,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,GACd,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAM1D;AAED,UAAU,mCAAmC;IAC3C,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,mCAAmC;IAC3C,GAAG,EAAE,OAAO,CAAC;IACb,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,gBAAgB,EAAE,WAAW,EAAE,CAAC;CACjC;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,mCAAmC,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAMvI;AAKD,wBAAsB,iCAAiC,CAAC,EACtD,KAAK,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,OAAO,EACP,OAAO,GACR,EAAE;IACD,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC;IACV,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,gBAAgB,EAAE,WAAW,EAAE,CAAC;CACjC,CAAC,CAWD"}
1
+ {"version":3,"file":"ata.d.ts","sourceRoot":"","sources":["../../src/utils/ata.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAerB,eAAO,MAAM,mBAAmB,EAAoD,OAAO,CAAC;AAE5F,wBAAsB,oCAAoC,CAAC,MAAM,EAAE;IACjE,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;CACvB,4BAIA;AAID,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,YAAY,GACb,EAAE;IACD,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;CACvB,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnB;AAID,wBAAsB,mBAAmB,CAAC,EACxC,IAAI,EACJ,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,GACd,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAM1D;AAED,UAAU,mCAAmC;IAC3C,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,UAAU,mCAAmC;IAC3C,GAAG,EAAE,OAAO,CAAC;IACb,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,gBAAgB,EAAE,WAAW,EAAE,CAAC;CACjC;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,mCAAmC,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAMvI;AAKD,wBAAsB,iCAAiC,CAAC,EACtD,KAAK,EACL,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,OAAO,EACP,OAAO,GACR,EAAE;IACD,KAAK,EAAE,iBAAiB,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC;IACV,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/B,gBAAgB,EAAE,WAAW,EAAE,CAAC;CACjC,CAAC,CAWD"}
package/dist/utils/ata.js CHANGED
@@ -1,8 +1,7 @@
1
- import { address, } from "@solana/kit";
2
1
  import { findAssociatedTokenPda, getCloseAccountInstruction, getCreateAssociatedTokenIdempotentInstruction, getSyncNativeInstruction, TOKEN_PROGRAM_ADDRESS, } from "@solana-program/token";
3
2
  import { findAssociatedTokenPda as findAssociatedToken2022Pda, getCreateAssociatedTokenIdempotentInstruction as getCreateAssociatedToken2022IdempotentInstruction, TOKEN_2022_PROGRAM_ADDRESS } from "@solana-program/token-2022";
4
3
  import { getTransferSolInstruction } from "@solana-program/system";
5
- export const NATIVE_MINT_ADDRESS = address("So11111111111111111111111111111111111111112");
4
+ export const NATIVE_MINT_ADDRESS = "So11111111111111111111111111111111111111112";
6
5
  export async function findAssociatedTokenPdaByTokenProgram(params) {
7
6
  const findAssociatedTokenPda = chooseFindAssociatedTokenPda(params.tokenProgram);
8
7
  const [ata] = await findAssociatedTokenPda(params);
@@ -1,3 +1,7 @@
1
+ export type BinIdRange = {
2
+ lowerBinId: number;
3
+ upperBinId: number;
4
+ };
1
5
  export declare function getBinArrayIndex(binId: number): number;
2
6
  export declare function getBinIndex(binId: number): number;
3
7
  export declare function getBinId(binArrayIndex: number, binIndex: number): number;
@@ -1 +1 @@
1
- {"version":3,"file":"bin_location.d.ts","sourceRoot":"","sources":["../../src/utils/bin_location.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,wBAAwB,CACtC,kBAAkB,EAAE,MAAM,EAC1B,kBAAkB,EAAE,MAAM,GACzB,MAAM,EAAE,CAKV;AAMD,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB;IAAE,kBAAkB,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,CAM7D;AAKD,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAMV;AAOD,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAeV"}
1
+ {"version":3,"file":"bin_location.d.ts","sourceRoot":"","sources":["../../src/utils/bin_location.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,wBAAwB,CACtC,kBAAkB,EAAE,MAAM,EAC1B,kBAAkB,EAAE,MAAM,GACzB,MAAM,EAAE,CAKV;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB;IAAE,kBAAkB,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,CAM7D;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,OAAO,EACb,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAMV;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAeV"}
@@ -11,10 +11,6 @@ export function getBinId(binArrayIndex, binIndex) {
11
11
  export function getBinArrayIndexSequence(lowerBinArrayIndex, upperBinArrayIndex) {
12
12
  return Array.from({ length: upperBinArrayIndex - lowerBinArrayIndex + 1 }, (_, i) => lowerBinArrayIndex + i);
13
13
  }
14
- // A position spans at most MAX_BIN_ARRAYS_PER_POSITION (2) bin arrays — the lower and
15
- // (only if distinct) upper one covering its range. Shared by every position-scoped
16
- // instruction that needs to enumerate exactly those arrays (open_position's bin-array
17
- // bootstrap, withdraw/claim_fee's account derivation).
18
14
  export function getPositionBinArrayIndices(lowerBinId, upperBinId) {
19
15
  const lowerBinArrayIndex = getBinArrayIndex(lowerBinId);
20
16
  const upperBinArrayIndex = getBinArrayIndex(upperBinId);
@@ -22,9 +18,6 @@ export function getPositionBinArrayIndices(lowerBinId, upperBinId) {
22
18
  ? { lowerBinArrayIndex }
23
19
  : { lowerBinArrayIndex, upperBinArrayIndex };
24
20
  }
25
- // One bin array of margin is kept on the opposite side of travel: if the live active bin
26
- // drifts one array against the expected direction between quote time and execution (e.g. a
27
- // competing swap lands first), it's still covered by this range instead of reverting.
28
21
  export function generateBinArrayIndicesForSwap(activeBinId, xToY, maxBinArrays) {
29
22
  const activeBinArrayIndex = getBinArrayIndex(activeBinId);
30
23
  const [lowerBinArrayIndex, upperBinArrayIndex] = xToY
@@ -32,11 +25,6 @@ export function generateBinArrayIndicesForSwap(activeBinId, xToY, maxBinArrays)
32
25
  : [activeBinArrayIndex - 1, activeBinArrayIndex + (maxBinArrays - 2)];
33
26
  return getBinArrayIndexSequence(lowerBinArrayIndex, upperBinArrayIndex);
34
27
  }
35
- // Spans from the live `activeBinId` to the caller's exact `desiredBinId` target, plus one
36
- // bin array of margin beyond the active end (the side subject to drift — `desiredBinId` is
37
- // a fixed target, but the live active bin could move further away from it before this tx
38
- // lands). Capped at `maxBinArrays`, trimming from the `desiredBinId` end so the active+margin
39
- // anchor stays intact — a sync toward a distant target simply converges partially in that case.
40
28
  export function generateBinArrayIndicesForSync(activeBinId, desiredBinId, maxBinArrays) {
41
29
  const activeBinArrayIndex = getBinArrayIndex(activeBinId);
42
30
  const desiredBinArrayIndex = getBinArrayIndex(desiredBinId);
@@ -1,2 +1,3 @@
1
1
  export declare function chunk<T>(items: T[], size: number): T[][];
2
+ export declare function fetchInChunks<T, R>(items: T[], size: number, fetcher: (chunkItems: T[]) => Promise<R[]>): Promise<R[]>;
2
3
  //# sourceMappingURL=chunk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.d.ts","sourceRoot":"","sources":["../../src/utils/chunk.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAMxD"}
1
+ {"version":3,"file":"chunk.d.ts","sourceRoot":"","sources":["../../src/utils/chunk.ts"],"names":[],"mappings":"AAAA,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAMxD;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,CAAC,EACtC,KAAK,EAAE,CAAC,EAAE,EACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,GACzC,OAAO,CAAC,CAAC,EAAE,CAAC,CAGd"}
@@ -5,3 +5,7 @@ export function chunk(items, size) {
5
5
  }
6
6
  return chunks;
7
7
  }
8
+ export async function fetchInChunks(items, size, fetcher) {
9
+ const chunks = await Promise.all(chunk(items, size).map(fetcher));
10
+ return chunks.flat();
11
+ }
@@ -2,11 +2,12 @@ export declare const BINS_PER_BIN_ARRAY: number;
2
2
  export declare const MAX_BIN_ARRAYS_PER_POSITION: number;
3
3
  export declare const MAX_BIN_ARRAYS_PER_SWAP: number;
4
4
  export declare const MAX_BIN_ARRAYS_PER_SYNC: number;
5
- export declare const FEE_PRECISION: number;
5
+ export declare const FEE_PRECISION: bigint;
6
6
  export declare const ONE_BPS_FEE_RATE: number;
7
- export declare const MAX_FEE_RATE: number;
7
+ export declare const MAX_FEE_RATE: bigint;
8
8
  export declare const MAX_PROTOCOL_SHARE: number;
9
9
  export declare const MAX_BASIS_POINTS: number;
10
+ export declare const DYNAMIC_FEE_DIVISOR: bigint;
10
11
  export declare const MAX_POSITIONS_PER_CLAIM = 3;
11
12
  export declare const MAX_ACCOUNTS_PER_RPC_BATCH = 100;
12
13
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,kBAAkB,QAAuC,CAAC;AACvE,eAAO,MAAM,2BAA2B,QAAgD,CAAC;AACzF,eAAO,MAAM,uBAAuB,QAA4C,CAAC;AACjF,eAAO,MAAM,uBAAuB,QAA4C,CAAC;AAEjF,eAAO,MAAM,aAAa,QAAkC,CAAC;AAC7D,eAAO,MAAM,gBAAgB,QAAqC,CAAC;AACnE,eAAO,MAAM,YAAY,QAAiC,CAAC;AAC3D,eAAO,MAAM,kBAAkB,QAAuC,CAAC;AACvE,eAAO,MAAM,gBAAgB,QAAqC,CAAC;AAEnE,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAGzC,eAAO,MAAM,0BAA0B,MAAM,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,kBAAkB,QAA6C,CAAC;AAC7E,eAAO,MAAM,2BAA2B,QAAsD,CAAC;AAC/F,eAAO,MAAM,uBAAuB,QAAkD,CAAC;AACvF,eAAO,MAAM,uBAAuB,QAAkD,CAAC;AAEvF,eAAO,MAAM,aAAa,QAAwC,CAAC;AACnE,eAAO,MAAM,gBAAgB,QAA2C,CAAC;AACzE,eAAO,MAAM,YAAY,QAAuC,CAAC;AACjE,eAAO,MAAM,kBAAkB,QAA6C,CAAC;AAC7E,eAAO,MAAM,gBAAgB,QAA2C,CAAC;AACzE,eAAO,MAAM,mBAAmB,QAA8C,CAAC;AAE/E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAGzC,eAAO,MAAM,0BAA0B,MAAM,CAAC"}
@@ -1,20 +1,38 @@
1
1
  import IDL from "./../picon_dlmm.json";
2
2
  import { isUndefined } from "./type_guards";
3
- function getIdlConstant(name) {
3
+ // u64/u128 constants are exported as bigint, matching codama's own `large_number_types_as_bigints`
4
+ // convention for every other u64/u128 field in the SDK — anything smaller stays a plain number.
5
+ const BIGINT_TYPES = new Set(["u64", "u128", "i64", "i128"]);
6
+ function findIdlConstant(name) {
4
7
  const constant = IDL.constants.find(c => c.name === name);
5
8
  if (isUndefined(constant))
6
9
  throw new Error(`${name} constant not found in IDL`);
10
+ return constant;
11
+ }
12
+ function getIdlNumberConstant(name) {
13
+ const constant = findIdlConstant(name);
14
+ if (BIGINT_TYPES.has(constant.type)) {
15
+ throw new Error(`${name} is a ${constant.type} constant — use getIdlBigIntConstant instead`);
16
+ }
7
17
  return Number.parseInt(constant.value);
8
18
  }
9
- export const BINS_PER_BIN_ARRAY = getIdlConstant("BINS_PER_BIN_ARRAY");
10
- export const MAX_BIN_ARRAYS_PER_POSITION = getIdlConstant("MAX_BIN_ARRAYS_PER_POSITION");
11
- export const MAX_BIN_ARRAYS_PER_SWAP = getIdlConstant("MAX_BIN_ARRAYS_PER_SWAP");
12
- export const MAX_BIN_ARRAYS_PER_SYNC = getIdlConstant("MAX_BIN_ARRAYS_PER_SYNC");
13
- export const FEE_PRECISION = getIdlConstant("FEE_PRECISION");
14
- export const ONE_BPS_FEE_RATE = getIdlConstant("ONE_BPS_FEE_RATE");
15
- export const MAX_FEE_RATE = getIdlConstant("MAX_FEE_RATE");
16
- export const MAX_PROTOCOL_SHARE = getIdlConstant("MAX_PROTOCOL_SHARE");
17
- export const MAX_BASIS_POINTS = getIdlConstant("MAX_BASIS_POINTS");
19
+ function getIdlBigIntConstant(name) {
20
+ const constant = findIdlConstant(name);
21
+ if (!BIGINT_TYPES.has(constant.type)) {
22
+ throw new Error(`${name} is a ${constant.type} constant — use getIdlNumberConstant instead`);
23
+ }
24
+ return BigInt(constant.value);
25
+ }
26
+ export const BINS_PER_BIN_ARRAY = getIdlNumberConstant("BINS_PER_BIN_ARRAY");
27
+ export const MAX_BIN_ARRAYS_PER_POSITION = getIdlNumberConstant("MAX_BIN_ARRAYS_PER_POSITION");
28
+ export const MAX_BIN_ARRAYS_PER_SWAP = getIdlNumberConstant("MAX_BIN_ARRAYS_PER_SWAP");
29
+ export const MAX_BIN_ARRAYS_PER_SYNC = getIdlNumberConstant("MAX_BIN_ARRAYS_PER_SYNC");
30
+ export const FEE_PRECISION = getIdlBigIntConstant("FEE_PRECISION");
31
+ export const ONE_BPS_FEE_RATE = getIdlNumberConstant("ONE_BPS_FEE_RATE");
32
+ export const MAX_FEE_RATE = getIdlBigIntConstant("MAX_FEE_RATE");
33
+ export const MAX_PROTOCOL_SHARE = getIdlNumberConstant("MAX_PROTOCOL_SHARE");
34
+ export const MAX_BASIS_POINTS = getIdlNumberConstant("MAX_BASIS_POINTS");
35
+ export const DYNAMIC_FEE_DIVISOR = getIdlBigIntConstant("DYNAMIC_FEE_DIVISOR");
18
36
  export const MAX_POSITIONS_PER_CLAIM = 3;
19
37
  // Solana RPC's own hard cap on addresses per getMultipleAccounts request.
20
38
  export const MAX_ACCOUNTS_PER_RPC_BATCH = 100;
@@ -1,4 +1,4 @@
1
- import { type Mint } from "@solana-program/token-2022";
1
+ import type { Mint } from "@solana-program/token-2022";
2
2
  import type { TransferFee } from "../quote";
3
3
  export declare function resolveTransferFee(mint: Mint, epoch: bigint): TransferFee | undefined;
4
4
  //# sourceMappingURL=transfer_fee.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transfer_fee.d.ts","sourceRoot":"","sources":["../../src/utils/transfer_fee.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAkB,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAW5C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAerF"}
1
+ {"version":3,"file":"transfer_fee.d.ts","sourceRoot":"","sources":["../../src/utils/transfer_fee.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAa,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAW5C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAerF"}
@@ -1,2 +1,4 @@
1
+ import { type Account } from "@solana/kit";
1
2
  export declare function isUndefined<T>(value: T | undefined): value is undefined;
3
+ export declare function isAccount<TData extends object>(value: any): value is Account<TData>;
2
4
  //# sourceMappingURL=type_guards.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type_guards.d.ts","sourceRoot":"","sources":["../../src/utils/type_guards.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,KAAK,IAAI,SAAS,CAEvE"}
1
+ {"version":3,"file":"type_guards.d.ts","sourceRoot":"","sources":["../../src/utils/type_guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,KAAK,IAAI,SAAS,CAEvE;AAED,wBAAgB,SAAS,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAQnF"}
@@ -1,3 +1,10 @@
1
1
  export function isUndefined(value) {
2
2
  return value === undefined;
3
3
  }
4
+ export function isAccount(value) {
5
+ return (typeof value === "object" &&
6
+ value !== null &&
7
+ "address" in value &&
8
+ "data" in value &&
9
+ "executable" in value);
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picon-finance/dlmm-sdk",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "Typescript SDK for interacting with the Picon DLMM protocol",
5
5
  "author": "Picon Finance",
6
6
  "license": "MIT",
@@ -41,7 +41,6 @@
41
41
  "prepublishOnly": "bun run build"
42
42
  },
43
43
  "dependencies": {
44
- "@solana-program/compute-budget": "^0.17.0",
45
44
  "@solana-program/system": "^0.13.0",
46
45
  "@solana-program/token": "^0.15.0",
47
46
  "@solana-program/token-2022": "^0.13.0",
@@ -0,0 +1,122 @@
1
+ import {
2
+ createSolanaRpc,
3
+ getAddressEncoder,
4
+ getProgramDerivedAddress,
5
+ type Address,
6
+ type Account,
7
+ type Instruction,
8
+ type TransactionSigner,
9
+ type FetchAccountConfig,
10
+ } from "@solana/kit";
11
+ import { SYSTEM_PROGRAM_ADDRESS } from "@solana-program/system";
12
+
13
+ import { generated } from "..";
14
+ import { findAdminConfigPda, type AdminConfig } from "../generated";
15
+ import { type ProgramConfig } from "./types";
16
+
17
+ const LOADER_V3_PROGRAM_ADDRESS = "BPFLoaderUpgradeab1e11111111111111111111111" as Address;
18
+
19
+ async function findProgramDataAddress(programAddress: Address): Promise<Address> {
20
+ const [programData] = await getProgramDerivedAddress({
21
+ programAddress: LOADER_V3_PROGRAM_ADDRESS,
22
+ seeds: [getAddressEncoder().encode(programAddress)],
23
+ });
24
+ return programData;
25
+ }
26
+
27
+ export async function resolveAdminConfigAddress(programAddress: Address): Promise<Address> {
28
+ const [adminConfig] = await findAdminConfigPda({ programAddress });
29
+ return adminConfig;
30
+ }
31
+
32
+ export async function createAdminConfig(
33
+ {
34
+ deployer,
35
+ authority,
36
+ metadataUpdateAuthority,
37
+ }: {
38
+ deployer: TransactionSigner,
39
+ authority: Address,
40
+ metadataUpdateAuthority?: Address,
41
+ },
42
+ config: ProgramConfig,
43
+ ): Promise<Instruction> {
44
+ const [adminConfig, programData] = await Promise.all([
45
+ resolveAdminConfigAddress(config.programAddress),
46
+ findProgramDataAddress(config.programAddress),
47
+ ]);
48
+ return await generated.getCreateAdminConfigInstructionAsync({
49
+ deployer,
50
+ authority,
51
+ metadataUpdateAuthority: metadataUpdateAuthority ?? null,
52
+ adminConfig,
53
+ program: config.programAddress,
54
+ programData,
55
+ }, config);
56
+ }
57
+
58
+ export async function transferAdminAuthority(
59
+ {
60
+ authority,
61
+ newAuthority,
62
+ }: {
63
+ authority: TransactionSigner,
64
+ newAuthority: Address,
65
+ },
66
+ config: ProgramConfig,
67
+ ): Promise<Instruction> {
68
+ const adminConfig = await resolveAdminConfigAddress(config.programAddress);
69
+ return await generated.getTransferAdminAuthorityInstructionAsync(
70
+ { authority, newAuthority, adminConfig },
71
+ config,
72
+ );
73
+ }
74
+
75
+ export async function acceptAdminAuthority(
76
+ { pendingAuthority }: { pendingAuthority: TransactionSigner },
77
+ config: ProgramConfig,
78
+ ): Promise<Instruction> {
79
+ const adminConfig = await resolveAdminConfigAddress(config.programAddress);
80
+ return await generated.getAcceptAdminAuthorityInstructionAsync(
81
+ { pendingAuthority, adminConfig },
82
+ config,
83
+ );
84
+ }
85
+
86
+ export async function setMetadataUpdateAuthority(
87
+ {
88
+ authority,
89
+ metadataUpdateAuthority,
90
+ }: {
91
+ authority: TransactionSigner,
92
+ metadataUpdateAuthority: Address,
93
+ },
94
+ config: ProgramConfig,
95
+ ): Promise<Instruction> {
96
+ const adminConfig = await resolveAdminConfigAddress(config.programAddress);
97
+ return await generated.getSetMetadataUpdateAuthorityInstructionAsync(
98
+ { authority, metadataUpdateAuthority, adminConfig },
99
+ config,
100
+ );
101
+ }
102
+
103
+ export async function getAdminConfig(
104
+ rpc: ReturnType<typeof createSolanaRpc>,
105
+ config: ProgramConfig & FetchAccountConfig,
106
+ ): Promise<Account<generated.AdminConfig>> {
107
+ const adminConfig = await resolveAdminConfigAddress(config.programAddress);
108
+ return await generated.fetchAdminConfig(rpc, adminConfig, config);
109
+ }
110
+
111
+ function isActive(adminConfig: AdminConfig): boolean {
112
+ return adminConfig.authority !== SYSTEM_PROGRAM_ADDRESS;
113
+ }
114
+
115
+ export async function isAdminConfigActive(
116
+ rpc: ReturnType<typeof createSolanaRpc>,
117
+ config: ProgramConfig & FetchAccountConfig,
118
+ ): Promise<boolean> {
119
+ const adminConfig = await resolveAdminConfigAddress(config.programAddress);
120
+ const maybeAdminConfig = await generated.fetchMaybeAdminConfig(rpc, adminConfig, config);
121
+ return maybeAdminConfig.exists && isActive(maybeAdminConfig.data);
122
+ }