Changeset View
Changeset View
Standalone View
Standalone View
src/psbt.cpp
Show First 20 Lines • Show All 266 Lines • ▼ Show 20 Lines | for (auto it = std::next(psbtxs.begin()); it != psbtxs.end(); ++it) { | ||||
} | } | ||||
} | } | ||||
if (!out.IsSane()) { | if (!out.IsSane()) { | ||||
return TransactionError::INVALID_PSBT; | return TransactionError::INVALID_PSBT; | ||||
} | } | ||||
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; | |||||
} |