write method

  1. @override
void write(
  1. Writer writer
)
override

Override to write data into writer

Implementation

@override
void write(Writer writer) {

  final extFlag = leafHash == null ? 0 : 1;

  writer.writeUInt8(0); // "Epoch"
  writer.writeUInt8(hashType.value);

  // Total transaction data
  writer.writeUInt32(tx.version);
  writer.writeUInt32(tx.locktime);

  if (!hashType.anyOneCanPay) {
    writer.writeSlice(txHashes.prevouts.singleHash);
    writer.writeSlice(prevOutHashes!.amounts.singleHash);
    writer.writeSlice(prevOutHashes!.scripts.singleHash);
    writer.writeSlice(txHashes.sequences.singleHash);
  }

  if (hashType.all) {
    writer.writeSlice(txHashes.outputs.singleHash);
  }

  // Data specific to spending input
  writer.writeUInt8(extFlag << 1);

  if (hashType.anyOneCanPay) {
    tx.inputs[inputN].prevOut.write(writer);
    prevOuts[inputN].write(writer);
    writer.writeUInt32(tx.inputs[inputN].sequence);
  } else {
    writer.writeUInt32(inputN);
  }

  // Data specific to matched output
  if (hashType.single) {
    writer.writeSlice(
      PrecomputeHasher.singleOutput(tx.outputs[inputN]).singleHash,
    );
  }

  // Data specific to the script
  if (leafHash != null) {
    writer.writeSlice(leafHash!);
    writer.writeUInt8(0); // Key version = 0
    writer.writeUInt32(codeSeperatorPos);
  }

}