parseBase64RpcAccount function

MaybeEncodedAccount parseBase64RpcAccount(
  1. Address address,
  2. Map<String, Object?>? rpcAccount
)

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,
    ),
  );
}