deserialize static method
Implementation
static AddressLookupTableState deserialize(ByteArray accountData) {
final input = Uint8List.fromList(accountData.toList());
final reader = BinaryReader(input.buffer.asByteData());
final typeIndex = reader.readU32();
if (typeIndex != 1) {
throw Exception(
'invalid account data; account type mismatch $typeIndex != 1',
);
}
final deactivationSlot = reader.readU64();
final lastExtendedSlot = reader.readU64();
final lastExtendedStartIndex = reader.readU8();
reader.readU8();
final authority = reader
.readFixedArray(
1,
() => reader.readFixedArray(32, reader.readU8),
)
.map(Ed25519HDPublicKey.new)
.toList();
final int serializedAddressesLen =
accountData.length - _lookupTableMetaSize;
assert(serializedAddressesLen >= 0, 'lookup table is invalid');
assert(serializedAddressesLen % 32 == 0, 'lookup table is invalid');
final int numSerializedAddresses = serializedAddressesLen ~/ 32;
final addressReader =
BinaryReader(input.sublist(_lookupTableMetaSize).buffer.asByteData());
final addresses = addressReader
.readFixedArray(
numSerializedAddresses,
() => addressReader.readFixedArray(32, addressReader.readU8),
)
.map(Ed25519HDPublicKey.new)
.toList();
return AddressLookupTableState(
deactivationSlot: deactivationSlot,
lastExtendedSlot: lastExtendedSlot.toInt(),
lastExtendedSlotStartIndex: lastExtendedStartIndex,
authority: authority.isNotEmpty ? authority.first : null,
addresses: addresses,
);
}