prepareTransaction method

Future<String> prepareTransaction({
  1. required String sourcePrivateKey,
  2. required String senderWallet,
  3. required String destinationWallet,
  4. required int amount,
  5. required SolanaClient solanaClient,
})

Prepare transaction

Params

String sourcePrivateKey Sender private key in base58 String senderWallet Receiver wallet address String destinationWallet Mint address int amount Amount to send in WORKEN SolanaClient solanaClient RPC client

Return

String Transaction hash

Implementation

Future<String> prepareTransaction({
  required String sourcePrivateKey,
  required String senderWallet,
  required String destinationWallet,
  required int amount,
  required solana.SolanaClient solanaClient,
}) async {
  final solana.Ed25519HDPublicKey fromBase58 =
      solana.Ed25519HDPublicKey.fromBase58(sourcePrivateKey);

  final solana.Ed25519HDKeyPair senderKeyPair =
      await solana.Ed25519HDKeyPair.fromSeedWithHdPath(
    seed: fromBase58.bytes,
    hdPath: "m/44'/501'/0'/0'",
  );

  final solana.Ed25519HDPublicKey senderPubKey =
      solana.Ed25519HDPublicKey(base58decode(senderWallet));

  final solana.Ed25519HDPublicKey receiverPubKey =
      solana.Ed25519HDPublicKey(base58decode(destinationWallet));

  final solana.Ed25519HDPublicKey sourceAccount =
      await getOrCreateAssociatedTokenAccount(
    senderKeyPair,
    senderPubKey,
    senderPubKey,
    solanaClient,
  );

  final solana.Ed25519HDPublicKey destinationAccount =
      await getOrCreateAssociatedTokenAccount(
    senderKeyPair,
    senderPubKey,
    receiverPubKey,
    solanaClient,
  );

  final String instruction = await solanaClient.transferSplToken(
    mint: sourceAccount,
    destination: destinationAccount,
    amount: amount,
    owner: senderKeyPair,
  );

  final recentBlockhash = await getRecentBlockhash(solanaClient);

  final transaction = await solana.signTransaction(
    recentBlockhash.value,
    solana.Message.decompile(
      encoder.CompiledMessage(encoder.ByteArray.fromString(instruction)),
    ),
    [senderKeyPair],
  );

  final rawBinaryString = transaction.encode();

  return rawBinaryString;
}