getSignedTxHex method
Implementation
String getSignedTxHex() {
if (!isSigned) {
throw Exception('Transaction is not signed');
}
final chainConf = getChainConfig('btc').mainnet;
if (isTaproot) {
final btcTx = bitcoin.Transaction();
final originTx = getOrigin(unsignedPsbt);
btcTx.setVersion(originTx.version);
btcTx.setLocktime(originTx.locktime);
final inputs = originTx.inputs;
final outputs = originTx.outputs;
List signatures = [];
signatures = psbt.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 = bitcoin.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 = bitcoin.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));
}
return btcTx.toHex();
} else {
return psbt
.getSignedTransaction(address_type.BtcAddressType.p2pkh)
.serialize();
}
}