wasm.rs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. use crate::{
  2. accounts::{
  3. AuthoritySigner,
  4. FromCustodyTokenAccount,
  5. FromCustodyTokenAccountDerivationData,
  6. MigrationPool,
  7. MigrationPoolDerivationData,
  8. ShareMint,
  9. ShareMintDerivationData,
  10. ToCustodyTokenAccount,
  11. ToCustodyTokenAccountDerivationData,
  12. },
  13. instructions,
  14. types::PoolData,
  15. };
  16. use borsh::BorshDeserialize;
  17. use solana_program::pubkey::Pubkey;
  18. use solitaire::{
  19. processors::seeded::Seeded,
  20. AccountState,
  21. };
  22. use std::str::FromStr;
  23. use wasm_bindgen::prelude::*;
  24. #[wasm_bindgen]
  25. pub fn add_liquidity(
  26. program_id: String,
  27. from_mint: String,
  28. to_mint: String,
  29. liquidity_token_account: String,
  30. lp_share_token_account: String,
  31. amount: u64,
  32. ) -> JsValue {
  33. let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
  34. let from_mint = Pubkey::from_str(from_mint.as_str()).unwrap();
  35. let to_mint = Pubkey::from_str(to_mint.as_str()).unwrap();
  36. let liquidity_token_account = Pubkey::from_str(liquidity_token_account.as_str()).unwrap();
  37. let lp_share_token_account = Pubkey::from_str(lp_share_token_account.as_str()).unwrap();
  38. let ix = instructions::add_liquidity(
  39. program_id,
  40. from_mint,
  41. to_mint,
  42. liquidity_token_account,
  43. lp_share_token_account,
  44. amount,
  45. )
  46. .unwrap();
  47. JsValue::from_serde(&ix).unwrap()
  48. }
  49. #[wasm_bindgen]
  50. pub fn remove_liquidity(
  51. program_id: String,
  52. from_mint: String,
  53. to_mint: String,
  54. liquidity_token_account: String,
  55. lp_share_token_account: String,
  56. amount: u64,
  57. ) -> JsValue {
  58. let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
  59. let from_mint = Pubkey::from_str(from_mint.as_str()).unwrap();
  60. let to_mint = Pubkey::from_str(to_mint.as_str()).unwrap();
  61. let liquidity_token_account = Pubkey::from_str(liquidity_token_account.as_str()).unwrap();
  62. let lp_share_token_account = Pubkey::from_str(lp_share_token_account.as_str()).unwrap();
  63. let ix = instructions::remove_liquidity(
  64. program_id,
  65. from_mint,
  66. to_mint,
  67. liquidity_token_account,
  68. lp_share_token_account,
  69. amount,
  70. )
  71. .unwrap();
  72. JsValue::from_serde(&ix).unwrap()
  73. }
  74. #[wasm_bindgen]
  75. pub fn claim_shares(
  76. program_id: String,
  77. from_mint: String,
  78. to_mint: String,
  79. output_token_account: String,
  80. lp_share_token_account: String,
  81. amount: u64,
  82. ) -> JsValue {
  83. let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
  84. let from_mint = Pubkey::from_str(from_mint.as_str()).unwrap();
  85. let to_mint = Pubkey::from_str(to_mint.as_str()).unwrap();
  86. let output_token_account = Pubkey::from_str(output_token_account.as_str()).unwrap();
  87. let lp_share_token_account = Pubkey::from_str(lp_share_token_account.as_str()).unwrap();
  88. let ix = instructions::claim_shares(
  89. program_id,
  90. from_mint,
  91. to_mint,
  92. output_token_account,
  93. lp_share_token_account,
  94. amount,
  95. )
  96. .unwrap();
  97. JsValue::from_serde(&ix).unwrap()
  98. }
  99. #[wasm_bindgen]
  100. pub fn create_pool(
  101. program_id: String,
  102. payer: String,
  103. from_mint: String,
  104. to_mint: String,
  105. ) -> JsValue {
  106. let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
  107. let payer = Pubkey::from_str(payer.as_str()).unwrap();
  108. let from_mint = Pubkey::from_str(from_mint.as_str()).unwrap();
  109. let to_mint = Pubkey::from_str(to_mint.as_str()).unwrap();
  110. let ix = instructions::create_pool(program_id, payer, from_mint, to_mint).unwrap();
  111. JsValue::from_serde(&ix).unwrap()
  112. }
  113. #[wasm_bindgen]
  114. pub fn migrate_tokens(
  115. program_id: String,
  116. from_mint: String,
  117. to_mint: String,
  118. input_token_account: String,
  119. output_token_account: String,
  120. amount: u64,
  121. ) -> JsValue {
  122. let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
  123. let from_mint = Pubkey::from_str(from_mint.as_str()).unwrap();
  124. let to_mint = Pubkey::from_str(to_mint.as_str()).unwrap();
  125. let input_token_account = Pubkey::from_str(input_token_account.as_str()).unwrap();
  126. let output_token_account = Pubkey::from_str(output_token_account.as_str()).unwrap();
  127. let ix = instructions::migrate_tokens(
  128. program_id,
  129. from_mint,
  130. to_mint,
  131. input_token_account,
  132. output_token_account,
  133. amount,
  134. )
  135. .unwrap();
  136. JsValue::from_serde(&ix).unwrap()
  137. }
  138. #[wasm_bindgen]
  139. pub fn pool_address(program_id: String, from_mint: String, to_mint: String) -> Vec<u8> {
  140. let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
  141. let from_mint_key = Pubkey::from_str(from_mint.as_str()).unwrap();
  142. let to_mint_key = Pubkey::from_str(to_mint.as_str()).unwrap();
  143. let pool_addr = MigrationPool::<'_, { AccountState::Initialized }>::key(
  144. &MigrationPoolDerivationData {
  145. from: from_mint_key,
  146. to: to_mint_key,
  147. },
  148. &program_id,
  149. );
  150. pool_addr.to_bytes().to_vec()
  151. }
  152. #[wasm_bindgen]
  153. pub fn authority_address(program_id: String) -> Vec<u8> {
  154. let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
  155. let authority_addr = AuthoritySigner::key(None, &program_id);
  156. authority_addr.to_bytes().to_vec()
  157. }
  158. #[wasm_bindgen]
  159. pub fn share_mint_address(program_id: String, pool: String) -> Vec<u8> {
  160. let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
  161. let pool_key = Pubkey::from_str(pool.as_str()).unwrap();
  162. let share_mint_addr = ShareMint::<'_, { AccountState::Initialized }>::key(
  163. &ShareMintDerivationData { pool: pool_key },
  164. &program_id,
  165. );
  166. share_mint_addr.to_bytes().to_vec()
  167. }
  168. #[wasm_bindgen]
  169. pub fn from_custody_address(program_id: String, pool: String) -> Vec<u8> {
  170. let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
  171. let pool_key = Pubkey::from_str(pool.as_str()).unwrap();
  172. let from_custody_addr = FromCustodyTokenAccount::<'_, { AccountState::Initialized }>::key(
  173. &FromCustodyTokenAccountDerivationData { pool: pool_key },
  174. &program_id,
  175. );
  176. from_custody_addr.to_bytes().to_vec()
  177. }
  178. #[wasm_bindgen]
  179. pub fn to_custody_address(program_id: String, pool: String) -> Vec<u8> {
  180. let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
  181. let pool_key = Pubkey::from_str(pool.as_str()).unwrap();
  182. let to_custody_addr = ToCustodyTokenAccount::<'_, { AccountState::Initialized }>::key(
  183. &ToCustodyTokenAccountDerivationData { pool: pool_key },
  184. &program_id,
  185. );
  186. to_custody_addr.to_bytes().to_vec()
  187. }
  188. #[wasm_bindgen]
  189. pub fn parse_pool(data: Vec<u8>) -> JsValue {
  190. JsValue::from_serde(&PoolData::try_from_slice(data.as_slice()).unwrap()).unwrap()
  191. }