CompiledKeys.compile constructor

CompiledKeys.compile(
  1. List<TransactionInstruction> instructions,
  2. SolAddress payer
)

Implementation

factory CompiledKeys.compile(
  List<TransactionInstruction> instructions,
  SolAddress payer,
) {
  final keyMetaMap = <String, _KeyMeta>{};
  keyMetaMap[payer.address] ??= _KeyMeta.defaultKey();
  keyMetaMap[payer.address] = keyMetaMap[payer.address]!.copyWith(
    isSigner: true,
    isWritable: true,
  );
  for (final ix in instructions) {
    final String programIdAddress = ix.programId.address;
    keyMetaMap[programIdAddress] ??= _KeyMeta.defaultKey();
    keyMetaMap[programIdAddress] = keyMetaMap[programIdAddress]!.copyWith(
      isInvoked: true,
    );
    for (final accountMeta in ix.keys) {
      final addr = accountMeta.publicKey.address;
      keyMetaMap[addr] ??= _KeyMeta.defaultKey();
      final bool isSigner = keyMetaMap[addr]!.isSigner;
      final bool isWritable = keyMetaMap[addr]!.isWritable;
      if (!isSigner) {
        keyMetaMap[addr] = keyMetaMap[addr]!.copyWith(
          isSigner: accountMeta.isSigner,
        );
      }
      if (!isWritable) {
        keyMetaMap[addr] = keyMetaMap[addr]!.copyWith(
          isWritable: accountMeta.isWritable,
        );
      }
    }
  }
  return CompiledKeys._(payer: payer, keyMetaMap: keyMetaMap);
}