advanceNonceAccount.ts 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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/kinobi-so/kinobi
  7. */
  8. import {
  9. combineCodec,
  10. getStructDecoder,
  11. getStructEncoder,
  12. getU32Decoder,
  13. getU32Encoder,
  14. transformEncoder,
  15. type Address,
  16. type Codec,
  17. type Decoder,
  18. type Encoder,
  19. type IAccountMeta,
  20. type IAccountSignerMeta,
  21. type IInstruction,
  22. type IInstructionWithAccounts,
  23. type IInstructionWithData,
  24. type ReadonlyAccount,
  25. type ReadonlySignerAccount,
  26. type TransactionSigner,
  27. type WritableAccount,
  28. } from '@solana/web3.js';
  29. import { SYSTEM_PROGRAM_ADDRESS } from '../programs';
  30. import { getAccountMetaFactory, type ResolvedAccount } from '../shared';
  31. export const ADVANCE_NONCE_ACCOUNT_DISCRIMINATOR = 4;
  32. export function getAdvanceNonceAccountDiscriminatorBytes() {
  33. return getU32Encoder().encode(ADVANCE_NONCE_ACCOUNT_DISCRIMINATOR);
  34. }
  35. export type AdvanceNonceAccountInstruction<
  36. TProgram extends string = typeof SYSTEM_PROGRAM_ADDRESS,
  37. TAccountNonceAccount extends string | IAccountMeta<string> = string,
  38. TAccountRecentBlockhashesSysvar extends
  39. | string
  40. | IAccountMeta<string> = 'SysvarRecentB1ockHashes11111111111111111111',
  41. TAccountNonceAuthority extends string | IAccountMeta<string> = string,
  42. TRemainingAccounts extends readonly IAccountMeta<string>[] = [],
  43. > = IInstruction<TProgram> &
  44. IInstructionWithData<Uint8Array> &
  45. IInstructionWithAccounts<
  46. [
  47. TAccountNonceAccount extends string
  48. ? WritableAccount<TAccountNonceAccount>
  49. : TAccountNonceAccount,
  50. TAccountRecentBlockhashesSysvar extends string
  51. ? ReadonlyAccount<TAccountRecentBlockhashesSysvar>
  52. : TAccountRecentBlockhashesSysvar,
  53. TAccountNonceAuthority extends string
  54. ? ReadonlySignerAccount<TAccountNonceAuthority> &
  55. IAccountSignerMeta<TAccountNonceAuthority>
  56. : TAccountNonceAuthority,
  57. ...TRemainingAccounts,
  58. ]
  59. >;
  60. export type AdvanceNonceAccountInstructionData = { discriminator: number };
  61. export type AdvanceNonceAccountInstructionDataArgs = {};
  62. export function getAdvanceNonceAccountInstructionDataEncoder(): Encoder<AdvanceNonceAccountInstructionDataArgs> {
  63. return transformEncoder(
  64. getStructEncoder([['discriminator', getU32Encoder()]]),
  65. (value) => ({
  66. ...value,
  67. discriminator: ADVANCE_NONCE_ACCOUNT_DISCRIMINATOR,
  68. })
  69. );
  70. }
  71. export function getAdvanceNonceAccountInstructionDataDecoder(): Decoder<AdvanceNonceAccountInstructionData> {
  72. return getStructDecoder([['discriminator', getU32Decoder()]]);
  73. }
  74. export function getAdvanceNonceAccountInstructionDataCodec(): Codec<
  75. AdvanceNonceAccountInstructionDataArgs,
  76. AdvanceNonceAccountInstructionData
  77. > {
  78. return combineCodec(
  79. getAdvanceNonceAccountInstructionDataEncoder(),
  80. getAdvanceNonceAccountInstructionDataDecoder()
  81. );
  82. }
  83. export type AdvanceNonceAccountInput<
  84. TAccountNonceAccount extends string = string,
  85. TAccountRecentBlockhashesSysvar extends string = string,
  86. TAccountNonceAuthority extends string = string,
  87. > = {
  88. nonceAccount: Address<TAccountNonceAccount>;
  89. recentBlockhashesSysvar?: Address<TAccountRecentBlockhashesSysvar>;
  90. nonceAuthority: TransactionSigner<TAccountNonceAuthority>;
  91. };
  92. export function getAdvanceNonceAccountInstruction<
  93. TAccountNonceAccount extends string,
  94. TAccountRecentBlockhashesSysvar extends string,
  95. TAccountNonceAuthority extends string,
  96. TProgramAddress extends Address = typeof SYSTEM_PROGRAM_ADDRESS,
  97. >(
  98. input: AdvanceNonceAccountInput<
  99. TAccountNonceAccount,
  100. TAccountRecentBlockhashesSysvar,
  101. TAccountNonceAuthority
  102. >,
  103. config?: { programAddress?: TProgramAddress }
  104. ): AdvanceNonceAccountInstruction<
  105. TProgramAddress,
  106. TAccountNonceAccount,
  107. TAccountRecentBlockhashesSysvar,
  108. TAccountNonceAuthority
  109. > {
  110. // Program address.
  111. const programAddress = config?.programAddress ?? SYSTEM_PROGRAM_ADDRESS;
  112. // Original accounts.
  113. const originalAccounts = {
  114. nonceAccount: { value: input.nonceAccount ?? null, isWritable: true },
  115. recentBlockhashesSysvar: {
  116. value: input.recentBlockhashesSysvar ?? null,
  117. isWritable: false,
  118. },
  119. nonceAuthority: { value: input.nonceAuthority ?? null, isWritable: false },
  120. };
  121. const accounts = originalAccounts as Record<
  122. keyof typeof originalAccounts,
  123. ResolvedAccount
  124. >;
  125. // Resolve default values.
  126. if (!accounts.recentBlockhashesSysvar.value) {
  127. accounts.recentBlockhashesSysvar.value =
  128. 'SysvarRecentB1ockHashes11111111111111111111' as Address<'SysvarRecentB1ockHashes11111111111111111111'>;
  129. }
  130. const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
  131. const instruction = {
  132. accounts: [
  133. getAccountMeta(accounts.nonceAccount),
  134. getAccountMeta(accounts.recentBlockhashesSysvar),
  135. getAccountMeta(accounts.nonceAuthority),
  136. ],
  137. programAddress,
  138. data: getAdvanceNonceAccountInstructionDataEncoder().encode({}),
  139. } as AdvanceNonceAccountInstruction<
  140. TProgramAddress,
  141. TAccountNonceAccount,
  142. TAccountRecentBlockhashesSysvar,
  143. TAccountNonceAuthority
  144. >;
  145. return instruction;
  146. }
  147. export type ParsedAdvanceNonceAccountInstruction<
  148. TProgram extends string = typeof SYSTEM_PROGRAM_ADDRESS,
  149. TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[],
  150. > = {
  151. programAddress: Address<TProgram>;
  152. accounts: {
  153. nonceAccount: TAccountMetas[0];
  154. recentBlockhashesSysvar: TAccountMetas[1];
  155. nonceAuthority: TAccountMetas[2];
  156. };
  157. data: AdvanceNonceAccountInstructionData;
  158. };
  159. export function parseAdvanceNonceAccountInstruction<
  160. TProgram extends string,
  161. TAccountMetas extends readonly IAccountMeta[],
  162. >(
  163. instruction: IInstruction<TProgram> &
  164. IInstructionWithAccounts<TAccountMetas> &
  165. IInstructionWithData<Uint8Array>
  166. ): ParsedAdvanceNonceAccountInstruction<TProgram, TAccountMetas> {
  167. if (instruction.accounts.length < 3) {
  168. // TODO: Coded error.
  169. throw new Error('Not enough accounts');
  170. }
  171. let accountIndex = 0;
  172. const getNextAccount = () => {
  173. const accountMeta = instruction.accounts![accountIndex]!;
  174. accountIndex += 1;
  175. return accountMeta;
  176. };
  177. return {
  178. programAddress: instruction.programAddress,
  179. accounts: {
  180. nonceAccount: getNextAccount(),
  181. recentBlockhashesSysvar: getNextAccount(),
  182. nonceAuthority: getNextAccount(),
  183. },
  184. data: getAdvanceNonceAccountInstructionDataDecoder().decode(
  185. instruction.data
  186. ),
  187. };
  188. }