prepareTransaction method
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;
}