1
0

recoverNestedAssociatedToken.ts 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /**
  2. * This code was AUTOGENERATED using the kinobi library.
  3. * Please DO NOT EDIT THIS FILE, instead use visitors
  4. * to add features, then rerun kinobi to update it.
  5. *
  6. * @see https://github.com/metaplex-foundation/kinobi
  7. */
  8. import {
  9. Address,
  10. IAccountMeta,
  11. IAccountSignerMeta,
  12. IInstruction,
  13. IInstructionWithAccounts,
  14. ReadonlyAccount,
  15. TransactionSigner,
  16. WritableAccount,
  17. WritableSignerAccount,
  18. } from '@solana/web3.js';
  19. import { ASSOCIATED_TOKEN_PROGRAM_ADDRESS } from '../programs';
  20. import { ResolvedAccount, getAccountMetaFactory } from '../shared';
  21. export type RecoverNestedAssociatedTokenInstruction<
  22. TProgram extends string = typeof ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
  23. TAccountNestedAssociatedAccountAddress extends
  24. | string
  25. | IAccountMeta<string> = string,
  26. TAccountNestedTokenMintAddress extends string | IAccountMeta<string> = string,
  27. TAccountDestinationAssociatedAccountAddress extends
  28. | string
  29. | IAccountMeta<string> = string,
  30. TAccountOwnerAssociatedAccountAddress extends
  31. | string
  32. | IAccountMeta<string> = string,
  33. TAccountOwnerTokenMintAddress extends string | IAccountMeta<string> = string,
  34. TAccountWalletAddress extends string | IAccountMeta<string> = string,
  35. TAccountTokenProgram extends
  36. | string
  37. | IAccountMeta<string> = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',
  38. TRemainingAccounts extends readonly IAccountMeta<string>[] = [],
  39. > = IInstruction<TProgram> &
  40. IInstructionWithAccounts<
  41. [
  42. TAccountNestedAssociatedAccountAddress extends string
  43. ? WritableAccount<TAccountNestedAssociatedAccountAddress>
  44. : TAccountNestedAssociatedAccountAddress,
  45. TAccountNestedTokenMintAddress extends string
  46. ? ReadonlyAccount<TAccountNestedTokenMintAddress>
  47. : TAccountNestedTokenMintAddress,
  48. TAccountDestinationAssociatedAccountAddress extends string
  49. ? WritableAccount<TAccountDestinationAssociatedAccountAddress>
  50. : TAccountDestinationAssociatedAccountAddress,
  51. TAccountOwnerAssociatedAccountAddress extends string
  52. ? ReadonlyAccount<TAccountOwnerAssociatedAccountAddress>
  53. : TAccountOwnerAssociatedAccountAddress,
  54. TAccountOwnerTokenMintAddress extends string
  55. ? ReadonlyAccount<TAccountOwnerTokenMintAddress>
  56. : TAccountOwnerTokenMintAddress,
  57. TAccountWalletAddress extends string
  58. ? WritableSignerAccount<TAccountWalletAddress> &
  59. IAccountSignerMeta<TAccountWalletAddress>
  60. : TAccountWalletAddress,
  61. TAccountTokenProgram extends string
  62. ? ReadonlyAccount<TAccountTokenProgram>
  63. : TAccountTokenProgram,
  64. ...TRemainingAccounts,
  65. ]
  66. >;
  67. export type RecoverNestedAssociatedTokenInput<
  68. TAccountNestedAssociatedAccountAddress extends string = string,
  69. TAccountNestedTokenMintAddress extends string = string,
  70. TAccountDestinationAssociatedAccountAddress extends string = string,
  71. TAccountOwnerAssociatedAccountAddress extends string = string,
  72. TAccountOwnerTokenMintAddress extends string = string,
  73. TAccountWalletAddress extends string = string,
  74. TAccountTokenProgram extends string = string,
  75. > = {
  76. nestedAssociatedAccountAddress: Address<TAccountNestedAssociatedAccountAddress>;
  77. nestedTokenMintAddress: Address<TAccountNestedTokenMintAddress>;
  78. destinationAssociatedAccountAddress: Address<TAccountDestinationAssociatedAccountAddress>;
  79. ownerAssociatedAccountAddress: Address<TAccountOwnerAssociatedAccountAddress>;
  80. ownerTokenMintAddress: Address<TAccountOwnerTokenMintAddress>;
  81. walletAddress: TransactionSigner<TAccountWalletAddress>;
  82. tokenProgram?: Address<TAccountTokenProgram>;
  83. };
  84. export function getRecoverNestedAssociatedTokenInstruction<
  85. TAccountNestedAssociatedAccountAddress extends string,
  86. TAccountNestedTokenMintAddress extends string,
  87. TAccountDestinationAssociatedAccountAddress extends string,
  88. TAccountOwnerAssociatedAccountAddress extends string,
  89. TAccountOwnerTokenMintAddress extends string,
  90. TAccountWalletAddress extends string,
  91. TAccountTokenProgram extends string,
  92. >(
  93. input: RecoverNestedAssociatedTokenInput<
  94. TAccountNestedAssociatedAccountAddress,
  95. TAccountNestedTokenMintAddress,
  96. TAccountDestinationAssociatedAccountAddress,
  97. TAccountOwnerAssociatedAccountAddress,
  98. TAccountOwnerTokenMintAddress,
  99. TAccountWalletAddress,
  100. TAccountTokenProgram
  101. >
  102. ): RecoverNestedAssociatedTokenInstruction<
  103. typeof ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
  104. TAccountNestedAssociatedAccountAddress,
  105. TAccountNestedTokenMintAddress,
  106. TAccountDestinationAssociatedAccountAddress,
  107. TAccountOwnerAssociatedAccountAddress,
  108. TAccountOwnerTokenMintAddress,
  109. TAccountWalletAddress,
  110. TAccountTokenProgram
  111. > {
  112. // Program address.
  113. const programAddress = ASSOCIATED_TOKEN_PROGRAM_ADDRESS;
  114. // Original accounts.
  115. const originalAccounts = {
  116. nestedAssociatedAccountAddress: {
  117. value: input.nestedAssociatedAccountAddress ?? null,
  118. isWritable: true,
  119. },
  120. nestedTokenMintAddress: {
  121. value: input.nestedTokenMintAddress ?? null,
  122. isWritable: false,
  123. },
  124. destinationAssociatedAccountAddress: {
  125. value: input.destinationAssociatedAccountAddress ?? null,
  126. isWritable: true,
  127. },
  128. ownerAssociatedAccountAddress: {
  129. value: input.ownerAssociatedAccountAddress ?? null,
  130. isWritable: false,
  131. },
  132. ownerTokenMintAddress: {
  133. value: input.ownerTokenMintAddress ?? null,
  134. isWritable: false,
  135. },
  136. walletAddress: { value: input.walletAddress ?? null, isWritable: true },
  137. tokenProgram: { value: input.tokenProgram ?? null, isWritable: false },
  138. };
  139. const accounts = originalAccounts as Record<
  140. keyof typeof originalAccounts,
  141. ResolvedAccount
  142. >;
  143. // Resolve default values.
  144. if (!accounts.tokenProgram.value) {
  145. accounts.tokenProgram.value =
  146. 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA' as Address<'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'>;
  147. }
  148. const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
  149. const instruction = {
  150. accounts: [
  151. getAccountMeta(accounts.nestedAssociatedAccountAddress),
  152. getAccountMeta(accounts.nestedTokenMintAddress),
  153. getAccountMeta(accounts.destinationAssociatedAccountAddress),
  154. getAccountMeta(accounts.ownerAssociatedAccountAddress),
  155. getAccountMeta(accounts.ownerTokenMintAddress),
  156. getAccountMeta(accounts.walletAddress),
  157. getAccountMeta(accounts.tokenProgram),
  158. ],
  159. programAddress,
  160. } as RecoverNestedAssociatedTokenInstruction<
  161. typeof ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
  162. TAccountNestedAssociatedAccountAddress,
  163. TAccountNestedTokenMintAddress,
  164. TAccountDestinationAssociatedAccountAddress,
  165. TAccountOwnerAssociatedAccountAddress,
  166. TAccountOwnerTokenMintAddress,
  167. TAccountWalletAddress,
  168. TAccountTokenProgram
  169. >;
  170. return instruction;
  171. }
  172. export type ParsedRecoverNestedAssociatedTokenInstruction<
  173. TProgram extends string = typeof ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
  174. TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[],
  175. > = {
  176. programAddress: Address<TProgram>;
  177. accounts: {
  178. nestedAssociatedAccountAddress: TAccountMetas[0];
  179. nestedTokenMintAddress: TAccountMetas[1];
  180. destinationAssociatedAccountAddress: TAccountMetas[2];
  181. ownerAssociatedAccountAddress: TAccountMetas[3];
  182. ownerTokenMintAddress: TAccountMetas[4];
  183. walletAddress: TAccountMetas[5];
  184. tokenProgram: TAccountMetas[6];
  185. };
  186. };
  187. export function parseRecoverNestedAssociatedTokenInstruction<
  188. TProgram extends string,
  189. TAccountMetas extends readonly IAccountMeta[],
  190. >(
  191. instruction: IInstruction<TProgram> & IInstructionWithAccounts<TAccountMetas>
  192. ): ParsedRecoverNestedAssociatedTokenInstruction<TProgram, TAccountMetas> {
  193. if (instruction.accounts.length < 7) {
  194. // TODO: Coded error.
  195. throw new Error('Not enough accounts');
  196. }
  197. let accountIndex = 0;
  198. const getNextAccount = () => {
  199. const accountMeta = instruction.accounts![accountIndex]!;
  200. accountIndex += 1;
  201. return accountMeta;
  202. };
  203. return {
  204. programAddress: instruction.programAddress,
  205. accounts: {
  206. nestedAssociatedAccountAddress: getNextAccount(),
  207. nestedTokenMintAddress: getNextAccount(),
  208. destinationAssociatedAccountAddress: getNextAccount(),
  209. ownerAssociatedAccountAddress: getNextAccount(),
  210. ownerTokenMintAddress: getNextAccount(),
  211. walletAddress: getNextAccount(),
  212. tokenProgram: getNextAccount(),
  213. },
  214. };
  215. }