From 4ad849fed26f6fbf030a34331b2ffe49b09c34a5 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Wed, 16 Oct 2019 12:28:42 -0400 Subject: [PATCH] Finalize psbt peg-ins --- src/psbt.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/psbt.cpp b/src/psbt.cpp index a83aba4bc4..1021a18a46 100644 --- a/src/psbt.cpp +++ b/src/psbt.cpp @@ -2,6 +2,7 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include #include #include #include @@ -321,6 +322,22 @@ bool FinalizeAndExtractPSBT(PartiallySignedTransaction& psbtx, CMutableTransacti for (unsigned int i = 0; i < result.vin.size(); ++i) { result.vin[i].scriptSig = psbtx.inputs[i].final_script_sig; result.witness.vtxinwit[i].scriptWitness = psbtx.inputs[i].final_script_witness; + PSBTInput& input = psbtx.inputs[i]; + + if (input.value && input.peg_in_tx.which() != 0 && input.txout_proof.which() != 0 && !input.claim_script.empty() && !input.genesis_hash.IsNull()) { + CScriptWitness pegin_witness; + if (Params().GetConsensus().ParentChainHasPow()) { + const Sidechain::Bitcoin::CTransactionRef& btc_peg_in_tx = boost::get(input.peg_in_tx); + const Sidechain::Bitcoin::CMerkleBlock& btc_txout_proof = boost::get(input.txout_proof); + pegin_witness = CreatePeginWitness(*input.value, input.asset, input.genesis_hash, input.claim_script, btc_peg_in_tx, btc_txout_proof); + } else { + const CTransactionRef& elem_peg_in_tx = boost::get(input.peg_in_tx); + const CMerkleBlock& elem_txout_proof = boost::get(input.txout_proof); + pegin_witness = CreatePeginWitness(*input.value, input.asset, input.genesis_hash, input.claim_script, elem_peg_in_tx, elem_txout_proof); + } + result.vin[i].m_is_pegin = true; + result.witness.vtxinwit[i].m_pegin_witness = pegin_witness; + } } result.witness.vtxoutwit.resize(result.vout.size());