@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,71 @@
1
+ import { createSolanaRpc, type Address, type Account, type Instruction, type TransactionSigner, type FetchAccountConfig, type FetchAccountsConfig } from "@solana/kit";
2
+ import { generated } from "..";
3
+ import { type QuoteOutput } from "../quote";
4
+ import { Position } from "./position";
5
+ import { type ProgramConfig } from "./types";
6
+ export declare class Pool {
7
+ #private;
8
+ private constructor();
9
+ get rpc(): import("@solana/rpc-spec").Rpc<(import("@solana/rpc-api").GetAccountInfoApi & import("@solana/rpc-api").GetBalanceApi & import("@solana/rpc-api").GetBlockApi & import("@solana/rpc-api").GetBlockCommitmentApi & import("@solana/rpc-api").GetBlockHeightApi & import("@solana/rpc-api").GetBlockProductionApi & import("@solana/rpc-api").GetBlocksApi & import("@solana/rpc-api").GetBlocksWithLimitApi & import("@solana/rpc-api").GetBlockTimeApi & import("@solana/rpc-api").GetClusterNodesApi & import("@solana/rpc-api").GetEpochInfoApi & import("@solana/rpc-api").GetEpochScheduleApi & import("@solana/rpc-api").GetFeeForMessageApi & import("@solana/rpc-api").GetFirstAvailableBlockApi & import("@solana/rpc-api").GetGenesisHashApi & import("@solana/rpc-api").GetHealthApi & import("@solana/rpc-api").GetHighestSnapshotSlotApi & import("@solana/rpc-api").GetIdentityApi & import("@solana/rpc-api").GetInflationGovernorApi & import("@solana/rpc-api").GetInflationRateApi & import("@solana/rpc-api").GetInflationRewardApi & import("@solana/rpc-api").GetLargestAccountsApi & import("@solana/rpc-api").GetLatestBlockhashApi & import("@solana/rpc-api").GetLeaderScheduleApi & import("@solana/rpc-api").GetMaxRetransmitSlotApi & import("@solana/rpc-api").GetMaxShredInsertSlotApi & import("@solana/rpc-api").GetMinimumBalanceForRentExemptionApi & import("@solana/rpc-api").GetMultipleAccountsApi & import("@solana/rpc-api").GetProgramAccountsApi & import("@solana/rpc-api").GetRecentPerformanceSamplesApi & import("@solana/rpc-api").GetRecentPrioritizationFeesApi & import("@solana/rpc-api").GetSignaturesForAddressApi & import("@solana/rpc-api").GetSignatureStatusesApi & import("@solana/rpc-api").GetSlotApi & import("@solana/rpc-api").GetSlotLeaderApi & import("@solana/rpc-api").GetSlotLeadersApi & import("@solana/rpc-api").GetStakeMinimumDelegationApi & import("@solana/rpc-api").GetSupplyApi & import("@solana/rpc-api").GetTokenAccountBalanceApi & import("@solana/rpc-api").GetTokenAccountsByDelegateApi & import("@solana/rpc-api").GetTokenAccountsByOwnerApi & import("@solana/rpc-api").GetTokenLargestAccountsApi & import("@solana/rpc-api").GetTokenSupplyApi & import("@solana/rpc-api").GetTransactionApi & import("@solana/rpc-api").GetTransactionCountApi & import("@solana/rpc-api").GetVersionApi & import("@solana/rpc-api").GetVoteAccountsApi & import("@solana/rpc-api").IsBlockhashValidApi & import("@solana/rpc-api").MinimumLedgerSlotApi & import("@solana/rpc-api").SendTransactionApi & import("@solana/rpc-api").SimulateTransactionApi) | (import("@solana/rpc-api").RequestAirdropApi & import("@solana/rpc-api").GetAccountInfoApi & import("@solana/rpc-api").GetBalanceApi & import("@solana/rpc-api").GetBlockApi & import("@solana/rpc-api").GetBlockCommitmentApi & import("@solana/rpc-api").GetBlockHeightApi & import("@solana/rpc-api").GetBlockProductionApi & import("@solana/rpc-api").GetBlocksApi & import("@solana/rpc-api").GetBlocksWithLimitApi & import("@solana/rpc-api").GetBlockTimeApi & import("@solana/rpc-api").GetClusterNodesApi & import("@solana/rpc-api").GetEpochInfoApi & import("@solana/rpc-api").GetEpochScheduleApi & import("@solana/rpc-api").GetFeeForMessageApi & import("@solana/rpc-api").GetFirstAvailableBlockApi & import("@solana/rpc-api").GetGenesisHashApi & import("@solana/rpc-api").GetHealthApi & import("@solana/rpc-api").GetHighestSnapshotSlotApi & import("@solana/rpc-api").GetIdentityApi & import("@solana/rpc-api").GetInflationGovernorApi & import("@solana/rpc-api").GetInflationRateApi & import("@solana/rpc-api").GetInflationRewardApi & import("@solana/rpc-api").GetLargestAccountsApi & import("@solana/rpc-api").GetLatestBlockhashApi & import("@solana/rpc-api").GetLeaderScheduleApi & import("@solana/rpc-api").GetMaxRetransmitSlotApi & import("@solana/rpc-api").GetMaxShredInsertSlotApi & import("@solana/rpc-api").GetMinimumBalanceForRentExemptionApi & import("@solana/rpc-api").GetMultipleAccountsApi & import("@solana/rpc-api").GetProgramAccountsApi & import("@solana/rpc-api").GetRecentPerformanceSamplesApi & import("@solana/rpc-api").GetRecentPrioritizationFeesApi & import("@solana/rpc-api").GetSignaturesForAddressApi & import("@solana/rpc-api").GetSignatureStatusesApi & import("@solana/rpc-api").GetSlotApi & import("@solana/rpc-api").GetSlotLeaderApi & import("@solana/rpc-api").GetSlotLeadersApi & import("@solana/rpc-api").GetStakeMinimumDelegationApi & import("@solana/rpc-api").GetSupplyApi & import("@solana/rpc-api").GetTokenAccountBalanceApi & import("@solana/rpc-api").GetTokenAccountsByDelegateApi & import("@solana/rpc-api").GetTokenAccountsByOwnerApi & import("@solana/rpc-api").GetTokenLargestAccountsApi & import("@solana/rpc-api").GetTokenSupplyApi & import("@solana/rpc-api").GetTransactionApi & import("@solana/rpc-api").GetTransactionCountApi & import("@solana/rpc-api").GetVersionApi & import("@solana/rpc-api").GetVoteAccountsApi & import("@solana/rpc-api").IsBlockhashValidApi & import("@solana/rpc-api").MinimumLedgerSlotApi & import("@solana/rpc-api").SendTransactionApi & import("@solana/rpc-api").SimulateTransactionApi)> | import("@solana/rpc").RpcDevnet<(import("@solana/rpc-api").GetAccountInfoApi & import("@solana/rpc-api").GetBalanceApi & import("@solana/rpc-api").GetBlockApi & import("@solana/rpc-api").GetBlockCommitmentApi & import("@solana/rpc-api").GetBlockHeightApi & import("@solana/rpc-api").GetBlockProductionApi & import("@solana/rpc-api").GetBlocksApi & import("@solana/rpc-api").GetBlocksWithLimitApi & import("@solana/rpc-api").GetBlockTimeApi & import("@solana/rpc-api").GetClusterNodesApi & import("@solana/rpc-api").GetEpochInfoApi & import("@solana/rpc-api").GetEpochScheduleApi & import("@solana/rpc-api").GetFeeForMessageApi & import("@solana/rpc-api").GetFirstAvailableBlockApi & import("@solana/rpc-api").GetGenesisHashApi & import("@solana/rpc-api").GetHealthApi & import("@solana/rpc-api").GetHighestSnapshotSlotApi & import("@solana/rpc-api").GetIdentityApi & import("@solana/rpc-api").GetInflationGovernorApi & import("@solana/rpc-api").GetInflationRateApi & import("@solana/rpc-api").GetInflationRewardApi & import("@solana/rpc-api").GetLargestAccountsApi & import("@solana/rpc-api").GetLatestBlockhashApi & import("@solana/rpc-api").GetLeaderScheduleApi & import("@solana/rpc-api").GetMaxRetransmitSlotApi & import("@solana/rpc-api").GetMaxShredInsertSlotApi & import("@solana/rpc-api").GetMinimumBalanceForRentExemptionApi & import("@solana/rpc-api").GetMultipleAccountsApi & import("@solana/rpc-api").GetProgramAccountsApi & import("@solana/rpc-api").GetRecentPerformanceSamplesApi & import("@solana/rpc-api").GetRecentPrioritizationFeesApi & import("@solana/rpc-api").GetSignaturesForAddressApi & import("@solana/rpc-api").GetSignatureStatusesApi & import("@solana/rpc-api").GetSlotApi & import("@solana/rpc-api").GetSlotLeaderApi & import("@solana/rpc-api").GetSlotLeadersApi & import("@solana/rpc-api").GetStakeMinimumDelegationApi & import("@solana/rpc-api").GetSupplyApi & import("@solana/rpc-api").GetTokenAccountBalanceApi & import("@solana/rpc-api").GetTokenAccountsByDelegateApi & import("@solana/rpc-api").GetTokenAccountsByOwnerApi & import("@solana/rpc-api").GetTokenLargestAccountsApi & import("@solana/rpc-api").GetTokenSupplyApi & import("@solana/rpc-api").GetTransactionApi & import("@solana/rpc-api").GetTransactionCountApi & import("@solana/rpc-api").GetVersionApi & import("@solana/rpc-api").GetVoteAccountsApi & import("@solana/rpc-api").IsBlockhashValidApi & import("@solana/rpc-api").MinimumLedgerSlotApi & import("@solana/rpc-api").SendTransactionApi & import("@solana/rpc-api").SimulateTransactionApi) | (import("@solana/rpc-api").RequestAirdropApi & import("@solana/rpc-api").GetAccountInfoApi & import("@solana/rpc-api").GetBalanceApi & import("@solana/rpc-api").GetBlockApi & import("@solana/rpc-api").GetBlockCommitmentApi & import("@solana/rpc-api").GetBlockHeightApi & import("@solana/rpc-api").GetBlockProductionApi & import("@solana/rpc-api").GetBlocksApi & import("@solana/rpc-api").GetBlocksWithLimitApi & import("@solana/rpc-api").GetBlockTimeApi & import("@solana/rpc-api").GetClusterNodesApi & import("@solana/rpc-api").GetEpochInfoApi & import("@solana/rpc-api").GetEpochScheduleApi & import("@solana/rpc-api").GetFeeForMessageApi & import("@solana/rpc-api").GetFirstAvailableBlockApi & import("@solana/rpc-api").GetGenesisHashApi & import("@solana/rpc-api").GetHealthApi & import("@solana/rpc-api").GetHighestSnapshotSlotApi & import("@solana/rpc-api").GetIdentityApi & import("@solana/rpc-api").GetInflationGovernorApi & import("@solana/rpc-api").GetInflationRateApi & import("@solana/rpc-api").GetInflationRewardApi & import("@solana/rpc-api").GetLargestAccountsApi & import("@solana/rpc-api").GetLatestBlockhashApi & import("@solana/rpc-api").GetLeaderScheduleApi & import("@solana/rpc-api").GetMaxRetransmitSlotApi & import("@solana/rpc-api").GetMaxShredInsertSlotApi & import("@solana/rpc-api").GetMinimumBalanceForRentExemptionApi & import("@solana/rpc-api").GetMultipleAccountsApi & import("@solana/rpc-api").GetProgramAccountsApi & import("@solana/rpc-api").GetRecentPerformanceSamplesApi & import("@solana/rpc-api").GetRecentPrioritizationFeesApi & import("@solana/rpc-api").GetSignaturesForAddressApi & import("@solana/rpc-api").GetSignatureStatusesApi & import("@solana/rpc-api").GetSlotApi & import("@solana/rpc-api").GetSlotLeaderApi & import("@solana/rpc-api").GetSlotLeadersApi & import("@solana/rpc-api").GetStakeMinimumDelegationApi & import("@solana/rpc-api").GetSupplyApi & import("@solana/rpc-api").GetTokenAccountBalanceApi & import("@solana/rpc-api").GetTokenAccountsByDelegateApi & import("@solana/rpc-api").GetTokenAccountsByOwnerApi & import("@solana/rpc-api").GetTokenLargestAccountsApi & import("@solana/rpc-api").GetTokenSupplyApi & import("@solana/rpc-api").GetTransactionApi & import("@solana/rpc-api").GetTransactionCountApi & import("@solana/rpc-api").GetVersionApi & import("@solana/rpc-api").GetVoteAccountsApi & import("@solana/rpc-api").IsBlockhashValidApi & import("@solana/rpc-api").MinimumLedgerSlotApi & import("@solana/rpc-api").SendTransactionApi & import("@solana/rpc-api").SimulateTransactionApi)> | import("@solana/rpc").RpcMainnet<(import("@solana/rpc-api").GetAccountInfoApi & import("@solana/rpc-api").GetBalanceApi & import("@solana/rpc-api").GetBlockApi & import("@solana/rpc-api").GetBlockCommitmentApi & import("@solana/rpc-api").GetBlockHeightApi & import("@solana/rpc-api").GetBlockProductionApi & import("@solana/rpc-api").GetBlocksApi & import("@solana/rpc-api").GetBlocksWithLimitApi & import("@solana/rpc-api").GetBlockTimeApi & import("@solana/rpc-api").GetClusterNodesApi & import("@solana/rpc-api").GetEpochInfoApi & import("@solana/rpc-api").GetEpochScheduleApi & import("@solana/rpc-api").GetFeeForMessageApi & import("@solana/rpc-api").GetFirstAvailableBlockApi & import("@solana/rpc-api").GetGenesisHashApi & import("@solana/rpc-api").GetHealthApi & import("@solana/rpc-api").GetHighestSnapshotSlotApi & import("@solana/rpc-api").GetIdentityApi & import("@solana/rpc-api").GetInflationGovernorApi & import("@solana/rpc-api").GetInflationRateApi & import("@solana/rpc-api").GetInflationRewardApi & import("@solana/rpc-api").GetLargestAccountsApi & import("@solana/rpc-api").GetLatestBlockhashApi & import("@solana/rpc-api").GetLeaderScheduleApi & import("@solana/rpc-api").GetMaxRetransmitSlotApi & import("@solana/rpc-api").GetMaxShredInsertSlotApi & import("@solana/rpc-api").GetMinimumBalanceForRentExemptionApi & import("@solana/rpc-api").GetMultipleAccountsApi & import("@solana/rpc-api").GetProgramAccountsApi & import("@solana/rpc-api").GetRecentPerformanceSamplesApi & import("@solana/rpc-api").GetRecentPrioritizationFeesApi & import("@solana/rpc-api").GetSignaturesForAddressApi & import("@solana/rpc-api").GetSignatureStatusesApi & import("@solana/rpc-api").GetSlotApi & import("@solana/rpc-api").GetSlotLeaderApi & import("@solana/rpc-api").GetSlotLeadersApi & import("@solana/rpc-api").GetStakeMinimumDelegationApi & import("@solana/rpc-api").GetSupplyApi & import("@solana/rpc-api").GetTokenAccountBalanceApi & import("@solana/rpc-api").GetTokenAccountsByDelegateApi & import("@solana/rpc-api").GetTokenAccountsByOwnerApi & import("@solana/rpc-api").GetTokenLargestAccountsApi & import("@solana/rpc-api").GetTokenSupplyApi & import("@solana/rpc-api").GetTransactionApi & import("@solana/rpc-api").GetTransactionCountApi & import("@solana/rpc-api").GetVersionApi & import("@solana/rpc-api").GetVoteAccountsApi & import("@solana/rpc-api").IsBlockhashValidApi & import("@solana/rpc-api").MinimumLedgerSlotApi & import("@solana/rpc-api").SendTransactionApi & import("@solana/rpc-api").SimulateTransactionApi) | (import("@solana/rpc-api").RequestAirdropApi & import("@solana/rpc-api").GetAccountInfoApi & import("@solana/rpc-api").GetBalanceApi & import("@solana/rpc-api").GetBlockApi & import("@solana/rpc-api").GetBlockCommitmentApi & import("@solana/rpc-api").GetBlockHeightApi & import("@solana/rpc-api").GetBlockProductionApi & import("@solana/rpc-api").GetBlocksApi & import("@solana/rpc-api").GetBlocksWithLimitApi & import("@solana/rpc-api").GetBlockTimeApi & import("@solana/rpc-api").GetClusterNodesApi & import("@solana/rpc-api").GetEpochInfoApi & import("@solana/rpc-api").GetEpochScheduleApi & import("@solana/rpc-api").GetFeeForMessageApi & import("@solana/rpc-api").GetFirstAvailableBlockApi & import("@solana/rpc-api").GetGenesisHashApi & import("@solana/rpc-api").GetHealthApi & import("@solana/rpc-api").GetHighestSnapshotSlotApi & import("@solana/rpc-api").GetIdentityApi & import("@solana/rpc-api").GetInflationGovernorApi & import("@solana/rpc-api").GetInflationRateApi & import("@solana/rpc-api").GetInflationRewardApi & import("@solana/rpc-api").GetLargestAccountsApi & import("@solana/rpc-api").GetLatestBlockhashApi & import("@solana/rpc-api").GetLeaderScheduleApi & import("@solana/rpc-api").GetMaxRetransmitSlotApi & import("@solana/rpc-api").GetMaxShredInsertSlotApi & import("@solana/rpc-api").GetMinimumBalanceForRentExemptionApi & import("@solana/rpc-api").GetMultipleAccountsApi & import("@solana/rpc-api").GetProgramAccountsApi & import("@solana/rpc-api").GetRecentPerformanceSamplesApi & import("@solana/rpc-api").GetRecentPrioritizationFeesApi & import("@solana/rpc-api").GetSignaturesForAddressApi & import("@solana/rpc-api").GetSignatureStatusesApi & import("@solana/rpc-api").GetSlotApi & import("@solana/rpc-api").GetSlotLeaderApi & import("@solana/rpc-api").GetSlotLeadersApi & import("@solana/rpc-api").GetStakeMinimumDelegationApi & import("@solana/rpc-api").GetSupplyApi & import("@solana/rpc-api").GetTokenAccountBalanceApi & import("@solana/rpc-api").GetTokenAccountsByDelegateApi & import("@solana/rpc-api").GetTokenAccountsByOwnerApi & import("@solana/rpc-api").GetTokenLargestAccountsApi & import("@solana/rpc-api").GetTokenSupplyApi & import("@solana/rpc-api").GetTransactionApi & import("@solana/rpc-api").GetTransactionCountApi & import("@solana/rpc-api").GetVersionApi & import("@solana/rpc-api").GetVoteAccountsApi & import("@solana/rpc-api").IsBlockhashValidApi & import("@solana/rpc-api").MinimumLedgerSlotApi & import("@solana/rpc-api").SendTransactionApi & import("@solana/rpc-api").SimulateTransactionApi)> | import("@solana/rpc").RpcTestnet<(import("@solana/rpc-api").GetAccountInfoApi & import("@solana/rpc-api").GetBalanceApi & import("@solana/rpc-api").GetBlockApi & import("@solana/rpc-api").GetBlockCommitmentApi & import("@solana/rpc-api").GetBlockHeightApi & import("@solana/rpc-api").GetBlockProductionApi & import("@solana/rpc-api").GetBlocksApi & import("@solana/rpc-api").GetBlocksWithLimitApi & import("@solana/rpc-api").GetBlockTimeApi & import("@solana/rpc-api").GetClusterNodesApi & import("@solana/rpc-api").GetEpochInfoApi & import("@solana/rpc-api").GetEpochScheduleApi & import("@solana/rpc-api").GetFeeForMessageApi & import("@solana/rpc-api").GetFirstAvailableBlockApi & import("@solana/rpc-api").GetGenesisHashApi & import("@solana/rpc-api").GetHealthApi & import("@solana/rpc-api").GetHighestSnapshotSlotApi & import("@solana/rpc-api").GetIdentityApi & import("@solana/rpc-api").GetInflationGovernorApi & import("@solana/rpc-api").GetInflationRateApi & import("@solana/rpc-api").GetInflationRewardApi & import("@solana/rpc-api").GetLargestAccountsApi & import("@solana/rpc-api").GetLatestBlockhashApi & import("@solana/rpc-api").GetLeaderScheduleApi & import("@solana/rpc-api").GetMaxRetransmitSlotApi & import("@solana/rpc-api").GetMaxShredInsertSlotApi & import("@solana/rpc-api").GetMinimumBalanceForRentExemptionApi & import("@solana/rpc-api").GetMultipleAccountsApi & import("@solana/rpc-api").GetProgramAccountsApi & import("@solana/rpc-api").GetRecentPerformanceSamplesApi & import("@solana/rpc-api").GetRecentPrioritizationFeesApi & import("@solana/rpc-api").GetSignaturesForAddressApi & import("@solana/rpc-api").GetSignatureStatusesApi & import("@solana/rpc-api").GetSlotApi & import("@solana/rpc-api").GetSlotLeaderApi & import("@solana/rpc-api").GetSlotLeadersApi & import("@solana/rpc-api").GetStakeMinimumDelegationApi & import("@solana/rpc-api").GetSupplyApi & import("@solana/rpc-api").GetTokenAccountBalanceApi & import("@solana/rpc-api").GetTokenAccountsByDelegateApi & import("@solana/rpc-api").GetTokenAccountsByOwnerApi & import("@solana/rpc-api").GetTokenLargestAccountsApi & import("@solana/rpc-api").GetTokenSupplyApi & import("@solana/rpc-api").GetTransactionApi & import("@solana/rpc-api").GetTransactionCountApi & import("@solana/rpc-api").GetVersionApi & import("@solana/rpc-api").GetVoteAccountsApi & import("@solana/rpc-api").IsBlockhashValidApi & import("@solana/rpc-api").MinimumLedgerSlotApi & import("@solana/rpc-api").SendTransactionApi & import("@solana/rpc-api").SimulateTransactionApi) | (import("@solana/rpc-api").RequestAirdropApi & import("@solana/rpc-api").GetAccountInfoApi & import("@solana/rpc-api").GetBalanceApi & import("@solana/rpc-api").GetBlockApi & import("@solana/rpc-api").GetBlockCommitmentApi & import("@solana/rpc-api").GetBlockHeightApi & import("@solana/rpc-api").GetBlockProductionApi & import("@solana/rpc-api").GetBlocksApi & import("@solana/rpc-api").GetBlocksWithLimitApi & import("@solana/rpc-api").GetBlockTimeApi & import("@solana/rpc-api").GetClusterNodesApi & import("@solana/rpc-api").GetEpochInfoApi & import("@solana/rpc-api").GetEpochScheduleApi & import("@solana/rpc-api").GetFeeForMessageApi & import("@solana/rpc-api").GetFirstAvailableBlockApi & import("@solana/rpc-api").GetGenesisHashApi & import("@solana/rpc-api").GetHealthApi & import("@solana/rpc-api").GetHighestSnapshotSlotApi & import("@solana/rpc-api").GetIdentityApi & import("@solana/rpc-api").GetInflationGovernorApi & import("@solana/rpc-api").GetInflationRateApi & import("@solana/rpc-api").GetInflationRewardApi & import("@solana/rpc-api").GetLargestAccountsApi & import("@solana/rpc-api").GetLatestBlockhashApi & import("@solana/rpc-api").GetLeaderScheduleApi & import("@solana/rpc-api").GetMaxRetransmitSlotApi & import("@solana/rpc-api").GetMaxShredInsertSlotApi & import("@solana/rpc-api").GetMinimumBalanceForRentExemptionApi & import("@solana/rpc-api").GetMultipleAccountsApi & import("@solana/rpc-api").GetProgramAccountsApi & import("@solana/rpc-api").GetRecentPerformanceSamplesApi & import("@solana/rpc-api").GetRecentPrioritizationFeesApi & import("@solana/rpc-api").GetSignaturesForAddressApi & import("@solana/rpc-api").GetSignatureStatusesApi & import("@solana/rpc-api").GetSlotApi & import("@solana/rpc-api").GetSlotLeaderApi & import("@solana/rpc-api").GetSlotLeadersApi & import("@solana/rpc-api").GetStakeMinimumDelegationApi & import("@solana/rpc-api").GetSupplyApi & import("@solana/rpc-api").GetTokenAccountBalanceApi & import("@solana/rpc-api").GetTokenAccountsByDelegateApi & import("@solana/rpc-api").GetTokenAccountsByOwnerApi & import("@solana/rpc-api").GetTokenLargestAccountsApi & import("@solana/rpc-api").GetTokenSupplyApi & import("@solana/rpc-api").GetTransactionApi & import("@solana/rpc-api").GetTransactionCountApi & import("@solana/rpc-api").GetVersionApi & import("@solana/rpc-api").GetVoteAccountsApi & import("@solana/rpc-api").IsBlockhashValidApi & import("@solana/rpc-api").MinimumLedgerSlotApi & import("@solana/rpc-api").SendTransactionApi & import("@solana/rpc-api").SimulateTransactionApi)>;
10
+ get programAddress(): Address;
11
+ get address(): Address<string>;
12
+ get data(): generated.Pool;
13
+ get activeBinId(): number;
14
+ get tokenMintX(): Address;
15
+ get tokenMintY(): Address;
16
+ get tokenVaultX(): Address;
17
+ get tokenVaultY(): Address;
18
+ get tokenProgramX(): Address;
19
+ get tokenProgramY(): Address;
20
+ refresh(data: Account<generated.Pool>): Promise<void>;
21
+ refresh(config?: FetchAccountConfig): Promise<void>;
22
+ getPosition(address: Address, config?: FetchAccountsConfig): Promise<Position>;
23
+ getPositionByPositionMint(positionMint: Address, config?: FetchAccountsConfig): Promise<Position>;
24
+ getAllPositionsByPositionMints(positionMints: Address[], config?: FetchAccountsConfig): Promise<Position[]>;
25
+ openPosition(owner: TransactionSigner, positionMint: TransactionSigner, { lowerBinId, upperBinId }: {
26
+ lowerBinId: number;
27
+ upperBinId: number;
28
+ }): Promise<Instruction[]>;
29
+ closePosition(owner: TransactionSigner, positionMint: Address): Promise<Instruction>;
30
+ swap(user: TransactionSigner, { xToY, amountIn, minAmountOut, }: {
31
+ xToY: boolean;
32
+ amountIn: bigint;
33
+ minAmountOut: bigint;
34
+ }): Promise<Instruction[]>;
35
+ quote({ xToY, amountIn, slippageToleranceBps, }: {
36
+ xToY: boolean;
37
+ amountIn: bigint;
38
+ slippageToleranceBps: number;
39
+ }): Promise<QuoteOutput>;
40
+ quoteAndSwap(user: TransactionSigner, { xToY, amountIn, slippageToleranceBps, }: {
41
+ xToY: boolean;
42
+ amountIn: bigint;
43
+ slippageToleranceBps: number;
44
+ }): Promise<{
45
+ quoteOutput: QuoteOutput;
46
+ instructions: Instruction[];
47
+ }>;
48
+ sync(user: TransactionSigner, desiredBinId: number): Promise<Instruction[]>;
49
+ setDynamicFeeConfig(authority: TransactionSigner, dynamicFeeConfig: generated.DynamicFeeConfig): Promise<Instruction>;
50
+ setProtocolShare(authority: TransactionSigner, protocolShare: number): Promise<Instruction>;
51
+ claimProtocolFee(authority: TransactionSigner): Promise<Instruction[]>;
52
+ static load(rpc: ReturnType<typeof createSolanaRpc>, address: Address, programAddress: Address, config?: FetchAccountConfig): Promise<Pool>;
53
+ }
54
+ export declare function findPoolAddress(seeds: {
55
+ tokenMintX: Address;
56
+ tokenMintY: Address;
57
+ binStep: number;
58
+ feeRate: number;
59
+ }, config: ProgramConfig): Promise<Address>;
60
+ export declare function createPool({ authority, binStep, feeRate, protocolShare, activeBinId, tokenMintX, tokenMintY, tokenProgramX, tokenProgramY, }: {
61
+ authority: TransactionSigner;
62
+ binStep: number;
63
+ feeRate: number;
64
+ protocolShare: number;
65
+ activeBinId: number;
66
+ tokenMintX: Address;
67
+ tokenMintY: Address;
68
+ tokenProgramX: Address;
69
+ tokenProgramY: Address;
70
+ }, config: ProgramConfig): Promise<Instruction>;
71
+ //# sourceMappingURL=pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../src/entities/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAMrB,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAS,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAanD,OAAO,EACL,QAAQ,EAKT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,qBAAa,IAAI;;IAQf,OAAO,eAYN;IAED,IAAW,GAAG,+5nBAAwB;IAEtC,IAAW,cAAc,YAAmC;IAC5D,IAAW,OAAO,oBAAoC;IACtD,IAAW,IAAI,mBAAiC;IAChD,IAAW,WAAW,WAAoC;IAE1D,IAAW,UAAU,YAAmC;IACxD,IAAW,UAAU,YAAmC;IAExD,IAAW,WAAW,YAAoC;IAC1D,IAAW,WAAW,YAAoC;IAE1D,IAAW,aAAa,YAAyC;IACjE,IAAW,aAAa,YAAyC;IAEpD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAQpD,WAAW,CACtB,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAEnB;IAEY,yBAAyB,CACpC,YAAY,EAAE,OAAO,EACrB,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAMnB;IAEY,8BAA8B,CACzC,aAAa,EAAE,OAAO,EAAE,EACxB,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAMrB;IAEY,YAAY,CACvB,KAAK,EAAE,iBAAiB,EACxB,YAAY,EAAE,iBAAiB,EAC/B,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GACrE,OAAO,CAAC,WAAW,EAAE,CAAC,CAMxB;IAEY,aAAa,CACxB,KAAK,EAAE,iBAAiB,EACxB,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,WAAW,CAAC,CAKtB;IAEY,IAAI,CACf,IAAI,EAAE,iBAAiB,EACvB,EACE,IAAI,EACJ,QAAQ,EACR,YAAY,GACb,EAAE;QACD,IAAI,EAAE,OAAO,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,GACA,OAAO,CAAC,WAAW,EAAE,CAAC,CA2CxB;IAEY,KAAK,CAChB,EACE,IAAI,EACJ,QAAQ,EACR,oBAAoB,GACrB,EAAE;QACD,IAAI,EAAE,OAAO,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,oBAAoB,EAAE,MAAM,CAAC;KAC9B,GACA,OAAO,CAAC,WAAW,CAAC,CA0BtB;IAEY,YAAY,CACvB,IAAI,EAAE,iBAAiB,EACvB,EACE,IAAI,EACJ,QAAQ,EACR,oBAAoB,GACrB,EAAE;QACD,IAAI,EAAE,OAAO,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,oBAAoB,EAAE,MAAM,CAAC;KAC9B,GACA,OAAO,CAAC;QAAE,WAAW,EAAE,WAAW,CAAC;QAAC,YAAY,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC,CAIpE;IAEY,IAAI,CACf,IAAI,EAAE,iBAAiB,EACvB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,EAAE,CAAC,CAcxB;IAEY,mBAAmB,CAC9B,SAAS,EAAE,iBAAiB,EAC5B,gBAAgB,EAAE,SAAS,CAAC,gBAAgB,GAC3C,OAAO,CAAC,WAAW,CAAC,CAMtB;IAEY,gBAAgB,CAC3B,SAAS,EAAE,iBAAiB,EAC5B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,CAAC,CAMtB;IAEY,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAgClF;IAED,OAAoB,IAAI,CACtB,GAAG,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EACvC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,OAAO,EACvB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAWf;CACF;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACrF,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,wBAAsB,UAAU,CAC9B,EACE,SAAS,EACT,OAAO,EACP,OAAO,EACP,aAAa,EACb,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,GACd,EAAE;IACD,SAAS,EAAE,iBAAiB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB,EACD,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,WAAW,CAAC,CAkBtB"}
@@ -0,0 +1,189 @@
1
+ import { AccountRole, } from "@solana/kit";
2
+ import { fetchAllMint, } from "@solana-program/token-2022";
3
+ import { generated } from "..";
4
+ import { quote } from "../quote";
5
+ import { isAccount } from "../utils/type_guards";
6
+ import { resolveAdminConfigAddress } from "./admin_config";
7
+ import { processAssociatedTokenAccountPair } from "../utils/ata";
8
+ import { generateBinArrayIndicesForSwap, generateBinArrayIndicesForSync, } from "../utils/bin_location";
9
+ import { resolveTransferFee } from "../utils/transfer_fee";
10
+ import { MAX_BIN_ARRAYS_PER_SWAP, MAX_BIN_ARRAYS_PER_SYNC, } from "../utils/constants";
11
+ import { Position, openPosition, closePosition, findPositionAddress, findAllPositionAddresses, } from "./position";
12
+ import { findAllBinArrayAddresses } from "./bin_array";
13
+ export class Pool {
14
+ #programAddress;
15
+ #rpc;
16
+ #account;
17
+ #mintX;
18
+ #mintY;
19
+ constructor(rpc, account, mintX, mintY, programAddress) {
20
+ this.#rpc = rpc;
21
+ this.#account = account;
22
+ this.#mintX = mintX;
23
+ this.#mintY = mintY;
24
+ this.#programAddress = programAddress;
25
+ }
26
+ get rpc() { return this.#rpc; }
27
+ get programAddress() { return this.#programAddress; }
28
+ get address() { return this.#account.address; }
29
+ get data() { return this.#account.data; }
30
+ get activeBinId() { return this.data.activeBinId; }
31
+ get tokenMintX() { return this.data.tokenMintX; }
32
+ get tokenMintY() { return this.data.tokenMintY; }
33
+ get tokenVaultX() { return this.data.tokenVaultX; }
34
+ get tokenVaultY() { return this.data.tokenVaultY; }
35
+ get tokenProgramX() { return this.#mintX.programAddress; }
36
+ get tokenProgramY() { return this.#mintY.programAddress; }
37
+ async refresh(arg) {
38
+ if (!isAccount(arg)) {
39
+ arg = await generated.fetchPool(this.#rpc, this.address, arg);
40
+ }
41
+ this.#account = arg;
42
+ }
43
+ async getPosition(address, config) {
44
+ return await Position.load(this, address, config);
45
+ }
46
+ async getPositionByPositionMint(positionMint, config) {
47
+ const address = await findPositionAddress({ positionMint }, { programAddress: this.#programAddress });
48
+ return await Position.load(this, address, config);
49
+ }
50
+ async getAllPositionsByPositionMints(positionMints, config) {
51
+ const addresses = await findAllPositionAddresses({ positionMints }, { programAddress: this.#programAddress });
52
+ return await Position.loadAll(this, addresses, config);
53
+ }
54
+ async openPosition(owner, positionMint, { lowerBinId, upperBinId }) {
55
+ return await openPosition(this.#rpc, { owner, positionMint, pool: this.address, lowerBinId, upperBinId }, { programAddress: this.#programAddress });
56
+ }
57
+ async closePosition(owner, positionMint) {
58
+ return await closePosition({ owner, positionMint }, { programAddress: this.#programAddress });
59
+ }
60
+ async swap(user, { xToY, amountIn, minAmountOut, }) {
61
+ const indices = generateBinArrayIndicesForSwap(this.activeBinId, xToY, MAX_BIN_ARRAYS_PER_SWAP);
62
+ const [binArrayAddresses, { ataX: tokenUserAccountX, ataY: tokenUserAccountY, preInstructions, postInstructions, }] = await Promise.all([
63
+ findAllBinArrayAddresses({ pool: this.address, indices }, { programAddress: this.#programAddress }),
64
+ processAssociatedTokenAccountPair({
65
+ owner: user,
66
+ tokenMintX: this.tokenMintX,
67
+ tokenMintY: this.tokenMintY,
68
+ tokenProgramX: this.tokenProgramX,
69
+ tokenProgramY: this.tokenProgramY,
70
+ amountX: xToY ? amountIn : undefined,
71
+ amountY: xToY ? undefined : amountIn,
72
+ }),
73
+ ]);
74
+ const swapIx = generated.getSwapInstruction({
75
+ user,
76
+ pool: this.address,
77
+ tokenMintX: this.tokenMintX,
78
+ tokenMintY: this.tokenMintY,
79
+ tokenUserAccountX,
80
+ tokenUserAccountY,
81
+ tokenVaultX: this.tokenVaultX,
82
+ tokenVaultY: this.tokenVaultY,
83
+ tokenProgramX: this.tokenProgramX,
84
+ tokenProgramY: this.tokenProgramY,
85
+ amountIn,
86
+ minAmountOut,
87
+ xToY,
88
+ }, { programAddress: this.#programAddress });
89
+ const remainingAccounts = binArrayAddresses.map(address => ({ address, role: AccountRole.WRITABLE }));
90
+ const swapIxWithBinArrays = { ...swapIx, accounts: [...swapIx.accounts, ...remainingAccounts] };
91
+ return [...preInstructions, swapIxWithBinArrays, ...postInstructions];
92
+ }
93
+ async quote({ xToY, amountIn, slippageToleranceBps, }) {
94
+ const indices = generateBinArrayIndicesForSwap(this.activeBinId, xToY, MAX_BIN_ARRAYS_PER_SWAP);
95
+ const binArrayAddresses = await findAllBinArrayAddresses({ pool: this.address, indices }, { programAddress: this.#programAddress });
96
+ const [maybeBinArrays, { epoch }] = await Promise.all([
97
+ generated.fetchAllMaybeBinArray(this.#rpc, binArrayAddresses),
98
+ this.#rpc.getEpochInfo().send(),
99
+ ]);
100
+ const binArrays = maybeBinArrays.map(maybeBinArray => maybeBinArray.exists ? maybeBinArray.data : undefined);
101
+ const transferFeeX = resolveTransferFee(this.#mintX.data, epoch);
102
+ const transferFeeY = resolveTransferFee(this.#mintY.data, epoch);
103
+ return await quote({
104
+ amountIn,
105
+ xToY,
106
+ slippageToleranceBps,
107
+ now: BigInt(Math.floor(Date.now() / 1000)),
108
+ poolState: this.data,
109
+ inputTransferFee: xToY ? transferFeeX : transferFeeY,
110
+ outputTransferFee: xToY ? transferFeeY : transferFeeX,
111
+ binArrays,
112
+ });
113
+ }
114
+ async quoteAndSwap(user, { xToY, amountIn, slippageToleranceBps, }) {
115
+ const quoteOutput = await this.quote({ xToY, amountIn, slippageToleranceBps });
116
+ const instructions = await this.swap(user, { xToY, amountIn, minAmountOut: quoteOutput.minAmountOut });
117
+ return { quoteOutput, instructions };
118
+ }
119
+ async sync(user, desiredBinId) {
120
+ const indices = generateBinArrayIndicesForSync(this.activeBinId, desiredBinId, MAX_BIN_ARRAYS_PER_SYNC);
121
+ const binArrayAddresses = await findAllBinArrayAddresses({ pool: this.address, indices }, { programAddress: this.#programAddress });
122
+ const syncPoolIx = generated.getSyncPoolInstruction({ user, pool: this.address, desiredBinId }, { programAddress: this.#programAddress });
123
+ const remainingAccounts = binArrayAddresses.map(address => ({ address, role: AccountRole.READONLY }));
124
+ return [{ ...syncPoolIx, accounts: [...syncPoolIx.accounts, ...remainingAccounts] }];
125
+ }
126
+ async setDynamicFeeConfig(authority, dynamicFeeConfig) {
127
+ const adminConfig = await resolveAdminConfigAddress(this.#programAddress);
128
+ return await generated.getSetPoolDynamicFeeConfigInstructionAsync({ authority, pool: this.address, config: dynamicFeeConfig, adminConfig }, { programAddress: this.#programAddress });
129
+ }
130
+ async setProtocolShare(authority, protocolShare) {
131
+ const adminConfig = await resolveAdminConfigAddress(this.#programAddress);
132
+ return await generated.getSetPoolProtocolShareInstructionAsync({ authority, pool: this.address, protocolShare, adminConfig }, { programAddress: this.#programAddress });
133
+ }
134
+ async claimProtocolFee(authority) {
135
+ const [adminConfig, { ataX: tokenAdminAccountX, ataY: tokenAdminAccountY, preInstructions, postInstructions, }] = await Promise.all([
136
+ resolveAdminConfigAddress(this.#programAddress),
137
+ processAssociatedTokenAccountPair({
138
+ owner: authority,
139
+ tokenMintX: this.tokenMintX,
140
+ tokenMintY: this.tokenMintY,
141
+ tokenProgramX: this.tokenProgramX,
142
+ tokenProgramY: this.tokenProgramY,
143
+ }),
144
+ ]);
145
+ const claimProtocolFeeIx = await generated.getClaimProtocolFeeInstructionAsync({
146
+ authority,
147
+ pool: this.address,
148
+ adminConfig,
149
+ tokenMintX: this.tokenMintX,
150
+ tokenMintY: this.tokenMintY,
151
+ tokenVaultX: this.tokenVaultX,
152
+ tokenVaultY: this.tokenVaultY,
153
+ tokenAdminAccountX,
154
+ tokenAdminAccountY,
155
+ tokenProgramX: this.tokenProgramX,
156
+ tokenProgramY: this.tokenProgramY,
157
+ }, { programAddress: this.#programAddress });
158
+ return [...preInstructions, claimProtocolFeeIx, ...postInstructions];
159
+ }
160
+ static async load(rpc, address, programAddress, config) {
161
+ const pool = await generated.fetchPool(rpc, address, config);
162
+ const { tokenMintX, tokenMintY } = pool.data;
163
+ const [mintX, mintY] = await fetchAllMint(rpc, [tokenMintX, tokenMintY], config);
164
+ return new Pool(rpc, pool, mintX, mintY, programAddress);
165
+ }
166
+ }
167
+ export async function findPoolAddress(seeds, config) {
168
+ const [address] = await generated.findPoolPda(seeds, config);
169
+ return address;
170
+ }
171
+ export async function createPool({ authority, binStep, feeRate, protocolShare, activeBinId, tokenMintX, tokenMintY, tokenProgramX, tokenProgramY, }, config) {
172
+ const [pool, adminConfig] = await Promise.all([
173
+ findPoolAddress({ tokenMintX, tokenMintY, binStep, feeRate }, config),
174
+ resolveAdminConfigAddress(config.programAddress),
175
+ ]);
176
+ return await generated.getCreatePoolInstructionAsync({
177
+ authority,
178
+ pool,
179
+ adminConfig,
180
+ binStep,
181
+ feeRate,
182
+ protocolShare,
183
+ activeBinId,
184
+ tokenMintX,
185
+ tokenMintY,
186
+ tokenProgramX,
187
+ tokenProgramY,
188
+ }, config);
189
+ }
@@ -0,0 +1,51 @@
1
+ import { createSolanaRpc, type Address, type Account, type Instruction, type TransactionSigner, type FetchAccountsConfig } from "@solana/kit";
2
+ import { generated } from "..";
3
+ import { type BinIdRange } from "../utils/bin_location";
4
+ import { Pool } from "./pool";
5
+ import { type ProgramConfig } from "./types";
6
+ export declare class Position {
7
+ #private;
8
+ private constructor();
9
+ get address(): Address<string>;
10
+ get data(): generated.Position;
11
+ get positionMint(): Address;
12
+ get binArrayAddresses(): {
13
+ lowerBinArray: Address;
14
+ upperBinArray?: Address | undefined;
15
+ };
16
+ refresh(data: [Account<generated.Position>, Account<generated.BinArray>[]]): Promise<void>;
17
+ refresh(config?: FetchAccountsConfig): Promise<void>;
18
+ depositByWeight(owner: TransactionSigner, { amountX, amountY, lowerBinId, binWeights, maxActiveBinSlippage, distributionMode, }: {
19
+ amountX: bigint;
20
+ amountY: bigint;
21
+ lowerBinId: number;
22
+ binWeights: number[];
23
+ maxActiveBinSlippage: number;
24
+ distributionMode: generated.DistributionMode;
25
+ }): Promise<Instruction[]>;
26
+ claimFee(owner: TransactionSigner, range?: BinIdRange): Promise<Instruction[]>;
27
+ withdraw(owner: TransactionSigner, bpsToRemove: number, range?: BinIdRange): Promise<Instruction[]>;
28
+ close(owner: TransactionSigner): Promise<Instruction>;
29
+ static load(pool: Pool, address: Address, config?: FetchAccountsConfig): Promise<Position>;
30
+ static loadAll(pool: Pool, addresses: Address[], config?: FetchAccountsConfig): Promise<Position[]>;
31
+ static refreshAll(rpc: ReturnType<typeof createSolanaRpc>, positions: Position[], config?: FetchAccountsConfig): Promise<void>;
32
+ }
33
+ export declare function findPositionAddress(seeds: {
34
+ positionMint: Address;
35
+ }, config: ProgramConfig): Promise<Address>;
36
+ export declare function findAllPositionAddresses({ positionMints }: {
37
+ positionMints: Address[];
38
+ }, config: ProgramConfig): Promise<Address[]>;
39
+ export declare function openPosition(rpc: ReturnType<typeof createSolanaRpc>, { owner, positionMint, pool, lowerBinId, upperBinId, }: {
40
+ owner: TransactionSigner;
41
+ positionMint: TransactionSigner;
42
+ pool: Address;
43
+ lowerBinId: number;
44
+ upperBinId: number;
45
+ }, config: ProgramConfig): Promise<Instruction[]>;
46
+ export declare function closePosition({ owner, positionMint, position, }: {
47
+ owner: TransactionSigner;
48
+ positionMint: Address;
49
+ position?: Address;
50
+ }, config: ProgramConfig): Promise<Instruction>;
51
+ //# sourceMappingURL=position.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../src/entities/position.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,248 @@
1
+ import { decodeAccount, assertAccountExists, fetchEncodedAccounts, } from "@solana/kit";
2
+ import { generated } from "..";
3
+ import { findPositionTokenAccount, processAssociatedTokenAccountPair, } from "../utils/ata";
4
+ import { getBinArrayIndex, getPositionBinArrayIndices, } from "../utils/bin_location";
5
+ import { assertRangeWithinRange, assertPositionBelongsToPool, } from "../utils/assert";
6
+ import { isUndefined } from "../utils/type_guards";
7
+ import { fetchInChunks } from "../utils/chunk";
8
+ import { resolveAdminConfigAddress } from "./admin_config";
9
+ import { MAX_ACCOUNTS_PER_RPC_BATCH } from "../utils/constants";
10
+ import { BinArray, decodeAllBinArrays, createAllBinArrays, fetchAllBinArraysChunked, } from "./bin_array";
11
+ export class Position {
12
+ #pool;
13
+ #account;
14
+ #binArrays;
15
+ constructor(pool, account, binArrays) {
16
+ this.#pool = pool;
17
+ this.#account = account;
18
+ this.#binArrays = binArrays;
19
+ }
20
+ get address() { return this.#account.address; }
21
+ get data() { return this.#account.data; }
22
+ get positionMint() { return this.data.positionMint; }
23
+ get binArrayAddresses() {
24
+ const lowerBinArray = this.#binArrays[0].address;
25
+ const upperBinArray = this.#binArrays.length > 1 ? this.#binArrays[1].address : undefined;
26
+ return { lowerBinArray, upperBinArray };
27
+ }
28
+ async refresh(arg) {
29
+ if (!Array.isArray(arg)) {
30
+ arg = await fetchPositionWithBinArrays(this.#pool.rpc, this.address, this.#binArrays.map(b => b.address), arg);
31
+ }
32
+ const [position, binArrays] = arg;
33
+ this.#account = position;
34
+ this.#binArrays.forEach((b, i) => b.refresh(binArrays[i]));
35
+ }
36
+ async depositByWeight(owner, { amountX, amountY, lowerBinId, binWeights, maxActiveBinSlippage, distributionMode, }) {
37
+ const upperBinId = lowerBinId + binWeights.length - 1;
38
+ assertRangeWithinRange({ lowerBinId, upperBinId }, this.data);
39
+ const [positionTokenAccount, { ataX: tokenOwnerAccountX, ataY: tokenOwnerAccountY, preInstructions, postInstructions }] = await Promise.all([
40
+ findPositionTokenAccount({ owner: owner.address, positionMint: this.data.positionMint }),
41
+ processAssociatedTokenAccountPair({
42
+ owner,
43
+ tokenMintX: this.#pool.tokenMintX,
44
+ tokenMintY: this.#pool.tokenMintY,
45
+ tokenProgramX: this.#pool.tokenProgramX,
46
+ tokenProgramY: this.#pool.tokenProgramY,
47
+ amountX,
48
+ amountY,
49
+ }),
50
+ ]);
51
+ const { lowerBinArray, upperBinArray } = this.binArrayAddresses;
52
+ const depositByWeightIx = generated.getDepositByWeightInstruction({
53
+ owner,
54
+ pool: this.#pool.address,
55
+ position: this.address,
56
+ positionTokenAccount,
57
+ tokenMintX: this.#pool.tokenMintX,
58
+ tokenMintY: this.#pool.tokenMintY,
59
+ tokenOwnerAccountX,
60
+ tokenOwnerAccountY,
61
+ tokenVaultX: this.#pool.tokenVaultX,
62
+ tokenVaultY: this.#pool.tokenVaultY,
63
+ tokenProgramX: this.#pool.tokenProgramX,
64
+ tokenProgramY: this.#pool.tokenProgramY,
65
+ lowerBinArray,
66
+ upperBinArray,
67
+ amountX,
68
+ amountY,
69
+ activeBinId: this.#pool.activeBinId,
70
+ maxActiveBinSlippage,
71
+ distributionMode,
72
+ lowerBinId,
73
+ binWeights,
74
+ }, {
75
+ programAddress: this.#pool.programAddress
76
+ });
77
+ return [...preInstructions, depositByWeightIx, ...postInstructions];
78
+ }
79
+ async claimFee(owner, range) {
80
+ const { lowerBinId, upperBinId } = range ?? this.data;
81
+ assertRangeWithinRange({ lowerBinId, upperBinId }, this.data);
82
+ const [positionTokenAccount, { ataX: tokenOwnerAccountX, ataY: tokenOwnerAccountY, preInstructions, postInstructions }] = await Promise.all([
83
+ findPositionTokenAccount({ owner: owner.address, positionMint: this.data.positionMint }),
84
+ processAssociatedTokenAccountPair({
85
+ owner,
86
+ tokenMintX: this.#pool.tokenMintX,
87
+ tokenMintY: this.#pool.tokenMintY,
88
+ tokenProgramX: this.#pool.tokenProgramX,
89
+ tokenProgramY: this.#pool.tokenProgramY,
90
+ }),
91
+ ]);
92
+ const { lowerBinArray, upperBinArray } = this.binArrayAddresses;
93
+ const claimFeeIx = generated.getClaimFeeInstruction({
94
+ owner,
95
+ pool: this.#pool.address,
96
+ position: this.address,
97
+ positionTokenAccount,
98
+ tokenMintX: this.#pool.tokenMintX,
99
+ tokenMintY: this.#pool.tokenMintY,
100
+ tokenOwnerAccountX,
101
+ tokenOwnerAccountY,
102
+ tokenVaultX: this.#pool.tokenVaultX,
103
+ tokenVaultY: this.#pool.tokenVaultY,
104
+ tokenProgramX: this.#pool.tokenProgramX,
105
+ tokenProgramY: this.#pool.tokenProgramY,
106
+ lowerBinArray,
107
+ upperBinArray,
108
+ lowerBinId,
109
+ upperBinId,
110
+ }, {
111
+ programAddress: this.#pool.programAddress
112
+ });
113
+ return [...preInstructions, claimFeeIx, ...postInstructions];
114
+ }
115
+ async withdraw(owner, bpsToRemove, range) {
116
+ const { lowerBinId, upperBinId } = range ?? this.data;
117
+ assertRangeWithinRange({ lowerBinId, upperBinId }, this.data);
118
+ const [positionTokenAccount, { ataX: tokenOwnerAccountX, ataY: tokenOwnerAccountY, preInstructions, postInstructions }] = await Promise.all([
119
+ findPositionTokenAccount({ owner: owner.address, positionMint: this.data.positionMint }),
120
+ processAssociatedTokenAccountPair({
121
+ owner,
122
+ tokenMintX: this.#pool.tokenMintX,
123
+ tokenMintY: this.#pool.tokenMintY,
124
+ tokenProgramX: this.#pool.tokenProgramX,
125
+ tokenProgramY: this.#pool.tokenProgramY,
126
+ }),
127
+ ]);
128
+ const { lowerBinArray, upperBinArray } = this.binArrayAddresses;
129
+ const withdrawIx = generated.getWithdrawInstruction({
130
+ owner,
131
+ pool: this.#pool.address,
132
+ position: this.address,
133
+ positionTokenAccount,
134
+ tokenMintX: this.#pool.tokenMintX,
135
+ tokenMintY: this.#pool.tokenMintY,
136
+ tokenOwnerAccountX,
137
+ tokenOwnerAccountY,
138
+ tokenVaultX: this.#pool.tokenVaultX,
139
+ tokenVaultY: this.#pool.tokenVaultY,
140
+ tokenProgramX: this.#pool.tokenProgramX,
141
+ tokenProgramY: this.#pool.tokenProgramY,
142
+ lowerBinArray,
143
+ upperBinArray,
144
+ lowerBinId,
145
+ upperBinId,
146
+ bpsToRemove,
147
+ }, {
148
+ programAddress: this.#pool.programAddress
149
+ });
150
+ return [...preInstructions, withdrawIx, ...postInstructions];
151
+ }
152
+ async close(owner) {
153
+ return await closePosition({ owner, positionMint: this.data.positionMint, position: this.address }, { programAddress: this.#pool.programAddress });
154
+ }
155
+ static async load(pool, address, config) {
156
+ const position = await generated.fetchPosition(pool.rpc, address, config);
157
+ assertPositionBelongsToPool(position.data, pool);
158
+ const { lowerBinId, upperBinId } = position.data;
159
+ const indices = [...new Set([
160
+ getBinArrayIndex(lowerBinId),
161
+ getBinArrayIndex(upperBinId),
162
+ ])];
163
+ const binArrays = await BinArray.loadAll(pool.rpc, pool.address, indices, pool.programAddress, config);
164
+ return new Position(pool, position, binArrays);
165
+ }
166
+ static async loadAll(pool, addresses, config) {
167
+ const positions = await fetchAllPositionsChunked(pool.rpc, addresses, config);
168
+ const indicesByPosition = positions.map(position => [...new Set([getBinArrayIndex(position.data.lowerBinId), getBinArrayIndex(position.data.upperBinId)])]);
169
+ const binArrays = await BinArray.loadAll(pool.rpc, pool.address, [...new Set(indicesByPosition.flat())], pool.programAddress, config);
170
+ const binArrayByIndex = new Map(binArrays.map(binArray => [binArray.data.index, binArray]));
171
+ return positions.map((position, i) => {
172
+ assertPositionBelongsToPool(position.data, pool);
173
+ const positionBinArrays = indicesByPosition[i].map(index => binArrayByIndex.get(index));
174
+ return new Position(pool, position, positionBinArrays);
175
+ });
176
+ }
177
+ static async refreshAll(rpc, positions, config) {
178
+ if (positions.length === 0) {
179
+ return;
180
+ }
181
+ const addresses = positions.map(position => position.address);
182
+ const positionAccounts = await fetchAllPositionsChunked(rpc, addresses, config);
183
+ const binArrayAddresses = [...new Set(positions.flatMap(position => position.#binArrays.map(binArray => binArray.address)))];
184
+ const binArrayAccounts = await fetchAllBinArraysChunked(rpc, binArrayAddresses, config);
185
+ const binArrayByAddress = new Map(binArrayAccounts.map(account => [account.address, account]));
186
+ await Promise.all(positions.map((position, i) => position.refresh([
187
+ positionAccounts[i],
188
+ position.#binArrays.map(binArray => binArrayByAddress.get(binArray.address)),
189
+ ])));
190
+ }
191
+ }
192
+ export async function findPositionAddress(seeds, config) {
193
+ const [address] = await generated.findPositionPda(seeds, config);
194
+ return address;
195
+ }
196
+ export async function findAllPositionAddresses({ positionMints }, config) {
197
+ return await Promise.all(positionMints.map(positionMint => findPositionAddress({ positionMint }, config)));
198
+ }
199
+ export async function openPosition(rpc, { owner, positionMint, pool, lowerBinId, upperBinId, }, config) {
200
+ const [adminConfig, position] = await Promise.all([
201
+ resolveAdminConfigAddress(config.programAddress),
202
+ findPositionAddress({ positionMint: positionMint.address }, config),
203
+ ]);
204
+ const { metadataUpdateAuthority } = (await generated.fetchAdminConfig(rpc, adminConfig)).data;
205
+ const { lowerBinArrayIndex, upperBinArrayIndex } = getPositionBinArrayIndices(lowerBinId, upperBinId);
206
+ const indices = isUndefined(upperBinArrayIndex) ? [lowerBinArrayIndex] : [lowerBinArrayIndex, upperBinArrayIndex];
207
+ const createBinArraysIxs = await createAllBinArrays({ payer: owner, pool, indices, idempotent: true }, config);
208
+ const openPositionIx = await generated.getOpenPositionInstructionAsync({
209
+ pool,
210
+ lowerBinId,
211
+ upperBinId,
212
+ owner,
213
+ positionMint,
214
+ position,
215
+ adminConfig,
216
+ metadataUpdateAuthority,
217
+ }, config);
218
+ return [...createBinArraysIxs, openPositionIx];
219
+ }
220
+ export async function closePosition({ owner, positionMint, position, }, config) {
221
+ const [resolvedPosition, positionTokenAccount] = await Promise.all([
222
+ position ?? findPositionAddress({ positionMint }, config),
223
+ findPositionTokenAccount({ owner: owner.address, positionMint }),
224
+ ]);
225
+ return await generated.getClosePositionInstructionAsync({
226
+ owner,
227
+ position: resolvedPosition,
228
+ positionMint,
229
+ positionTokenAccount,
230
+ }, config);
231
+ }
232
+ async function fetchPositionWithBinArrays(rpc, positionAddress, binArrayAddresses, config) {
233
+ const [positionAccount, ...binArrayAccounts] = await fetchEncodedAccounts(rpc, [
234
+ positionAddress, ...binArrayAddresses,
235
+ ], config);
236
+ return [
237
+ decodePosition(positionAccount),
238
+ decodeAllBinArrays(binArrayAccounts)
239
+ ];
240
+ }
241
+ async function fetchAllPositionsChunked(rpc, addresses, config) {
242
+ return await fetchInChunks(addresses, MAX_ACCOUNTS_PER_RPC_BATCH, chunkAddresses => generated.fetchAllPosition(rpc, chunkAddresses, config));
243
+ }
244
+ const positionDecoder = generated.getPositionDecoder();
245
+ function decodePosition(maybeAccount) {
246
+ assertAccountExists(maybeAccount);
247
+ return decodeAccount(maybeAccount, positionDecoder);
248
+ }
@@ -0,0 +1,7 @@
1
+ import { createSolanaRpc, type Address, type FetchAccountsConfig } from "@solana/kit";
2
+ export type PositionPoolEntry = {
3
+ address: Address;
4
+ pool: Address;
5
+ };
6
+ export declare function fetchAllMaybePositionPoolsChunked(rpc: ReturnType<typeof createSolanaRpc>, addresses: Address[], config?: FetchAccountsConfig): Promise<(PositionPoolEntry | undefined)[]>;
7
+ //# sourceMappingURL=position_pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position_pool.d.ts","sourceRoot":"","sources":["../../src/entities/position_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAGf,KAAK,OAAO,EAEZ,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AAIrB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EACvC,SAAS,EAAE,OAAO,EAAE,EACpB,MAAM,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,CAAC,iBAAiB,GAAG,SAAS,CAAC,EAAE,CAAC,CAM5C"}