signInputs function

List<Input> signInputs({
  1. required Map<ElectrumOutput, Input> inputs,
  2. required HDWalletPath walletPath,
  3. required UTXONetworkType networkType,
  4. required RawTransaction tx,
  5. required Uint8List seed,
})

Implementation

List<Input> signInputs({
  required Map<ElectrumOutput, Input> inputs,
  required HDWalletPath walletPath,
  required UTXONetworkType networkType,
  required RawTransaction tx,
  required Uint8List seed,
}) {
  final signedInputs = <Input>[];

  for (var i = 0; i < inputs.length; i++) {
    final entry = inputs.entries.elementAt(i);
    final input = entry.value;
    final output = entry.key;
    var bip32Node = output.node.bip32Node;

    if (bip32Node == null || bip32Node.isNeutered()) {
      if (output.belongsToUs) {
        bip32Node = deriveChildNodeFromPath(
          seed: seed,
          childDerivationPath: output.node.derivationPath,
          networkType: networkType,
          walletPath: walletPath,
        );
      } else
        throw SendFailure("Can't sign input without node: $output $input");
    }

    if (tx is BTCRawTransaction && output.scriptPubKey.isSegwit) {
      final witnessSript = createScriptWitness(
        tx: tx,
        i: i,
        output: output,
        networkType: networkType,
        node: bip32Node,
      );

      signedInputs.add(input.addScript(wittnessScript: witnessSript));
      continue;
    }

    final scriptSig = createScriptSignature(
      tx: tx,
      i: i,
      output: output,
      walletPurpose: walletPath.purpose,
      networkType: networkType,
      node: bip32Node,
    );

    signedInputs.add(input.addScript(scriptSig: scriptSig));
  }

  return signedInputs;
}