Input.expandInput constructor

Input.expandInput(
  1. Uint8List scriptSig,
  2. List<Uint8List?>? witness, [
  3. String? type,
  4. Uint8List? scriptPubKey,
])

Implementation

factory Input.expandInput(Uint8List scriptSig, List<Uint8List?>? witness,
    [String? type, Uint8List? scriptPubKey]) {
  if (scriptSig.isEmpty && witness!.isEmpty) {
    return Input();
  }
  if (type == null || type == '') {
    var ssType = classifyInput(scriptSig, true);
    var wsType = classifyWitness(witness);
    if (ssType == SCRIPT_TYPES['NONSTANDARD']) ssType = null;
    if (wsType == SCRIPT_TYPES['NONSTANDARD']) wsType = null;
    type = ssType ?? wsType;
  }
  if (type == SCRIPT_TYPES['P2WPKH']) {
    var p2wpkh = P2WPKH(data: PaymentData(witness: witness));
    return Input(
        prevOutScript: p2wpkh.data.output,
        prevOutType: SCRIPT_TYPES['P2WPKH'],
        pubkeys: [p2wpkh.data.pubkey],
        signatures: [p2wpkh.data.signature]);
  }
  if (type == SCRIPT_TYPES['P2PKH']) {
    var p2pkh = P2PKH(data: PaymentData(input: scriptSig));
    return Input(
        prevOutScript: p2pkh.data.output,
        prevOutType: SCRIPT_TYPES['P2PKH'],
        pubkeys: [p2pkh.data.pubkey],
        signatures: [p2pkh.data.signature]);
  }
  if (type == SCRIPT_TYPES['P2PK']) {
    var p2pk = P2PK(data: PaymentData(input: scriptSig));
    return Input(
        prevOutType: SCRIPT_TYPES['P2PK'],
        pubkeys: [],
        signatures: [p2pk.data.signature]);
  }
  if (type == SCRIPT_TYPES['P2MS']) {}
  if (type == SCRIPT_TYPES['P2SH']) {
    var p2sh = P2SH(data: PaymentData(input: scriptSig, witness: witness));
    final output = p2sh.data.output;
    final redeem = p2sh.data.redeem!;
    final outputType = classifyOutput(redeem.output!);
    final expanded = Input.expandInput(
        redeem.input!, redeem.witness, outputType, redeem.output);

    if (expanded.prevOutType == null) return Input();

    return Input(
        prevOutScript: output,
        prevOutType: SCRIPT_TYPES['P2SH'],
        redeemScript: redeem.output,
        redeemScriptType: expanded.prevOutType,
        witnessScript: expanded.witnessScript,
        witnessScriptType: expanded.witnessScriptType,
        pubkeys: expanded.pubkeys,
        signatures: expanded.signatures);
  }

  return Input(
      prevOutType: SCRIPT_TYPES['NONSTANDARD'], prevOutScript: scriptSig);
}