parseBase64RpcAccount function
Parses a base64-encoded account provided by the RPC client into an
EncodedAccount type or a MaybeEncodedAccount type if the raw data
is null.
The rpcAccount map is expected to have the structure returned by the
Solana RPC getAccountInfo method with base64 encoding:
{
"data": ["base64EncodedString", "base64"],
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"space": 42
}
Implementation
MaybeEncodedAccount parseBase64RpcAccount(
Address address,
Map<String, Object?>? rpcAccount,
) {
if (rpcAccount == null) {
return NonExistingAccount<Uint8List>(address);
}
final data = rpcAccount['data'];
final String base64String;
if (data is List) {
base64String = data[0]! as String;
} else {
base64String = data! as String;
}
final decodedData = getBase64Encoder().encode(base64String);
final baseAccount = parseBaseAccount(rpcAccount);
return ExistingAccount<Uint8List>(
Account<Uint8List>(
address: address,
data: decodedData,
executable: baseAccount.executable,
lamports: baseAccount.lamports,
programAddress: baseAccount.programAddress,
space: baseAccount.space,
),
);
}