getSignedTransaction method

Transaction getSignedTransaction(
  1. BtcAddressType addressType
)

Get the transaction if all inputs are signed.

Implementation

Transaction getSignedTransaction(BtcAddressType addressType) {
  Transaction signedTransaction =
      Transaction.parsePsbtTransaction(unsignedTransaction!.serialize());
  //every input should have 2 partial sigs
  for (int i = 0; i < inputs.length; i++) {
    if (inputs[i].partialSigs!.length != 2 ||
        inputs[i].taprootKeySpendSignature != null) {
      throw Exception('Not enough signatures');
    }
    if (inputs[i].partialSigs!.length == 2) {
      signedTransaction.inputs[i].setSignature(
          addressType, inputs[i].partialSigs![0], inputs[i].partialSigs![1]);
    } else if (inputs[i].taprootKeySpendSignature != null) {
      signedTransaction.inputs[i].setSignature(addressType,
          inputs[i].taprootKeySpendSignature!, inputs[i].taprootInternalKey!);
    }

    if (inputs[i].witnessUtxo == null ||
        signedTransaction.validateSignature(
            i, inputs[i].witnessUtxo!.serialize(), addressType)) {
      continue;
    } else {
      throw Exception('Invalid Signatures');
    }
  }

  signedTransaction.setIsSegwit(addressType.isSegwit);
  return signedTransaction;
}