Input.expandInput constructor
Input.expandInput(])
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);
}