initializeMultisig2.ts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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. AccountRole,
  10. combineCodec,
  11. getStructDecoder,
  12. getStructEncoder,
  13. getU8Decoder,
  14. getU8Encoder,
  15. transformEncoder,
  16. type Address,
  17. type Codec,
  18. type Decoder,
  19. type Encoder,
  20. type IAccountMeta,
  21. type IInstruction,
  22. type IInstructionWithAccounts,
  23. type IInstructionWithData,
  24. type WritableAccount,
  25. } from '@solana/web3.js';
  26. import { TOKEN_PROGRAM_ADDRESS } from '../programs';
  27. import { getAccountMetaFactory, type ResolvedAccount } from '../shared';
  28. export const INITIALIZE_MULTISIG2_DISCRIMINATOR = 19;
  29. export function getInitializeMultisig2DiscriminatorBytes() {
  30. return getU8Encoder().encode(INITIALIZE_MULTISIG2_DISCRIMINATOR);
  31. }
  32. export type InitializeMultisig2Instruction<
  33. TProgram extends string = typeof TOKEN_PROGRAM_ADDRESS,
  34. TAccountMultisig extends string | IAccountMeta<string> = string,
  35. TRemainingAccounts extends readonly IAccountMeta<string>[] = [],
  36. > = IInstruction<TProgram> &
  37. IInstructionWithData<Uint8Array> &
  38. IInstructionWithAccounts<
  39. [
  40. TAccountMultisig extends string
  41. ? WritableAccount<TAccountMultisig>
  42. : TAccountMultisig,
  43. ...TRemainingAccounts,
  44. ]
  45. >;
  46. export type InitializeMultisig2InstructionData = {
  47. discriminator: number;
  48. /** The number of signers (M) required to validate this multisignature account. */
  49. m: number;
  50. };
  51. export type InitializeMultisig2InstructionDataArgs = {
  52. /** The number of signers (M) required to validate this multisignature account. */
  53. m: number;
  54. };
  55. export function getInitializeMultisig2InstructionDataEncoder(): Encoder<InitializeMultisig2InstructionDataArgs> {
  56. return transformEncoder(
  57. getStructEncoder([
  58. ['discriminator', getU8Encoder()],
  59. ['m', getU8Encoder()],
  60. ]),
  61. (value) => ({ ...value, discriminator: INITIALIZE_MULTISIG2_DISCRIMINATOR })
  62. );
  63. }
  64. export function getInitializeMultisig2InstructionDataDecoder(): Decoder<InitializeMultisig2InstructionData> {
  65. return getStructDecoder([
  66. ['discriminator', getU8Decoder()],
  67. ['m', getU8Decoder()],
  68. ]);
  69. }
  70. export function getInitializeMultisig2InstructionDataCodec(): Codec<
  71. InitializeMultisig2InstructionDataArgs,
  72. InitializeMultisig2InstructionData
  73. > {
  74. return combineCodec(
  75. getInitializeMultisig2InstructionDataEncoder(),
  76. getInitializeMultisig2InstructionDataDecoder()
  77. );
  78. }
  79. export type InitializeMultisig2Input<TAccountMultisig extends string = string> =
  80. {
  81. /** The multisignature account to initialize. */
  82. multisig: Address<TAccountMultisig>;
  83. m: InitializeMultisig2InstructionDataArgs['m'];
  84. signers: Array<Address>;
  85. };
  86. export function getInitializeMultisig2Instruction<
  87. TAccountMultisig extends string,
  88. TProgramAddress extends Address = typeof TOKEN_PROGRAM_ADDRESS,
  89. >(
  90. input: InitializeMultisig2Input<TAccountMultisig>,
  91. config?: { programAddress?: TProgramAddress }
  92. ): InitializeMultisig2Instruction<TProgramAddress, TAccountMultisig> {
  93. // Program address.
  94. const programAddress = config?.programAddress ?? TOKEN_PROGRAM_ADDRESS;
  95. // Original accounts.
  96. const originalAccounts = {
  97. multisig: { value: input.multisig ?? null, isWritable: true },
  98. };
  99. const accounts = originalAccounts as Record<
  100. keyof typeof originalAccounts,
  101. ResolvedAccount
  102. >;
  103. // Original args.
  104. const args = { ...input };
  105. // Remaining accounts.
  106. const remainingAccounts: IAccountMeta[] = args.signers.map((address) => ({
  107. address,
  108. role: AccountRole.READONLY,
  109. }));
  110. const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
  111. const instruction = {
  112. accounts: [getAccountMeta(accounts.multisig), ...remainingAccounts],
  113. programAddress,
  114. data: getInitializeMultisig2InstructionDataEncoder().encode(
  115. args as InitializeMultisig2InstructionDataArgs
  116. ),
  117. } as InitializeMultisig2Instruction<TProgramAddress, TAccountMultisig>;
  118. return instruction;
  119. }
  120. export type ParsedInitializeMultisig2Instruction<
  121. TProgram extends string = typeof TOKEN_PROGRAM_ADDRESS,
  122. TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[],
  123. > = {
  124. programAddress: Address<TProgram>;
  125. accounts: {
  126. /** The multisignature account to initialize. */
  127. multisig: TAccountMetas[0];
  128. };
  129. data: InitializeMultisig2InstructionData;
  130. };
  131. export function parseInitializeMultisig2Instruction<
  132. TProgram extends string,
  133. TAccountMetas extends readonly IAccountMeta[],
  134. >(
  135. instruction: IInstruction<TProgram> &
  136. IInstructionWithAccounts<TAccountMetas> &
  137. IInstructionWithData<Uint8Array>
  138. ): ParsedInitializeMultisig2Instruction<TProgram, TAccountMetas> {
  139. if (instruction.accounts.length < 1) {
  140. // TODO: Coded error.
  141. throw new Error('Not enough accounts');
  142. }
  143. let accountIndex = 0;
  144. const getNextAccount = () => {
  145. const accountMeta = instruction.accounts![accountIndex]!;
  146. accountIndex += 1;
  147. return accountMeta;
  148. };
  149. return {
  150. programAddress: instruction.programAddress,
  151. accounts: {
  152. multisig: getNextAccount(),
  153. },
  154. data: getInitializeMultisig2InstructionDataDecoder().decode(
  155. instruction.data
  156. ),
  157. };
  158. }