program.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. import { PublicKey } from "@solana/web3.js";
  2. import { Program, AnchorProvider } from "@coral-xyz/anchor";
  3. import { SplAssociatedTokenAccountCoder } from "./coder";
  4. export const SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID = new PublicKey(
  5. "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
  6. );
  7. interface GetProgramParams {
  8. programId?: PublicKey;
  9. provider?: AnchorProvider;
  10. }
  11. export function splAssociatedTokenAccountProgram(
  12. params?: GetProgramParams
  13. ): Program<SplAssociatedTokenAccount> {
  14. return new Program<SplAssociatedTokenAccount>(
  15. params?.programId ? { ...IDL, address: params.programId.toString() } : IDL,
  16. params?.provider,
  17. new SplAssociatedTokenAccountCoder(IDL)
  18. );
  19. }
  20. type SplAssociatedTokenAccount = {
  21. address: string;
  22. metadata: {
  23. name: "splAssociatedTokenAccount";
  24. version: "1.1.1";
  25. spec: "0.1.0";
  26. };
  27. instructions: [
  28. {
  29. name: "create";
  30. discriminator: [0];
  31. accounts: [
  32. {
  33. name: "fundingAddress";
  34. writable: true;
  35. signer: true;
  36. },
  37. {
  38. name: "associatedAccountAddress";
  39. writable: true;
  40. },
  41. {
  42. name: "walletAddress";
  43. },
  44. {
  45. name: "tokenMintAddress";
  46. },
  47. {
  48. name: "systemProgram";
  49. address: "11111111111111111111111111111111";
  50. },
  51. {
  52. name: "tokenProgram";
  53. address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
  54. }
  55. ];
  56. args: [];
  57. },
  58. {
  59. name: "createIdempotent";
  60. discriminator: [1];
  61. accounts: [
  62. {
  63. name: "fundingAddress";
  64. writable: true;
  65. signer: true;
  66. },
  67. {
  68. name: "associatedAccountAddress";
  69. writable: true;
  70. },
  71. {
  72. name: "walletAddress";
  73. },
  74. {
  75. name: "tokenMintAddress";
  76. },
  77. {
  78. name: "systemProgram";
  79. address: "11111111111111111111111111111111";
  80. },
  81. {
  82. name: "tokenProgram";
  83. address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
  84. }
  85. ];
  86. args: [];
  87. },
  88. {
  89. name: "recoverNested";
  90. discriminator: [2];
  91. accounts: [
  92. {
  93. name: "nestedAssociatedAccountAddress";
  94. writable: true;
  95. },
  96. {
  97. name: "nestedTokenMintAddress";
  98. },
  99. {
  100. name: "destinationAssociatedAccountAddress";
  101. writable: true;
  102. },
  103. {
  104. name: "ownerAssociatedAccountAddress";
  105. },
  106. {
  107. name: "ownerTokenMintAddress";
  108. },
  109. {
  110. name: "walletAddress";
  111. writable: true;
  112. signer: true;
  113. },
  114. {
  115. name: "tokenProgram";
  116. address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
  117. }
  118. ];
  119. args: [];
  120. }
  121. ];
  122. errors: [
  123. {
  124. code: 0;
  125. name: "invalidOwner";
  126. msg: "Associated token account owner does not match address derivation";
  127. }
  128. ];
  129. };
  130. const IDL: SplAssociatedTokenAccount = {
  131. address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
  132. metadata: {
  133. name: "splAssociatedTokenAccount",
  134. version: "1.1.1",
  135. spec: "0.1.0",
  136. },
  137. instructions: [
  138. {
  139. name: "create",
  140. discriminator: [0],
  141. accounts: [
  142. {
  143. name: "fundingAddress",
  144. writable: true,
  145. signer: true,
  146. },
  147. {
  148. name: "associatedAccountAddress",
  149. writable: true,
  150. },
  151. {
  152. name: "walletAddress",
  153. },
  154. {
  155. name: "tokenMintAddress",
  156. },
  157. {
  158. name: "systemProgram",
  159. address: "11111111111111111111111111111111",
  160. },
  161. {
  162. name: "tokenProgram",
  163. address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
  164. },
  165. ],
  166. args: [],
  167. },
  168. {
  169. name: "createIdempotent",
  170. discriminator: [1],
  171. accounts: [
  172. {
  173. name: "fundingAddress",
  174. writable: true,
  175. signer: true,
  176. },
  177. {
  178. name: "associatedAccountAddress",
  179. writable: true,
  180. },
  181. {
  182. name: "walletAddress",
  183. },
  184. {
  185. name: "tokenMintAddress",
  186. },
  187. {
  188. name: "systemProgram",
  189. address: "11111111111111111111111111111111",
  190. },
  191. {
  192. name: "tokenProgram",
  193. address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
  194. },
  195. ],
  196. args: [],
  197. },
  198. {
  199. name: "recoverNested",
  200. discriminator: [2],
  201. accounts: [
  202. {
  203. name: "nestedAssociatedAccountAddress",
  204. writable: true,
  205. },
  206. {
  207. name: "nestedTokenMintAddress",
  208. },
  209. {
  210. name: "destinationAssociatedAccountAddress",
  211. writable: true,
  212. },
  213. {
  214. name: "ownerAssociatedAccountAddress",
  215. },
  216. {
  217. name: "ownerTokenMintAddress",
  218. },
  219. {
  220. name: "walletAddress",
  221. writable: true,
  222. signer: true,
  223. },
  224. {
  225. name: "tokenProgram",
  226. address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
  227. },
  228. ],
  229. args: [],
  230. },
  231. ],
  232. errors: [
  233. {
  234. code: 0,
  235. name: "invalidOwner",
  236. msg: "Associated token account owner does not match address derivation",
  237. },
  238. ],
  239. };