addInput method

  1. @override
void addInput({
  1. required Outpoint outpoint,
  2. Uint8List? witnessUtxoScript,
  3. BigInt? witnessUtxoValue,
  4. Tx? nonWitnessUtxo,
  5. int sequence = 0xffffffff,
})
override

Implementation

@override
void addInput({
  required Outpoint outpoint,
  Uint8List? witnessUtxoScript,
  BigInt? witnessUtxoValue,
  Tx? nonWitnessUtxo,
  int sequence = 0xffffffff,
}) {
  _ensureSections();

  final inputKvs = <PsbtKeyValue>[];

  // PSBT_IN_PREVIOUS_TXID (0x0e): 32-byte txid in internal byte order
  inputKvs.add(PsbtKeyValue(
    key: Uint8List.fromList([PsbtInputEntry.previousTxid.keyType]),
    value: outpoint.txid,
  ));

  // PSBT_IN_OUTPUT_INDEX (0x0f): 4-byte LE vout
  final voutBytes = Uint8List(4);
  WireWriter(voutBytes).writeUInt32(outpoint.vout);
  inputKvs.add(PsbtKeyValue(
    key: Uint8List.fromList([PsbtInputEntry.outputIndex.keyType]),
    value: voutBytes,
  ));

  // PSBT_IN_SEQUENCE (0x10): 4-byte LE sequence
  final seqBytes = Uint8List(4);
  WireWriter(seqBytes).writeUInt32(sequence);
  inputKvs.add(PsbtKeyValue(
    key: Uint8List.fromList([PsbtInputEntry.sequence.keyType]),
    value: seqBytes,
  ));

  if (nonWitnessUtxo != null) {
    inputKvs.add(PsbtKeyValue(
      key: Uint8List.fromList([PsbtInputEntry.nonWitnessUtxo.keyType]),
      value: nonWitnessUtxo.toBytes(),
    ));
  }

  if (witnessUtxoScript != null && witnessUtxoValue != null) {
    final out = TxOutput(value: witnessUtxoValue, scriptPubKey: witnessUtxoScript);
    inputKvs.add(PsbtKeyValue(
      key: Uint8List.fromList([PsbtInputEntry.witnessUtxo.keyType]),
      value: out.toBytes(),
    ));
  }

  final insertIndex = 1 + _inputCount;
  _sections.insert(insertIndex, inputKvs);
  _inputCount++;
}