sign method

dynamic sign()

Implementation

sign() {
  String signature = '';
  PSBT psbtData = PSBT.parse(psbtSignature);
  if (tx.txType == BtcTxType.TAPROOT) {
    final btcTx = bitcoin.Transaction();
    btcTx.setVersion(tx.origin.version);
    btcTx.setLocktime(tx.origin.locktime);
    final inputs = tx.origin.inputs;
    final outputs = tx.origin.outputs;

    List signatures = [];
    signatures =
        psbtData.inputs.map((e) => e.taprootKeySpendSignature).toList();

    for (int i = 0; i < inputs.length; i++) {
      final prevoutHash = dynamicToUint8List(inputs[i].prevout.hash)
          .reversed
          .toList()
          .toUint8List();

      final value =
          NumberUtil.numberPowToInt(value: inputs[i].coin.value, pow: 8);
      final script = Address.addressToOutputScript(
          inputs[i].coin.address, chainConf.networkType);
      btcTx.addInput(prevoutHash, inputs[i].prevout.index,
          value: value, prevoutScript: script);
    }

    for (var i = 0; i < outputs.length; i++) {
      final item = outputs[i];
      final address = item.address;
      final amount = NumberUtil.numberPowToInt(value: item.amount, pow: 8);
      final outputScript =
          Address.addressToOutputScript(address, chainConf.networkType);
      btcTx.addOutput(outputScript, amount);
    }

    for (var i = 0; i < inputs.length; i++) {
      btcTx.signSchnorrHd(vin: i, sig: fromHex(signatures[i] as String));
    }

    signature = btcTx.toHex();
  } else {
    signature = psbtData
        .getSignedTransaction(address_type.BtcAddressType.p2pkh)
        .serialize();
  }

  return signature;
}