@picon-finance/dlmm-sdk 1.2.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 (221) 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/program_addresses.d.ts.map +1 -1
  33. package/dist/program_addresses.js +0 -5
  34. package/dist/utils/assert.d.ts +9 -0
  35. package/dist/utils/assert.d.ts.map +1 -0
  36. package/dist/utils/assert.js +10 -0
  37. package/dist/utils/bin_location.d.ts +4 -0
  38. package/dist/utils/bin_location.d.ts.map +1 -1
  39. package/dist/utils/bin_location.js +0 -12
  40. package/dist/utils/chunk.d.ts +1 -0
  41. package/dist/utils/chunk.d.ts.map +1 -1
  42. package/dist/utils/chunk.js +4 -0
  43. package/dist/utils/type_guards.d.ts +2 -0
  44. package/dist/utils/type_guards.d.ts.map +1 -1
  45. package/dist/utils/type_guards.js +7 -0
  46. package/package.json +1 -2
  47. package/src/entities/admin_config.ts +122 -0
  48. package/src/entities/bin_array.ts +156 -0
  49. package/src/entities/dlmm_program.ts +210 -0
  50. package/src/entities/index.ts +6 -0
  51. package/src/entities/pool.ts +392 -0
  52. package/src/entities/position.ts +444 -0
  53. package/src/entities/position_pool.ts +68 -0
  54. package/src/entities/types.ts +3 -0
  55. package/src/events.ts +77 -0
  56. package/src/index.ts +2 -1
  57. package/src/program_addresses.ts +0 -6
  58. package/src/utils/assert.ts +25 -0
  59. package/src/utils/bin_location.ts +5 -12
  60. package/src/utils/chunk.ts +9 -0
  61. package/src/utils/type_guards.ts +12 -0
  62. package/dist/actions/accept_admin_authority.d.ts +0 -13
  63. package/dist/actions/accept_admin_authority.d.ts.map +0 -1
  64. package/dist/actions/accept_admin_authority.js +0 -7
  65. package/dist/actions/claim_fee.d.ts +0 -21
  66. package/dist/actions/claim_fee.d.ts.map +0 -1
  67. package/dist/actions/claim_fee.js +0 -40
  68. package/dist/actions/claim_multiple_fees.d.ts +0 -19
  69. package/dist/actions/claim_multiple_fees.d.ts.map +0 -1
  70. package/dist/actions/claim_multiple_fees.js +0 -81
  71. package/dist/actions/claim_protocol_fee.d.ts +0 -18
  72. package/dist/actions/claim_protocol_fee.d.ts.map +0 -1
  73. package/dist/actions/claim_protocol_fee.js +0 -33
  74. package/dist/actions/close_position.d.ts +0 -14
  75. package/dist/actions/close_position.d.ts.map +0 -1
  76. package/dist/actions/close_position.js +0 -14
  77. package/dist/actions/create_admin_config.d.ts +0 -15
  78. package/dist/actions/create_admin_config.d.ts.map +0 -1
  79. package/dist/actions/create_admin_config.js +0 -30
  80. package/dist/actions/create_bin_array.d.ts +0 -16
  81. package/dist/actions/create_bin_array.d.ts.map +0 -1
  82. package/dist/actions/create_bin_array.js +0 -10
  83. package/dist/actions/create_pool.d.ts +0 -21
  84. package/dist/actions/create_pool.d.ts.map +0 -1
  85. package/dist/actions/create_pool.js +0 -22
  86. package/dist/actions/delete_bin_array.d.ts +0 -16
  87. package/dist/actions/delete_bin_array.d.ts.map +0 -1
  88. package/dist/actions/delete_bin_array.js +0 -13
  89. package/dist/actions/deposit_by_weight.d.ts +0 -27
  90. package/dist/actions/deposit_by_weight.d.ts.map +0 -1
  91. package/dist/actions/deposit_by_weight.js +0 -52
  92. package/dist/actions/get_admin_config.d.ts +0 -4
  93. package/dist/actions/get_admin_config.d.ts.map +0 -1
  94. package/dist/actions/get_admin_config.js +0 -7
  95. package/dist/actions/get_bin_arrays_by_indices.d.ts +0 -5
  96. package/dist/actions/get_bin_arrays_by_indices.d.ts.map +0 -1
  97. package/dist/actions/get_bin_arrays_by_indices.js +0 -6
  98. package/dist/actions/get_pool.d.ts +0 -4
  99. package/dist/actions/get_pool.d.ts.map +0 -1
  100. package/dist/actions/get_pool.js +0 -5
  101. package/dist/actions/get_position.d.ts +0 -4
  102. package/dist/actions/get_position.d.ts.map +0 -1
  103. package/dist/actions/get_position.js +0 -5
  104. package/dist/actions/get_position_by_position_mint.d.ts +0 -4
  105. package/dist/actions/get_position_by_position_mint.d.ts.map +0 -1
  106. package/dist/actions/get_position_by_position_mint.js +0 -6
  107. package/dist/actions/get_positions_by_owner.d.ts +0 -5
  108. package/dist/actions/get_positions_by_owner.d.ts.map +0 -1
  109. package/dist/actions/get_positions_by_owner.js +0 -33
  110. package/dist/actions/get_positions_by_position_mints.d.ts +0 -5
  111. package/dist/actions/get_positions_by_position_mints.d.ts.map +0 -1
  112. package/dist/actions/get_positions_by_position_mints.js +0 -9
  113. package/dist/actions/helpers/build_swap_transaction_message.d.ts +0 -22
  114. package/dist/actions/helpers/build_swap_transaction_message.d.ts.map +0 -1
  115. package/dist/actions/helpers/build_swap_transaction_message.js +0 -50
  116. package/dist/actions/helpers/build_transaction_message.d.ts +0 -20
  117. package/dist/actions/helpers/build_transaction_message.d.ts.map +0 -1
  118. package/dist/actions/helpers/build_transaction_message.js +0 -5
  119. package/dist/actions/helpers/index.d.ts +0 -8
  120. package/dist/actions/helpers/index.d.ts.map +0 -1
  121. package/dist/actions/helpers/index.js +0 -7
  122. package/dist/actions/helpers/resolve_active_bin_and_mints.d.ts +0 -12
  123. package/dist/actions/helpers/resolve_active_bin_and_mints.d.ts.map +0 -1
  124. package/dist/actions/helpers/resolve_active_bin_and_mints.js +0 -13
  125. package/dist/actions/helpers/resolve_admin_config_address.d.ts +0 -3
  126. package/dist/actions/helpers/resolve_admin_config_address.d.ts.map +0 -1
  127. package/dist/actions/helpers/resolve_admin_config_address.js +0 -9
  128. package/dist/actions/helpers/resolve_mint_info.d.ts +0 -10
  129. package/dist/actions/helpers/resolve_mint_info.d.ts.map +0 -1
  130. package/dist/actions/helpers/resolve_mint_info.js +0 -20
  131. package/dist/actions/helpers/resolve_position_range.d.ts +0 -12
  132. package/dist/actions/helpers/resolve_position_range.d.ts.map +0 -1
  133. package/dist/actions/helpers/resolve_position_range.js +0 -12
  134. package/dist/actions/helpers/resolve_token_mints_and_programs.d.ts +0 -15
  135. package/dist/actions/helpers/resolve_token_mints_and_programs.d.ts.map +0 -1
  136. package/dist/actions/helpers/resolve_token_mints_and_programs.js +0 -29
  137. package/dist/actions/index.d.ts +0 -31
  138. package/dist/actions/index.d.ts.map +0 -1
  139. package/dist/actions/index.js +0 -28
  140. package/dist/actions/is_admin_config_active.d.ts +0 -4
  141. package/dist/actions/is_admin_config_active.d.ts.map +0 -1
  142. package/dist/actions/is_admin_config_active.js +0 -7
  143. package/dist/actions/on_event.d.ts +0 -11
  144. package/dist/actions/on_event.d.ts.map +0 -1
  145. package/dist/actions/on_event.js +0 -50
  146. package/dist/actions/open_position.d.ts +0 -17
  147. package/dist/actions/open_position.d.ts.map +0 -1
  148. package/dist/actions/open_position.js +0 -31
  149. package/dist/actions/quote.d.ts +0 -13
  150. package/dist/actions/quote.d.ts.map +0 -1
  151. package/dist/actions/quote.js +0 -43
  152. package/dist/actions/set_metadata_update_authority.d.ts +0 -14
  153. package/dist/actions/set_metadata_update_authority.d.ts.map +0 -1
  154. package/dist/actions/set_metadata_update_authority.js +0 -7
  155. package/dist/actions/set_pool_dynamic_fee_config.d.ts +0 -16
  156. package/dist/actions/set_pool_dynamic_fee_config.d.ts.map +0 -1
  157. package/dist/actions/set_pool_dynamic_fee_config.js +0 -7
  158. package/dist/actions/set_pool_protocol_share.d.ts +0 -15
  159. package/dist/actions/set_pool_protocol_share.d.ts.map +0 -1
  160. package/dist/actions/set_pool_protocol_share.js +0 -7
  161. package/dist/actions/swap.d.ts +0 -22
  162. package/dist/actions/swap.d.ts.map +0 -1
  163. package/dist/actions/swap.js +0 -19
  164. package/dist/actions/sync_pool.d.ts +0 -15
  165. package/dist/actions/sync_pool.d.ts.map +0 -1
  166. package/dist/actions/sync_pool.js +0 -26
  167. package/dist/actions/transfer_admin_authority.d.ts +0 -14
  168. package/dist/actions/transfer_admin_authority.d.ts.map +0 -1
  169. package/dist/actions/transfer_admin_authority.js +0 -7
  170. package/dist/actions/withdraw.d.ts +0 -22
  171. package/dist/actions/withdraw.d.ts.map +0 -1
  172. package/dist/actions/withdraw.js +0 -41
  173. package/dist/utils/admin_config.d.ts +0 -3
  174. package/dist/utils/admin_config.d.ts.map +0 -1
  175. package/dist/utils/admin_config.js +0 -4
  176. package/dist/utils/bin_array.d.ts +0 -8
  177. package/dist/utils/bin_array.d.ts.map +0 -1
  178. package/dist/utils/bin_array.js +0 -29
  179. package/dist/utils/compute_budget.d.ts +0 -11
  180. package/dist/utils/compute_budget.d.ts.map +0 -1
  181. package/dist/utils/compute_budget.js +0 -22
  182. package/src/actions/accept_admin_authority.ts +0 -17
  183. package/src/actions/claim_fee.ts +0 -84
  184. package/src/actions/claim_multiple_fees.ts +0 -123
  185. package/src/actions/claim_protocol_fee.ts +0 -68
  186. package/src/actions/close_position.ts +0 -21
  187. package/src/actions/create_admin_config.ts +0 -51
  188. package/src/actions/create_bin_array.ts +0 -30
  189. package/src/actions/create_pool.ts +0 -49
  190. package/src/actions/delete_bin_array.ts +0 -33
  191. package/src/actions/deposit_by_weight.ts +0 -107
  192. package/src/actions/get_admin_config.ts +0 -13
  193. package/src/actions/get_bin_arrays_by_indices.ts +0 -15
  194. package/src/actions/get_pool.ts +0 -8
  195. package/src/actions/get_position.ts +0 -8
  196. package/src/actions/get_position_by_position_mint.ts +0 -14
  197. package/src/actions/get_positions_by_owner.ts +0 -48
  198. package/src/actions/get_positions_by_position_mints.ts +0 -21
  199. package/src/actions/helpers/build_swap_transaction_message.ts +0 -86
  200. package/src/actions/helpers/build_transaction_message.ts +0 -45
  201. package/src/actions/helpers/index.ts +0 -7
  202. package/src/actions/helpers/resolve_active_bin_and_mints.ts +0 -21
  203. package/src/actions/helpers/resolve_admin_config_address.ts +0 -11
  204. package/src/actions/helpers/resolve_mint_info.ts +0 -36
  205. package/src/actions/helpers/resolve_position_range.ts +0 -21
  206. package/src/actions/helpers/resolve_token_mints_and_programs.ts +0 -56
  207. package/src/actions/index.ts +0 -34
  208. package/src/actions/is_admin_config_active.ts +0 -14
  209. package/src/actions/on_event.ts +0 -78
  210. package/src/actions/open_position.ts +0 -66
  211. package/src/actions/quote.ts +0 -70
  212. package/src/actions/set_metadata_update_authority.ts +0 -17
  213. package/src/actions/set_pool_dynamic_fee_config.ts +0 -17
  214. package/src/actions/set_pool_protocol_share.ts +0 -17
  215. package/src/actions/swap.ts +0 -56
  216. package/src/actions/sync_pool.ts +0 -35
  217. package/src/actions/transfer_admin_authority.ts +0 -17
  218. package/src/actions/withdraw.ts +0 -87
  219. package/src/utils/admin_config.ts +0 -6
  220. package/src/utils/bin_array.ts +0 -45
  221. package/src/utils/compute_budget.ts +0 -58
@@ -1,35 +0,0 @@
1
- import { type Address, type TransactionSigner, AccountRole } from "@solana/kit";
2
- import { PICON_DLMM_PROGRAM_ADDRESS, getSyncPoolInstruction } from "../generated";
3
- import { generateBinArrayIndicesForSync } from "../utils/bin_location";
4
- import { MAX_BIN_ARRAYS_PER_SYNC } from "../utils/constants";
5
- import { findBinArrayAddresses } from "../utils/bin_array";
6
- import { getPool } from "./get_pool";
7
- import { buildTransactionMessage, type TransactionMessageOptions, type Rpc } from "./helpers";
8
-
9
- // The base sync_pool instruction only declares `user`/`pool` — the bin arrays are Anchor
10
- // `remaining_accounts`, not part of the typed account list, so they're appended manually here.
11
- // Read-only: sync_pool only ever reads bin data (`is_zero_liquidity`) to find the next active
12
- // bin, never mutates a bin array.
13
- export async function syncPool(
14
- rpc: Rpc,
15
- { user, pool, desiredBinId }: { user: TransactionSigner, pool: Address, desiredBinId: number },
16
- programAddress: Address = PICON_DLMM_PROGRAM_ADDRESS,
17
- options: TransactionMessageOptions = {},
18
- ) {
19
- const { activeBinId } = await getPool(rpc, pool, options);
20
-
21
- const binArrayIndices = generateBinArrayIndicesForSync(activeBinId, desiredBinId, MAX_BIN_ARRAYS_PER_SYNC);
22
- const binArrayAddresses = await findBinArrayAddresses(pool, binArrayIndices, programAddress);
23
-
24
- const syncPoolIx = getSyncPoolInstruction({ user, pool, desiredBinId }, { programAddress });
25
- const remainingAccounts = binArrayAddresses.map(address => ({
26
- address,
27
- role: AccountRole.READONLY,
28
- }));
29
-
30
- const instructions = [{
31
- ...syncPoolIx,
32
- accounts: [...syncPoolIx.accounts, ...remainingAccounts],
33
- }];
34
- return await buildTransactionMessage(rpc, { feePayer: user, instructions }, options);
35
- }
@@ -1,17 +0,0 @@
1
- import type { Address, TransactionSigner } from "@solana/kit";
2
- import { PICON_DLMM_PROGRAM_ADDRESS, getTransferAdminAuthorityInstructionAsync } from "../generated";
3
- import { buildTransactionMessage, resolveAdminConfigAddress, type TransactionMessageOptions, type Rpc } from "./helpers";
4
-
5
- export async function transferAdminAuthority(
6
- rpc: Rpc,
7
- { authority, newAuthority }: { authority: TransactionSigner, newAuthority: Address },
8
- programAddress: Address = PICON_DLMM_PROGRAM_ADDRESS,
9
- options: TransactionMessageOptions = {},
10
- ) {
11
- const adminConfig = await resolveAdminConfigAddress(programAddress);
12
- const instruction = await getTransferAdminAuthorityInstructionAsync(
13
- { authority, newAuthority, adminConfig },
14
- { programAddress },
15
- );
16
- return await buildTransactionMessage(rpc, { feePayer: authority, instructions: [instruction] }, options);
17
- }
@@ -1,87 +0,0 @@
1
- import type { Address, TransactionSigner } from "@solana/kit";
2
- import { PICON_DLMM_PROGRAM_ADDRESS, findPositionPda, getWithdrawInstruction } from "../generated";
3
- import { findPositionBinArrayAddresses } from "../utils/bin_array";
4
- import { findPoolTokenVaults, findPositionTokenAccount, processAssociatedTokenAccountPair } from "../utils/ata";
5
- import {
6
- resolvePositionRange,
7
- resolveTokenMintsAndPrograms,
8
- buildTransactionMessage,
9
- type TransactionMessageOptions,
10
- type Rpc,
11
- } from "./helpers";
12
-
13
- export async function withdraw(
14
- rpc: Rpc,
15
- {
16
- owner,
17
- positionMint,
18
- bpsToRemove,
19
- lowerBinId,
20
- upperBinId,
21
- pool,
22
- tokenMintX,
23
- tokenMintY,
24
- tokenProgramX,
25
- tokenProgramY,
26
- }: {
27
- owner: TransactionSigner,
28
- positionMint: Address,
29
- bpsToRemove: number,
30
- lowerBinId?: number,
31
- upperBinId?: number,
32
- pool?: Address,
33
- tokenMintX?: Address,
34
- tokenMintY?: Address,
35
- tokenProgramX?: Address,
36
- tokenProgramY?: Address,
37
- },
38
- programAddress: Address = PICON_DLMM_PROGRAM_ADDRESS,
39
- options: TransactionMessageOptions = {},
40
- ) {
41
- ({ pool, lowerBinId, upperBinId } = await resolvePositionRange(rpc, positionMint, { pool, lowerBinId, upperBinId }, programAddress, options));
42
-
43
- const tokenMintsAndPrograms = await resolveTokenMintsAndPrograms(rpc, {
44
- pool,
45
- tokenMintX,
46
- tokenMintY,
47
- tokenProgramX,
48
- tokenProgramY,
49
- }, options);
50
-
51
- const [position] = await findPositionPda({ positionMint }, { programAddress });
52
- const positionTokenAccount = await findPositionTokenAccount({ owner: owner.address, positionMint });
53
- const { tokenVaultX, tokenVaultY } = await findPoolTokenVaults({ pool, ...tokenMintsAndPrograms });
54
-
55
- const {
56
- ataX: tokenOwnerAccountX,
57
- ataY: tokenOwnerAccountY,
58
- preInstructions: preInstructionsAta,
59
- postInstructions: postInstructionsAta,
60
- } = await processAssociatedTokenAccountPair({ owner, ...tokenMintsAndPrograms });
61
-
62
- const { lowerBinArray, upperBinArray } = await findPositionBinArrayAddresses(pool, lowerBinId, upperBinId, programAddress);
63
-
64
- const withdrawIx = getWithdrawInstruction({
65
- owner,
66
- pool,
67
- position,
68
- positionTokenAccount,
69
- ...tokenMintsAndPrograms,
70
- tokenOwnerAccountX,
71
- tokenOwnerAccountY,
72
- tokenVaultX,
73
- tokenVaultY,
74
- lowerBinArray,
75
- upperBinArray,
76
- lowerBinId,
77
- upperBinId,
78
- bpsToRemove,
79
- }, { programAddress });
80
-
81
- const instructions = [
82
- ...preInstructionsAta,
83
- withdrawIx,
84
- ...postInstructionsAta,
85
- ];
86
- return await buildTransactionMessage(rpc, { feePayer: owner, instructions }, options);
87
- }
@@ -1,6 +0,0 @@
1
- import { SYSTEM_PROGRAM_ADDRESS } from "@solana-program/system";
2
- import { type AdminConfig } from "../generated";
3
-
4
- export function isAdminConfigActive(adminConfig: AdminConfig): boolean {
5
- return adminConfig.authority !== SYSTEM_PROGRAM_ADDRESS;
6
- }
@@ -1,45 +0,0 @@
1
- import { type Address } from "@solana/kit";
2
- import { findBinArrayPda } from "../generated";
3
- import { generateBinArrayIndicesForSwap, getPositionBinArrayIndices } from "./bin_location";
4
- import { MAX_BIN_ARRAYS_PER_SWAP } from "./constants";
5
- import { isUndefined } from "./type_guards";
6
-
7
- // Shared by every instruction that enumerates an arbitrary span of bin arrays as Anchor
8
- // `remaining_accounts` (swap, sync_pool), as opposed to the fixed lower/upper pair a
9
- // position-scoped instruction uses.
10
- export async function findBinArrayAddresses(pool: Address, indices: number[], programAddress: Address): Promise<Address[]> {
11
- return Promise.all(indices.map(async index => (await findBinArrayPda({ pool, index }, { programAddress }))[0]));
12
- }
13
-
14
- // Pure local PDA derivation — no RPC. Shared by `swap` (which only needs the addresses for
15
- // remaining accounts) and `quote` (which additionally fetches each account's data).
16
- export function findSwapBinArrayAddresses(
17
- pool: Address,
18
- activeBinId: number,
19
- xToY: boolean,
20
- programAddress: Address,
21
- ): Promise<Address[]> {
22
- const binArrayIndices = generateBinArrayIndicesForSwap(activeBinId, xToY, MAX_BIN_ARRAYS_PER_SWAP);
23
- return findBinArrayAddresses(pool, binArrayIndices, programAddress);
24
- }
25
-
26
- // Shared by every position-scoped instruction (open_position, deposit_by_weight, withdraw,
27
- // claim_fee) — derives the lower and (optionally) upper bin array covering the position's
28
- // range, matching the program's own `lowerBinArray` + `upperBinArray: Option<UncheckedAccount>`
29
- // account pair. `upperBinArray` is omitted when both ends fall in the same bin array.
30
- export async function findPositionBinArrayAddresses(
31
- pool: Address,
32
- lowerBinId: number,
33
- upperBinId: number,
34
- programAddress: Address,
35
- ): Promise<{ lowerBinArray: Address; upperBinArray?: Address }> {
36
- const { lowerBinArrayIndex, upperBinArrayIndex } = getPositionBinArrayIndices(lowerBinId, upperBinId);
37
-
38
- const [lowerBinArray] = await findBinArrayPda({ pool, index: lowerBinArrayIndex }, { programAddress });
39
- if (isUndefined(upperBinArrayIndex)) {
40
- return { lowerBinArray };
41
- }
42
-
43
- const [upperBinArray] = await findBinArrayPda({ pool, index: upperBinArrayIndex }, { programAddress });
44
- return { lowerBinArray, upperBinArray };
45
- }
@@ -1,58 +0,0 @@
1
- import {
2
- getSetComputeUnitLimitInstruction,
3
- getSetComputeUnitPriceInstruction,
4
- } from "@solana-program/compute-budget";
5
- import {
6
- createSolanaRpc,
7
- estimateComputeUnitLimitFactory,
8
- prependTransactionMessageInstructions,
9
- type TransactionMessage,
10
- type TransactionMessageWithFeePayer,
11
- } from "@solana/kit";
12
- import { isUndefined } from "./type_guards";
13
-
14
- export function withComputeBudget<TTransactionMessage extends TransactionMessage>(
15
- message: TTransactionMessage,
16
- {
17
- computeUnitLimit,
18
- computeUnitPrice,
19
- }: {
20
- computeUnitLimit?: number,
21
- computeUnitPrice?: bigint,
22
- } = {},
23
- ): TTransactionMessage {
24
- const ixs = [
25
- ...(isUndefined(computeUnitLimit) ? [] : [getSetComputeUnitLimitInstruction({ units: computeUnitLimit })]),
26
- ...(isUndefined(computeUnitPrice) ? [] : [getSetComputeUnitPriceInstruction({ microLamports: computeUnitPrice })]),
27
- ];
28
- return prependTransactionMessageInstructions(ixs, message) as TTransactionMessage;
29
- }
30
-
31
- export async function withEstimatedComputeBudget<
32
- TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer
33
- >(
34
- rpc: ReturnType<typeof createSolanaRpc>,
35
- message: TTransactionMessage,
36
- {
37
- estimateComputeUnitPrice,
38
- estimateComputeUnitLimit,
39
- bufferFactor = 1.1,
40
- }: {
41
- estimateComputeUnitPrice?: bigint | ((computeUnitLimit: number) => bigint),
42
- estimateComputeUnitLimit?: ReturnType<typeof estimateComputeUnitLimitFactory>,
43
- bufferFactor?: number,
44
- } = {},
45
- ): Promise<TTransactionMessage> {
46
- estimateComputeUnitLimit = estimateComputeUnitLimit ?? estimateComputeUnitLimitFactory({ rpc });
47
-
48
- const computeUnitBase = await estimateComputeUnitLimit(message);
49
- const computeUnitLimit = Math.ceil(computeUnitBase * bufferFactor);
50
- const computeUnitPrice = estimateComputeUnitPrice instanceof Function
51
- ? estimateComputeUnitPrice(computeUnitLimit)
52
- : estimateComputeUnitPrice;
53
-
54
- return withComputeBudget(message, {
55
- computeUnitLimit: computeUnitLimit,
56
- computeUnitPrice,
57
- });
58
- }