createTokenAccount method

Future<Account> createTokenAccount({
  1. required Ed25519HDPublicKey mint,
  2. required Wallet account,
  3. required Wallet creator,
  4. SignatureCallback? onSigned,
  5. Commitment commitment = Commitment.finalized,
})

Create an account for account.

Implementation

Future<Account> createTokenAccount({
  required Ed25519HDPublicKey mint,
  required Wallet account,
  required Wallet creator,
  SignatureCallback? onSigned,
  Commitment commitment = Commitment.finalized,
}) async {
  const space = TokenProgram.neededAccountSpace;
  final rent = await rpcClient.getMinimumBalanceForRentExemption(space);
  final instructions = TokenInstruction.createAndInitializeAccount(
    address: account.publicKey,
    owner: creator.publicKey,
    mint: mint,
    rent: rent,
    space: space,
  );
  await sendAndConfirmTransaction(
    message: Message(instructions: instructions),
    signers: [creator, account],
    onSigned: onSigned ?? ignoreOnSigned,
    commitment: commitment,
  );

  // TODO(IA): need to check if it is executable and grab the rentEpoch
  return Account(
    owner: account.address,
    lamports: 0,
    executable: false,
    rentEpoch: BigInt.zero,
    data: null,
  );
}