readExtionsionBytesFromAccountData static method
List<int>
readExtionsionBytesFromAccountData({
- required ExtensionType extensionType,
- required List<
int> accountBytes, - SolanaTokenAccountType? type,
Implementation
static List<int> readExtionsionBytesFromAccountData(
{required ExtensionType extensionType,
required List<int> accountBytes,
SolanaTokenAccountType? type}) {
try {
final extensionBytesOffset = SolanaTokenAccountUtils.accountSize +
SolanaTokenAccountUtils.accountTypeSize;
final tlvData = accountBytes.sublist(extensionBytesOffset);
if (tlvData.length < (extensionType.layoutSize ?? 0)) {
throw MessageException("Account extension data length is insufficient.",
details: {
"Expected": extensionType.layoutSize,
"length": tlvData.length
});
}
if (type != null) {
final accountType = SolanaTokenAccountType.fromValue(
accountBytes[SolanaTokenAccountUtils.accountSize]);
if (accountType != type) {
throw MessageException("invalid account type",
details: {"Excepted": type.name, "Type": accountType.name});
}
}
final extensionBytes = SPLToken2022Utils.getExtensionData(
extension: extensionType, tlvData: tlvData);
return extensionBytes!;
} catch (e) {
throw const MessageException("Invalid extionsion bytes");
}
}