Move PSBT decoding functions from core_io to psbt.cpp
Move PSBT decoding functions from core_io.h/core_read.cpp to psbt.h/psbt.cpp, to deal with a linker issue.
This commit is contained in:
parent
8e1704c015
commit
afd20a25f2
5 changed files with 33 additions and 35 deletions
|
@ -430,8 +430,8 @@ libbitcoin_common_a_SOURCES = \
|
||||||
netaddress.cpp \
|
netaddress.cpp \
|
||||||
netbase.cpp \
|
netbase.cpp \
|
||||||
policy/feerate.cpp \
|
policy/feerate.cpp \
|
||||||
psbt.cpp \
|
|
||||||
protocol.cpp \
|
protocol.cpp \
|
||||||
|
psbt.cpp \
|
||||||
scheduler.cpp \
|
scheduler.cpp \
|
||||||
script/descriptor.cpp \
|
script/descriptor.cpp \
|
||||||
script/ismine.cpp \
|
script/ismine.cpp \
|
||||||
|
|
|
@ -16,7 +16,6 @@ class CBlockHeader;
|
||||||
class CScript;
|
class CScript;
|
||||||
class CTransaction;
|
class CTransaction;
|
||||||
struct CMutableTransaction;
|
struct CMutableTransaction;
|
||||||
struct PartiallySignedTransaction;
|
|
||||||
class uint256;
|
class uint256;
|
||||||
class UniValue;
|
class UniValue;
|
||||||
|
|
||||||
|
@ -37,11 +36,6 @@ bool DecodeHexBlockHeader(CBlockHeader&, const std::string& hex_header);
|
||||||
*/
|
*/
|
||||||
bool ParseHashStr(const std::string& strHex, uint256& result);
|
bool ParseHashStr(const std::string& strHex, uint256& result);
|
||||||
std::vector<unsigned char> ParseHexUV(const UniValue& v, const std::string& strName);
|
std::vector<unsigned char> ParseHexUV(const UniValue& v, const std::string& strName);
|
||||||
|
|
||||||
//! Decode a base64ed PSBT into a PartiallySignedTransaction
|
|
||||||
NODISCARD bool DecodeBase64PSBT(PartiallySignedTransaction& decoded_psbt, const std::string& base64_psbt, std::string& error);
|
|
||||||
//! Decode a raw (binary blob) PSBT into a PartiallySignedTransaction
|
|
||||||
NODISCARD bool DecodeRawPSBT(PartiallySignedTransaction& decoded_psbt, const std::string& raw_psbt, std::string& error);
|
|
||||||
int ParseSighashString(const UniValue& sighash);
|
int ParseSighashString(const UniValue& sighash);
|
||||||
|
|
||||||
// core_write.cpp
|
// core_write.cpp
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
|
|
||||||
#include <core_io.h>
|
#include <core_io.h>
|
||||||
|
|
||||||
#include <psbt.h>
|
|
||||||
#include <primitives/block.h>
|
#include <primitives/block.h>
|
||||||
#include <primitives/transaction.h>
|
#include <primitives/transaction.h>
|
||||||
#include <script/script.h>
|
#include <script/script.h>
|
||||||
|
@ -177,33 +176,6 @@ bool DecodeHexBlk(CBlock& block, const std::string& strHexBlk)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DecodeBase64PSBT(PartiallySignedTransaction& psbt, const std::string& base64_tx, std::string& error)
|
|
||||||
{
|
|
||||||
bool invalid;
|
|
||||||
std::string tx_data = DecodeBase64(base64_tx, &invalid);
|
|
||||||
if (invalid) {
|
|
||||||
error = "invalid base64";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return DecodeRawPSBT(psbt, tx_data, error);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DecodeRawPSBT(PartiallySignedTransaction& psbt, const std::string& tx_data, std::string& error)
|
|
||||||
{
|
|
||||||
CDataStream ss_data(tx_data.data(), tx_data.data() + tx_data.size(), SER_NETWORK, PROTOCOL_VERSION);
|
|
||||||
try {
|
|
||||||
ss_data >> psbt;
|
|
||||||
if (!ss_data.empty()) {
|
|
||||||
error = "extra data after PSBT";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
} catch (const std::exception& e) {
|
|
||||||
error = e.what();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ParseHashStr(const std::string& strHex, uint256& result)
|
bool ParseHashStr(const std::string& strHex, uint256& result)
|
||||||
{
|
{
|
||||||
if ((strHex.size() != 64) || !IsHex(strHex))
|
if ((strHex.size() != 64) || !IsHex(strHex))
|
||||||
|
|
27
src/psbt.cpp
27
src/psbt.cpp
|
@ -325,3 +325,30 @@ TransactionError CombinePSBTs(PartiallySignedTransaction& out, const std::vector
|
||||||
|
|
||||||
return TransactionError::OK;
|
return TransactionError::OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DecodeBase64PSBT(PartiallySignedTransaction& psbt, const std::string& base64_tx, std::string& error)
|
||||||
|
{
|
||||||
|
bool invalid;
|
||||||
|
std::string tx_data = DecodeBase64(base64_tx, &invalid);
|
||||||
|
if (invalid) {
|
||||||
|
error = "invalid base64";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return DecodeRawPSBT(psbt, tx_data, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DecodeRawPSBT(PartiallySignedTransaction& psbt, const std::string& tx_data, std::string& error)
|
||||||
|
{
|
||||||
|
CDataStream ss_data(tx_data.data(), tx_data.data() + tx_data.size(), SER_NETWORK, PROTOCOL_VERSION);
|
||||||
|
try {
|
||||||
|
ss_data >> psbt;
|
||||||
|
if (!ss_data.empty()) {
|
||||||
|
error = "extra data after PSBT";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
error = e.what();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -580,4 +580,9 @@ bool FinalizeAndExtractPSBT(PartiallySignedTransaction& psbtx, CMutableTransacti
|
||||||
*/
|
*/
|
||||||
NODISCARD TransactionError CombinePSBTs(PartiallySignedTransaction& out, const std::vector<PartiallySignedTransaction>& psbtxs);
|
NODISCARD TransactionError CombinePSBTs(PartiallySignedTransaction& out, const std::vector<PartiallySignedTransaction>& psbtxs);
|
||||||
|
|
||||||
|
//! Decode a base64ed PSBT into a PartiallySignedTransaction
|
||||||
|
NODISCARD bool DecodeBase64PSBT(PartiallySignedTransaction& decoded_psbt, const std::string& base64_psbt, std::string& error);
|
||||||
|
//! Decode a raw (binary blob) PSBT into a PartiallySignedTransaction
|
||||||
|
NODISCARD bool DecodeRawPSBT(PartiallySignedTransaction& decoded_psbt, const std::string& raw_psbt, std::string& error);
|
||||||
|
|
||||||
#endif // BITCOIN_PSBT_H
|
#endif // BITCOIN_PSBT_H
|
||||||
|
|
Loading…
Reference in a new issue