compileV0 method

CompiledMessage compileV0({
  1. required String recentBlockhash,
  2. required Ed25519HDPublicKey feePayer,
  3. List<AddressLookupTableAccount> addressLookupTableAccounts = const [],
})

Implementation

CompiledMessage compileV0({
  required String recentBlockhash,
  required Ed25519HDPublicKey feePayer,
  List<AddressLookupTableAccount> addressLookupTableAccounts = const [],
}) {
  final compiledKeys =
      CompiledKeys.compile(instructions: instructions, payer: feePayer);

  final addressTableLookups = <MessageAddressTableLookup>[];
  final writableKeys = <Ed25519HDPublicKey>[];
  final readonlyKeys = <Ed25519HDPublicKey>[];

  for (final lookupTable in addressLookupTableAccounts) {
    final extractResult = compiledKeys.extractTableLookup(lookupTable);
    if (extractResult != null) {
      final addressTableLookup = extractResult.lookup;
      final writable = extractResult.keys.writable;
      final readonly = extractResult.keys.readonly;

      addressTableLookups.add(addressTableLookup);

      writableKeys.addAll(writable);
      readonlyKeys.addAll(readonly);
    }
  }

  final messageComponents = compiledKeys.getMessageComponents();
  final staticAccountKeys = messageComponents.publicKeys;
  final accountKeys = MessageAccountKeys(
    staticAccountKeys: staticAccountKeys,
    accountKeysFromLookups: LoadedAddresses(
      writable: writableKeys,
      readonly: readonlyKeys,
    ),
  );

  final messageInstructions = accountKeys.compileInstructions(instructions);

  return CompiledMessage.v0(
    header: messageComponents.header,
    accountKeys: staticAccountKeys,
    recentBlockhash: recentBlockhash,
    instructions: messageInstructions,
    addressTableLookups: addressTableLookups,
  );
}