@picon-finance/dlmm-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +48 -0
- package/dist/actions/accept_admin_authority.d.ts +13 -0
- package/dist/actions/accept_admin_authority.d.ts.map +1 -0
- package/dist/actions/accept_admin_authority.js +7 -0
- package/dist/actions/claim_fee.d.ts +21 -0
- package/dist/actions/claim_fee.d.ts.map +1 -0
- package/dist/actions/claim_fee.js +40 -0
- package/dist/actions/claim_multiple_fees.d.ts +19 -0
- package/dist/actions/claim_multiple_fees.d.ts.map +1 -0
- package/dist/actions/claim_multiple_fees.js +81 -0
- package/dist/actions/claim_protocol_fee.d.ts +18 -0
- package/dist/actions/claim_protocol_fee.d.ts.map +1 -0
- package/dist/actions/claim_protocol_fee.js +33 -0
- package/dist/actions/close_position.d.ts +14 -0
- package/dist/actions/close_position.d.ts.map +1 -0
- package/dist/actions/close_position.js +14 -0
- package/dist/actions/create_admin_config.d.ts +15 -0
- package/dist/actions/create_admin_config.d.ts.map +1 -0
- package/dist/actions/create_admin_config.js +30 -0
- package/dist/actions/create_bin_array.d.ts +16 -0
- package/dist/actions/create_bin_array.d.ts.map +1 -0
- package/dist/actions/create_bin_array.js +10 -0
- package/dist/actions/create_pool.d.ts +21 -0
- package/dist/actions/create_pool.d.ts.map +1 -0
- package/dist/actions/create_pool.js +22 -0
- package/dist/actions/delete_bin_array.d.ts +16 -0
- package/dist/actions/delete_bin_array.d.ts.map +1 -0
- package/dist/actions/delete_bin_array.js +13 -0
- package/dist/actions/deposit_by_weight.d.ts +27 -0
- package/dist/actions/deposit_by_weight.d.ts.map +1 -0
- package/dist/actions/deposit_by_weight.js +52 -0
- package/dist/actions/get_admin_config.d.ts +4 -0
- package/dist/actions/get_admin_config.d.ts.map +1 -0
- package/dist/actions/get_admin_config.js +7 -0
- package/dist/actions/get_bin_arrays_by_indices.d.ts +5 -0
- package/dist/actions/get_bin_arrays_by_indices.d.ts.map +1 -0
- package/dist/actions/get_bin_arrays_by_indices.js +6 -0
- package/dist/actions/get_pool.d.ts +4 -0
- package/dist/actions/get_pool.d.ts.map +1 -0
- package/dist/actions/get_pool.js +5 -0
- package/dist/actions/get_position.d.ts +4 -0
- package/dist/actions/get_position.d.ts.map +1 -0
- package/dist/actions/get_position.js +5 -0
- package/dist/actions/get_position_by_position_mint.d.ts +4 -0
- package/dist/actions/get_position_by_position_mint.d.ts.map +1 -0
- package/dist/actions/get_position_by_position_mint.js +6 -0
- package/dist/actions/get_positions_by_owner.d.ts +5 -0
- package/dist/actions/get_positions_by_owner.d.ts.map +1 -0
- package/dist/actions/get_positions_by_owner.js +33 -0
- package/dist/actions/get_positions_by_position_mints.d.ts +5 -0
- package/dist/actions/get_positions_by_position_mints.d.ts.map +1 -0
- package/dist/actions/get_positions_by_position_mints.js +9 -0
- package/dist/actions/helpers/build_swap_transaction_message.d.ts +22 -0
- package/dist/actions/helpers/build_swap_transaction_message.d.ts.map +1 -0
- package/dist/actions/helpers/build_swap_transaction_message.js +50 -0
- package/dist/actions/helpers/build_transaction_message.d.ts +20 -0
- package/dist/actions/helpers/build_transaction_message.d.ts.map +1 -0
- package/dist/actions/helpers/build_transaction_message.js +5 -0
- package/dist/actions/helpers/index.d.ts +8 -0
- package/dist/actions/helpers/index.d.ts.map +1 -0
- package/dist/actions/helpers/index.js +7 -0
- package/dist/actions/helpers/resolve_active_bin_and_mints.d.ts +12 -0
- package/dist/actions/helpers/resolve_active_bin_and_mints.d.ts.map +1 -0
- package/dist/actions/helpers/resolve_active_bin_and_mints.js +13 -0
- package/dist/actions/helpers/resolve_admin_config_address.d.ts +3 -0
- package/dist/actions/helpers/resolve_admin_config_address.d.ts.map +1 -0
- package/dist/actions/helpers/resolve_admin_config_address.js +9 -0
- package/dist/actions/helpers/resolve_mint_info.d.ts +10 -0
- package/dist/actions/helpers/resolve_mint_info.d.ts.map +1 -0
- package/dist/actions/helpers/resolve_mint_info.js +20 -0
- package/dist/actions/helpers/resolve_position_range.d.ts +12 -0
- package/dist/actions/helpers/resolve_position_range.d.ts.map +1 -0
- package/dist/actions/helpers/resolve_position_range.js +12 -0
- package/dist/actions/helpers/resolve_token_mints_and_programs.d.ts +15 -0
- package/dist/actions/helpers/resolve_token_mints_and_programs.d.ts.map +1 -0
- package/dist/actions/helpers/resolve_token_mints_and_programs.js +29 -0
- package/dist/actions/index.d.ts +31 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +28 -0
- package/dist/actions/is_admin_config_active.d.ts +4 -0
- package/dist/actions/is_admin_config_active.d.ts.map +1 -0
- package/dist/actions/is_admin_config_active.js +7 -0
- package/dist/actions/on_event.d.ts +11 -0
- package/dist/actions/on_event.d.ts.map +1 -0
- package/dist/actions/on_event.js +50 -0
- package/dist/actions/open_position.d.ts +17 -0
- package/dist/actions/open_position.d.ts.map +1 -0
- package/dist/actions/open_position.js +31 -0
- package/dist/actions/quote.d.ts +13 -0
- package/dist/actions/quote.d.ts.map +1 -0
- package/dist/actions/quote.js +43 -0
- package/dist/actions/set_metadata_update_authority.d.ts +14 -0
- package/dist/actions/set_metadata_update_authority.d.ts.map +1 -0
- package/dist/actions/set_metadata_update_authority.js +7 -0
- package/dist/actions/set_pool_dynamic_fee_config.d.ts +16 -0
- package/dist/actions/set_pool_dynamic_fee_config.d.ts.map +1 -0
- package/dist/actions/set_pool_dynamic_fee_config.js +7 -0
- package/dist/actions/set_pool_protocol_share.d.ts +15 -0
- package/dist/actions/set_pool_protocol_share.d.ts.map +1 -0
- package/dist/actions/set_pool_protocol_share.js +7 -0
- package/dist/actions/swap.d.ts +22 -0
- package/dist/actions/swap.d.ts.map +1 -0
- package/dist/actions/swap.js +19 -0
- package/dist/actions/sync_pool.d.ts +15 -0
- package/dist/actions/sync_pool.d.ts.map +1 -0
- package/dist/actions/sync_pool.js +26 -0
- package/dist/actions/transfer_admin_authority.d.ts +14 -0
- package/dist/actions/transfer_admin_authority.d.ts.map +1 -0
- package/dist/actions/transfer_admin_authority.js +7 -0
- package/dist/actions/withdraw.d.ts +22 -0
- package/dist/actions/withdraw.d.ts.map +1 -0
- package/dist/actions/withdraw.js +41 -0
- package/dist/events.d.ts +93 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +166 -0
- package/dist/generated/accounts/adminConfig.d.ts +35 -0
- package/dist/generated/accounts/adminConfig.d.ts.map +1 -0
- package/dist/generated/accounts/adminConfig.js +60 -0
- package/dist/generated/accounts/binArray.d.ts +40 -0
- package/dist/generated/accounts/binArray.d.ts.map +1 -0
- package/dist/generated/accounts/binArray.js +65 -0
- package/dist/generated/accounts/index.d.ts +12 -0
- package/dist/generated/accounts/index.d.ts.map +1 -0
- package/dist/generated/accounts/index.js +11 -0
- package/dist/generated/accounts/pool.d.ts +54 -0
- package/dist/generated/accounts/pool.d.ts.map +1 -0
- package/dist/generated/accounts/pool.js +79 -0
- package/dist/generated/accounts/position.d.ts +42 -0
- package/dist/generated/accounts/position.d.ts.map +1 -0
- package/dist/generated/accounts/position.js +67 -0
- package/dist/generated/errors/index.d.ts +9 -0
- package/dist/generated/errors/index.d.ts.map +1 -0
- package/dist/generated/errors/index.js +8 -0
- package/dist/generated/errors/piconDlmm.d.ts +58 -0
- package/dist/generated/errors/piconDlmm.d.ts.map +1 -0
- package/dist/generated/errors/piconDlmm.js +80 -0
- package/dist/generated/index.d.ts +14 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +13 -0
- package/dist/generated/instructions/acceptAdminAuthority.d.ts +47 -0
- package/dist/generated/instructions/acceptAdminAuthority.d.ts.map +1 -0
- package/dist/generated/instructions/acceptAdminAuthority.js +99 -0
- package/dist/generated/instructions/claimFee.d.ts +83 -0
- package/dist/generated/instructions/claimFee.d.ts.map +1 -0
- package/dist/generated/instructions/claimFee.js +127 -0
- package/dist/generated/instructions/claimProtocolFee.d.ts +83 -0
- package/dist/generated/instructions/claimProtocolFee.d.ts.map +1 -0
- package/dist/generated/instructions/claimProtocolFee.js +147 -0
- package/dist/generated/instructions/closePosition.d.ts +59 -0
- package/dist/generated/instructions/closePosition.d.ts.map +1 -0
- package/dist/generated/instructions/closePosition.js +124 -0
- package/dist/generated/instructions/createAdminConfig.d.ts +68 -0
- package/dist/generated/instructions/createAdminConfig.d.ts.map +1 -0
- package/dist/generated/instructions/createAdminConfig.js +132 -0
- package/dist/generated/instructions/createBinArray.d.ts +64 -0
- package/dist/generated/instructions/createBinArray.d.ts.map +1 -0
- package/dist/generated/instructions/createBinArray.js +122 -0
- package/dist/generated/instructions/createPool.d.ts +100 -0
- package/dist/generated/instructions/createPool.d.ts.map +1 -0
- package/dist/generated/instructions/createPool.js +202 -0
- package/dist/generated/instructions/deleteBinArray.d.ts +68 -0
- package/dist/generated/instructions/deleteBinArray.d.ts.map +1 -0
- package/dist/generated/instructions/deleteBinArray.js +130 -0
- package/dist/generated/instructions/depositByWeight.d.ts +99 -0
- package/dist/generated/instructions/depositByWeight.d.ts.map +1 -0
- package/dist/generated/instructions/depositByWeight.js +136 -0
- package/dist/generated/instructions/index.d.ts +25 -0
- package/dist/generated/instructions/index.d.ts.map +1 -0
- package/dist/generated/instructions/index.js +24 -0
- package/dist/generated/instructions/openPosition.d.ts +88 -0
- package/dist/generated/instructions/openPosition.d.ts.map +1 -0
- package/dist/generated/instructions/openPosition.js +200 -0
- package/dist/generated/instructions/setMetadataUpdateAuthority.d.ts +52 -0
- package/dist/generated/instructions/setMetadataUpdateAuthority.d.ts.map +1 -0
- package/dist/generated/instructions/setMetadataUpdateAuthority.js +98 -0
- package/dist/generated/instructions/setPoolDynamicFeeConfig.d.ts +57 -0
- package/dist/generated/instructions/setPoolDynamicFeeConfig.d.ts.map +1 -0
- package/dist/generated/instructions/setPoolDynamicFeeConfig.js +107 -0
- package/dist/generated/instructions/setPoolProtocolShare.d.ts +56 -0
- package/dist/generated/instructions/setPoolProtocolShare.d.ts.map +1 -0
- package/dist/generated/instructions/setPoolProtocolShare.js +106 -0
- package/dist/generated/instructions/swap.d.ts +74 -0
- package/dist/generated/instructions/swap.d.ts.map +1 -0
- package/dist/generated/instructions/swap.js +108 -0
- package/dist/generated/instructions/syncPool.d.ts +44 -0
- package/dist/generated/instructions/syncPool.d.ts.map +1 -0
- package/dist/generated/instructions/syncPool.js +71 -0
- package/dist/generated/instructions/transferAdminAuthority.d.ts +52 -0
- package/dist/generated/instructions/transferAdminAuthority.d.ts.map +1 -0
- package/dist/generated/instructions/transferAdminAuthority.js +98 -0
- package/dist/generated/instructions/withdraw.d.ts +86 -0
- package/dist/generated/instructions/withdraw.d.ts.map +1 -0
- package/dist/generated/instructions/withdraw.js +129 -0
- package/dist/generated/pdas/adminConfig.d.ts +12 -0
- package/dist/generated/pdas/adminConfig.d.ts.map +1 -0
- package/dist/generated/pdas/adminConfig.js +19 -0
- package/dist/generated/pdas/binArray.d.ts +16 -0
- package/dist/generated/pdas/binArray.d.ts.map +1 -0
- package/dist/generated/pdas/binArray.js +19 -0
- package/dist/generated/pdas/index.d.ts +12 -0
- package/dist/generated/pdas/index.d.ts.map +1 -0
- package/dist/generated/pdas/index.js +11 -0
- package/dist/generated/pdas/pool.d.ts +18 -0
- package/dist/generated/pdas/pool.d.ts.map +1 -0
- package/dist/generated/pdas/pool.js +21 -0
- package/dist/generated/pdas/position.d.ts +15 -0
- package/dist/generated/pdas/position.d.ts.map +1 -0
- package/dist/generated/pdas/position.js +18 -0
- package/dist/generated/programs/index.d.ts +9 -0
- package/dist/generated/programs/index.d.ts.map +1 -0
- package/dist/generated/programs/index.js +8 -0
- package/dist/generated/programs/piconDlmm.d.ts +126 -0
- package/dist/generated/programs/piconDlmm.d.ts.map +1 -0
- package/dist/generated/programs/piconDlmm.js +285 -0
- package/dist/generated/types/bin.d.ts +28 -0
- package/dist/generated/types/bin.d.ts.map +1 -0
- package/dist/generated/types/bin.js +31 -0
- package/dist/generated/types/distributionMode.d.ts +19 -0
- package/dist/generated/types/distributionMode.d.ts.map +1 -0
- package/dist/generated/types/distributionMode.js +24 -0
- package/dist/generated/types/dynamicFeeConfig.d.ts +29 -0
- package/dist/generated/types/dynamicFeeConfig.d.ts.map +1 -0
- package/dist/generated/types/dynamicFeeConfig.js +29 -0
- package/dist/generated/types/dynamicFeeState.d.ts +27 -0
- package/dist/generated/types/dynamicFeeState.d.ts.map +1 -0
- package/dist/generated/types/dynamicFeeState.js +30 -0
- package/dist/generated/types/feeState.d.ts +26 -0
- package/dist/generated/types/feeState.d.ts.map +1 -0
- package/dist/generated/types/feeState.js +29 -0
- package/dist/generated/types/index.d.ts +13 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/index.js +12 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/picon_dlmm.json +2378 -0
- package/dist/program_addresses.d.ts +4 -0
- package/dist/program_addresses.d.ts.map +1 -0
- package/dist/program_addresses.js +8 -0
- package/dist/quote/index.d.ts +4 -0
- package/dist/quote/index.d.ts.map +1 -0
- package/dist/quote/index.js +5 -0
- package/dist/quote/wasm-node/picon_dlmm_quote.d.ts +6 -0
- package/dist/quote/wasm-node/picon_dlmm_quote.d.ts.map +1 -0
- package/dist/quote/wasm-node/picon_dlmm_quote.js +398 -0
- package/dist/quote/wasm-node/picon_dlmm_quote_bg.wasm +0 -0
- package/dist/quote/wasm-node-loader.d.ts +4 -0
- package/dist/quote/wasm-node-loader.d.ts.map +1 -0
- package/dist/quote/wasm-node-loader.js +7 -0
- package/dist/quote/wasm-web/picon_dlmm_quote.d.ts +9 -0
- package/dist/quote/wasm-web/picon_dlmm_quote.d.ts.map +1 -0
- package/dist/quote/wasm-web/picon_dlmm_quote.js +486 -0
- package/dist/quote/wasm-web/picon_dlmm_quote_bg.wasm +0 -0
- package/dist/quote/wasm-web-loader.d.ts +4 -0
- package/dist/quote/wasm-web-loader.d.ts.map +1 -0
- package/dist/quote/wasm-web-loader.js +12 -0
- package/dist/utils/admin_config.d.ts +3 -0
- package/dist/utils/admin_config.d.ts.map +1 -0
- package/dist/utils/admin_config.js +4 -0
- package/dist/utils/ata.d.ts +49 -0
- package/dist/utils/ata.d.ts.map +1 -0
- package/dist/utils/ata.js +113 -0
- package/dist/utils/bin_array.d.ts +8 -0
- package/dist/utils/bin_array.d.ts.map +1 -0
- package/dist/utils/bin_array.js +29 -0
- package/dist/utils/bin_location.d.ts +11 -0
- package/dist/utils/bin_location.d.ts.map +1 -0
- package/dist/utils/bin_location.js +55 -0
- package/dist/utils/chunk.d.ts +2 -0
- package/dist/utils/chunk.d.ts.map +1 -0
- package/dist/utils/chunk.js +7 -0
- package/dist/utils/compute_budget.d.ts +11 -0
- package/dist/utils/compute_budget.d.ts.map +1 -0
- package/dist/utils/compute_budget.js +22 -0
- package/dist/utils/constants.d.ts +12 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +20 -0
- package/dist/utils/transfer_fee.d.ts +4 -0
- package/dist/utils/transfer_fee.d.ts.map +1 -0
- package/dist/utils/transfer_fee.js +21 -0
- package/dist/utils/type_guards.d.ts +2 -0
- package/dist/utils/type_guards.d.ts.map +1 -0
- package/dist/utils/type_guards.js +3 -0
- package/package.json +59 -0
- package/src/actions/accept_admin_authority.ts +17 -0
- package/src/actions/claim_fee.ts +84 -0
- package/src/actions/claim_multiple_fees.ts +123 -0
- package/src/actions/claim_protocol_fee.ts +68 -0
- package/src/actions/close_position.ts +21 -0
- package/src/actions/create_admin_config.ts +50 -0
- package/src/actions/create_bin_array.ts +30 -0
- package/src/actions/create_pool.ts +49 -0
- package/src/actions/delete_bin_array.ts +33 -0
- package/src/actions/deposit_by_weight.ts +107 -0
- package/src/actions/get_admin_config.ts +13 -0
- package/src/actions/get_bin_arrays_by_indices.ts +15 -0
- package/src/actions/get_pool.ts +8 -0
- package/src/actions/get_position.ts +8 -0
- package/src/actions/get_position_by_position_mint.ts +14 -0
- package/src/actions/get_positions_by_owner.ts +48 -0
- package/src/actions/get_positions_by_position_mints.ts +21 -0
- package/src/actions/helpers/build_swap_transaction_message.ts +86 -0
- package/src/actions/helpers/build_transaction_message.ts +45 -0
- package/src/actions/helpers/index.ts +7 -0
- package/src/actions/helpers/resolve_active_bin_and_mints.ts +21 -0
- package/src/actions/helpers/resolve_admin_config_address.ts +11 -0
- package/src/actions/helpers/resolve_mint_info.ts +36 -0
- package/src/actions/helpers/resolve_position_range.ts +21 -0
- package/src/actions/helpers/resolve_token_mints_and_programs.ts +56 -0
- package/src/actions/index.ts +34 -0
- package/src/actions/is_admin_config_active.ts +14 -0
- package/src/actions/on_event.ts +78 -0
- package/src/actions/open_position.ts +66 -0
- package/src/actions/quote.ts +70 -0
- package/src/actions/set_metadata_update_authority.ts +17 -0
- package/src/actions/set_pool_dynamic_fee_config.ts +17 -0
- package/src/actions/set_pool_protocol_share.ts +17 -0
- package/src/actions/swap.ts +56 -0
- package/src/actions/sync_pool.ts +35 -0
- package/src/actions/transfer_admin_authority.ts +17 -0
- package/src/actions/withdraw.ts +87 -0
- package/src/events.ts +279 -0
- package/src/generated/accounts/adminConfig.ts +147 -0
- package/src/generated/accounts/binArray.ts +155 -0
- package/src/generated/accounts/index.ts +12 -0
- package/src/generated/accounts/pool.ts +192 -0
- package/src/generated/accounts/position.ts +164 -0
- package/src/generated/errors/index.ts +9 -0
- package/src/generated/errors/piconDlmm.ts +124 -0
- package/src/generated/index.ts +14 -0
- package/src/generated/instructions/acceptAdminAuthority.ts +262 -0
- package/src/generated/instructions/claimFee.ts +395 -0
- package/src/generated/instructions/claimProtocolFee.ts +462 -0
- package/src/generated/instructions/closePosition.ts +342 -0
- package/src/generated/instructions/createAdminConfig.ts +369 -0
- package/src/generated/instructions/createBinArray.ts +344 -0
- package/src/generated/instructions/createPool.ts +582 -0
- package/src/generated/instructions/deleteBinArray.ts +365 -0
- package/src/generated/instructions/depositByWeight.ts +435 -0
- package/src/generated/instructions/index.ts +25 -0
- package/src/generated/instructions/openPosition.ts +547 -0
- package/src/generated/instructions/setMetadataUpdateAuthority.ts +274 -0
- package/src/generated/instructions/setPoolDynamicFeeConfig.ts +304 -0
- package/src/generated/instructions/setPoolProtocolShare.ts +298 -0
- package/src/generated/instructions/swap.ts +336 -0
- package/src/generated/instructions/syncPool.ts +189 -0
- package/src/generated/instructions/transferAdminAuthority.ts +271 -0
- package/src/generated/instructions/withdraw.ts +402 -0
- package/src/generated/pdas/adminConfig.ts +32 -0
- package/src/generated/pdas/binArray.ts +40 -0
- package/src/generated/pdas/index.ts +12 -0
- package/src/generated/pdas/pool.ts +43 -0
- package/src/generated/pdas/position.ts +37 -0
- package/src/generated/programs/index.ts +9 -0
- package/src/generated/programs/piconDlmm.ts +803 -0
- package/src/generated/types/bin.ts +64 -0
- package/src/generated/types/distributionMode.ts +43 -0
- package/src/generated/types/dynamicFeeConfig.ts +69 -0
- package/src/generated/types/dynamicFeeState.ts +71 -0
- package/src/generated/types/feeState.ts +60 -0
- package/src/generated/types/index.ts +13 -0
- package/src/index.ts +4 -0
- package/src/picon_dlmm.json +2378 -0
- package/src/program_addresses.ts +10 -0
- package/src/quote/index.ts +14 -0
- package/src/quote/wasm-node/package.json +4 -0
- package/src/quote/wasm-node/picon_dlmm_quote.d.ts +64 -0
- package/src/quote/wasm-node/picon_dlmm_quote.js +407 -0
- package/src/quote/wasm-node/picon_dlmm_quote_bg.wasm +0 -0
- package/src/quote/wasm-node/picon_dlmm_quote_bg.wasm.d.ts +11 -0
- package/src/quote/wasm-node-loader.ts +11 -0
- package/src/quote/wasm-web/picon_dlmm_quote.d.ts +100 -0
- package/src/quote/wasm-web/picon_dlmm_quote.js +500 -0
- package/src/quote/wasm-web/picon_dlmm_quote_bg.wasm +0 -0
- package/src/quote/wasm-web/picon_dlmm_quote_bg.wasm.d.ts +11 -0
- package/src/quote/wasm-web-loader.ts +17 -0
- package/src/utils/admin_config.ts +6 -0
- package/src/utils/ata.ts +213 -0
- package/src/utils/bin_array.ts +45 -0
- package/src/utils/bin_location.ts +79 -0
- package/src/utils/chunk.ts +7 -0
- package/src/utils/compute_budget.ts +58 -0
- package/src/utils/constants.ts +24 -0
- package/src/utils/transfer_fee.ts +29 -0
- package/src/utils/type_guards.ts +3 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { address, } from "@solana/kit";
|
|
2
|
+
import { findAssociatedTokenPda, getCloseAccountInstruction, getCreateAssociatedTokenIdempotentInstruction, getSyncNativeInstruction, TOKEN_PROGRAM_ADDRESS, } from "@solana-program/token";
|
|
3
|
+
import { findAssociatedTokenPda as findAssociatedToken2022Pda, getCreateAssociatedTokenIdempotentInstruction as getCreateAssociatedToken2022IdempotentInstruction, TOKEN_2022_PROGRAM_ADDRESS } from "@solana-program/token-2022";
|
|
4
|
+
import { getTransferSolInstruction } from "@solana-program/system";
|
|
5
|
+
export const NATIVE_MINT_ADDRESS = address("So11111111111111111111111111111111111111112");
|
|
6
|
+
export async function findAssociatedTokenPdaByTokenProgram(params) {
|
|
7
|
+
const findAssociatedTokenPda = chooseFindAssociatedTokenPda(params.tokenProgram);
|
|
8
|
+
const [ata] = await findAssociatedTokenPda(params);
|
|
9
|
+
return ata;
|
|
10
|
+
}
|
|
11
|
+
// Position NFTs are always Token2022 — shared by every position-scoped instruction
|
|
12
|
+
// (open_position, close_position, withdraw, claim_fee, claim_multiple_fees, deposit_by_weight).
|
|
13
|
+
export function findPositionTokenAccount({ owner, positionMint, }) {
|
|
14
|
+
return findAssociatedTokenPdaByTokenProgram({ owner, mint: positionMint, tokenProgram: TOKEN_2022_PROGRAM_ADDRESS });
|
|
15
|
+
}
|
|
16
|
+
// A pool's X/Y vaults — shared by every instruction that moves tokens through a pool
|
|
17
|
+
// (withdraw, claim_fee, claim_multiple_fees, claim_protocol_fee, deposit_by_weight, swap).
|
|
18
|
+
export async function findPoolTokenVaults({ pool, tokenMintX, tokenMintY, tokenProgramX, tokenProgramY, }) {
|
|
19
|
+
const [tokenVaultX, tokenVaultY] = await Promise.all([
|
|
20
|
+
findAssociatedTokenPdaByTokenProgram({ owner: pool, mint: tokenMintX, tokenProgram: tokenProgramX }),
|
|
21
|
+
findAssociatedTokenPdaByTokenProgram({ owner: pool, mint: tokenMintY, tokenProgram: tokenProgramY }),
|
|
22
|
+
]);
|
|
23
|
+
return { tokenVaultX, tokenVaultY };
|
|
24
|
+
}
|
|
25
|
+
export function processAssociatedTokenAccount(params) {
|
|
26
|
+
if (params.mint === NATIVE_MINT_ADDRESS) {
|
|
27
|
+
return processWsolAssociatedTokenAccount(params);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
return processRegularAssociatedTokenAccount(params);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Shared by every instruction that moves both X and Y through a single owner's ATAs
|
|
34
|
+
// (swap, withdraw, claim_fee, claim_protocol_fee, deposit_by_weight, claim_multiple_fees) —
|
|
35
|
+
// processes both sides and flattens their pre/post instructions in X-then-Y order.
|
|
36
|
+
export async function processAssociatedTokenAccountPair({ owner, tokenMintX, tokenMintY, tokenProgramX, tokenProgramY, amountX, amountY, }) {
|
|
37
|
+
const [x, y] = await Promise.all([
|
|
38
|
+
processAssociatedTokenAccount({ owner, mint: tokenMintX, amount: amountX, tokenProgram: tokenProgramX }),
|
|
39
|
+
processAssociatedTokenAccount({ owner, mint: tokenMintY, amount: amountY, tokenProgram: tokenProgramY }),
|
|
40
|
+
]);
|
|
41
|
+
return {
|
|
42
|
+
ataX: x.ata,
|
|
43
|
+
ataY: y.ata,
|
|
44
|
+
preInstructions: [...x.preInstructions, ...y.preInstructions],
|
|
45
|
+
postInstructions: [...x.postInstructions, ...y.postInstructions],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async function processWsolAssociatedTokenAccount({ owner, amount, tokenProgram, }) {
|
|
49
|
+
if (tokenProgram !== TOKEN_PROGRAM_ADDRESS) {
|
|
50
|
+
throw new Error("Invalid program for wSOL");
|
|
51
|
+
}
|
|
52
|
+
const { ata, instructions: wrapIxs } = await getWrapWsolInstructions(owner, amount);
|
|
53
|
+
const unwrapIx = getUnwrapWsolInstruction(owner, ata);
|
|
54
|
+
return {
|
|
55
|
+
ata,
|
|
56
|
+
preInstructions: wrapIxs,
|
|
57
|
+
postInstructions: [unwrapIx],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async function processRegularAssociatedTokenAccount({ owner, mint, tokenProgram, }) {
|
|
61
|
+
const [findAssociatedTokenPda, getCreateAssociatedTokenIdempotentInstruction] = choosePdaFunctions(tokenProgram);
|
|
62
|
+
const [ata] = await findAssociatedTokenPda({ mint, owner: owner.address, tokenProgram });
|
|
63
|
+
const createAtaIx = getCreateAssociatedTokenIdempotentInstruction({ ata, mint, owner: owner.address, payer: owner, tokenProgram });
|
|
64
|
+
return {
|
|
65
|
+
ata,
|
|
66
|
+
preInstructions: [createAtaIx],
|
|
67
|
+
postInstructions: [],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function choosePdaFunctions(tokenProgram) {
|
|
71
|
+
switch (tokenProgram) {
|
|
72
|
+
case TOKEN_PROGRAM_ADDRESS: return [findAssociatedTokenPda, getCreateAssociatedTokenIdempotentInstruction];
|
|
73
|
+
case TOKEN_2022_PROGRAM_ADDRESS: return [findAssociatedToken2022Pda, getCreateAssociatedToken2022IdempotentInstruction];
|
|
74
|
+
default: throw new Error(`Unsupported token program: ${tokenProgram}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function chooseFindAssociatedTokenPda(tokenProgram) {
|
|
78
|
+
return choosePdaFunctions(tokenProgram)[0];
|
|
79
|
+
}
|
|
80
|
+
async function getWrapWsolInstructions(owner, amount) {
|
|
81
|
+
const [ata] = await findAssociatedTokenPda({
|
|
82
|
+
mint: NATIVE_MINT_ADDRESS,
|
|
83
|
+
owner: owner.address,
|
|
84
|
+
tokenProgram: TOKEN_PROGRAM_ADDRESS,
|
|
85
|
+
});
|
|
86
|
+
const instructions = [
|
|
87
|
+
getCreateAssociatedTokenIdempotentInstruction({
|
|
88
|
+
ata,
|
|
89
|
+
mint: NATIVE_MINT_ADDRESS,
|
|
90
|
+
owner: owner.address,
|
|
91
|
+
payer: owner,
|
|
92
|
+
tokenProgram: TOKEN_PROGRAM_ADDRESS,
|
|
93
|
+
}),
|
|
94
|
+
...(amount
|
|
95
|
+
? [
|
|
96
|
+
getTransferSolInstruction({
|
|
97
|
+
source: owner,
|
|
98
|
+
destination: ata,
|
|
99
|
+
amount,
|
|
100
|
+
}),
|
|
101
|
+
getSyncNativeInstruction({ account: ata }),
|
|
102
|
+
]
|
|
103
|
+
: []),
|
|
104
|
+
];
|
|
105
|
+
return { ata, instructions };
|
|
106
|
+
}
|
|
107
|
+
function getUnwrapWsolInstruction(owner, ata) {
|
|
108
|
+
return getCloseAccountInstruction({
|
|
109
|
+
account: ata,
|
|
110
|
+
destination: owner.address,
|
|
111
|
+
owner,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Address } from "@solana/kit";
|
|
2
|
+
export declare function findBinArrayAddresses(pool: Address, indices: number[], programAddress: Address): Promise<Address[]>;
|
|
3
|
+
export declare function findSwapBinArrayAddresses(pool: Address, activeBinId: number, xToY: boolean, programAddress: Address): Promise<Address[]>;
|
|
4
|
+
export declare function findPositionBinArrayAddresses(pool: Address, lowerBinId: number, upperBinId: number, programAddress: Address): Promise<{
|
|
5
|
+
lowerBinArray: Address;
|
|
6
|
+
upperBinArray?: Address;
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=bin_array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin_array.d.ts","sourceRoot":"","sources":["../../src/utils/bin_array.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAS3C,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAEzH;AAID,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,OAAO,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,OAAO,EACb,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,OAAO,EAAE,CAAC,CAGpB;AAMD,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAU9D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { findBinArrayPda } from "../generated";
|
|
2
|
+
import { generateBinArrayIndicesForSwap, getPositionBinArrayIndices } from "./bin_location";
|
|
3
|
+
import { MAX_BIN_ARRAYS_PER_SWAP } from "./constants";
|
|
4
|
+
import { isUndefined } from "./type_guards";
|
|
5
|
+
// Shared by every instruction that enumerates an arbitrary span of bin arrays as Anchor
|
|
6
|
+
// `remaining_accounts` (swap, sync_pool), as opposed to the fixed lower/upper pair a
|
|
7
|
+
// position-scoped instruction uses.
|
|
8
|
+
export async function findBinArrayAddresses(pool, indices, programAddress) {
|
|
9
|
+
return Promise.all(indices.map(async (index) => (await findBinArrayPda({ pool, index }, { programAddress }))[0]));
|
|
10
|
+
}
|
|
11
|
+
// Pure local PDA derivation — no RPC. Shared by `swap` (which only needs the addresses for
|
|
12
|
+
// remaining accounts) and `quote` (which additionally fetches each account's data).
|
|
13
|
+
export function findSwapBinArrayAddresses(pool, activeBinId, xToY, programAddress) {
|
|
14
|
+
const binArrayIndices = generateBinArrayIndicesForSwap(activeBinId, xToY, MAX_BIN_ARRAYS_PER_SWAP);
|
|
15
|
+
return findBinArrayAddresses(pool, binArrayIndices, programAddress);
|
|
16
|
+
}
|
|
17
|
+
// Shared by every position-scoped instruction (open_position, deposit_by_weight, withdraw,
|
|
18
|
+
// claim_fee) — derives the lower and (optionally) upper bin array covering the position's
|
|
19
|
+
// range, matching the program's own `lowerBinArray` + `upperBinArray: Option<UncheckedAccount>`
|
|
20
|
+
// account pair. `upperBinArray` is omitted when both ends fall in the same bin array.
|
|
21
|
+
export async function findPositionBinArrayAddresses(pool, lowerBinId, upperBinId, programAddress) {
|
|
22
|
+
const { lowerBinArrayIndex, upperBinArrayIndex } = getPositionBinArrayIndices(lowerBinId, upperBinId);
|
|
23
|
+
const [lowerBinArray] = await findBinArrayPda({ pool, index: lowerBinArrayIndex }, { programAddress });
|
|
24
|
+
if (isUndefined(upperBinArrayIndex)) {
|
|
25
|
+
return { lowerBinArray };
|
|
26
|
+
}
|
|
27
|
+
const [upperBinArray] = await findBinArrayPda({ pool, index: upperBinArrayIndex }, { programAddress });
|
|
28
|
+
return { lowerBinArray, upperBinArray };
|
|
29
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function getBinArrayIndex(binId: number): number;
|
|
2
|
+
export declare function getBinIndex(binId: number): number;
|
|
3
|
+
export declare function getBinId(binArrayIndex: number, binIndex: number): number;
|
|
4
|
+
export declare function getBinArrayIndexSequence(lowerBinArrayIndex: number, upperBinArrayIndex: number): number[];
|
|
5
|
+
export declare function getPositionBinArrayIndices(lowerBinId: number, upperBinId: number): {
|
|
6
|
+
lowerBinArrayIndex: number;
|
|
7
|
+
upperBinArrayIndex?: number;
|
|
8
|
+
};
|
|
9
|
+
export declare function generateBinArrayIndicesForSwap(activeBinId: number, xToY: boolean, maxBinArrays: number): number[];
|
|
10
|
+
export declare function generateBinArrayIndicesForSync(activeBinId: number, desiredBinId: number, maxBinArrays: number): number[];
|
|
11
|
+
//# sourceMappingURL=bin_location.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { BINS_PER_BIN_ARRAY } from "./constants";
|
|
2
|
+
export function getBinArrayIndex(binId) {
|
|
3
|
+
return Math.floor(binId / BINS_PER_BIN_ARRAY);
|
|
4
|
+
}
|
|
5
|
+
export function getBinIndex(binId) {
|
|
6
|
+
return ((binId % BINS_PER_BIN_ARRAY) + BINS_PER_BIN_ARRAY) % BINS_PER_BIN_ARRAY;
|
|
7
|
+
}
|
|
8
|
+
export function getBinId(binArrayIndex, binIndex) {
|
|
9
|
+
return binArrayIndex * BINS_PER_BIN_ARRAY + binIndex;
|
|
10
|
+
}
|
|
11
|
+
export function getBinArrayIndexSequence(lowerBinArrayIndex, upperBinArrayIndex) {
|
|
12
|
+
return Array.from({ length: upperBinArrayIndex - lowerBinArrayIndex + 1 }, (_, i) => lowerBinArrayIndex + i);
|
|
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
|
+
export function getPositionBinArrayIndices(lowerBinId, upperBinId) {
|
|
19
|
+
const lowerBinArrayIndex = getBinArrayIndex(lowerBinId);
|
|
20
|
+
const upperBinArrayIndex = getBinArrayIndex(upperBinId);
|
|
21
|
+
return lowerBinArrayIndex === upperBinArrayIndex
|
|
22
|
+
? { lowerBinArrayIndex }
|
|
23
|
+
: { lowerBinArrayIndex, upperBinArrayIndex };
|
|
24
|
+
}
|
|
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
|
+
export function generateBinArrayIndicesForSwap(activeBinId, xToY, maxBinArrays) {
|
|
29
|
+
const activeBinArrayIndex = getBinArrayIndex(activeBinId);
|
|
30
|
+
const [lowerBinArrayIndex, upperBinArrayIndex] = xToY
|
|
31
|
+
? [activeBinArrayIndex - (maxBinArrays - 2), activeBinArrayIndex + 1]
|
|
32
|
+
: [activeBinArrayIndex - 1, activeBinArrayIndex + (maxBinArrays - 2)];
|
|
33
|
+
return getBinArrayIndexSequence(lowerBinArrayIndex, upperBinArrayIndex);
|
|
34
|
+
}
|
|
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
|
+
export function generateBinArrayIndicesForSync(activeBinId, desiredBinId, maxBinArrays) {
|
|
41
|
+
const activeBinArrayIndex = getBinArrayIndex(activeBinId);
|
|
42
|
+
const desiredBinArrayIndex = getBinArrayIndex(desiredBinId);
|
|
43
|
+
const xToY = desiredBinId <= activeBinId;
|
|
44
|
+
let lowerBinArrayIndex;
|
|
45
|
+
let upperBinArrayIndex;
|
|
46
|
+
if (xToY) {
|
|
47
|
+
upperBinArrayIndex = activeBinArrayIndex + 1;
|
|
48
|
+
lowerBinArrayIndex = Math.max(desiredBinArrayIndex, upperBinArrayIndex - maxBinArrays + 1);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
lowerBinArrayIndex = activeBinArrayIndex - 1;
|
|
52
|
+
upperBinArrayIndex = Math.min(desiredBinArrayIndex, lowerBinArrayIndex + maxBinArrays - 1);
|
|
53
|
+
}
|
|
54
|
+
return getBinArrayIndexSequence(lowerBinArrayIndex, upperBinArrayIndex);
|
|
55
|
+
}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createSolanaRpc, estimateComputeUnitLimitFactory, type TransactionMessage, type TransactionMessageWithFeePayer } from "@solana/kit";
|
|
2
|
+
export declare function withComputeBudget<TTransactionMessage extends TransactionMessage>(message: TTransactionMessage, { computeUnitLimit, computeUnitPrice, }?: {
|
|
3
|
+
computeUnitLimit?: number;
|
|
4
|
+
computeUnitPrice?: bigint;
|
|
5
|
+
}): TTransactionMessage;
|
|
6
|
+
export declare function withEstimatedComputeBudget<TTransactionMessage extends TransactionMessage & TransactionMessageWithFeePayer>(rpc: ReturnType<typeof createSolanaRpc>, message: TTransactionMessage, { estimateComputeUnitPrice, estimateComputeUnitLimit, bufferFactor, }?: {
|
|
7
|
+
estimateComputeUnitPrice?: bigint | ((computeUnitLimit: number) => bigint);
|
|
8
|
+
estimateComputeUnitLimit?: ReturnType<typeof estimateComputeUnitLimitFactory>;
|
|
9
|
+
bufferFactor?: number;
|
|
10
|
+
}): Promise<TTransactionMessage>;
|
|
11
|
+
//# sourceMappingURL=compute_budget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute_budget.d.ts","sourceRoot":"","sources":["../../src/utils/compute_budget.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,eAAe,EACf,+BAA+B,EAE/B,KAAK,kBAAkB,EACvB,KAAK,8BAA8B,EACpC,MAAM,aAAa,CAAC;AAGrB,wBAAgB,iBAAiB,CAAC,mBAAmB,SAAS,kBAAkB,EAC9E,OAAO,EAAE,mBAAmB,EAC5B,EACE,gBAAgB,EAChB,gBAAgB,GACjB,GAAE;IACD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACtB,GACL,mBAAmB,CAMrB;AAED,wBAAsB,0BAA0B,CAC9C,mBAAmB,SAAS,kBAAkB,GAAG,8BAA8B,EAE/E,GAAG,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EACvC,OAAO,EAAE,mBAAmB,EAC5B,EACE,wBAAwB,EACxB,wBAAwB,EACxB,YAAkB,GACnB,GAAE;IACD,wBAAwB,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,gBAAgB,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAC3E,wBAAwB,CAAC,EAAE,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAAC;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,OAAO,CAAC,mBAAmB,CAAC,CAa9B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getSetComputeUnitLimitInstruction, getSetComputeUnitPriceInstruction, } from "@solana-program/compute-budget";
|
|
2
|
+
import { estimateComputeUnitLimitFactory, prependTransactionMessageInstructions, } from "@solana/kit";
|
|
3
|
+
import { isUndefined } from "./type_guards";
|
|
4
|
+
export function withComputeBudget(message, { computeUnitLimit, computeUnitPrice, } = {}) {
|
|
5
|
+
const ixs = [
|
|
6
|
+
...(isUndefined(computeUnitLimit) ? [] : [getSetComputeUnitLimitInstruction({ units: computeUnitLimit })]),
|
|
7
|
+
...(isUndefined(computeUnitPrice) ? [] : [getSetComputeUnitPriceInstruction({ microLamports: computeUnitPrice })]),
|
|
8
|
+
];
|
|
9
|
+
return prependTransactionMessageInstructions(ixs, message);
|
|
10
|
+
}
|
|
11
|
+
export async function withEstimatedComputeBudget(rpc, message, { estimateComputeUnitPrice, estimateComputeUnitLimit, bufferFactor = 1.1, } = {}) {
|
|
12
|
+
estimateComputeUnitLimit = estimateComputeUnitLimit ?? estimateComputeUnitLimitFactory({ rpc });
|
|
13
|
+
const computeUnitBase = await estimateComputeUnitLimit(message);
|
|
14
|
+
const computeUnitLimit = Math.ceil(computeUnitBase * bufferFactor);
|
|
15
|
+
const computeUnitPrice = estimateComputeUnitPrice instanceof Function
|
|
16
|
+
? estimateComputeUnitPrice(computeUnitLimit)
|
|
17
|
+
: estimateComputeUnitPrice;
|
|
18
|
+
return withComputeBudget(message, {
|
|
19
|
+
computeUnitLimit: computeUnitLimit,
|
|
20
|
+
computeUnitPrice,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const BINS_PER_BIN_ARRAY: number;
|
|
2
|
+
export declare const MAX_BIN_ARRAYS_PER_POSITION: number;
|
|
3
|
+
export declare const MAX_BIN_ARRAYS_PER_SWAP: number;
|
|
4
|
+
export declare const MAX_BIN_ARRAYS_PER_SYNC: number;
|
|
5
|
+
export declare const FEE_PRECISION: number;
|
|
6
|
+
export declare const ONE_BPS_FEE_RATE: number;
|
|
7
|
+
export declare const MAX_FEE_RATE: number;
|
|
8
|
+
export declare const MAX_PROTOCOL_SHARE: number;
|
|
9
|
+
export declare const MAX_BASIS_POINTS: number;
|
|
10
|
+
export declare const MAX_POSITIONS_PER_CLAIM = 3;
|
|
11
|
+
export declare const MAX_ACCOUNTS_PER_RPC_BATCH = 100;
|
|
12
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import IDL from "./../picon_dlmm.json";
|
|
2
|
+
import { isUndefined } from "./type_guards";
|
|
3
|
+
function getIdlConstant(name) {
|
|
4
|
+
const constant = IDL.constants.find(c => c.name === name);
|
|
5
|
+
if (isUndefined(constant))
|
|
6
|
+
throw new Error(`${name} constant not found in IDL`);
|
|
7
|
+
return Number.parseInt(constant.value);
|
|
8
|
+
}
|
|
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");
|
|
18
|
+
export const MAX_POSITIONS_PER_CLAIM = 3;
|
|
19
|
+
// Solana RPC's own hard cap on addresses per getMultipleAccounts request.
|
|
20
|
+
export const MAX_ACCOUNTS_PER_RPC_BATCH = 100;
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { unwrapOption } from "@solana/kit";
|
|
2
|
+
function isTransferFeeConfig(extension) {
|
|
3
|
+
return extension.__kind === "TransferFeeConfig";
|
|
4
|
+
}
|
|
5
|
+
// TransferFeeConfig carries two rates — olderTransferFee/newerTransferFee — so the
|
|
6
|
+
// program can phase in a fee change without retroactively affecting in-flight swaps.
|
|
7
|
+
// newerTransferFee takes effect once the current epoch reaches its `epoch` field.
|
|
8
|
+
export function resolveTransferFee(mint, epoch) {
|
|
9
|
+
const extensions = unwrapOption(mint.extensions) ?? [];
|
|
10
|
+
const transferFeeConfig = extensions.find(isTransferFeeConfig);
|
|
11
|
+
if (!transferFeeConfig) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
const activeTransferFee = epoch >= transferFeeConfig.newerTransferFee.epoch
|
|
15
|
+
? transferFeeConfig.newerTransferFee
|
|
16
|
+
: transferFeeConfig.olderTransferFee;
|
|
17
|
+
return {
|
|
18
|
+
feeBps: activeTransferFee.transferFeeBasisPoints,
|
|
19
|
+
maxFee: activeTransferFee.maximumFee,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@picon-finance/dlmm-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Typescript SDK for interacting with the Picon DLMM protocol",
|
|
5
|
+
"author": "Picon Finance",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=20.18.0"
|
|
15
|
+
},
|
|
16
|
+
"imports": {
|
|
17
|
+
"#wasm": {
|
|
18
|
+
"bun": "./src/quote/wasm-node-loader.ts",
|
|
19
|
+
"browser": "./dist/quote/wasm-web-loader.js",
|
|
20
|
+
"node": "./dist/quote/wasm-node-loader.js",
|
|
21
|
+
"default": "./dist/quote/wasm-node-loader.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"./dist/",
|
|
26
|
+
"./src/"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"clean": "rm -rf ./dist/",
|
|
30
|
+
"generate-mainnet-idl": "cd .. && anchor run idl-mainnet",
|
|
31
|
+
"copy-idl": "bun run generate-mainnet-idl && cp ../target/deploy-mainnet/picon_dlmm.json ./src/picon_dlmm.json",
|
|
32
|
+
"codama-generate-js": "bun run copy-idl && npx codama run js",
|
|
33
|
+
"build-wasm-crate": "cargo build -p picon-dlmm-quote --target wasm32-unknown-unknown --no-default-features --features wasm --release",
|
|
34
|
+
"clean-wasm": "rm -rf ./src/quote/wasm-node/* ./src/quote/wasm-web/*",
|
|
35
|
+
"build-wasm-bindings-node": "wasm-bindgen ../target/wasm32-unknown-unknown/release/picon_dlmm_quote.wasm --out-dir ./src/quote/wasm-node --target experimental-nodejs-module --typescript",
|
|
36
|
+
"build-wasm-bindings-web": "wasm-bindgen ../target/wasm32-unknown-unknown/release/picon_dlmm_quote.wasm --out-dir ./src/quote/wasm-web --target web --typescript",
|
|
37
|
+
"build-wasm": "bun run build-wasm-crate && bun run clean-wasm && bun run build-wasm-bindings-node && bun run build-wasm-bindings-web",
|
|
38
|
+
"copy-wasm-binaries": "cp ./src/quote/wasm-node/*.wasm ./dist/quote/wasm-node/ && cp ./src/quote/wasm-web/*.wasm ./dist/quote/wasm-web/",
|
|
39
|
+
"compile": "bun run clean && npx tsc && bun run copy-wasm-binaries",
|
|
40
|
+
"build": "bun run codama-generate-js && bun run build-wasm && bun run compile",
|
|
41
|
+
"prepublishOnly": "bun run build"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@solana-program/compute-budget": "^0.16.0",
|
|
45
|
+
"@solana-program/loader-v3": "^0.4.0",
|
|
46
|
+
"@solana-program/system": "^0.12.2",
|
|
47
|
+
"@solana-program/token": "^0.14.0",
|
|
48
|
+
"@solana-program/token-2022": "^0.12.0",
|
|
49
|
+
"@solana/kit": "^6.10.0",
|
|
50
|
+
"@solana/program-client-core": "^6.10.0",
|
|
51
|
+
"@solana/transaction-messages": "^6.10.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/bun": "latest",
|
|
55
|
+
"@codama/nodes-from-anchor": "^1.5.1",
|
|
56
|
+
"@codama/renderers-js": "^2.3.0",
|
|
57
|
+
"codama": "^1.8.0"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Address, TransactionSigner } from "@solana/kit";
|
|
2
|
+
import { PICON_DLMM_PROGRAM_ADDRESS, getAcceptAdminAuthorityInstructionAsync } from "../generated";
|
|
3
|
+
import { buildTransactionMessage, resolveAdminConfigAddress, type TransactionMessageOptions, type Rpc } from "./helpers";
|
|
4
|
+
|
|
5
|
+
export async function acceptAdminAuthority(
|
|
6
|
+
rpc: Rpc,
|
|
7
|
+
{ pendingAuthority }: { pendingAuthority: TransactionSigner },
|
|
8
|
+
programAddress: Address = PICON_DLMM_PROGRAM_ADDRESS,
|
|
9
|
+
options: TransactionMessageOptions = {},
|
|
10
|
+
) {
|
|
11
|
+
const adminConfig = await resolveAdminConfigAddress(programAddress);
|
|
12
|
+
const instruction = await getAcceptAdminAuthorityInstructionAsync(
|
|
13
|
+
{ pendingAuthority, adminConfig },
|
|
14
|
+
{ programAddress },
|
|
15
|
+
);
|
|
16
|
+
return await buildTransactionMessage(rpc, { feePayer: pendingAuthority, instructions: [instruction] }, options);
|
|
17
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { Address, TransactionSigner } from "@solana/kit";
|
|
2
|
+
import { PICON_DLMM_PROGRAM_ADDRESS, findPositionPda, getClaimFeeInstruction } 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 claimFee(
|
|
14
|
+
rpc: Rpc,
|
|
15
|
+
{
|
|
16
|
+
owner,
|
|
17
|
+
positionMint,
|
|
18
|
+
lowerBinId,
|
|
19
|
+
upperBinId,
|
|
20
|
+
pool,
|
|
21
|
+
tokenMintX,
|
|
22
|
+
tokenMintY,
|
|
23
|
+
tokenProgramX,
|
|
24
|
+
tokenProgramY,
|
|
25
|
+
}: {
|
|
26
|
+
owner: TransactionSigner,
|
|
27
|
+
positionMint: Address,
|
|
28
|
+
lowerBinId?: number,
|
|
29
|
+
upperBinId?: number,
|
|
30
|
+
pool?: Address,
|
|
31
|
+
tokenMintX?: Address,
|
|
32
|
+
tokenMintY?: Address,
|
|
33
|
+
tokenProgramX?: Address,
|
|
34
|
+
tokenProgramY?: Address,
|
|
35
|
+
},
|
|
36
|
+
programAddress: Address = PICON_DLMM_PROGRAM_ADDRESS,
|
|
37
|
+
options: TransactionMessageOptions = {},
|
|
38
|
+
) {
|
|
39
|
+
({ pool, lowerBinId, upperBinId } = await resolvePositionRange(rpc, positionMint, { pool, lowerBinId, upperBinId }, programAddress, options));
|
|
40
|
+
|
|
41
|
+
const tokenMintsAndPrograms = await resolveTokenMintsAndPrograms(rpc, {
|
|
42
|
+
pool,
|
|
43
|
+
tokenMintX,
|
|
44
|
+
tokenMintY,
|
|
45
|
+
tokenProgramX,
|
|
46
|
+
tokenProgramY,
|
|
47
|
+
}, options);
|
|
48
|
+
|
|
49
|
+
const [position] = await findPositionPda({ positionMint }, { programAddress });
|
|
50
|
+
const positionTokenAccount = await findPositionTokenAccount({ owner: owner.address, positionMint });
|
|
51
|
+
const { tokenVaultX, tokenVaultY } = await findPoolTokenVaults({ pool, ...tokenMintsAndPrograms });
|
|
52
|
+
|
|
53
|
+
const {
|
|
54
|
+
ataX: tokenOwnerAccountX,
|
|
55
|
+
ataY: tokenOwnerAccountY,
|
|
56
|
+
preInstructions: preInstructionsAta,
|
|
57
|
+
postInstructions: postInstructionsAta,
|
|
58
|
+
} = await processAssociatedTokenAccountPair({ owner, ...tokenMintsAndPrograms });
|
|
59
|
+
|
|
60
|
+
const { lowerBinArray, upperBinArray } = await findPositionBinArrayAddresses(pool, lowerBinId, upperBinId, programAddress);
|
|
61
|
+
|
|
62
|
+
const claimFeeIx = getClaimFeeInstruction({
|
|
63
|
+
owner,
|
|
64
|
+
pool,
|
|
65
|
+
position,
|
|
66
|
+
positionTokenAccount,
|
|
67
|
+
...tokenMintsAndPrograms,
|
|
68
|
+
tokenOwnerAccountX,
|
|
69
|
+
tokenOwnerAccountY,
|
|
70
|
+
tokenVaultX,
|
|
71
|
+
tokenVaultY,
|
|
72
|
+
lowerBinArray,
|
|
73
|
+
upperBinArray,
|
|
74
|
+
lowerBinId,
|
|
75
|
+
upperBinId,
|
|
76
|
+
}, { programAddress });
|
|
77
|
+
|
|
78
|
+
const instructions = [
|
|
79
|
+
...preInstructionsAta,
|
|
80
|
+
claimFeeIx,
|
|
81
|
+
...postInstructionsAta,
|
|
82
|
+
];
|
|
83
|
+
return await buildTransactionMessage(rpc, { feePayer: owner, instructions }, options);
|
|
84
|
+
}
|