@ape.swap/bonds-sdk 7.0.0-test.3 → 7.0.0-test.4
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/README.md +18 -27
- package/dist/adapters/aptos/index.js +10 -10
- package/dist/adapters/aptos/index.js.map +1 -1
- package/dist/adapters/aptos/{AptosAccountBridge.js → state/AptosAccountBridge.js} +1 -1
- package/dist/adapters/aptos/state/AptosAccountBridge.js.map +1 -0
- package/dist/adapters/aptos/{fetchBondsDataAptos.d.ts → state/fetchBondsDataAptos.d.ts} +2 -2
- package/dist/adapters/aptos/{fetchBondsDataAptos.js → state/fetchBondsDataAptos.js} +3 -3
- package/dist/adapters/aptos/state/fetchBondsDataAptos.js.map +1 -0
- package/dist/adapters/aptos/{fetchUsersBondsAptos.d.ts → state/fetchUsersBondsAptos.d.ts} +2 -2
- package/dist/adapters/aptos/{fetchUsersBondsAptos.js → state/fetchUsersBondsAptos.js} +4 -4
- package/dist/adapters/aptos/state/fetchUsersBondsAptos.js.map +1 -0
- package/dist/adapters/aptos/{useAPTAccount.js → state/useAPTAccount.js} +2 -2
- package/dist/adapters/aptos/state/useAPTAccount.js.map +1 -0
- package/dist/adapters/aptos/{useAptosZapQuote.d.ts → state/useAptosZapQuote.d.ts} +2 -2
- package/dist/adapters/aptos/{useAptosZapQuote.js → state/useAptosZapQuote.js} +4 -4
- package/dist/adapters/aptos/state/useAptosZapQuote.js.map +1 -0
- package/dist/adapters/aptos/{useCurrencyBalanceAptos.js → state/useCurrencyBalanceAptos.js} +2 -2
- package/dist/adapters/aptos/state/useCurrencyBalanceAptos.js.map +1 -0
- package/dist/adapters/aptos/{aptosHelpers.d.ts → utils/aptosHelpers.d.ts} +1 -1
- package/dist/adapters/aptos/{aptosHelpers.js → utils/aptosHelpers.js} +1 -1
- package/dist/adapters/aptos/utils/aptosHelpers.js.map +1 -0
- package/dist/adapters/aptos/{ActionsAptos.d.ts → views/ActionsAptos.d.ts} +1 -1
- package/dist/adapters/aptos/{ActionsAptos.js → views/ActionsAptos.js} +11 -11
- package/dist/adapters/aptos/views/ActionsAptos.js.map +1 -0
- package/dist/adapters/aptos/{BuyComponentAptos.js → views/BuyComponentAptos.js} +29 -29
- package/dist/adapters/aptos/views/BuyComponentAptos.js.map +1 -0
- package/dist/adapters/aptos/{ClaimAllActionAptos.d.ts → views/ClaimAllActionAptos.d.ts} +1 -1
- package/dist/adapters/aptos/{ClaimAllActionAptos.js → views/ClaimAllActionAptos.js} +10 -10
- package/dist/adapters/aptos/views/ClaimAllActionAptos.js.map +1 -0
- package/dist/adapters/aptos/{ConnectAptosWalletButton.js → views/ConnectAptosWalletButton.js} +4 -4
- package/dist/adapters/aptos/views/ConnectAptosWalletButton.js.map +1 -0
- package/dist/adapters/aptos/{ConnectToAptosBanner.js → views/ConnectToAptosBanner.js} +6 -6
- package/dist/adapters/aptos/views/ConnectToAptosBanner.js.map +1 -0
- package/dist/adapters/aptos/{TransferActionAptos.d.ts → views/TransferActionAptos.d.ts} +1 -1
- package/dist/adapters/aptos/{TransferActionAptos.js → views/TransferActionAptos.js} +1 -1
- package/dist/adapters/aptos/views/TransferActionAptos.js.map +1 -0
- package/dist/adapters/aptos/{UserBondRowAptos.d.ts → views/UserBondRowAptos.d.ts} +1 -1
- package/dist/adapters/aptos/{UserBondRowAptos.js → views/UserBondRowAptos.js} +22 -22
- package/dist/adapters/aptos/views/UserBondRowAptos.js.map +1 -0
- package/dist/adapters/evm/index.js +16 -16
- package/dist/adapters/evm/index.js.map +1 -1
- package/dist/adapters/evm/{EvmAccountBridge.js → state/EvmAccountBridge.js} +1 -1
- package/dist/adapters/evm/state/EvmAccountBridge.js.map +1 -0
- package/dist/adapters/evm/{balances.d.ts → state/balances.d.ts} +1 -1
- package/dist/adapters/evm/{balances.js → state/balances.js} +5 -5
- package/dist/adapters/evm/state/balances.js.map +1 -0
- package/dist/adapters/evm/{fetchBondsDataEVM.d.ts → state/fetchBondsDataEVM.d.ts} +2 -2
- package/dist/adapters/evm/{fetchBondsDataEVM.js → state/fetchBondsDataEVM.js} +8 -8
- package/dist/adapters/evm/state/fetchBondsDataEVM.js.map +1 -0
- package/dist/adapters/evm/{fetchUsersBondsEVM.d.ts → state/fetchUsersBondsEVM.d.ts} +2 -2
- package/dist/adapters/evm/{fetchUsersBondsEVM.js → state/fetchUsersBondsEVM.js} +4 -4
- package/dist/adapters/evm/state/fetchUsersBondsEVM.js.map +1 -0
- package/dist/adapters/evm/{getTierPoints.d.ts → state/getTierPoints.d.ts} +1 -1
- package/dist/adapters/evm/{getTierPoints.js → state/getTierPoints.js} +5 -5
- package/dist/adapters/evm/state/getTierPoints.js.map +1 -0
- package/dist/adapters/evm/{preTGE → state/preTGE}/fetchBondsDataPreTGE.d.ts +2 -2
- package/dist/adapters/evm/{preTGE → state/preTGE}/fetchBondsDataPreTGE.js +5 -5
- package/dist/adapters/evm/state/preTGE/fetchBondsDataPreTGE.js.map +1 -0
- package/dist/adapters/evm/{preTGE → state/preTGE}/fetchUserBondsPreTGE.d.ts +2 -2
- package/dist/adapters/evm/{preTGE → state/preTGE}/fetchUserBondsPreTGE.js +5 -5
- package/dist/adapters/evm/state/preTGE/fetchUserBondsPreTGE.js.map +1 -0
- package/dist/adapters/evm/{useAllowance.js → state/useAllowance.js} +9 -9
- package/dist/adapters/evm/state/useAllowance.js.map +1 -0
- package/dist/adapters/evm/{useEVMAccount.js → state/useEVMAccount.js} +1 -1
- package/dist/adapters/evm/state/useEVMAccount.js.map +1 -0
- package/dist/adapters/evm/{useMonitorTx.js → state/useMonitorTx.js} +1 -1
- package/dist/adapters/evm/state/useMonitorTx.js.map +1 -0
- package/dist/adapters/evm/{useSoulZapBondQuote.d.ts → state/useSoulZapBondQuote.d.ts} +1 -1
- package/dist/adapters/evm/{useSoulZapBondQuote.js → state/useSoulZapBondQuote.js} +9 -9
- package/dist/adapters/evm/state/useSoulZapBondQuote.js.map +1 -0
- package/dist/adapters/evm/{useTierProofSignature.js → state/useTierProofSignature.js} +4 -4
- package/dist/adapters/evm/state/useTierProofSignature.js.map +1 -0
- package/dist/adapters/evm/{multicall.js → utils/multicall.js} +3 -3
- package/dist/adapters/evm/utils/multicall.js.map +1 -0
- package/dist/adapters/evm/{Actions.d.ts → views/Actions.d.ts} +1 -1
- package/dist/adapters/evm/{Actions.js → views/Actions.js} +18 -18
- package/dist/adapters/evm/views/Actions.js.map +1 -0
- package/dist/adapters/evm/{BuyComponent.d.ts → views/BuyComponent.d.ts} +1 -1
- package/dist/adapters/evm/{BuyComponent.js → views/BuyComponent.js} +44 -44
- package/dist/adapters/evm/views/BuyComponent.js.map +1 -0
- package/dist/adapters/evm/{ClaimAllActionEVM.d.ts → views/ClaimAllActionEVM.d.ts} +1 -1
- package/dist/adapters/evm/{ClaimAllActionEVM.js → views/ClaimAllActionEVM.js} +9 -9
- package/dist/adapters/evm/views/ClaimAllActionEVM.js.map +1 -0
- package/dist/adapters/evm/{ConnectToEvmBanner.js → views/ConnectToEvmBanner.js} +4 -4
- package/dist/adapters/evm/views/ConnectToEvmBanner.js.map +1 -0
- package/dist/adapters/evm/{TransactionModal.d.ts → views/TransactionModal.d.ts} +2 -2
- package/dist/adapters/evm/{TransactionModal.js → views/TransactionModal.js} +21 -21
- package/dist/adapters/evm/views/TransactionModal.js.map +1 -0
- package/dist/adapters/evm/{TransferAction.d.ts → views/TransferAction.d.ts} +1 -1
- package/dist/adapters/evm/{TransferAction.js → views/TransferAction.js} +8 -8
- package/dist/adapters/evm/views/TransferAction.js.map +1 -0
- package/dist/adapters/evm/{UserBondRow.d.ts → views/UserBondRow.d.ts} +1 -1
- package/dist/adapters/evm/{UserBondRow.js → views/UserBondRow.js} +27 -27
- package/dist/adapters/evm/views/UserBondRow.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/BuyComponentPreTGE.js +26 -26
- package/dist/adapters/evm/views/preTGE/BuyComponentPreTGE.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/ModalHandlerPreTGE.js +3 -3
- package/dist/adapters/evm/views/preTGE/ModalHandlerPreTGE.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/PreTGEActions.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/PreTGEActions.js +9 -9
- package/dist/adapters/evm/views/preTGE/PreTGEActions.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/UserBondRowPreTGE.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/UserBondRowPreTGE.js +9 -9
- package/dist/adapters/evm/views/preTGE/UserBondRowPreTGE.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/UserBondRowYield.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/UserBondRowYield.js +10 -10
- package/dist/adapters/evm/views/preTGE/UserBondRowYield.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/YourBondsModalYield.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/YourBondsModalYield.js +22 -22
- package/dist/adapters/evm/views/preTGE/YourBondsModalYield/YourBondsModalYield.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.js +10 -10
- package/dist/adapters/evm/views/preTGE/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.js.map +1 -0
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.d.ts +1 -1
- package/dist/adapters/evm/{preTGE → views/preTGE}/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.js +5 -5
- package/dist/adapters/evm/views/preTGE/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.js.map +1 -0
- package/dist/adapters/lifi/index.js +1 -1
- package/dist/adapters/lifi/index.js.map +1 -1
- package/dist/adapters/lifi/{LifiModal.d.ts → views/LifiModal.d.ts} +1 -1
- package/dist/adapters/lifi/{LifiModal.js → views/LifiModal.js} +5 -5
- package/dist/adapters/lifi/views/LifiModal.js.map +1 -0
- package/dist/adapters/lifi/views/LifiWidgetContent.js.map +1 -0
- package/dist/adapters/solana/{solanaConstants.js → constants/solanaConstants.js} +1 -1
- package/dist/adapters/solana/constants/solanaConstants.js.map +1 -0
- package/dist/adapters/solana/index.d.ts +1 -1
- package/dist/adapters/solana/index.js +10 -10
- package/dist/adapters/solana/index.js.map +1 -1
- package/dist/adapters/solana/{SolanaAccountBridge.js → state/SolanaAccountBridge.js} +1 -1
- package/dist/adapters/solana/state/SolanaAccountBridge.js.map +1 -0
- package/dist/adapters/solana/{fetchBondsDataSOL.d.ts → state/fetchBondsDataSOL.d.ts} +2 -2
- package/dist/adapters/solana/{fetchBondsDataSOL.js → state/fetchBondsDataSOL.js} +8 -8
- package/dist/adapters/solana/state/fetchBondsDataSOL.js.map +1 -0
- package/dist/adapters/solana/{fetchUsersBondsSOL.d.ts → state/fetchUsersBondsSOL.d.ts} +2 -2
- package/dist/adapters/solana/{fetchUsersBondsSOL.js → state/fetchUsersBondsSOL.js} +5 -5
- package/dist/adapters/solana/state/fetchUsersBondsSOL.js.map +1 -0
- package/dist/adapters/solana/{useCurrencyBalanceSolana.js → state/useCurrencyBalanceSolana.js} +3 -3
- package/dist/adapters/solana/state/useCurrencyBalanceSolana.js.map +1 -0
- package/dist/adapters/solana/{useJupiterSolanaQuote.d.ts → state/useJupiterSolanaQuote.d.ts} +1 -1
- package/dist/adapters/solana/{useJupiterSolanaQuote.js → state/useJupiterSolanaQuote.js} +3 -3
- package/dist/adapters/solana/state/useJupiterSolanaQuote.js.map +1 -0
- package/dist/adapters/solana/{useSOLAccount.js → state/useSOLAccount.js} +1 -1
- package/dist/adapters/solana/state/useSOLAccount.js.map +1 -0
- package/dist/adapters/solana/{calculateSolanaTrueBillPrice.js → utils/calculateSolanaTrueBillPrice.js} +1 -1
- package/dist/adapters/solana/utils/calculateSolanaTrueBillPrice.js.map +1 -0
- package/dist/adapters/solana/{codecs → utils/codecs}/bondCodec.js +1 -1
- package/dist/adapters/solana/utils/codecs/bondCodec.js.map +1 -0
- package/dist/adapters/solana/{codecs → utils/codecs}/bondIssuanceCodec.js +1 -1
- package/dist/adapters/solana/utils/codecs/bondIssuanceCodec.js.map +1 -0
- package/dist/adapters/solana/{codecs → utils/codecs}/bondPricingCodec.js +1 -1
- package/dist/adapters/solana/utils/codecs/bondPricingCodec.js.map +1 -0
- package/dist/adapters/solana/{codecs → utils/codecs}/bondTermCodec.js +1 -1
- package/dist/adapters/solana/utils/codecs/bondTermCodec.js.map +1 -0
- package/dist/adapters/solana/utils/derivePda.js.map +1 -0
- package/dist/adapters/solana/utils/getSolanaAccount.js.map +1 -0
- package/dist/adapters/solana/utils/polyfills.js.map +1 -0
- package/dist/adapters/solana/utils/solanaAtaHelper.js.map +1 -0
- package/dist/adapters/solana/utils/solanaMulticall.js.map +1 -0
- package/dist/adapters/solana/{solanaRpc.js → utils/solanaRpc.js} +1 -1
- package/dist/adapters/solana/utils/solanaRpc.js.map +1 -0
- package/dist/adapters/solana/{ActionsSolana.d.ts → views/ActionsSolana.d.ts} +1 -1
- package/dist/adapters/solana/{ActionsSolana.js → views/ActionsSolana.js} +13 -13
- package/dist/adapters/solana/views/ActionsSolana.js.map +1 -0
- package/dist/adapters/solana/{BuyComponentSolana.js → views/BuyComponentSolana.js} +37 -37
- package/dist/adapters/solana/views/BuyComponentSolana.js.map +1 -0
- package/dist/adapters/solana/{ConnectSolanaWalletButton.js → views/ConnectSolanaWalletButton.js} +4 -4
- package/dist/adapters/solana/views/ConnectSolanaWalletButton.js.map +1 -0
- package/dist/adapters/solana/{ConnectToSolanaBanner.js → views/ConnectToSolanaBanner.js} +5 -5
- package/dist/adapters/solana/views/ConnectToSolanaBanner.js.map +1 -0
- package/dist/adapters/solana/{TransferActionSolana.d.ts → views/TransferActionSolana.d.ts} +1 -1
- package/dist/adapters/solana/{TransferActionSolana.js → views/TransferActionSolana.js} +6 -6
- package/dist/adapters/solana/views/TransferActionSolana.js.map +1 -0
- package/dist/adapters/solana/{UserBondRowSolana.d.ts → views/UserBondRowSolana.d.ts} +1 -1
- package/dist/adapters/solana/{UserBondRowSolana.js → views/UserBondRowSolana.js} +23 -23
- package/dist/adapters/solana/views/UserBondRowSolana.js.map +1 -0
- package/dist/adapters/sui/constants/suiConstants.js.map +1 -0
- package/dist/adapters/sui/constants/suiZapTokens.js.map +1 -0
- package/dist/adapters/sui/index.js +10 -10
- package/dist/adapters/sui/index.js.map +1 -1
- package/dist/adapters/sui/{SuiAccountBridge.js → state/SuiAccountBridge.js} +1 -1
- package/dist/adapters/sui/state/SuiAccountBridge.js.map +1 -0
- package/dist/adapters/sui/{fetchBondsDataSui.d.ts → state/fetchBondsDataSui.d.ts} +2 -2
- package/dist/adapters/sui/{fetchBondsDataSui.js → state/fetchBondsDataSui.js} +3 -3
- package/dist/adapters/sui/state/fetchBondsDataSui.js.map +1 -0
- package/dist/adapters/sui/{fetchUsersBondsSUI.d.ts → state/fetchUsersBondsSUI.d.ts} +2 -2
- package/dist/adapters/sui/{fetchUsersBondsSUI.js → state/fetchUsersBondsSUI.js} +4 -4
- package/dist/adapters/sui/state/fetchUsersBondsSUI.js.map +1 -0
- package/dist/adapters/sui/{useCurrencyBalanceSui.js → state/useCurrencyBalanceSui.js} +2 -2
- package/dist/adapters/sui/state/useCurrencyBalanceSui.js.map +1 -0
- package/dist/adapters/sui/{useSUIAccount.js → state/useSUIAccount.js} +1 -1
- package/dist/adapters/sui/state/useSUIAccount.js.map +1 -0
- package/dist/adapters/sui/{useSuiZapQuote.d.ts → state/useSuiZapQuote.d.ts} +1 -1
- package/dist/adapters/sui/{useSuiZapQuote.js → state/useSuiZapQuote.js} +5 -5
- package/dist/adapters/sui/state/useSuiZapQuote.js.map +1 -0
- package/dist/adapters/sui/{suiHelpers.js → utils/suiHelpers.js} +1 -1
- package/dist/adapters/sui/utils/suiHelpers.js.map +1 -0
- package/dist/adapters/sui/{ActionsSui.d.ts → views/ActionsSui.d.ts} +1 -1
- package/dist/adapters/sui/{ActionsSui.js → views/ActionsSui.js} +11 -11
- package/dist/adapters/sui/views/ActionsSui.js.map +1 -0
- package/dist/adapters/sui/{BuyComponentSui.js → views/BuyComponentSui.js} +32 -32
- package/dist/adapters/sui/views/BuyComponentSui.js.map +1 -0
- package/dist/adapters/sui/{ClaimAllActionSui.d.ts → views/ClaimAllActionSui.d.ts} +1 -1
- package/dist/adapters/sui/{ClaimAllActionSui.js → views/ClaimAllActionSui.js} +10 -10
- package/dist/adapters/sui/views/ClaimAllActionSui.js.map +1 -0
- package/dist/adapters/sui/{ConnectToSuiBanner.js → views/ConnectToSuiBanner.js} +6 -6
- package/dist/adapters/sui/views/ConnectToSuiBanner.js.map +1 -0
- package/dist/adapters/sui/{TransferActionSui.d.ts → views/TransferActionSui.d.ts} +1 -1
- package/dist/adapters/sui/{TransferActionSui.js → views/TransferActionSui.js} +7 -7
- package/dist/adapters/sui/views/TransferActionSui.js.map +1 -0
- package/dist/adapters/sui/{UserBondRowSui.d.ts → views/UserBondRowSui.d.ts} +1 -1
- package/dist/adapters/sui/{UserBondRowSui.js → views/UserBondRowSui.js} +22 -22
- package/dist/adapters/sui/views/UserBondRowSui.js.map +1 -0
- package/dist/components/NetworkFilter/index.js.map +1 -1
- package/dist/main.d.ts +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/state/bonds/useBondsData.js.map +1 -1
- package/package.json +3 -7
- package/dist/adapters/all/index.d.ts +0 -13
- package/dist/adapters/all/index.js +0 -15
- package/dist/adapters/all/index.js.map +0 -1
- package/dist/adapters/aptos/ActionsAptos.js.map +0 -1
- package/dist/adapters/aptos/AptosAccountBridge.js.map +0 -1
- package/dist/adapters/aptos/BuyComponentAptos.js.map +0 -1
- package/dist/adapters/aptos/ClaimAllActionAptos.js.map +0 -1
- package/dist/adapters/aptos/ConnectAptosWalletButton.js.map +0 -1
- package/dist/adapters/aptos/ConnectToAptosBanner.js.map +0 -1
- package/dist/adapters/aptos/TransferActionAptos.js.map +0 -1
- package/dist/adapters/aptos/UserBondRowAptos.js.map +0 -1
- package/dist/adapters/aptos/aptosHelpers.js.map +0 -1
- package/dist/adapters/aptos/fetchBondsDataAptos.js.map +0 -1
- package/dist/adapters/aptos/fetchUsersBondsAptos.js.map +0 -1
- package/dist/adapters/aptos/useAPTAccount.js.map +0 -1
- package/dist/adapters/aptos/useAptosZapQuote.js.map +0 -1
- package/dist/adapters/aptos/useCurrencyBalanceAptos.js.map +0 -1
- package/dist/adapters/evm/Actions.js.map +0 -1
- package/dist/adapters/evm/BuyComponent.js.map +0 -1
- package/dist/adapters/evm/ClaimAllActionEVM.js.map +0 -1
- package/dist/adapters/evm/ConnectToEvmBanner.js.map +0 -1
- package/dist/adapters/evm/EvmAccountBridge.js.map +0 -1
- package/dist/adapters/evm/TransactionModal.js.map +0 -1
- package/dist/adapters/evm/TransferAction.js.map +0 -1
- package/dist/adapters/evm/UserBondRow.js.map +0 -1
- package/dist/adapters/evm/balances.js.map +0 -1
- package/dist/adapters/evm/fetchBondsDataEVM.js.map +0 -1
- package/dist/adapters/evm/fetchUsersBondsEVM.js.map +0 -1
- package/dist/adapters/evm/getTierPoints.js.map +0 -1
- package/dist/adapters/evm/multicall.js.map +0 -1
- package/dist/adapters/evm/preTGE/BuyComponentPreTGE.js.map +0 -1
- package/dist/adapters/evm/preTGE/ModalHandlerPreTGE.js.map +0 -1
- package/dist/adapters/evm/preTGE/PreTGEActions.js.map +0 -1
- package/dist/adapters/evm/preTGE/UserBondRowPreTGE.js.map +0 -1
- package/dist/adapters/evm/preTGE/UserBondRowYield.js.map +0 -1
- package/dist/adapters/evm/preTGE/YourBondsModalYield/YourBondsModalYield.js.map +0 -1
- package/dist/adapters/evm/preTGE/YourBondsModalYield/components/UnstakeModalYield/UnstakeModalYield.js.map +0 -1
- package/dist/adapters/evm/preTGE/YourBondsModalYield/components/YourBondModalHeader/YourBondModalHeader.js.map +0 -1
- package/dist/adapters/evm/preTGE/fetchBondsDataPreTGE.js.map +0 -1
- package/dist/adapters/evm/preTGE/fetchUserBondsPreTGE.js.map +0 -1
- package/dist/adapters/evm/useAllowance.js.map +0 -1
- package/dist/adapters/evm/useEVMAccount.js.map +0 -1
- package/dist/adapters/evm/useMonitorTx.js.map +0 -1
- package/dist/adapters/evm/useSoulZapBondQuote.js.map +0 -1
- package/dist/adapters/evm/useTierProofSignature.js.map +0 -1
- package/dist/adapters/lifi/LifiModal.js.map +0 -1
- package/dist/adapters/lifi/LifiWidgetContent.js.map +0 -1
- package/dist/adapters/solana/ActionsSolana.js.map +0 -1
- package/dist/adapters/solana/BuyComponentSolana.js.map +0 -1
- package/dist/adapters/solana/ConnectSolanaWalletButton.js.map +0 -1
- package/dist/adapters/solana/ConnectToSolanaBanner.js.map +0 -1
- package/dist/adapters/solana/SolanaAccountBridge.js.map +0 -1
- package/dist/adapters/solana/TransferActionSolana.js.map +0 -1
- package/dist/adapters/solana/UserBondRowSolana.js.map +0 -1
- package/dist/adapters/solana/calculateSolanaTrueBillPrice.js.map +0 -1
- package/dist/adapters/solana/codecs/bondCodec.js.map +0 -1
- package/dist/adapters/solana/codecs/bondIssuanceCodec.js.map +0 -1
- package/dist/adapters/solana/codecs/bondPricingCodec.js.map +0 -1
- package/dist/adapters/solana/codecs/bondTermCodec.js.map +0 -1
- package/dist/adapters/solana/derivePda.js.map +0 -1
- package/dist/adapters/solana/fetchBondsDataSOL.js.map +0 -1
- package/dist/adapters/solana/fetchUsersBondsSOL.js.map +0 -1
- package/dist/adapters/solana/getSolanaAccount.js.map +0 -1
- package/dist/adapters/solana/polyfills.js.map +0 -1
- package/dist/adapters/solana/solanaAtaHelper.js.map +0 -1
- package/dist/adapters/solana/solanaConstants.js.map +0 -1
- package/dist/adapters/solana/solanaMulticall.js.map +0 -1
- package/dist/adapters/solana/solanaRpc.js.map +0 -1
- package/dist/adapters/solana/useCurrencyBalanceSolana.js.map +0 -1
- package/dist/adapters/solana/useJupiterSolanaQuote.js.map +0 -1
- package/dist/adapters/solana/useSOLAccount.js.map +0 -1
- package/dist/adapters/sui/ActionsSui.js.map +0 -1
- package/dist/adapters/sui/BuyComponentSui.js.map +0 -1
- package/dist/adapters/sui/ClaimAllActionSui.js.map +0 -1
- package/dist/adapters/sui/ConnectToSuiBanner.js.map +0 -1
- package/dist/adapters/sui/SuiAccountBridge.js.map +0 -1
- package/dist/adapters/sui/TransferActionSui.js.map +0 -1
- package/dist/adapters/sui/UserBondRowSui.js.map +0 -1
- package/dist/adapters/sui/fetchBondsDataSui.js.map +0 -1
- package/dist/adapters/sui/fetchUsersBondsSUI.js.map +0 -1
- package/dist/adapters/sui/suiConstants.js.map +0 -1
- package/dist/adapters/sui/suiHelpers.js.map +0 -1
- package/dist/adapters/sui/suiZapTokens.js.map +0 -1
- package/dist/adapters/sui/useCurrencyBalanceSui.js.map +0 -1
- package/dist/adapters/sui/useSUIAccount.js.map +0 -1
- package/dist/adapters/sui/useSuiZapQuote.js.map +0 -1
- /package/dist/adapters/aptos/{AptosAccountBridge.d.ts → state/AptosAccountBridge.d.ts} +0 -0
- /package/dist/adapters/aptos/{useAPTAccount.d.ts → state/useAPTAccount.d.ts} +0 -0
- /package/dist/adapters/aptos/{useCurrencyBalanceAptos.d.ts → state/useCurrencyBalanceAptos.d.ts} +0 -0
- /package/dist/adapters/aptos/{aptosBonds.d.ts → types/aptosBonds.d.ts} +0 -0
- /package/dist/adapters/aptos/{BuyComponentAptos.d.ts → views/BuyComponentAptos.d.ts} +0 -0
- /package/dist/adapters/aptos/{ConnectAptosWalletButton.d.ts → views/ConnectAptosWalletButton.d.ts} +0 -0
- /package/dist/adapters/aptos/{ConnectToAptosBanner.d.ts → views/ConnectToAptosBanner.d.ts} +0 -0
- /package/dist/adapters/evm/{EvmAccountBridge.d.ts → state/EvmAccountBridge.d.ts} +0 -0
- /package/dist/adapters/evm/{useAllowance.d.ts → state/useAllowance.d.ts} +0 -0
- /package/dist/adapters/evm/{useEVMAccount.d.ts → state/useEVMAccount.d.ts} +0 -0
- /package/dist/adapters/evm/{useMonitorTx.d.ts → state/useMonitorTx.d.ts} +0 -0
- /package/dist/adapters/evm/{useTierProofSignature.d.ts → state/useTierProofSignature.d.ts} +0 -0
- /package/dist/adapters/evm/{multicall.d.ts → utils/multicall.d.ts} +0 -0
- /package/dist/adapters/evm/{ConnectToEvmBanner.d.ts → views/ConnectToEvmBanner.d.ts} +0 -0
- /package/dist/adapters/evm/{preTGE → views/preTGE}/BuyComponentPreTGE.d.ts +0 -0
- /package/dist/adapters/evm/{preTGE → views/preTGE}/ModalHandlerPreTGE.d.ts +0 -0
- /package/dist/adapters/lifi/{LifiWidgetContent.d.ts → views/LifiWidgetContent.d.ts} +0 -0
- /package/dist/adapters/lifi/{LifiWidgetContent.js → views/LifiWidgetContent.js} +0 -0
- /package/dist/adapters/solana/{solanaConstants.d.ts → constants/solanaConstants.d.ts} +0 -0
- /package/dist/adapters/solana/{SolanaAccountBridge.d.ts → state/SolanaAccountBridge.d.ts} +0 -0
- /package/dist/adapters/solana/{useCurrencyBalanceSolana.d.ts → state/useCurrencyBalanceSolana.d.ts} +0 -0
- /package/dist/adapters/solana/{useSOLAccount.d.ts → state/useSOLAccount.d.ts} +0 -0
- /package/dist/adapters/solana/{helius.d.ts → types/helius.d.ts} +0 -0
- /package/dist/adapters/solana/{solanaBonds.d.ts → types/solanaBonds.d.ts} +0 -0
- /package/dist/adapters/solana/{calculateSolanaTrueBillPrice.d.ts → utils/calculateSolanaTrueBillPrice.d.ts} +0 -0
- /package/dist/adapters/solana/{codecs → utils/codecs}/bondCodec.d.ts +0 -0
- /package/dist/adapters/solana/{codecs → utils/codecs}/bondIssuanceCodec.d.ts +0 -0
- /package/dist/adapters/solana/{codecs → utils/codecs}/bondPricingCodec.d.ts +0 -0
- /package/dist/adapters/solana/{codecs → utils/codecs}/bondTermCodec.d.ts +0 -0
- /package/dist/adapters/solana/{codecs → utils/codecs}/index.d.ts +0 -0
- /package/dist/adapters/solana/{derivePda.d.ts → utils/derivePda.d.ts} +0 -0
- /package/dist/adapters/solana/{derivePda.js → utils/derivePda.js} +0 -0
- /package/dist/adapters/solana/{getSolanaAccount.d.ts → utils/getSolanaAccount.d.ts} +0 -0
- /package/dist/adapters/solana/{getSolanaAccount.js → utils/getSolanaAccount.js} +0 -0
- /package/dist/adapters/solana/{polyfills.d.ts → utils/polyfills.d.ts} +0 -0
- /package/dist/adapters/solana/{polyfills.js → utils/polyfills.js} +0 -0
- /package/dist/adapters/solana/{solanaAtaHelper.d.ts → utils/solanaAtaHelper.d.ts} +0 -0
- /package/dist/adapters/solana/{solanaAtaHelper.js → utils/solanaAtaHelper.js} +0 -0
- /package/dist/adapters/solana/{solanaMulticall.d.ts → utils/solanaMulticall.d.ts} +0 -0
- /package/dist/adapters/solana/{solanaMulticall.js → utils/solanaMulticall.js} +0 -0
- /package/dist/adapters/solana/{solanaRpc.d.ts → utils/solanaRpc.d.ts} +0 -0
- /package/dist/adapters/solana/{BuyComponentSolana.d.ts → views/BuyComponentSolana.d.ts} +0 -0
- /package/dist/adapters/solana/{ConnectSolanaWalletButton.d.ts → views/ConnectSolanaWalletButton.d.ts} +0 -0
- /package/dist/adapters/solana/{ConnectToSolanaBanner.d.ts → views/ConnectToSolanaBanner.d.ts} +0 -0
- /package/dist/adapters/sui/{suiConstants.d.ts → constants/suiConstants.d.ts} +0 -0
- /package/dist/adapters/sui/{suiConstants.js → constants/suiConstants.js} +0 -0
- /package/dist/adapters/sui/{suiZapTokens.d.ts → constants/suiZapTokens.d.ts} +0 -0
- /package/dist/adapters/sui/{suiZapTokens.js → constants/suiZapTokens.js} +0 -0
- /package/dist/adapters/sui/{SuiAccountBridge.d.ts → state/SuiAccountBridge.d.ts} +0 -0
- /package/dist/adapters/sui/{useCurrencyBalanceSui.d.ts → state/useCurrencyBalanceSui.d.ts} +0 -0
- /package/dist/adapters/sui/{useSUIAccount.d.ts → state/useSUIAccount.d.ts} +0 -0
- /package/dist/adapters/sui/{suiHelpers.d.ts → utils/suiHelpers.d.ts} +0 -0
- /package/dist/adapters/sui/{BuyComponentSui.d.ts → views/BuyComponentSui.d.ts} +0 -0
- /package/dist/adapters/sui/{ConnectToSuiBanner.d.ts → views/ConnectToSuiBanner.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LifiWidgetContent.js","sources":["../../../../src/adapters/lifi/views/LifiWidgetContent.tsx"],"sourcesContent":["// The only module that imports @lifi/widget. LifiModal loads it with a dynamic import, so the widget (and the\n// packages it pulls in) is only downloaded when the \"Swap & Bridge\" modal opens. Keep it that way: a static import of\n// this file or of @lifi/widget from anywhere else puts the widget back in every consumer's entry chunk.\nimport React from 'react'\nimport { LiFiWidget } from '@lifi/widget'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\n// LiFi identifies Solana with its own chain id instead of ApeBond's ChainId.SOL.\nconst LIFI_SOLANA_CHAIN_ID = 1151111081099710\n\nconst toLifiChainId = (chainId: ChainId): number => (chainId === ChainId.SOL ? LIFI_SOLANA_CHAIN_ID : chainId)\n\nconst getFees = async (fromTokenSymbol: string, toTokenSymbol: string): Promise<number> => {\n const stableCoins = ['FRAX', 'USDC', 'USDT', 'DAI', 'BUSD', 'TUSD', 'USDD', 'FDUSD']\n const isFromStable = stableCoins.includes(fromTokenSymbol)\n const isToStable = stableCoins.includes(toTokenSymbol)\n if (toTokenSymbol.toLowerCase() === 'abond') {\n return 0\n }\n return isFromStable && isToStable ? 0.001 : 0.003\n}\n\nexport interface LifiWidgetContentProps {\n bondChain: ChainId\n principalToken?: string\n}\n\nconst LifiWidgetContent: React.FC<LifiWidgetContentProps> = ({ bondChain, principalToken }) => {\n const config = {\n appearance: 'dark' as const,\n loadFonts: false,\n theme: {\n typography: {\n fontFamily: 'Poppins',\n },\n colorSchemes: {\n dark: {\n palette: {\n background: {\n default: '#161420',\n paper: '#1F1D29',\n },\n primary: {\n main: '#6560C5',\n },\n secondary: {\n main: '#6560C5',\n },\n },\n },\n },\n container: {\n boxShadow: '0px 8px 32px rgba(0, 0, 0, 0.08)',\n borderRadius: '16px',\n },\n },\n // fromToken: 'BNB',\n // fromChain: ChainId.BSC,\n toChain: toLifiChainId(bondChain),\n toToken: principalToken,\n sdkConfig: {\n rpcUrls: {\n [LIFI_SOLANA_CHAIN_ID]: [\n 'https://ancient-cold-sailboat.solana-mainnet.quiknode.pro/da13400ad8d0035313f3e71c6a37c107d0d0334b',\n ],\n },\n },\n variant: 'compact' as const,\n integrator: 'apeswap',\n feeConfig: {\n calculateFee: async (params: any) => {\n return getFees(params.fromToken.symbol, params.toToken.symbol)\n },\n },\n }\n\n return <LiFiWidget {...config} />\n}\n\nexport default LifiWidgetContent\n"],"names":["_jsx"],"mappings":";;;;AAOA;AACA,MAAM,oBAAoB,GAAG,gBAAgB;AAE7C,MAAM,aAAa,GAAG,CAAC,OAAgB,MAAc,OAAO,KAAK,OAAO,CAAC,GAAG,GAAG,oBAAoB,GAAG,OAAO,CAAC;AAE9G,MAAM,OAAO,GAAG,OAAO,eAAuB,EAAE,aAAqB,KAAqB;AACxF,IAAA,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;IACpF,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC;IAC1D,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;AACtD,IAAA,IAAI,aAAa,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE;AAC3C,QAAA,OAAO,CAAC;IACV;IACA,OAAO,YAAY,IAAI,UAAU,GAAG,KAAK,GAAG,KAAK;AACnD,CAAC;AAOD,MAAM,iBAAiB,GAAqC,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,KAAI;AAC5F,IAAA,MAAM,MAAM,GAAG;AACb,QAAA,UAAU,EAAE,MAAe;AAC3B,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,KAAK,EAAE;AACL,YAAA,UAAU,EAAE;AACV,gBAAA,UAAU,EAAE,SAAS;AACtB,aAAA;AACD,YAAA,YAAY,EAAE;AACZ,gBAAA,IAAI,EAAE;AACJ,oBAAA,OAAO,EAAE;AACP,wBAAA,UAAU,EAAE;AACV,4BAAA,OAAO,EAAE,SAAS;AAClB,4BAAA,KAAK,EAAE,SAAS;AACjB,yBAAA;AACD,wBAAA,OAAO,EAAE;AACP,4BAAA,IAAI,EAAE,SAAS;AAChB,yBAAA;AACD,wBAAA,SAAS,EAAE;AACT,4BAAA,IAAI,EAAE,SAAS;AAChB,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA,SAAS,EAAE;AACT,gBAAA,SAAS,EAAE,kCAAkC;AAC7C,gBAAA,YAAY,EAAE,MAAM;AACrB,aAAA;AACF,SAAA;;;AAGD,QAAA,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC;AACjC,QAAA,OAAO,EAAE,cAAc;AACvB,QAAA,SAAS,EAAE;AACT,YAAA,OAAO,EAAE;gBACP,CAAC,oBAAoB,GAAG;oBACtB,oGAAoG;AACrG,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,SAAkB;AAC3B,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,SAAS,EAAE;AACT,YAAA,YAAY,EAAE,OAAO,MAAW,KAAI;AAClC,gBAAA,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAChE,CAAC;AACF,SAAA;KACF;AAED,IAAA,OAAOA,GAAA,CAAC,UAAU,EAAA,EAAA,GAAK,MAAM,GAAI;AACnC;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaConstants.js","sources":["../../../../src/adapters/solana/constants/solanaConstants.ts"],"sourcesContent":["import { PublicKey } from '@solana/web3.js'\nimport solanaProgramIdl from '../../../config/idl/solanaProgramIdl.json'\nimport { Buffer } from 'buffer'\n\n// Program constants\nexport const PROGRAM_ID = new PublicKey(solanaProgramIdl.address)\nexport const MPL_CORE_PROGRAM_ID = new PublicKey('CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d')\n\n// Accounts discriminators\nexport const BOND_DISCRIMINATOR = new Uint8Array([224, 128, 48, 251, 182, 246, 111, 196])\nexport const BOND_ISSUANCE_DISCRIMINATOR = new Uint8Array([243, 27, 35, 153, 15, 167, 245, 230])\nexport const BOND_PRICING_DISCRIMINATOR = new Uint8Array([61, 208, 225, 148, 202, 31, 36, 34])\nexport const BOND_TERM_DISCRIMINATOR = new Uint8Array([45, 207, 18, 171, 171, 222, 242, 107])\n\n// Instructions discriminators\nexport const DEPOSIT_DISCRIMINATOR = Buffer.from([242, 35, 198, 137, 82, 225, 242, 182])\nexport const CLAIM_DISCRIMINATOR = Buffer.from([62, 198, 214, 193, 213, 159, 108, 210])\nexport const CLAIMABLE_PAYOUT_DISCRIMINATOR = Buffer.from([180, 245, 240, 160, 170, 121, 123, 10])\n"],"names":[],"mappings":";;;;AAIA;AACO,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC,OAAO;MACnD,mBAAmB,GAAG,IAAI,SAAS,CAAC,8CAA8C;AAE/F;AACO,MAAM,kBAAkB,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACjF,MAAM,2BAA2B,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACxF,MAAM,0BAA0B,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACtF,MAAM,uBAAuB,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAE5F;AACO,MAAM,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAChF,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AAC/E,MAAM,8BAA8B,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;;;;"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import './polyfills.js';
|
|
1
|
+
import './utils/polyfills.js';
|
|
2
2
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
3
|
-
import SolanaAccountBridge from './SolanaAccountBridge.js';
|
|
4
|
-
import { fetchBondsDataSOL } from './fetchBondsDataSOL.js';
|
|
5
|
-
import { fetchUsersBondsSOL } from './fetchUsersBondsSOL.js';
|
|
6
|
-
import { getTokensBalanceSolana, getTokenBalanceSolana } from './useCurrencyBalanceSolana.js';
|
|
7
|
-
import BuyComponentSolana from './BuyComponentSolana.js';
|
|
8
|
-
import UserBondRowSolana from './UserBondRowSolana.js';
|
|
9
|
-
import ActionsSolana from './ActionsSolana.js';
|
|
10
|
-
import TransferAction from './TransferActionSolana.js';
|
|
11
|
-
import ConnectToSolanaCard from './ConnectToSolanaBanner.js';
|
|
3
|
+
import SolanaAccountBridge from './state/SolanaAccountBridge.js';
|
|
4
|
+
import { fetchBondsDataSOL } from './state/fetchBondsDataSOL.js';
|
|
5
|
+
import { fetchUsersBondsSOL } from './state/fetchUsersBondsSOL.js';
|
|
6
|
+
import { getTokensBalanceSolana, getTokenBalanceSolana } from './state/useCurrencyBalanceSolana.js';
|
|
7
|
+
import BuyComponentSolana from './views/BuyComponentSolana.js';
|
|
8
|
+
import UserBondRowSolana from './views/UserBondRowSolana.js';
|
|
9
|
+
import ActionsSolana from './views/ActionsSolana.js';
|
|
10
|
+
import TransferAction from './views/TransferActionSolana.js';
|
|
11
|
+
import ConnectToSolanaCard from './views/ConnectToSolanaBanner.js';
|
|
12
12
|
|
|
13
13
|
// Must stay the first import: sets globalThis.Buffer before any Solana library module is evaluated.
|
|
14
14
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/adapters/solana/index.ts"],"sourcesContent":["// Must stay the first import: sets globalThis.Buffer before any Solana library module is evaluated.\nimport './polyfills'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport type { ChainAdapter } from '../types'\nimport SolanaAccountBridge from './SolanaAccountBridge'\nimport { fetchBondsDataSOL } from './fetchBondsDataSOL'\nimport { fetchUsersBondsSOL } from './fetchUsersBondsSOL'\nimport { getTokenBalanceSolana, getTokensBalanceSolana } from './useCurrencyBalanceSolana'\nimport BuyComponentSolana from './BuyComponentSolana'\nimport UserBondRowSolana from './UserBondRowSolana'\nimport ActionsSolana from './ActionsSolana'\nimport TransferActionSolana from './TransferActionSolana'\nimport ConnectToSolanaBanner from './ConnectToSolanaBanner'\n\n/**\n * Solana bonds. Requires `@solana/web3.js`, `@solana/kit`, `@solana/spl-token` and `@solana/wallet-adapter-react`,\n * and the consumer must mount Solana's `ConnectionProvider` + `WalletProvider` (see docs/PLAN_CHAIN_ADAPTERS.md,\n * section 3.2). Sets the `Buffer` global the Solana libraries need (./polyfills).\n */\nexport const solanaAdapter: ChainAdapter = {\n ecosystem: 'sol',\n supportsChain: (chainId) => chainId === ChainId.SOL,\n AccountBridge: SolanaAccountBridge,\n\n // Solana bonds come from the realtime API; fetchBondsData is only the on-chain fallback. Bills are enriched with\n // api-v2 NFT metadata like EVM ones.\n usesRealtimeApi: true,\n fetchBondsData: (_chainId, bonds, tokenPrices, apiUrl) => fetchBondsDataSOL(bonds, apiUrl, tokenPrices),\n fetchUserBonds: (_chainId, account, bonds, tokenPrices) => fetchUsersBondsSOL(account, bonds, tokenPrices),\n enrichUserBondsViaApi: true,\n getTokenBalance: (_chainId, currency, account) => getTokenBalanceSolana(currency, account),\n getTokensBalances: (_chainId, account, tokens) => getTokensBalanceSolana(account, tokens),\n\n BuyComponent: BuyComponentSolana,\n UserBondRow: UserBondRowSolana,\n BondActions: ActionsSolana,\n TransferAction: TransferActionSolana,\n // No ClaimAllAction: Claim All didn't support Solana before the adapter split either.\n ConnectBanner: ConnectToSolanaBanner,\n}\n"],"names":["TransferActionSolana","ConnectToSolanaBanner"],"mappings":";;;;;;;;;;;;AAAA;AAcA;;;;AAIG;AACI,MAAM,aAAa,GAAiB;AACzC,IAAA,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,CAAC,OAAO,KAAK,OAAO,KAAK,OAAO,CAAC,GAAG;AACnD,IAAA,aAAa,EAAE,mBAAmB;;;AAIlC,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC;AACvG,IAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC;AAC1G,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,KAAK,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC1F,IAAA,iBAAiB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC;AAEzF,IAAA,YAAY,EAAE,kBAAkB;AAChC,IAAA,WAAW,EAAE,iBAAiB;AAC9B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,cAAc,EAAEA,cAAoB;;AAEpC,IAAA,aAAa,EAAEC,mBAAqB;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/adapters/solana/index.ts"],"sourcesContent":["// Must stay the first import: sets globalThis.Buffer before any Solana library module is evaluated.\nimport './utils/polyfills'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport type { ChainAdapter } from '../types'\nimport SolanaAccountBridge from './state/SolanaAccountBridge'\nimport { fetchBondsDataSOL } from './state/fetchBondsDataSOL'\nimport { fetchUsersBondsSOL } from './state/fetchUsersBondsSOL'\nimport { getTokenBalanceSolana, getTokensBalanceSolana } from './state/useCurrencyBalanceSolana'\nimport BuyComponentSolana from './views/BuyComponentSolana'\nimport UserBondRowSolana from './views/UserBondRowSolana'\nimport ActionsSolana from './views/ActionsSolana'\nimport TransferActionSolana from './views/TransferActionSolana'\nimport ConnectToSolanaBanner from './views/ConnectToSolanaBanner'\n\n/**\n * Solana bonds. Requires `@solana/web3.js`, `@solana/kit`, `@solana/spl-token` and `@solana/wallet-adapter-react`,\n * and the consumer must mount Solana's `ConnectionProvider` + `WalletProvider` (see docs/PLAN_CHAIN_ADAPTERS.md,\n * section 3.2). Sets the `Buffer` global the Solana libraries need (./polyfills).\n */\nexport const solanaAdapter: ChainAdapter = {\n ecosystem: 'sol',\n supportsChain: (chainId) => chainId === ChainId.SOL,\n AccountBridge: SolanaAccountBridge,\n\n // Solana bonds come from the realtime API; fetchBondsData is only the on-chain fallback. Bills are enriched with\n // api-v2 NFT metadata like EVM ones.\n usesRealtimeApi: true,\n fetchBondsData: (_chainId, bonds, tokenPrices, apiUrl) => fetchBondsDataSOL(bonds, apiUrl, tokenPrices),\n fetchUserBonds: (_chainId, account, bonds, tokenPrices) => fetchUsersBondsSOL(account, bonds, tokenPrices),\n enrichUserBondsViaApi: true,\n getTokenBalance: (_chainId, currency, account) => getTokenBalanceSolana(currency, account),\n getTokensBalances: (_chainId, account, tokens) => getTokensBalanceSolana(account, tokens),\n\n BuyComponent: BuyComponentSolana,\n UserBondRow: UserBondRowSolana,\n BondActions: ActionsSolana,\n TransferAction: TransferActionSolana,\n // No ClaimAllAction: Claim All didn't support Solana before the adapter split either.\n ConnectBanner: ConnectToSolanaBanner,\n}\n"],"names":["TransferActionSolana","ConnectToSolanaBanner"],"mappings":";;;;;;;;;;;;AAAA;AAcA;;;;AAIG;AACI,MAAM,aAAa,GAAiB;AACzC,IAAA,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,CAAC,OAAO,KAAK,OAAO,KAAK,OAAO,CAAC,GAAG;AACnD,IAAA,aAAa,EAAE,mBAAmB;;;AAIlC,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC;AACvG,IAAA,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC;AAC1G,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,eAAe,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,KAAK,qBAAqB,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC1F,IAAA,iBAAiB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC;AAEzF,IAAA,YAAY,EAAE,kBAAkB;AAChC,IAAA,WAAW,EAAE,iBAAiB;AAC9B,IAAA,WAAW,EAAE,aAAa;AAC1B,IAAA,cAAc,EAAEA,cAAoB;;AAEpC,IAAA,aAAa,EAAEC,mBAAqB;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import useSOLAccount from './useSOLAccount.js';
|
|
2
|
-
import { usePublishChainAccount } from '
|
|
2
|
+
import { usePublishChainAccount } from '../../../state/chainAccount/useChainAccount.js';
|
|
3
3
|
|
|
4
4
|
/** Publishes the connected Solana account (or the debugging `solAddress`) for core code; see ChainAdapter.AccountBridge. */
|
|
5
5
|
const SolanaAccountBridge = () => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SolanaAccountBridge.js","sources":["../../../../src/adapters/solana/state/SolanaAccountBridge.tsx"],"sourcesContent":["import useSOLAccount from './useSOLAccount'\nimport { usePublishChainAccount } from '../../../state/chainAccount/useChainAccount'\n\n/** Publishes the connected Solana account (or the debugging `solAddress`) for core code; see ChainAdapter.AccountBridge. */\nconst SolanaAccountBridge = () => {\n const { publicKey } = useSOLAccount()\n const address: string | null = publicKey?.toBase58() ?? null\n usePublishChainAccount('sol', { address, connected: !!address })\n return null\n}\n\nexport default SolanaAccountBridge\n"],"names":[],"mappings":";;;AAGA;AACA,MAAM,mBAAmB,GAAG,MAAK;AAC/B,IAAA,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,EAAE;IACrC,MAAM,OAAO,GAAkB,SAAS,EAAE,QAAQ,EAAE,IAAI,IAAI;AAC5D,IAAA,sBAAsB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;AAChE,IAAA,OAAO,IAAI;AACb;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { BillsConfig } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import { TokenPrices } from '
|
|
3
|
-
import { BondsData } from '
|
|
2
|
+
import { TokenPrices } from '../../../state/tokenPrices/useTokenPrices';
|
|
3
|
+
import { BondsData } from '../../../types/bonds';
|
|
4
4
|
export declare const fetchBondsDataSOL: (bonds: BillsConfig[], apiUrl: string, tokenPrices?: TokenPrices[]) => Promise<BondsData[]>;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import { solanaMulticall } from '
|
|
2
|
+
import { solanaMulticall } from '../utils/solanaMulticall.js';
|
|
3
3
|
import { PublicKey } from '@solana/web3.js';
|
|
4
|
-
import { derivePda } from '
|
|
5
|
-
import { PROGRAM_ID } from '
|
|
6
|
-
import { getRawBonus, getBonusWithFee, getRawDiscount, getDiscountWithFee } from '
|
|
7
|
-
import { formatUnits } from '
|
|
8
|
-
import { getBalanceNumber } from '
|
|
9
|
-
import { calculateTrueBondPrice } from '
|
|
10
|
-
import { resolveBondTokenPrices } from '
|
|
4
|
+
import { derivePda } from '../utils/derivePda.js';
|
|
5
|
+
import { PROGRAM_ID } from '../constants/solanaConstants.js';
|
|
6
|
+
import { getRawBonus, getBonusWithFee, getRawDiscount, getDiscountWithFee } from '../../../state/bonds/fetchBondsData/bondPricing.js';
|
|
7
|
+
import { formatUnits } from '../../../utils/fixedPoint.js';
|
|
8
|
+
import { getBalanceNumber } from '../../../utils/getBalanceNumber.js';
|
|
9
|
+
import { calculateTrueBondPrice } from '../utils/calculateSolanaTrueBillPrice.js';
|
|
10
|
+
import { resolveBondTokenPrices } from '../../../state/tokenPrices/resolveTokenPrice.js';
|
|
11
11
|
|
|
12
12
|
const fetchBondsDataSOL = async (bonds, apiUrl, tokenPrices) => {
|
|
13
13
|
const bills = bonds.filter((b) => !b.soldOut);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchBondsDataSOL.js","sources":["../../../../src/adapters/solana/state/fetchBondsDataSOL.ts"],"sourcesContent":["import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists'\nimport { TokenPrices } from '../../../state/tokenPrices/useTokenPrices'\nimport { SolanaCall, solanaMulticall } from '../utils/solanaMulticall'\nimport { PublicKey } from '@solana/web3.js'\nimport { derivePda } from '../utils/derivePda'\nimport { PROGRAM_ID } from '../constants/solanaConstants'\nimport { BondIssuance, SolanaBondData, SolanaBondsResult } from '../types/solanaBonds'\nimport {\n getBonusWithFee,\n getDiscountWithFee,\n getRawBonus,\n getRawDiscount,\n} from '../../../state/bonds/fetchBondsData/bondPricing'\nimport { formatUnits } from '../../../utils/fixedPoint'\nimport { getBalanceNumber } from '../../../utils/getBalanceNumber'\nimport { calculateTrueBondPrice } from '../utils/calculateSolanaTrueBillPrice'\nimport { BondsData, TrueBondPrices } from '../../../types/bonds'\nimport { resolveBondTokenPrices } from '../../../state/tokenPrices/resolveTokenPrice'\n\nexport const fetchBondsDataSOL = async (bonds: BillsConfig[], apiUrl: string, tokenPrices?: TokenPrices[]) => {\n const bills = bonds.filter((b) => !b.soldOut)\n try {\n const solanaCalls: SolanaCall[] = []\n const solanaBillIds: number[] = []\n for (const bill of bills) {\n const bondIssuanceAddress = bill.contractAddress[ChainId.SOL]\n if (!bondIssuanceAddress) continue\n\n solanaBillIds.push(bill.index)\n const bondIssuancePubkey = new PublicKey(bondIssuanceAddress)\n const bondTermPda = derivePda('bond_term', bondIssuancePubkey, PROGRAM_ID)\n const bondPricingPda = derivePda('bond_pricing', bondIssuancePubkey, PROGRAM_ID)\n solanaCalls.push(\n { accountAddress: bondIssuanceAddress, accountType: 'bondIssuance' },\n { accountAddress: bondTermPda.toBase58(), accountType: 'bondTerm' },\n { accountAddress: bondPricingPda.toBase58(), accountType: 'bondPricing' },\n )\n }\n // Fetch Solana bills\n const solanaResults = (await solanaMulticall(solanaCalls)) as SolanaBondsResult\n\n const solanaBills =\n solanaResults?.bondIssuance\n ?.map((bondIssuance: BondIssuance, index: number) => {\n const vestingTermDuration = Number(solanaResults.bondTerm[index]?.vestingEnd.toString())\n const bill = {\n ...bondIssuance,\n ...solanaResults.bondPricing[index],\n terms: solanaResults.bondTerm[index],\n } as SolanaBondData\n\n return [\n bill.trueBillPrice,\n bill.totalPayoutGiven,\n [bill.terms.controlVariable, vestingTermDuration, bill.terms.minimumDebt, bill.terms.maxPayout],\n bill.terms.maxTotalPayout,\n bill.feeInPayout.toString(),\n bill.feeInPrincipal.toString(),\n false,\n undefined,\n undefined,\n solanaResults.bondPricing[index],\n solanaResults.bondTerm[index],\n ] // Map to reflect evm structure\n })\n .filter((bill: any) => typeof bill !== 'undefined') ?? []\n const allBillsIds: number[] = []\n const allBillsData = []\n if (solanaBills.length > 0) {\n allBillsIds.push(...solanaBillIds)\n allBillsData.push(...solanaBills)\n }\n\n return await Promise.all(\n allBillsData?.map(async (chunk, index) => {\n const bill = bills?.find((bill) => bill?.index === allBillsIds[index]) as BillsConfig\n\n const { lpPrice, earnTokenPrice } = await resolveBondTokenPrices(bill, tokenPrices)\n\n const [\n ,\n totalPayoutGiven,\n terms,\n maxTotalPayout,\n feeInPayoutRaw,\n feeInPrincipalRaw,\n paused,\n ,\n customTreasuryBalance,\n bondPricing,\n bondTerms,\n ] = chunk as any\n\n const feeInPayout = Number(feeInPayoutRaw / 10000)\n const feeInPrincipal = Number(feeInPrincipalRaw / 10000)\n const tierBoostRate = bill.tierBoostRate === undefined ? 1 : bill.tierBoostRate\n const [, vestingTerm, , maxPayout] = terms\n const tokensRemaining = Number(\n formatUnits(\n BigInt(maxTotalPayout ?? '0') - BigInt(totalPayoutGiven),\n bill?.earnToken.decimals[bill?.chainId] ?? 18,\n ),\n )\n const treasuryBalance = customTreasuryBalance\n ? getBalanceNumber(customTreasuryBalance, bill?.earnToken?.decimals?.[bill?.chainId] ?? 18)\n : null\n\n const principalDecimals = bill?.lpToken.decimals[ChainId.SOL] as number\n const payoutDecimals = bill?.earnToken.decimals[ChainId.SOL] as number\n const timeStamp = Math.floor(Date.now() / 1000)\n const trueBillPrice = calculateTrueBondPrice(\n bondPricing,\n bondTerms,\n timeStamp,\n principalDecimals,\n payoutDecimals,\n feeInPrincipal,\n )\n\n let trueBondPrices: TrueBondPrices[] = []\n const bonus = getRawBonus(trueBillPrice, lpPrice, earnTokenPrice)\n const bonusWithFee = getBonusWithFee(feeInPayout, tierBoostRate, trueBillPrice, lpPrice, earnTokenPrice)\n const discount = getRawDiscount(trueBillPrice, lpPrice, earnTokenPrice)\n const discountWithFee = getDiscountWithFee(feeInPayout, tierBoostRate, trueBillPrice, lpPrice, earnTokenPrice)\n trueBondPrices = [\n {\n points: '0',\n boost: 0,\n trueBondPrice: trueBillPrice.toString(),\n bonus,\n bonusWithFee,\n discount,\n discountWithFee,\n },\n ]\n const cleanedData: BondsData = {\n ...bill,\n soldOut: paused[0] ? true : bill.soldOut,\n feeInPayout,\n feeInPrincipal,\n showcaseTokenName: bill?.showcaseToken?.symbol ?? bill?.earnToken.symbol ?? '',\n trueBondPrices,\n principalTokenPrice: lpPrice?.toString(),\n payoutTokenPrice: earnTokenPrice?.toString(),\n tokensRemaining:\n treasuryBalance !== null\n ? Math.min(treasuryBalance, tokensRemaining).toString()\n : tokensRemaining.toString(),\n maxTotalPayout: maxTotalPayout?.toString(),\n maxPayout: maxPayout?.toString(),\n totalPayoutGiven: totalPayoutGiven?.toString(),\n vestingTerm: typeof vestingTerm === 'number' ? vestingTerm : parseInt(vestingTerm),\n tierBoostRate: bill.tierBoostRate === undefined ? 1 : bill.tierBoostRate,\n }\n return cleanedData\n }),\n )\n } catch (e) {\n console.error(e)\n reportError({\n apiUrl,\n error: e,\n extraInfo: { type: 'getBondsDataSOL', e },\n })\n return []\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import { UserOwnedBillsData } from '
|
|
3
|
-
import { TokenPrices } from '
|
|
2
|
+
import { UserOwnedBillsData } from '../../../types/yourbonds';
|
|
3
|
+
import { TokenPrices } from '../../../state/tokenPrices/useTokenPrices';
|
|
4
4
|
export declare function fetchUsersBondsSOL(user: string, bondData: BillsConfig[], tokenPrices: Partial<Record<ChainId, TokenPrices[]>>): Promise<UserOwnedBillsData[]>;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
2
2
|
import { PublicKey, Connection, TransactionInstruction, Transaction } from '@solana/web3.js';
|
|
3
|
-
import { getBondAccountSolana } from '
|
|
3
|
+
import { getBondAccountSolana } from '../utils/getSolanaAccount.js';
|
|
4
4
|
import { getU64Codec } from '@solana/kit';
|
|
5
|
-
import { PROGRAM_ID, CLAIMABLE_PAYOUT_DISCRIMINATOR } from '
|
|
5
|
+
import { PROGRAM_ID, CLAIMABLE_PAYOUT_DISCRIMINATOR } from '../constants/solanaConstants.js';
|
|
6
6
|
import { Buffer } from 'buffer';
|
|
7
|
-
import { getRPC, HELIUS_SOL_RPC } from '
|
|
8
|
-
import { apiGet } from '
|
|
9
|
-
import { PRICE_API_URL } from '
|
|
7
|
+
import { getRPC, HELIUS_SOL_RPC } from '../../../config/constants/networks.js';
|
|
8
|
+
import { apiGet } from '../../../utils/httpClient.js';
|
|
9
|
+
import { PRICE_API_URL } from '../../../config/constants/variables.js';
|
|
10
10
|
|
|
11
11
|
async function fetchUsersBondsSOL(user, bondData, tokenPrices) {
|
|
12
12
|
if (!user)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchUsersBondsSOL.js","sources":["../../../../src/adapters/solana/state/fetchUsersBondsSOL.ts"],"sourcesContent":["import { BillsConfig, ChainId } from '@ape.swap/apeswap-lists'\nimport { UserBill, UserOwnedBillsData } from '../../../types/yourbonds'\nimport { Connection, PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js'\nimport { TokenPrices } from '../../../state/tokenPrices/useTokenPrices'\nimport { HeliusApiResponse, HeliusAsset } from '../types/helius'\nimport { getBondAccountSolana } from '../utils/getSolanaAccount'\nimport { getU64Codec } from '@solana/kit'\nimport { CLAIMABLE_PAYOUT_DISCRIMINATOR, PROGRAM_ID } from '../constants/solanaConstants'\nimport { Buffer } from 'buffer'\nimport { getRPC, HELIUS_SOL_RPC } from '../../../config/constants/networks'\nimport { apiGet } from '../../../utils/httpClient'\nimport { PRICE_API_URL } from '../../../config/constants/variables'\n\nexport async function fetchUsersBondsSOL(\n user: string,\n bondData: BillsConfig[],\n tokenPrices: Partial<Record<ChainId, TokenPrices[]>>,\n): Promise<UserOwnedBillsData[]> {\n if (!user) return []\n try {\n console.time('fetchUserBondsSOL')\n const results: UserOwnedBillsData[] = []\n\n const userBase58 = new PublicKey(user).toBase58()\n\n const connection = new Connection(getRPC(ChainId.SOL), 'confirmed')\n\n const collections: string[] = bondData.map((bond) => bond.billNnftAddress[ChainId.SOL]!)\n\n const allOptions = {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: '1',\n method: 'searchAssets',\n params: {\n ownerAddress: userBase58,\n collections,\n },\n }),\n }\n const allResponse = await fetch(HELIUS_SOL_RPC, allOptions)\n const allData: HeliusApiResponse = await allResponse.json()\n const allUserAssets: HeliusAsset[] = allData.result.items\n\n for (const bond of bondData) {\n if (bond.chainId !== ChainId.SOL || !bond.contractAddress[ChainId.SOL]) continue\n const bondIssuancePda = new PublicKey(bond.contractAddress[ChainId.SOL])\n const userBills: UserBill[] = []\n const collection = bond.billNnftAddress[ChainId.SOL]\n\n let principalTokenPrice = tokenPrices?.[ChainId.SOL]?.find?.(\n (t) => t?.tokenAddress?.toLowerCase() === bond?.lpToken?.address?.[ChainId.SOL]?.toLowerCase(),\n )?.price\n let payoutTokenPrice = tokenPrices?.[ChainId.SOL]?.find?.(\n (t) => t?.tokenAddress?.toLowerCase() === bond?.earnToken?.address?.[ChainId.SOL]?.toLowerCase(),\n )?.price\n\n if (principalTokenPrice === undefined) {\n const res = await apiGet<{ price: string }>(\n `${PRICE_API_URL}/realtime/price?token=${bond?.lpToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.lpToken.symbol, '. Price: ', res.price)\n principalTokenPrice = parseFloat(res.price ?? '0')\n }\n if (payoutTokenPrice === undefined) {\n const res = await apiGet<{ price: string }>(\n `${PRICE_API_URL}/realtime/price?token=${bond?.earnToken?.address?.[bond?.chainId]}&chain=${bond?.chainId}`,\n )\n console.log('Individual call for: ', bond.earnToken.symbol, '. Price: ', res.price)\n payoutTokenPrice = parseFloat(res.price ?? '0')\n }\n\n const userAssets = allUserAssets.filter((asset) => {\n return asset.authorities[0].address.toLowerCase() === bond.contractAddress[ChainId.SOL]?.toLowerCase()\n })\n\n for (const asset of userAssets) {\n const nftMint = new PublicKey(asset.id)\n\n const [bondPda] = PublicKey.findProgramAddressSync(\n [new TextEncoder().encode('bond'), bondIssuancePda.toBuffer(), nftMint.toBuffer()],\n PROGRAM_ID,\n )\n\n if (!bondPda) {\n console.error(`Could not fetch bond PDA for mint ${nftMint.toBase58()}`)\n continue\n }\n\n try {\n const [bondTermPda] = PublicKey.findProgramAddressSync(\n [new TextEncoder().encode('bond_term'), bondIssuancePda.toBuffer()],\n PROGRAM_ID,\n )\n\n const [bondAccounts, pendingRewards] = await Promise.all([\n getBondAccountSolana([bondPda.toBase58()]),\n calculatePendingRewards(connection, bondPda, bondTermPda, bondIssuancePda, nftMint),\n ])\n\n if (!bondAccounts?.length) {\n console.error(`Could not fetch bond account for mint ${nftMint.toBase58()}`)\n continue\n }\n\n const bondAccount = bondAccounts[0]\n const id = asset.content.metadata.name\n const idTrimmed: string = id.split('-')[1]?.trim()\n userBills.push({\n address: bondPda.toBase58(),\n id: idTrimmed,\n asset: nftMint.toBase58(),\n // vesting: bondAccount.vesting.toString(),\n vestingTerm: bondAccount.vestingTerm.toString(),\n payout: (bondAccount.payout - bondAccount.payoutClaimed).toString(),\n totalPayout: bondAccount.payout.toString(),\n truePricePaid: bondAccount.truePricePaid.toString(),\n lastBlockTimestamp: bondAccount.lastClaimTimestamp.toString(),\n vestingStartTimestamp: bondAccount.vestingStartTimestamp.toString(),\n pendingRewards,\n billNftAddress: collection as string,\n payoutClaimed: bondAccount.payoutClaimed.toString(),\n bond: {\n ...bond,\n payoutTokenPrice: payoutTokenPrice?.toString(),\n principalTokenPrice: principalTokenPrice?.toString(),\n },\n })\n // ULTRA HOT FIX :( until we can figure out a multicall strategy\n await new Promise((r) => setTimeout(r, 10))\n } catch (e) {\n console.log(e)\n console.error(`Could not fetch bond PDA for mint ${nftMint.toBase58()}`)\n }\n }\n results.push({\n index: bond.index,\n userOwnedBills: userBills,\n })\n }\n console.timeEnd('fetchUserBondsSOL')\n return results\n } catch (err) {\n console.error('Error fetching assets by collection:', err)\n return []\n }\n}\n\nasync function calculatePendingRewards(\n connection: Connection,\n bondPda: PublicKey,\n bondTermPda: PublicKey,\n bondIssuancePda: PublicKey,\n nftMint: PublicKey,\n): Promise<string> {\n try {\n const u64Codec = getU64Codec()\n\n const currentTimestamp = Math.floor(Date.now() / 1000)\n\n const encodedTimestamp = u64Codec.encode(BigInt(currentTimestamp))\n\n // Instruction data\n const instructionData = Buffer.concat([CLAIMABLE_PAYOUT_DISCRIMINATOR, Buffer.from(encodedTimestamp)])\n\n // Accounts\n const keys = [\n { pubkey: bondPda, isSigner: false, isWritable: true },\n { pubkey: bondTermPda, isSigner: false, isWritable: false },\n { pubkey: bondIssuancePda, isSigner: false, isWritable: false },\n { pubkey: nftMint, isSigner: false, isWritable: false },\n ]\n\n // Instruction\n const instruction = new TransactionInstruction({\n keys,\n programId: PROGRAM_ID,\n data: instructionData,\n })\n\n // Transaction\n const transaction = new Transaction()\n const userPublicKey = new PublicKey('11111111111111111111111111111112') // Dummy public key for fee payer\n transaction.feePayer = userPublicKey\n transaction.add(instruction)\n\n // Simulate\n const simulation = await connection.simulateTransaction(transaction)\n\n // Extract return value\n const returnData = simulation.value.returnData\n if (returnData) {\n const [data, encoding] = returnData.data\n if (encoding !== 'base64') {\n throw new Error(`Unexpected return data encoding: ${encoding}`)\n }\n\n const decodedData = Buffer.from(data, 'base64')\n return decodedData.readBigUInt64LE(0).toString()\n }\n\n // Fallback\n return '0'\n } catch (error) {\n console.error('Error calculating pending rewards:', error)\n return '0'\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;AAaO,eAAe,kBAAkB,CACtC,IAAY,EACZ,QAAuB,EACvB,WAAoD,EAAA;AAEpD,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;AACpB,IAAA,IAAI;AACF,QAAA,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;QACjC,MAAM,OAAO,GAAyB,EAAE;QAExC,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;AAEjD,QAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC;QAEnE,MAAM,WAAW,GAAa,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAE,CAAC;AAExF,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC/C,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;AACnB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,EAAE,EAAE,GAAG;AACP,gBAAA,MAAM,EAAE,cAAc;AACtB,gBAAA,MAAM,EAAE;AACN,oBAAA,YAAY,EAAE,UAAU;oBACxB,WAAW;AACZ,iBAAA;aACF,CAAC;SACH;QACD,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC;AAC3D,QAAA,MAAM,OAAO,GAAsB,MAAM,WAAW,CAAC,IAAI,EAAE;AAC3D,QAAA,MAAM,aAAa,GAAkB,OAAO,CAAC,MAAM,CAAC,KAAK;AAEzD,QAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC;gBAAE;AACxE,YAAA,MAAM,eAAe,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxE,MAAM,SAAS,GAAe,EAAE;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC;AAEpD,YAAA,IAAI,mBAAmB,GAAG,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,GACxD,CAAC,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CAC/F,EAAE,KAAK;AACR,YAAA,IAAI,gBAAgB,GAAG,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,GACrD,CAAC,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,CACjG,EAAE,KAAK;AAER,YAAA,IAAI,mBAAmB,KAAK,SAAS,EAAE;gBACrC,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,GAAG,aAAa,CAAA,sBAAA,EAAyB,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA,OAAA,EAAU,IAAI,EAAE,OAAO,CAAA,CAAE,CAC1G;AACD,gBAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC;gBACjF,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC;YACpD;AACA,YAAA,IAAI,gBAAgB,KAAK,SAAS,EAAE;gBAClC,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,GAAG,aAAa,CAAA,sBAAA,EAAyB,IAAI,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA,OAAA,EAAU,IAAI,EAAE,OAAO,CAAA,CAAE,CAC5G;AACD,gBAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC;gBACnF,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC;YACjD;YAEA,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,KAAI;gBAChD,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE;AACxG,YAAA,CAAC,CAAC;AAEF,YAAA,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE;gBAC9B,MAAM,OAAO,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AAEvC,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,sBAAsB,CAChD,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,EAClF,UAAU,CACX;gBAED,IAAI,CAAC,OAAO,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,CAAA,kCAAA,EAAqC,OAAO,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;oBACxE;gBACF;AAEA,gBAAA,IAAI;oBACF,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,sBAAsB,CACpD,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,QAAQ,EAAE,CAAC,EACnE,UAAU,CACX;oBAED,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AACvD,wBAAA,oBAAoB,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;wBAC1C,uBAAuB,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,CAAC;AACpF,qBAAA,CAAC;AAEF,oBAAA,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;wBACzB,OAAO,CAAC,KAAK,CAAC,CAAA,sCAAA,EAAyC,OAAO,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;wBAC5E;oBACF;AAEA,oBAAA,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC;oBACnC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI;AACtC,oBAAA,MAAM,SAAS,GAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;oBAClD,SAAS,CAAC,IAAI,CAAC;AACb,wBAAA,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;AAC3B,wBAAA,EAAE,EAAE,SAAS;AACb,wBAAA,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;;AAEzB,wBAAA,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE;AAC/C,wBAAA,MAAM,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,aAAa,EAAE,QAAQ,EAAE;AACnE,wBAAA,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC1C,wBAAA,aAAa,EAAE,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE;AACnD,wBAAA,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,QAAQ,EAAE;AAC7D,wBAAA,qBAAqB,EAAE,WAAW,CAAC,qBAAqB,CAAC,QAAQ,EAAE;wBACnE,cAAc;AACd,wBAAA,cAAc,EAAE,UAAoB;AACpC,wBAAA,aAAa,EAAE,WAAW,CAAC,aAAa,CAAC,QAAQ,EAAE;AACnD,wBAAA,IAAI,EAAE;AACJ,4BAAA,GAAG,IAAI;AACP,4BAAA,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE;AAC9C,4BAAA,mBAAmB,EAAE,mBAAmB,EAAE,QAAQ,EAAE;AACrD,yBAAA;AACF,qBAAA,CAAC;;AAEF,oBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7C;gBAAE,OAAO,CAAC,EAAE;AACV,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;oBACd,OAAO,CAAC,KAAK,CAAC,CAAA,kCAAA,EAAqC,OAAO,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;gBAC1E;YACF;YACA,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,cAAc,EAAE,SAAS;AAC1B,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC;AACpC,QAAA,OAAO,OAAO;IAChB;IAAE,OAAO,GAAG,EAAE;AACZ,QAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC;AAC1D,QAAA,OAAO,EAAE;IACX;AACF;AAEA,eAAe,uBAAuB,CACpC,UAAsB,EACtB,OAAkB,EAClB,WAAsB,EACtB,eAA0B,EAC1B,OAAkB,EAAA;AAElB,IAAA,IAAI;AACF,QAAA,MAAM,QAAQ,GAAG,WAAW,EAAE;AAE9B,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAEtD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;;AAGlE,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,8BAA8B,EAAE,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;;AAGtG,QAAA,MAAM,IAAI,GAAG;YACX,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACtD,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAC3D,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAC/D,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACxD;;AAGD,QAAA,MAAM,WAAW,GAAG,IAAI,sBAAsB,CAAC;YAC7C,IAAI;AACJ,YAAA,SAAS,EAAE,UAAU;AACrB,YAAA,IAAI,EAAE,eAAe;AACtB,SAAA,CAAC;;AAGF,QAAA,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE;QACrC,MAAM,aAAa,GAAG,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAA;AACvE,QAAA,WAAW,CAAC,QAAQ,GAAG,aAAa;AACpC,QAAA,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;;QAG5B,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,mBAAmB,CAAC,WAAW,CAAC;;AAGpE,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU;QAC9C,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI;AACxC,YAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACzB,gBAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAA,CAAE,CAAC;YACjE;YAEA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC/C,OAAO,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QAClD;;AAGA,QAAA,OAAO,GAAG;IACZ;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC;AAC1D,QAAA,OAAO,GAAG;IACZ;AACF;;;;"}
|
package/dist/adapters/solana/{useCurrencyBalanceSolana.js → state/useCurrencyBalanceSolana.js}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Connection, PublicKey } from '@solana/web3.js';
|
|
2
2
|
import { getAssociatedTokenAddress, getAccount } from '@solana/spl-token';
|
|
3
3
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
4
|
-
import { formatUnits } from '
|
|
5
|
-
import { getRPC } from '
|
|
6
|
-
import { getTokenProgramForMint } from '
|
|
4
|
+
import { formatUnits } from '../../../utils/fixedPoint.js';
|
|
5
|
+
import { getRPC } from '../../../config/constants/networks.js';
|
|
6
|
+
import { getTokenProgramForMint } from '../utils/solanaAtaHelper.js';
|
|
7
7
|
|
|
8
8
|
// Use devnet or your custom cluster URL
|
|
9
9
|
const getTokenBalanceSolana = async (currency, account) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCurrencyBalanceSolana.js","sources":["../../../../src/adapters/solana/state/useCurrencyBalanceSolana.ts"],"sourcesContent":["import { Connection, PublicKey } from '@solana/web3.js'\nimport { getAccount } from '@solana/spl-token'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { formatUnits } from '../../../utils/fixedPoint'\nimport { getRPC } from '../../../config/constants/networks'\nimport { getTokenProgramForMint } from '../utils/solanaAtaHelper'\nimport { getAssociatedTokenAddress } from '@solana/spl-token'\n\n// Use devnet or your custom cluster URL\nexport const getTokenBalanceSolana = async (\n currency: 'NATIVE' | Token | null,\n account: string | null,\n): Promise<string | null> => {\n if (!account || !currency) return null\n\n const connection = new Connection(getRPC(ChainId.SOL), 'confirmed')\n const userPubkey = new PublicKey(account)\n\n try {\n if (currency === 'NATIVE') {\n const lamports = await connection.getBalance(userPubkey)\n return formatUnits(lamports, 9)\n } else {\n const mint = new PublicKey(currency?.address?.[ChainId.SOL] as string)\n // Detect token program to get correct ATA (supports Token-2022)\n const tokenProgram = await getTokenProgramForMint(connection, mint)\n const ata = await getAssociatedTokenAddress(mint, userPubkey, true, tokenProgram)\n if (!ata) return '0'\n const tokenAccount = await getAccount(connection, ata, undefined, tokenProgram)\n return formatUnits(tokenAccount.amount.toString(), currency?.decimals?.[ChainId.SOL] as number)\n }\n } catch {\n // If account doesn't exist (e.g. never received that token)\n return '0'\n }\n}\n\nexport const getTokensBalanceSolana = async (\n account: string,\n tokens: ('NATIVE' | Token)[],\n): Promise<{ address: string; balance: string }[]> =>\n Promise.all(\n tokens.map(async (token) => {\n const balance = await getTokenBalanceSolana(token, account)\n return {\n address: token === 'NATIVE' ? 'NATIVE' : ((token as Token).address[ChainId.SOL] as string),\n balance: balance || '0',\n }\n }),\n )\n"],"names":[],"mappings":";;;;;;;AAQA;AACO,MAAM,qBAAqB,GAAG,OACnC,QAAiC,EACjC,OAAsB,KACI;AAC1B,IAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,IAAI;AAEtC,IAAA,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC;AACnE,IAAA,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC;AAEzC,IAAA,IAAI;AACF,QAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;YACzB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC;AACxD,YAAA,OAAO,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjC;aAAO;AACL,YAAA,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAW,CAAC;;YAEtE,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC;AACnE,YAAA,MAAM,GAAG,GAAG,MAAM,yBAAyB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC;AACjF,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,GAAG;AACpB,YAAA,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,CAAC;AAC/E,YAAA,OAAO,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAW,CAAC;QACjG;IACF;AAAE,IAAA,MAAM;;AAEN,QAAA,OAAO,GAAG;IACZ;AACF;AAEO,MAAM,sBAAsB,GAAG,OACpC,OAAe,EACf,MAA4B,KAE5B,OAAO,CAAC,GAAG,CACT,MAAM,CAAC,GAAG,CAAC,OAAO,KAAK,KAAI;IACzB,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC;IAC3D,OAAO;AACL,QAAA,OAAO,EAAE,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAK,KAAe,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAY;QAC1F,OAAO,EAAE,OAAO,IAAI,GAAG;KACxB;AACH,CAAC,CAAC;;;;"}
|
package/dist/adapters/solana/{useJupiterSolanaQuote.d.ts → state/useJupiterSolanaQuote.d.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Token } from '@ape.swap/apeswap-lists';
|
|
2
|
-
import { BondsData } from '
|
|
2
|
+
import { BondsData } from '../../../types/bonds';
|
|
3
3
|
import { QuoteResponse } from '@jup-ag/api';
|
|
4
4
|
declare const useJupiterSolanaQuote: (typedValue: string, inputCurrency: "NATIVE" | Token | undefined, bond: BondsData | undefined, account?: string, preferDirectRoutes?: boolean, // Try direct routes first for smaller tx size
|
|
5
5
|
slippage?: number) => [loading: boolean, response: QuoteResponse | null, depositAmount: string, error: boolean, isDirect: boolean, minimumDepositAmount: string, wrapAndUnwrapSol: boolean];
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
2
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
3
3
|
import { useQuery } from '@tanstack/react-query';
|
|
4
|
-
import { QUERY_KEYS } from '
|
|
5
|
-
import useDebounce from '
|
|
4
|
+
import { QUERY_KEYS } from '../../../config/constants/queryKeys.js';
|
|
5
|
+
import useDebounce from '../../../hooks/useDebounce.js';
|
|
6
6
|
import { createJupiterApiClient } from '@jup-ag/api';
|
|
7
|
-
import { parseUnits, formatUnits } from '
|
|
7
|
+
import { parseUnits, formatUnits } from '../../../utils/fixedPoint.js';
|
|
8
8
|
|
|
9
9
|
// Create Jupiter API client
|
|
10
10
|
const jupiterQuoteApi = createJupiterApiClient();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useJupiterSolanaQuote.js","sources":["../../../../src/adapters/solana/state/useJupiterSolanaQuote.ts"],"sourcesContent":["import { useMemo } from 'react'\nimport { ChainId, Token } from '@ape.swap/apeswap-lists'\nimport { useQuery } from '@tanstack/react-query'\nimport { QUERY_KEYS } from '../../../config/constants/queryKeys'\nimport { BondsData } from '../../../types/bonds'\nimport useDebounce from '../../../hooks/useDebounce'\nimport { createJupiterApiClient, QuoteGetRequest, QuoteResponse } from '@jup-ag/api'\nimport { formatUnits, parseUnits } from '../../../utils/fixedPoint'\n\n// Create Jupiter API client\nconst jupiterQuoteApi = createJupiterApiClient()\n\nconst useJupiterSolanaQuote = (\n typedValue: string,\n inputCurrency: 'NATIVE' | Token | undefined,\n bond: BondsData | undefined,\n account?: string,\n preferDirectRoutes = true, // Try direct routes first for smaller tx size\n slippage = 0.5, // Slippage tolerance percentage (e.g., 0.5 = 0.5%)\n): [\n loading: boolean,\n response: QuoteResponse | null,\n depositAmount: string,\n error: boolean,\n isDirect: boolean,\n minimumDepositAmount: string,\n wrapAndUnwrapSol: boolean,\n] => {\n const debouncedInput = useDebounce(typedValue, 400)\n\n const principalToken = bond?.lpToken as Token\n const chainId = ChainId.SOL\n\n // Get token addresses\n const inputTokenAddress =\n inputCurrency === 'NATIVE'\n ? 'So11111111111111111111111111111111111111112' // Native SOL (wrapped SOL)\n : inputCurrency?.address[chainId]\n const principalTokenAddress = principalToken?.address[chainId]\n const inputCurrencyDecimals = inputCurrency === 'NATIVE' ? 9 : inputCurrency?.decimals![chainId]\n\n const wrapAndUnwrapSol = inputCurrency === 'NATIVE' // true for native SOL, false for wSOL token\n\n // Calculate amount in smallest unit (lamports for SOL, or token's base unit)\n const amountInSmallestUnit = parseUnits(debouncedInput ?? '0', inputCurrencyDecimals ?? 9).toString()\n\n // Build query params for Jupiter - try direct routes first\n const directQueryParams: QuoteGetRequest | null = useMemo(() => {\n if (\n !inputTokenAddress ||\n !principalTokenAddress ||\n amountInSmallestUnit === '0' ||\n amountInSmallestUnit === 'NaN' ||\n !account ||\n inputTokenAddress === principalTokenAddress\n ) {\n return null\n }\n\n return {\n inputMint: inputTokenAddress,\n outputMint: principalTokenAddress,\n amount: parseInt(amountInSmallestUnit),\n slippageBps: Math.round(slippage * 100), // Convert percentage to basis points (0.5% = 50 bps)\n onlyDirectRoutes: true, // Try direct route first\n asLegacyTransaction: false,\n dexes: ['Raydium'],\n maxAccounts: 24,\n useWsol: inputCurrency !== 'NATIVE',\n }\n }, [inputTokenAddress, principalTokenAddress, amountInSmallestUnit, account, slippage, inputCurrency])\n\n // Fallback params with multi-hop routing\n const multiHopQueryParams: QuoteGetRequest | null = useMemo(() => {\n if (!directQueryParams) return null\n return {\n ...directQueryParams,\n onlyDirectRoutes: false, // Allow multi-hop for better pricing\n }\n }, [directQueryParams])\n\n const fetchJupiterQuote = async (): Promise<{ quote: QuoteResponse | null; isDirect: boolean }> => {\n if (!directQueryParams) return { quote: null, isDirect: false }\n\n try {\n // STEP 1: Try direct route first (smaller transaction size)\n if (preferDirectRoutes) {\n try {\n console.log('Trying direct route on Jupiter')\n console.log(directQueryParams)\n const directQuote = await jupiterQuoteApi.quoteGet(directQueryParams)\n if (directQuote) {\n console.log('Got direct route quote from Jupiter')\n console.log('Test Tx Size Log | Route Plan:', directQuote.routePlan)\n console.log('Test Tx Size Log | Route Plan details:', JSON.stringify(directQuote.routePlan, null, 2))\n return { quote: directQuote, isDirect: true }\n }\n } catch (directError) {\n console.error('Direct route error:', directError)\n }\n }\n\n // STEP 2: Fallback to multi-hop routing (better pricing, larger tx)\n if (multiHopQueryParams) {\n const multiHopQuote = await jupiterQuoteApi.quoteGet(multiHopQueryParams)\n console.log('Got multi-hop route quote from Jupiter')\n return { quote: multiHopQuote, isDirect: false }\n }\n\n return { quote: null, isDirect: false }\n } catch (error) {\n console.error('Jupiter quote error:', error)\n throw error\n }\n }\n\n const {\n data: response,\n isLoading,\n isFetching,\n error,\n } = useQuery({\n queryKey: [QUERY_KEYS.ZAP_TOKEN_QUOTE, 'jupiter-solana', directQueryParams, preferDirectRoutes, slippage],\n queryFn: fetchJupiterQuote,\n refetchInterval: 60000,\n enabled: !!directQueryParams,\n retry: 1,\n staleTime: 30000,\n })\n\n const zapError = !!error\n\n const quoteData = response?.quote\n const isDirect = response?.isDirect ?? false\n\n const estimatedOutputAmount = quoteData?.outAmount\n const minimumOutputAmount = quoteData?.otherAmountThreshold\n\n const estimatedDepositAmount = estimatedOutputAmount\n ? formatUnits(estimatedOutputAmount.toString(), principalToken?.decimals![chainId] ?? 9)\n : '0'\n\n const minimumDepositAmount = minimumOutputAmount\n ? formatUnits(minimumOutputAmount.toString(), principalToken?.decimals![chainId] ?? 9)\n : '0'\n\n const zapLoading = isLoading || isFetching\n\n return [\n zapLoading,\n quoteData ?? null,\n estimatedDepositAmount,\n zapError,\n isDirect,\n minimumDepositAmount,\n wrapAndUnwrapSol,\n ]\n}\n\nexport default useJupiterSolanaQuote\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSOLAccount.js","sources":["../../../../src/adapters/solana/state/useSOLAccount.ts"],"sourcesContent":["import { useWallet } from '@solana/wallet-adapter-react'\nimport { useSDKConfig } from '../../../state/useSDKConfig'\nimport { PublicKey } from '@solana/web3.js'\n\nconst useSOLAccount = (): any => {\n const account = useWallet()\n const { solAddress } = useSDKConfig()\n let solPublicKey = null\n\n if (solAddress) {\n solPublicKey = new PublicKey(solAddress)\n }\n\n return {\n ...account,\n publicKey: solAddress ? solPublicKey : account.publicKey,\n }\n}\n\nexport default useSOLAccount\n"],"names":[],"mappings":";;;;AAIA,MAAM,aAAa,GAAG,MAAU;AAC9B,IAAA,MAAM,OAAO,GAAG,SAAS,EAAE;AAC3B,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE;IACrC,IAAI,YAAY,GAAG,IAAI;IAEvB,IAAI,UAAU,EAAE;AACd,QAAA,YAAY,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC;IAC1C;IAEA,OAAO;AACL,QAAA,GAAG,OAAO;QACV,SAAS,EAAE,UAAU,GAAG,YAAY,GAAG,OAAO,CAAC,SAAS;KACzD;AACH;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { parseUnits, mulDivRound } from '
|
|
1
|
+
import { parseUnits, mulDivRound } from '../../../utils/fixedPoint.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This is the Typescript implementation of the Rust true_bond_price function since the on-chain program requires a real wallet
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calculateSolanaTrueBillPrice.js","sources":["../../../../src/adapters/solana/utils/calculateSolanaTrueBillPrice.ts"],"sourcesContent":["import { mulDivRound, parseUnits } from '../../../utils/fixedPoint'\n\n/**\n * This is the Typescript implementation of the Rust true_bond_price function since the on-chain program requires a real wallet\n *\n * Uses native BigInt with truncating division at each step, matching the real on-chain\n * Rust u64/u128 integer arithmetic (see src/utils/suiHelpers.ts for the equivalent Sui/Move\n * implementation of the same formula).\n */\nconst PRECISION_18 = 10n ** 18n\n\nexport function calculateTrueBondPrice(\n bondPricing: any,\n bondTerm: any,\n currentTimestamp: number,\n principalMintDecimals: number,\n payoutMintDecimals: number,\n feeInPrincipal: number,\n): string {\n try {\n // Extract values from the account data\n const totalDebt = BigInt(bondPricing.totalDebt?.toString() ?? '0')\n const lastDecay = BigInt(bondPricing.lastDecay?.toString() ?? '0')\n const controlVariable = BigInt(bondTerm.controlVariable?.toString() ?? '0')\n const vestingEnd = BigInt(bondTerm.vestingEnd?.toString() ?? '0')\n const minimumDebt = BigInt(bondTerm.minimumDebt?.toString() ?? '0')\n const payoutTokenInitialSupply = BigInt(bondTerm.payoutTokenInitialSupply?.toString() ?? '0')\n\n // Constants for price calculation (1e16 and 1e18)\n const e16 = 10_000_000_000_000_000n\n const principalDecimalsMultiplier = 10n ** BigInt(principalMintDecimals)\n\n // Calculate debt ratio\n const debtRatio = calculateDebtRatio(\n totalDebt,\n lastDecay,\n BigInt(currentTimestamp),\n vestingEnd,\n payoutMintDecimals,\n payoutTokenInitialSupply,\n )\n\n // Calculate price: (control_variable * debt_ratio * 1e16) / principal_decimals / 1e18\n const numerator = controlVariable * debtRatio * e16\n const price = numerator / principalDecimalsMultiplier / PRECISION_18\n\n // Apply minimum debt floor\n const priceToUse = price < minimumDebt ? minimumDebt : price\n\n // reverseFee = fee/100 / (1 - fee/100) — feeInPrincipal is a plain percentage (e.g. 0.5).\n // Scaled to 1e18 precision so the huge integer priceToUse never round-trips through a float.\n const feeToUse = feeInPrincipal\n const reverseFeeScaled = parseUnits((feeToUse / 100 / (1 - feeToUse / 100)).toString(), 18)\n const feeAdjustment = mulDivRound(priceToUse, reverseFeeScaled, PRECISION_18)\n return (priceToUse + feeAdjustment).toString()\n } catch (error) {\n console.error('Error in price calculation:', error)\n return '0'\n }\n}\n\n/**\n * This is the Typescript implementation of the Rust debt_ratio function\n */\nfunction calculateDebtRatio(\n totalDebt: bigint,\n lastDecay: bigint,\n currentTimestamp: bigint,\n vestingEnd: bigint,\n payoutDecimals: number,\n payoutTokenInitialSupply: bigint,\n): bigint {\n try {\n // If vesting term is 0 or initial supply is 0, return 0\n if (vestingEnd === 0n || payoutTokenInitialSupply === 0n) {\n return 0n\n }\n\n // Calculate time elapsed since last decay (with underflow protection)\n const timeSinceLast = currentTimestamp < lastDecay ? 0n : currentTimestamp - lastDecay\n\n // Calculate decay amount: (total_debt * time_since_last) / vesting_term\n const decayAmount = (totalDebt * timeSinceLast) / vestingEnd\n\n // Cap decay amount at total debt\n const finalDecayAmount = decayAmount > totalDebt ? totalDebt : decayAmount\n\n // Calculate current debt: total_debt - decay_amount\n const currentDebt = totalDebt - finalDecayAmount\n\n // Calculate debt ratio: (current_debt * payout_decimals_multiplier * 1e18) / initial_supply\n const payoutDecimalsMultiplier = 10n ** BigInt(payoutDecimals)\n\n const numerator = currentDebt * payoutDecimalsMultiplier * PRECISION_18\n\n return numerator / payoutTokenInitialSupply\n } catch (error) {\n console.error('Error calculating debt ratio:', error)\n return 0n\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getStructDecoder, fixDecoderSize, getBytesDecoder, getAddressDecoder, getU64Decoder } from '@solana/kit';
|
|
2
|
-
import { BOND_DISCRIMINATOR } from '
|
|
2
|
+
import { BOND_DISCRIMINATOR } from '../../constants/solanaConstants.js';
|
|
3
3
|
|
|
4
4
|
// Create the Bond account decoder
|
|
5
5
|
const bondDecoder = getStructDecoder([
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bondCodec.js","sources":["../../../../../src/adapters/solana/utils/codecs/bondCodec.ts"],"sourcesContent":["import { Address, getAddressDecoder } from '@solana/kit'\nimport {\n FixedSizeDecoder,\n fixDecoderSize,\n getBytesDecoder,\n getStructDecoder,\n getU64Decoder,\n ReadonlyUint8Array,\n} from '@solana/kit'\nimport { BOND_DISCRIMINATOR } from '../../constants/solanaConstants'\n\n// Bond account interface based on IDL\nexport interface BondAccount {\n anchorDiscriminator: ReadonlyUint8Array\n nftMint: Address\n payout: bigint\n payoutClaimed: bigint\n vestingStartTimestamp: bigint\n lastClaimTimestamp: bigint\n truePricePaid: bigint\n vesting: bigint\n vestingTerm: bigint\n}\n\n// Create the Bond account decoder\nexport const bondDecoder: FixedSizeDecoder<BondAccount> = getStructDecoder([\n ['anchorDiscriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['nftMint', getAddressDecoder()],\n ['payout', getU64Decoder()],\n ['payoutClaimed', getU64Decoder()],\n ['vestingStartTimestamp', getU64Decoder()],\n ['lastClaimTimestamp', getU64Decoder()],\n ['truePricePaid', getU64Decoder()],\n ['vesting', getU64Decoder()],\n ['vestingTerm', getU64Decoder()],\n])\n\n// Helper function to verify discriminator\nexport function verifyBondDiscriminator(data: ReadonlyUint8Array): boolean {\n const discriminator = data.slice(0, 8)\n return Array.from(discriminator).every((byte, index) => byte === BOND_DISCRIMINATOR[index])\n}\n"],"names":[],"mappings":";;;AAwBA;AACO,MAAM,WAAW,GAAkC,gBAAgB,CAAC;IACzE,CAAC,qBAAqB,EAAE,cAAc,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7D,IAAA,CAAC,SAAS,EAAE,iBAAiB,EAAE,CAAC;AAChC,IAAA,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC;AAC3B,IAAA,CAAC,eAAe,EAAE,aAAa,EAAE,CAAC;AAClC,IAAA,CAAC,uBAAuB,EAAE,aAAa,EAAE,CAAC;AAC1C,IAAA,CAAC,oBAAoB,EAAE,aAAa,EAAE,CAAC;AACvC,IAAA,CAAC,eAAe,EAAE,aAAa,EAAE,CAAC;AAClC,IAAA,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC;AAC5B,IAAA,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC;AACjC,CAAA;AAED;AACM,SAAU,uBAAuB,CAAC,IAAwB,EAAA;IAC9D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC7F;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getStructDecoder, fixDecoderSize, getBytesDecoder, getU32Decoder, getAddressDecoder, getU8Decoder, getU64Decoder } from '@solana/kit';
|
|
2
|
-
import { BOND_ISSUANCE_DISCRIMINATOR } from '
|
|
2
|
+
import { BOND_ISSUANCE_DISCRIMINATOR } from '../../constants/solanaConstants.js';
|
|
3
3
|
|
|
4
4
|
// BondIssuance discriminator from IDL
|
|
5
5
|
// Create the BondIssuance account decoder using Solana Kit's codec utilities
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bondIssuanceCodec.js","sources":["../../../../../src/adapters/solana/utils/codecs/bondIssuanceCodec.ts"],"sourcesContent":["import { Address, getAddressDecoder } from '@solana/kit'\nimport {\n FixedSizeDecoder,\n fixDecoderSize,\n getBytesDecoder,\n getStructDecoder,\n getU8Decoder,\n getU32Decoder,\n getU64Decoder,\n ReadonlyUint8Array,\n} from '@solana/kit'\nimport { BOND_ISSUANCE_DISCRIMINATOR } from '../../constants/solanaConstants'\n\n// BondIssuance account interface based on IDL\nexport interface BondIssuanceAccount {\n anchorDiscriminator: ReadonlyUint8Array\n issuanceCounter: number\n bondCounter: number\n payoutMint: Address\n principalMint: Address\n principalMintDecimals: number\n payoutMintDecimals: number\n treasuryAta: Address\n status: number // 0 = Paused, 1 = Active, 2 = Closed\n feeInPrincipal: bigint\n feePrincipalRecipient: Address\n feeInPayout: bigint\n feePayoutRecipient: Address\n partnerPrincipalRecipient: Address\n collection: Address\n bump: number\n}\n\n// BondIssuance discriminator from IDL\n\n// Create the BondIssuance account decoder using Solana Kit's codec utilities\nexport const bondIssuanceDecoder: FixedSizeDecoder<BondIssuanceAccount> = getStructDecoder([\n ['anchorDiscriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['issuanceCounter', getU32Decoder()],\n ['bondCounter', getU32Decoder()],\n ['payoutMint', getAddressDecoder()],\n ['principalMint', getAddressDecoder()],\n ['principalMintDecimals', getU8Decoder()],\n ['payoutMintDecimals', getU8Decoder()],\n ['treasuryAta', getAddressDecoder()],\n ['status', getU8Decoder()],\n ['feeInPrincipal', getU64Decoder()],\n ['feePrincipalRecipient', getAddressDecoder()],\n ['feeInPayout', getU64Decoder()],\n ['feePayoutRecipient', getAddressDecoder()],\n ['partnerPrincipalRecipient', getAddressDecoder()],\n ['collection', getAddressDecoder()],\n ['bump', getU8Decoder()],\n])\n\n// Helper function to verify discriminator\nexport function verifyBondIssuanceDiscriminator(data: ReadonlyUint8Array): boolean {\n const discriminator = data.slice(0, 8)\n return Array.from(discriminator).every((byte, index) => byte === BOND_ISSUANCE_DISCRIMINATOR[index])\n}\n"],"names":[],"mappings":";;;AAiCA;AAEA;AACO,MAAM,mBAAmB,GAA0C,gBAAgB,CAAC;IACzF,CAAC,qBAAqB,EAAE,cAAc,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7D,IAAA,CAAC,iBAAiB,EAAE,aAAa,EAAE,CAAC;AACpC,IAAA,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC;AAChC,IAAA,CAAC,YAAY,EAAE,iBAAiB,EAAE,CAAC;AACnC,IAAA,CAAC,eAAe,EAAE,iBAAiB,EAAE,CAAC;AACtC,IAAA,CAAC,uBAAuB,EAAE,YAAY,EAAE,CAAC;AACzC,IAAA,CAAC,oBAAoB,EAAE,YAAY,EAAE,CAAC;AACtC,IAAA,CAAC,aAAa,EAAE,iBAAiB,EAAE,CAAC;AACpC,IAAA,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC;AAC1B,IAAA,CAAC,gBAAgB,EAAE,aAAa,EAAE,CAAC;AACnC,IAAA,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,CAAC;AAC9C,IAAA,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC;AAChC,IAAA,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;AAC3C,IAAA,CAAC,2BAA2B,EAAE,iBAAiB,EAAE,CAAC;AAClD,IAAA,CAAC,YAAY,EAAE,iBAAiB,EAAE,CAAC;AACnC,IAAA,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;AACzB,CAAA;AAED;AACM,SAAU,+BAA+B,CAAC,IAAwB,EAAA;IACtE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK,2BAA2B,CAAC,KAAK,CAAC,CAAC;AACtG;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getStructDecoder, fixDecoderSize, getBytesDecoder, getU64Decoder } from '@solana/kit';
|
|
2
|
-
import { BOND_PRICING_DISCRIMINATOR } from '
|
|
2
|
+
import { BOND_PRICING_DISCRIMINATOR } from '../../constants/solanaConstants.js';
|
|
3
3
|
|
|
4
4
|
// BondPricing discriminator from IDL
|
|
5
5
|
// Create the BondPricing account decoder
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bondPricingCodec.js","sources":["../../../../../src/adapters/solana/utils/codecs/bondPricingCodec.ts"],"sourcesContent":["import {\n FixedSizeDecoder,\n fixDecoderSize,\n getBytesDecoder,\n getStructDecoder,\n getU64Decoder,\n ReadonlyUint8Array,\n} from '@solana/kit'\nimport { BOND_PRICING_DISCRIMINATOR } from '../../constants/solanaConstants'\n\n// BondPricing account interface based on IDL\nexport interface BondPricingAccount {\n anchorDiscriminator: ReadonlyUint8Array\n totalDebt: bigint\n totalPayoutGiven: bigint\n totalPrincipalBilled: bigint\n lastDecay: bigint\n lastBcvUpdateTimestamp: bigint\n minBcvUpdateInterval: bigint\n}\n\n// BondPricing discriminator from IDL\n\n// Create the BondPricing account decoder\nexport const bondPricingDecoder: FixedSizeDecoder<BondPricingAccount> = getStructDecoder([\n ['anchorDiscriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['totalDebt', getU64Decoder()],\n ['totalPayoutGiven', getU64Decoder()],\n ['totalPrincipalBilled', getU64Decoder()],\n ['lastDecay', getU64Decoder()],\n ['lastBcvUpdateTimestamp', getU64Decoder()],\n ['minBcvUpdateInterval', getU64Decoder()],\n])\n\n// Helper function to verify discriminator\nexport function verifyBondPricingDiscriminator(data: ReadonlyUint8Array): boolean {\n const discriminator = data.slice(0, 8)\n return Array.from(discriminator).every((byte, index) => byte === BOND_PRICING_DISCRIMINATOR[index])\n}\n"],"names":[],"mappings":";;;AAqBA;AAEA;AACO,MAAM,kBAAkB,GAAyC,gBAAgB,CAAC;IACvF,CAAC,qBAAqB,EAAE,cAAc,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7D,IAAA,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC;AAC9B,IAAA,CAAC,kBAAkB,EAAE,aAAa,EAAE,CAAC;AACrC,IAAA,CAAC,sBAAsB,EAAE,aAAa,EAAE,CAAC;AACzC,IAAA,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC;AAC9B,IAAA,CAAC,wBAAwB,EAAE,aAAa,EAAE,CAAC;AAC3C,IAAA,CAAC,sBAAsB,EAAE,aAAa,EAAE,CAAC;AAC1C,CAAA;AAED;AACM,SAAU,8BAA8B,CAAC,IAAwB,EAAA;IACrE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK,0BAA0B,CAAC,KAAK,CAAC,CAAC;AACrG;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getStructDecoder, fixDecoderSize, getBytesDecoder, getU64Decoder, getU8Decoder } from '@solana/kit';
|
|
2
|
-
import { BOND_TERM_DISCRIMINATOR } from '
|
|
2
|
+
import { BOND_TERM_DISCRIMINATOR } from '../../constants/solanaConstants.js';
|
|
3
3
|
|
|
4
4
|
// Create the BondTerm account decoder
|
|
5
5
|
const bondTermDecoder = getStructDecoder([
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bondTermCodec.js","sources":["../../../../../src/adapters/solana/utils/codecs/bondTermCodec.ts"],"sourcesContent":["import {\n FixedSizeDecoder,\n fixDecoderSize,\n getBytesDecoder,\n getStructDecoder,\n getU8Decoder,\n getU64Decoder,\n ReadonlyUint8Array,\n} from '@solana/kit'\nimport { BOND_TERM_DISCRIMINATOR } from '../../constants/solanaConstants'\n\n// BondTerm account interface based on IDL\nexport interface BondTermAccount {\n anchorDiscriminator: ReadonlyUint8Array\n controlVariable: bigint\n vestingEnd: bigint\n minimumDebt: bigint\n maxPayout: bigint\n maxDebt: bigint\n maxTotalPayout: bigint\n initialDebt: bigint\n payoutTokenInitialSupply: bigint\n vestingStrategy: number\n}\n\n// Create the BondTerm account decoder\nexport const bondTermDecoder: FixedSizeDecoder<BondTermAccount> = getStructDecoder([\n ['anchorDiscriminator', fixDecoderSize(getBytesDecoder(), 8)],\n ['controlVariable', getU64Decoder()],\n ['vestingEnd', getU64Decoder()],\n ['minimumDebt', getU64Decoder()],\n ['maxPayout', getU64Decoder()],\n ['maxDebt', getU64Decoder()],\n ['maxTotalPayout', getU64Decoder()],\n ['initialDebt', getU64Decoder()],\n ['payoutTokenInitialSupply', getU64Decoder()],\n ['vestingStrategy', getU8Decoder()],\n])\n\n// Helper function to verify discriminator\nexport function verifyBondTermDiscriminator(data: ReadonlyUint8Array): boolean {\n const discriminator = data.slice(0, 8)\n return Array.from(discriminator).every((byte, index) => byte === BOND_TERM_DISCRIMINATOR[index])\n}\n"],"names":[],"mappings":";;;AAyBA;AACO,MAAM,eAAe,GAAsC,gBAAgB,CAAC;IACjF,CAAC,qBAAqB,EAAE,cAAc,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7D,IAAA,CAAC,iBAAiB,EAAE,aAAa,EAAE,CAAC;AACpC,IAAA,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC;AAC/B,IAAA,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC;AAChC,IAAA,CAAC,WAAW,EAAE,aAAa,EAAE,CAAC;AAC9B,IAAA,CAAC,SAAS,EAAE,aAAa,EAAE,CAAC;AAC5B,IAAA,CAAC,gBAAgB,EAAE,aAAa,EAAE,CAAC;AACnC,IAAA,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC;AAChC,IAAA,CAAC,0BAA0B,EAAE,aAAa,EAAE,CAAC;AAC7C,IAAA,CAAC,iBAAiB,EAAE,YAAY,EAAE,CAAC;AACpC,CAAA;AAED;AACM,SAAU,2BAA2B,CAAC,IAAwB,EAAA;IAClE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAClG;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derivePda.js","sources":["../../../../src/adapters/solana/utils/derivePda.ts"],"sourcesContent":["import { PublicKey } from '@solana/web3.js'\n\nexport const derivePda = (seed: string, base: PublicKey, programId: PublicKey) => {\n const [pda] = PublicKey.findProgramAddressSync([new TextEncoder().encode(seed), base.toBuffer()], programId)\n return pda\n}\n"],"names":[],"mappings":";;AAEO,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,IAAe,EAAE,SAAoB,KAAI;IAC/E,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,sBAAsB,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,CAAC;AAC5G,IAAA,OAAO,GAAG;AACZ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getSolanaAccount.js","sources":["../../../../src/adapters/solana/utils/getSolanaAccount.ts"],"sourcesContent":["import { getSolanaRpc } from './solanaRpc'\nimport { address } from '@solana/kit'\nimport {\n bondIssuanceDecoder,\n verifyBondIssuanceDiscriminator,\n bondDecoder,\n verifyBondDiscriminator,\n bondTermDecoder,\n verifyBondTermDiscriminator,\n bondPricingDecoder,\n verifyBondPricingDiscriminator,\n BondIssuanceAccount,\n BondAccount,\n BondTermAccount,\n BondPricingAccount,\n} from './codecs'\nimport { Buffer } from 'buffer'\n\nexport async function getBondIssuanceAccountSolana(accountAddresses: string[]) {\n const rpc = getSolanaRpc()\n const bondIssuanceAddresses = accountAddresses.map((a) => address(a))\n\n const { value } = await rpc\n .getMultipleAccounts(bondIssuanceAddresses, {\n encoding: 'base64',\n commitment: 'confirmed',\n })\n .send()\n\n if (!value?.length) {\n throw new Error(`Accounts not found for: ${bondIssuanceAddresses}`)\n }\n\n const bondIssuanceAccounts: BondIssuanceAccount[] = []\n\n for (const account of value) {\n if (!account?.data?.[0]) return\n const accountDataBytes = Buffer.from(account?.data?.[0], 'base64')\n\n if (!verifyBondIssuanceDiscriminator(accountDataBytes)) {\n throw new Error(`Invalid account type. Expected BondIssuance account at ${account.owner}`)\n }\n\n const bondIssuanceAccount = bondIssuanceDecoder.decode(accountDataBytes)\n bondIssuanceAccounts.push(bondIssuanceAccount)\n }\n\n return bondIssuanceAccounts\n}\n\nexport async function getBondAccountSolana(accountAddresses: string[]) {\n const rpc = getSolanaRpc()\n const bondAddresses = accountAddresses.map((a) => address(a))\n\n const { value } = await rpc\n .getMultipleAccounts(bondAddresses, {\n encoding: 'base64',\n commitment: 'confirmed',\n })\n .send()\n\n if (!value?.length) {\n throw new Error(`Accounts not found for: ${bondAddresses}`)\n }\n\n const bondAccounts: BondAccount[] = []\n\n for (const account of value) {\n if (!account?.data?.[0]) return\n const accountDataBytes = Buffer.from(account?.data?.[0], 'base64')\n\n if (!verifyBondDiscriminator(accountDataBytes)) {\n throw new Error(`Invalid account type. Expected Bond account at ${account.owner}`)\n }\n\n const bondAccount = bondDecoder.decode(accountDataBytes)\n bondAccounts.push(bondAccount)\n }\n\n return bondAccounts\n}\n\nexport async function getBondTermAccountSolana(accountAddresses: string[]) {\n const rpc = getSolanaRpc()\n const bondTermAddresses = accountAddresses.map((a) => address(a))\n\n const { value } = await rpc\n .getMultipleAccounts(bondTermAddresses, {\n encoding: 'base64',\n commitment: 'confirmed',\n })\n .send()\n\n if (!value?.length) {\n throw new Error(`Accounts not found for: ${bondTermAddresses}`)\n }\n\n const bondTermAccounts: BondTermAccount[] = []\n\n for (const account of value) {\n if (!account?.data?.[0]) return\n const accountDataBytes = Buffer.from(account?.data?.[0], 'base64')\n\n if (!verifyBondTermDiscriminator(accountDataBytes)) {\n throw new Error(`Invalid account type. Expected BondTerm account at ${account.owner}`)\n }\n\n const bondTermAccount = bondTermDecoder.decode(accountDataBytes)\n bondTermAccounts.push(bondTermAccount)\n }\n\n return bondTermAccounts\n}\n\nexport async function getBondPricingAccountSolana(accountAddresses: string[]) {\n const rpc = getSolanaRpc()\n const bondPricingAddresses = accountAddresses.map((a) => address(a))\n\n const { value } = await rpc\n .getMultipleAccounts(bondPricingAddresses, {\n encoding: 'base64',\n commitment: 'confirmed',\n })\n .send()\n\n if (!value?.length) {\n throw new Error(`Accounts not found for: ${bondPricingAddresses}`)\n }\n\n const bondPricingAccounts: BondPricingAccount[] = []\n\n for (const account of value) {\n if (!account?.data?.[0]) return\n const accountDataBytes = Buffer.from(account?.data?.[0], 'base64')\n\n if (!verifyBondPricingDiscriminator(accountDataBytes)) {\n throw new Error(`Invalid account type. Expected BondPricing account at ${account.owner}`)\n }\n\n const bondPricingAccount = bondPricingDecoder.decode(accountDataBytes)\n bondPricingAccounts.push(bondPricingAccount)\n }\n\n return bondPricingAccounts\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polyfills.js","sources":["../../../../src/adapters/solana/utils/polyfills.ts"],"sourcesContent":["// Solana libraries (@solana/spl-token → @solana/spl-token-metadata) use Node's Buffer global at import time, which\n// browsers don't have. Imported first by ./index.ts, so it runs before any Solana library module: Solana partners\n// don't need their own polyfill, and partners without the Solana adapter never load it.\nimport { Buffer } from 'buffer'\n\nglobalThis.Buffer ??= Buffer\n"],"names":[],"mappings":";;AAAA;AACA;AACA;AAGA,UAAU,CAAC,MAAM,KAAjB,UAAU,CAAC,MAAM,GAAK,MAAM,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaAtaHelper.js","sources":["../../../../src/adapters/solana/utils/solanaAtaHelper.ts"],"sourcesContent":["import { Connection, PublicKey, TransactionInstruction } from '@solana/web3.js'\nimport {\n getAccount,\n getAssociatedTokenAddress,\n createAssociatedTokenAccountInstruction,\n TOKEN_PROGRAM_ID,\n TOKEN_2022_PROGRAM_ID,\n} from '@solana/spl-token'\n\n/**\n * Detects which token program owns a mint (SPL Token or Token-2022)\n * @param connection - Solana connection\n * @param mint - The mint public key to check\n * @returns The token program ID (TOKEN_PROGRAM_ID or TOKEN_2022_PROGRAM_ID)\n */\nexport const getTokenProgramForMint = async (connection: Connection, mint: PublicKey): Promise<PublicKey> => {\n const accountInfo = await connection.getAccountInfo(mint)\n if (!accountInfo) {\n throw new Error(`Mint account not found: ${mint.toBase58()}`)\n }\n\n if (accountInfo.owner.equals(TOKEN_2022_PROGRAM_ID)) {\n return TOKEN_2022_PROGRAM_ID\n }\n\n return TOKEN_PROGRAM_ID\n}\n\n/**\n * Checks if an Associated Token Account exists and returns creation instruction if needed\n * Now supports both SPL Token and Token-2022 by detecting the correct token program\n * @returns Object with ATA address and optional creation instruction\n */\nexport const getAtaWithCreateInstruction = async (\n connection: Connection,\n mint: PublicKey,\n owner: PublicKey,\n payer: PublicKey = owner,\n): Promise<{ address: PublicKey; createInstruction: TransactionInstruction | null }> => {\n // Detect which token program owns this mint\n const tokenProgram = await getTokenProgramForMint(connection, mint)\n\n // Get ATA with the correct token program\n const ataAddress = await getAssociatedTokenAddress(mint, owner, true, tokenProgram)\n\n try {\n await getAccount(connection, ataAddress, undefined, tokenProgram)\n return { address: ataAddress, createInstruction: null }\n } catch {\n const createInstruction = createAssociatedTokenAccountInstruction(payer, ataAddress, owner, mint, tokenProgram)\n return { address: ataAddress, createInstruction }\n }\n}\n"],"names":[],"mappings":";;AASA;;;;;AAKG;AACI,MAAM,sBAAsB,GAAG,OAAO,UAAsB,EAAE,IAAe,KAAwB;IAC1G,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC;IACzD,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,IAAI,CAAC,QAAQ,EAAE,CAAA,CAAE,CAAC;IAC/D;IAEA,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE;AACnD,QAAA,OAAO,qBAAqB;IAC9B;AAEA,IAAA,OAAO,gBAAgB;AACzB;AAEA;;;;AAIG;AACI,MAAM,2BAA2B,GAAG,OACzC,UAAsB,EACtB,IAAe,EACf,KAAgB,EAChB,KAAA,GAAmB,KAAK,KAC6D;;IAErF,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,UAAU,EAAE,IAAI,CAAC;;AAGnE,IAAA,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC;AAEnF,IAAA,IAAI;QACF,MAAM,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC;QACjE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE;IACzD;AAAE,IAAA,MAAM;AACN,QAAA,MAAM,iBAAiB,GAAG,uCAAuC,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC;AAC/G,QAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE;IACnD;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaMulticall.js","sources":["../../../../src/adapters/solana/utils/solanaMulticall.ts"],"sourcesContent":["import { PublicKey } from '@solana/web3.js'\nimport { getBondIssuanceAccountSolana, getBondPricingAccountSolana, getBondTermAccountSolana } from './getSolanaAccount'\n\nexport interface SolanaCall {\n accountAddress: string\n accountType: 'bond' | 'bondIssuance' | 'bondPricing' | 'bondTerm'\n}\n\n/**\n * Reads multiple Anchor accounts in one batch from multiple programs\n */\nexport async function solanaMulticall(calls: SolanaCall[]): Promise<Record<string, any>> {\n try {\n const results: Record<string, any> = {}\n\n const callIdsGroupedByAccountType = calls.reduce(\n (acc, call) => {\n if (!acc[call.accountType]) {\n acc[call.accountType] = []\n }\n acc[call.accountType].push(new PublicKey(call.accountAddress))\n return acc\n },\n {} as Record<string, PublicKey[]>,\n )\n\n for (const [accountType, callIds] of Object.entries(callIdsGroupedByAccountType)) {\n if (accountType === 'bond') {\n results[accountType] = await getBondIssuanceAccountSolana(callIds.map((id) => id.toBase58()))\n }\n if (accountType === 'bondIssuance') {\n results[accountType] = await getBondIssuanceAccountSolana(callIds.map((id) => id.toBase58()))\n }\n if (accountType === 'bondPricing') {\n results[accountType] = await getBondPricingAccountSolana(callIds.map((id) => id.toBase58()))\n }\n if (accountType === 'bondTerm') {\n results[accountType] = await getBondTermAccountSolana(callIds.map((id) => id.toBase58()))\n }\n if (results?.[accountType]?.[0] === null) {\n results[accountType] = []\n }\n }\n\n return results\n } catch (e) {\n console.error(e)\n return {}\n }\n}\n"],"names":[],"mappings":";;;AAQA;;AAEG;AACI,eAAe,eAAe,CAAC,KAAmB,EAAA;AACvD,IAAA,IAAI;QACF,MAAM,OAAO,GAAwB,EAAE;QAEvC,MAAM,2BAA2B,GAAG,KAAK,CAAC,MAAM,CAC9C,CAAC,GAAG,EAAE,IAAI,KAAI;YACZ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AAC1B,gBAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE;YAC5B;AACA,YAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC9D,YAAA,OAAO,GAAG;QACZ,CAAC,EACD,EAAiC,CAClC;AAED,QAAA,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,EAAE;AAChF,YAAA,IAAI,WAAW,KAAK,MAAM,EAAE;gBAC1B,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,4BAA4B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/F;AACA,YAAA,IAAI,WAAW,KAAK,cAAc,EAAE;gBAClC,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,4BAA4B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC/F;AACA,YAAA,IAAI,WAAW,KAAK,aAAa,EAAE;gBACjC,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,2BAA2B,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9F;AACA,YAAA,IAAI,WAAW,KAAK,UAAU,EAAE;gBAC9B,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3F;AACA,YAAA,IAAI,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;AACxC,gBAAA,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE;YAC3B;QACF;AAEA,QAAA,OAAO,OAAO;IAChB;IAAE,OAAO,CAAC,EAAE;AACV,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAChB,QAAA,OAAO,EAAE;IACX;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaRpc.js","sources":["../../../../src/adapters/solana/utils/solanaRpc.ts"],"sourcesContent":["import { createSolanaRpc } from '@solana/kit'\nimport { getRPC } from '../../../config/constants/networks'\nimport { ChainId } from '@ape.swap/apeswap-lists'\n\nexport function getSolanaRpc() {\n const rpc_url = getRPC(ChainId.SOL)\n const rpc = createSolanaRpc(rpc_url)\n return rpc\n}\n"],"names":[],"mappings":";;;;SAIgB,YAAY,GAAA;IAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;AACnC,IAAA,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC;AACpC,IAAA,OAAO,GAAG;AACZ;;;;"}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
-
import { claimable } from '
|
|
4
|
-
import useSOLAccount from '
|
|
5
|
-
import { getTimePeriods } from '
|
|
3
|
+
import { claimable } from '../../../utils/displayHelpers.js';
|
|
4
|
+
import useSOLAccount from '../state/useSOLAccount.js';
|
|
5
|
+
import { getTimePeriods } from '../../../utils/getTimePeriods.js';
|
|
6
6
|
import { Connection, PublicKey, TransactionInstruction, Transaction } from '@solana/web3.js';
|
|
7
7
|
import { ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token';
|
|
8
|
-
import { PROGRAM_ID, CLAIM_DISCRIMINATOR } from '
|
|
8
|
+
import { PROGRAM_ID, CLAIM_DISCRIMINATOR } from '../constants/solanaConstants.js';
|
|
9
9
|
import { ChainId } from '@ape.swap/apeswap-lists';
|
|
10
|
-
import { getRPC } from '
|
|
11
|
-
import useUserBonds from '
|
|
12
|
-
import { usePopups } from '
|
|
13
|
-
import { useSDKConfig } from '
|
|
14
|
-
import useBondsData from '
|
|
15
|
-
import { derivePda } from '
|
|
16
|
-
import { reportError } from '
|
|
17
|
-
import { getTokenProgramForMint, getAtaWithCreateInstruction } from '
|
|
18
|
-
import Button from '
|
|
10
|
+
import { getRPC } from '../../../config/constants/networks.js';
|
|
11
|
+
import useUserBonds from '../../../state/bonds/useUserBonds.js';
|
|
12
|
+
import { usePopups } from '../../../state/popups/usePopups.js';
|
|
13
|
+
import { useSDKConfig } from '../../../state/useSDKConfig.js';
|
|
14
|
+
import useBondsData from '../../../state/bonds/useBondsData.js';
|
|
15
|
+
import { derivePda } from '../utils/derivePda.js';
|
|
16
|
+
import { reportError } from '../../../utils/reportError.js';
|
|
17
|
+
import { getTokenProgramForMint, getAtaWithCreateInstruction } from '../utils/solanaAtaHelper.js';
|
|
18
|
+
import Button from '../../../components/uikit-sdk/Button/Button.js';
|
|
19
19
|
|
|
20
20
|
const ActionsSolana = ({ userBill }) => {
|
|
21
21
|
// Hooks
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActionsSolana.js","sources":["../../../../src/adapters/solana/views/ActionsSolana.tsx"],"sourcesContent":["import React, { useState } from 'react'\nimport { claimable } from '../../../utils/displayHelpers'\nimport { UserBill } from '../../../types/yourbonds'\nimport useSOLAccount from '../state/useSOLAccount'\nimport { getTimePeriods } from '../../../utils/getTimePeriods'\nimport { Connection, PublicKey, Transaction, TransactionInstruction } from '@solana/web3.js'\nimport { ASSOCIATED_TOKEN_PROGRAM_ID } from '@solana/spl-token'\nimport { CLAIM_DISCRIMINATOR, PROGRAM_ID } from '../constants/solanaConstants'\nimport { ChainId } from '@ape.swap/apeswap-lists'\nimport { getRPC } from '../../../config/constants/networks'\nimport useUserBonds from '../../../state/bonds/useUserBonds'\nimport { usePopups } from '../../../state/popups/usePopups'\nimport { useSDKConfig } from '../../../state/useSDKConfig'\nimport useBondsData from '../../../state/bonds/useBondsData'\nimport { derivePda } from '../utils/derivePda'\nimport { reportError } from '../../../utils/reportError'\nimport { getAtaWithCreateInstruction, getTokenProgramForMint } from '../utils/solanaAtaHelper'\nimport Button from '../../../components/uikit-sdk/Button/Button'\n\nconst ActionsSolana = ({ userBill }: { userBill?: UserBill }) => {\n // Hooks\n const SDKConfig = useSDKConfig()\n const { publicKey: accountSolana, signTransaction } = useSOLAccount()\n const { refetch } = useUserBonds()\n const { addToastError, addToastSuccess } = usePopups()\n const { data: liveBonds } = useBondsData()\n\n // State\n const [loadingTx, setLoadingTx] = useState(false)\n\n // Static Data\n const similarLiveBond = liveBonds?.find(\n (bond) =>\n !bond?.soldOut &&\n !bond?.hide &&\n bond?.earnToken?.symbol?.toLowerCase() === userBill?.bond?.earnToken?.symbol?.toLowerCase(),\n )\n const canPurchaseAgain = !!similarLiveBond\n const connection = new Connection(getRPC(ChainId.SOL), 'confirmed')\n const vestingCliff = userBill?.bond?.vestingCliff\n const currentTime = Math.round(new Date().getTime() / 1000)\n const purchaseTimestamp = parseInt(userBill?.vestingStartTimestamp ?? '0')\n const isPendingCliff = vestingCliff ? currentTime - purchaseTimestamp < vestingCliff : false\n const cliffCountdown = getTimePeriods(purchaseTimestamp + (vestingCliff ?? 0) - currentTime, true)\n\n const handleClaim = async () => {\n // Early return guard - prevent double execution\n if (loadingTx || !accountSolana || !userBill) return\n\n try {\n setLoadingTx(true)\n const earnTokenAddress = userBill?.bond?.earnToken?.address?.[userBill?.bond?.chainId]\n const contractAddress = userBill?.bond?.contractAddress?.[userBill?.bond?.chainId]\n\n if (!earnTokenAddress || !userBill.asset || !contractAddress) return\n\n const payoutMint = new PublicKey(earnTokenAddress)\n const bondIssuancePda = new PublicKey(contractAddress)\n const bondPricingPda = derivePda('bond_pricing', bondIssuancePda, PROGRAM_ID)\n const nftMint = new PublicKey(userBill.asset)\n\n // Detect token program for payout mint (supports Token-2022)\n const payoutTokenProgram = await getTokenProgramForMint(connection, payoutMint)\n\n const [bondTermPda] = PublicKey.findProgramAddressSync(\n [new TextEncoder().encode('bond_term'), bondIssuancePda.toBuffer()],\n PROGRAM_ID,\n )\n\n const [bondPda] = PublicKey.findProgramAddressSync(\n [new TextEncoder().encode('bond'), bondIssuancePda.toBuffer(), nftMint.toBuffer()],\n PROGRAM_ID,\n )\n\n // Get user payout ATA and creation instruction if needed\n const { address: userPayoutAta, createInstruction: createAtaIx } = await getAtaWithCreateInstruction(\n connection,\n payoutMint,\n accountSolana,\n )\n\n // Treasury ATA (standard associated token account for bond issuance PDA)\n const { address: treasuryAta, createInstruction: createTreasuryAtaIx } = await getAtaWithCreateInstruction(\n connection,\n payoutMint,\n bondIssuancePda,\n accountSolana,\n )\n\n // Build keys list\n const keys = [\n { pubkey: bondPda as PublicKey, isSigner: false, isWritable: true },\n { pubkey: bondTermPda as PublicKey, isSigner: false, isWritable: false },\n { pubkey: bondIssuancePda as PublicKey, isSigner: false, isWritable: false },\n { pubkey: bondPricingPda as PublicKey, isSigner: false, isWritable: true },\n { pubkey: accountSolana as PublicKey, isSigner: true, isWritable: true }, // user\n { pubkey: nftMint as PublicKey, isSigner: false, isWritable: true },\n { pubkey: userPayoutAta as PublicKey, isSigner: false, isWritable: true },\n { pubkey: treasuryAta, isSigner: false, isWritable: true },\n { pubkey: payoutMint, isSigner: false, isWritable: false }, // payout_mint\n { pubkey: payoutTokenProgram, isSigner: false, isWritable: false }, // token_program (dynamic)\n { pubkey: ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },\n { pubkey: new PublicKey('CoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d'), isSigner: false, isWritable: false }, // mplCoreProgram\n { pubkey: PROGRAM_ID, isSigner: false, isWritable: false }, // passing programId is the same as passing null\n ]\n\n // Build Claim Instruction (no args → just discriminator)\n const claimInstruction = new TransactionInstruction({\n keys,\n programId: PROGRAM_ID,\n data: CLAIM_DISCRIMINATOR,\n })\n\n // Build Transaction - include ATA creation if needed\n const transaction = new Transaction()\n if (createTreasuryAtaIx) transaction.add(createTreasuryAtaIx)\n if (createAtaIx) transaction.add(createAtaIx)\n transaction.add(claimInstruction)\n transaction.feePayer = accountSolana\n\n // Get fresh blockhash right before signing\n const { blockhash, lastValidBlockHeight } = await connection.getLatestBlockhash('finalized')\n transaction.recentBlockhash = blockhash\n\n if (!signTransaction) return\n const signedTx = await signTransaction(transaction)\n\n // Send with better error handling\n const txHash = await connection.sendRawTransaction(signedTx.serialize(), {\n skipPreflight: false,\n preflightCommitment: 'finalized',\n maxRetries: 0, // Don't auto-retry to avoid duplicates\n })\n\n await connection.confirmTransaction(\n {\n signature: txHash,\n blockhash,\n lastValidBlockHeight,\n },\n 'confirmed',\n )\n\n const txStatus = await connection.getSignatureStatus(txHash, { searchTransactionHistory: true })\n if (txStatus?.value?.confirmationStatus === 'confirmed' || txStatus?.value?.confirmationStatus === 'finalized') {\n console.log('Tx confirmed on-chain, refetching bonds')\n refetch()\n addToastSuccess(txHash, ChainId.SOL)\n }\n } catch (error: any) {\n console.error('Claim failed:', error)\n\n // Better error messaging for duplicate transactions\n if (error?.message?.includes('already been processed')) {\n addToastError('Transaction already processed. Please wait and try again.')\n } else {\n addToastError(error?.message ?? 'Unknown error')\n }\n reportError({\n apiUrl: SDKConfig?.urls?.apiV2,\n error,\n account: accountSolana?.toBase58(),\n chainId: ChainId.SOL,\n extraInfo: { type: 'claim', userBill, error },\n })\n } finally {\n setLoadingTx(false)\n }\n }\n\n return (\n <>\n <Button\n variant=\"secondary\"\n disabled={claimable(userBill) === 0 || loadingTx || !userBill || isPendingCliff}\n load={loadingTx}\n onClick={(event) => {\n event.stopPropagation()\n if (!loadingTx) handleClaim()\n }}\n className=\"ape:text-[14px]! ape:w-full\"\n >\n {isPendingCliff\n ? `Claimable in ${cliffCountdown.days !== 0 ? `${cliffCountdown.days} days` : cliffCountdown.hours !== 0 ? `${cliffCountdown.hours} hours` : `${cliffCountdown.minutes} mins`}`\n : 'Claim'}\n </Button>\n <Button\n className=\"ape:text-[14px]! ape:w-full\"\n onClick={() =>\n canPurchaseAgain\n ? (window.location.href = `/bonds?bondAddress=${similarLiveBond.contractAddress[similarLiveBond.chainId]}&bondChain=${similarLiveBond.chainId}`)\n : null\n }\n disabled={!canPurchaseAgain}\n >\n {canPurchaseAgain ? 'Buy again' : 'sold out'}\n </Button>\n </>\n )\n}\n\nexport default ActionsSolana\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
|