serializeAddressTableLookups static method
serialize address table
Implementation
static List<int> serializeAddressTableLookups(
List<AddressTableLookup> addressTableLookups) {
int serializedLength = 0;
final serializedAddressTableLookups =
List<int>.filled(SolanaTransactionConstant.packetDataSize, 0);
for (final lookup in addressTableLookups) {
final encodedWritableIndexesLength =
SolanaTransactionUtils._encodeLength(lookup.writableIndexes.length);
final encodedReadonlyIndexesLength =
SolanaTransactionUtils._encodeLength(lookup.readonlyIndexes.length);
final addressTableLookupLayout = LayoutConst.struct([
SolanaLayoutUtils.publicKey('accountKey'),
LayoutConst.blob(encodedWritableIndexesLength.length,
property: 'encodedWritableIndexesLength'),
LayoutConst.array(LayoutConst.u8(), lookup.writableIndexes.length,
property: 'writableIndexes'),
LayoutConst.blob(encodedReadonlyIndexesLength.length,
property: 'encodedReadonlyIndexesLength'),
LayoutConst.array(LayoutConst.u8(), lookup.readonlyIndexes.length,
property: 'readonlyIndexes')
]);
final encode = addressTableLookupLayout.serialize({
'accountKey': lookup.accountKey,
'encodedWritableIndexesLength': encodedWritableIndexesLength,
'writableIndexes': lookup.writableIndexes,
'encodedReadonlyIndexesLength': encodedReadonlyIndexesLength,
'readonlyIndexes': lookup.readonlyIndexes
});
serializedAddressTableLookups.setAll(serializedLength, encode);
serializedLength += encode.length;
}
return serializedAddressTableLookups.sublist(0, serializedLength);
}