liquidity.ts 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { Commitment, Connection, PublicKey } from '@solana/web3.js';
  2. import {
  3. Liquidity,
  4. LiquidityPoolKeys,
  5. Market,
  6. TokenAccount,
  7. SPL_ACCOUNT_LAYOUT,
  8. publicKey,
  9. struct,
  10. MAINNET_PROGRAM_ID,
  11. LiquidityStateV4,
  12. } from '@raydium-io/raydium-sdk';
  13. import { TOKEN_PROGRAM_ID } from '@solana/spl-token';
  14. import { MinimalMarketLayoutV3 } from '../market';
  15. export const RAYDIUM_LIQUIDITY_PROGRAM_ID_V4 = MAINNET_PROGRAM_ID.AmmV4;
  16. export const OPENBOOK_PROGRAM_ID = MAINNET_PROGRAM_ID.OPENBOOK_MARKET;
  17. export const MINIMAL_MARKET_STATE_LAYOUT_V3 = struct([
  18. publicKey('eventQueue'),
  19. publicKey('bids'),
  20. publicKey('asks'),
  21. ]);
  22. export function createPoolKeys(
  23. id: PublicKey,
  24. accountData: LiquidityStateV4,
  25. minimalMarketLayoutV3: MinimalMarketLayoutV3,
  26. ): LiquidityPoolKeys {
  27. return {
  28. id,
  29. baseMint: accountData.baseMint,
  30. quoteMint: accountData.quoteMint,
  31. lpMint: accountData.lpMint,
  32. baseDecimals: accountData.baseDecimal.toNumber(),
  33. quoteDecimals: accountData.quoteDecimal.toNumber(),
  34. lpDecimals: 5,
  35. version: 4,
  36. programId: RAYDIUM_LIQUIDITY_PROGRAM_ID_V4,
  37. authority: Liquidity.getAssociatedAuthority({
  38. programId: RAYDIUM_LIQUIDITY_PROGRAM_ID_V4,
  39. }).publicKey,
  40. openOrders: accountData.openOrders,
  41. targetOrders: accountData.targetOrders,
  42. baseVault: accountData.baseVault,
  43. quoteVault: accountData.quoteVault,
  44. marketVersion: 3,
  45. marketProgramId: accountData.marketProgramId,
  46. marketId: accountData.marketId,
  47. marketAuthority: Market.getAssociatedAuthority({
  48. programId: accountData.marketProgramId,
  49. marketId: accountData.marketId,
  50. }).publicKey,
  51. marketBaseVault: accountData.baseVault,
  52. marketQuoteVault: accountData.quoteVault,
  53. marketBids: minimalMarketLayoutV3.bids,
  54. marketAsks: minimalMarketLayoutV3.asks,
  55. marketEventQueue: minimalMarketLayoutV3.eventQueue,
  56. withdrawQueue: accountData.withdrawQueue,
  57. lpVault: accountData.lpVault,
  58. lookupTableAccount: PublicKey.default,
  59. };
  60. }
  61. export async function getTokenAccounts(
  62. connection: Connection,
  63. owner: PublicKey,
  64. commitment?: Commitment,
  65. ) {
  66. const tokenResp = await connection.getTokenAccountsByOwner(
  67. owner,
  68. {
  69. programId: TOKEN_PROGRAM_ID,
  70. },
  71. commitment,
  72. );
  73. const accounts: TokenAccount[] = [];
  74. for (const { pubkey, account } of tokenResp.value) {
  75. accounts.push({
  76. pubkey,
  77. programId: account.owner,
  78. accountInfo: SPL_ACCOUNT_LAYOUT.decode(account.data),
  79. });
  80. }
  81. return accounts;
  82. }