17#include <boost/test/unit_test.hpp>
34 .identifier = {
'p',
's',
'b',
't'},
46 std::optional<CMutableTransaction> tx =
psbt->GetUnsignedTx();
60 CheckTimeLock(
"cHNidP8BAgQCAAAAAQQBAQEFAQIB+wQCAAAAAAEOIAsK2SFBnByHGXNdctxzn56p4GONH+TB7vD5lECEgV/IAQ8EAAAAAAABAwgACK8vAAAAAAEEFgAUxDD2TEdW2jENvRoIVXLvKZkmJywAAQMIi73rCwAAAAABBBYAFE3Rk6yWSlasG54cyoRU/i9HT4UTAA==", 0);
61 CheckTimeLock(
"cHNidP8BAgQCAAAAAQMEAAAAAAEEAQIBBQEBAfsEAgAAAAABDiAPdY2/vU2nwWyKMwnDyB4RAPVh6mRttbAXUsSF4b3enwEPBAEAAAAAAQ4gOhs7PIN9ZInqejHY5sfdUDwAG+8+BpWOdXSAjWjKeKUBDwQAAAAAAAEDCE+TNXcAAAAAAQQWABQLE1LKzQPPaqG388jWOIZxs0peEQA=", 0);
62 CheckTimeLock(
"cHNidP8BAgQCAAAAAQMEAAAAAAEEAQIBBQEBAfsEAgAAAAABDiAPdY2/vU2nwWyKMwnDyB4RAPVh6mRttbAXUsSF4b3enwEPBAEAAAABEgQQJwAAAAEOIDobOzyDfWSJ6nox2ObH3VA8ABvvPgaVjnV0gI1oynilAQ8EAAAAAAABAwhPkzV3AAAAAAEEFgAUCxNSys0Dz2qht/PI1jiGcbNKXhEA", 10000);
63 CheckTimeLock(
"cHNidP8BAgQCAAAAAQMEAAAAAAEEAQIBBQEBAfsEAgAAAAABDiAPdY2/vU2nwWyKMwnDyB4RAPVh6mRttbAXUsSF4b3enwEPBAEAAAABEgQQJwAAAAEOIDobOzyDfWSJ6nox2ObH3VA8ABvvPgaVjnV0gI1oynilAQ8EAAAAAAESBCgjAAAAAQMIT5M1dwAAAAABBBYAFAsTUsrNA89qobfzyNY4hnGzSl4RAA==", 10000);
64 CheckTimeLock(
"cHNidP8BAgQCAAAAAQMEAAAAAAEEAQIBBQEBAfsEAgAAAAABDiAPdY2/vU2nwWyKMwnDyB4RAPVh6mRttbAXUsSF4b3enwEPBAEAAAABEgQQJwAAAAEOIDobOzyDfWSJ6nox2ObH3VA8ABvvPgaVjnV0gI1oynilAQ8EAAAAAAERBIyNxGIBEgQoIwAAAAEDCE+TNXcAAAAAAQQWABQLE1LKzQPPaqG388jWOIZxs0peEQA=", 10000);
65 CheckTimeLock(
"cHNidP8BAgQCAAAAAQMEAAAAAAEEAQIBBQEBAfsEAgAAAAABDiAPdY2/vU2nwWyKMwnDyB4RAPVh6mRttbAXUsSF4b3enwEPBAEAAAABEQSLjcRiARIEECcAAAABDiA6Gzs8g31kiep6Mdjmx91QPAAb7z4GlY51dICNaMp4pQEPBAAAAAABEQSMjcRiARIEKCMAAAABAwhPkzV3AAAAAAEEFgAUCxNSys0Dz2qht/PI1jiGcbNKXhEA", 10000);
66 CheckTimeLock(
"cHNidP8BAgQCAAAAAQMEAAAAAAEEAQIBBQEBAfsEAgAAAAABDiAPdY2/vU2nwWyKMwnDyB4RAPVh6mRttbAXUsSF4b3enwEPBAEAAAABEQSLjcRiAAEOIDobOzyDfWSJ6nox2ObH3VA8ABvvPgaVjnV0gI1oynilAQ8EAAAAAAERBIyNxGIBEgQoIwAAAAEDCE+TNXcAAAAAAQQWABQLE1LKzQPPaqG388jWOIZxs0peEQA=", 1657048460);
67 CheckTimeLock(
"cHNidP8BAgQCAAAAAQMEAAAAAAEEAQIBBQEBAfsEAgAAAAABDiAPdY2/vU2nwWyKMwnDyB4RAPVh6mRttbAXUsSF4b3enwEPBAEAAAABEQSLjcRiARIEECcAAAABDiA6Gzs8g31kiep6Mdjmx91QPAAb7z4GlY51dICNaMp4pQEPBAAAAAABEQSMjcRiAAEDCE+TNXcAAAAAAQQWABQLE1LKzQPPaqG388jWOIZxs0peEQA=", 1657048460);
68 CheckTimeLock(
"cHNidP8BAgQCAAAAAQMEAAAAAAEEAQIBBQEBAfsEAgAAAAABDiAPdY2/vU2nwWyKMwnDyB4RAPVh6mRttbAXUsSF4b3enwEPBAEAAAAAAQ4gOhs7PIN9ZInqejHY5sfdUDwAG+8+BpWOdXSAjWjKeKUBDwQAAAAAAREEjI3EYgABAwhPkzV3AAAAAAEEFgAUCxNSys0Dz2qht/PI1jiGcbNKXhEA", 1657048460);
69 CheckTimeLock(
"cHNidP8BAgQCAAAAAQMEAAAAAAEEAQIBBQEBAfsEAgAAAAABDiAPdY2/vU2nwWyKMwnDyB4RAPVh6mRttbAXUsSF4b3enwEPBAEAAAABEgQQJwAAAAEOIDobOzyDfWSJ6nox2ObH3VA8ABvvPgaVjnV0gI1oynilAQ8EAAAAAAERBIyNxGIAAQMIT5M1dwAAAAABBBYAFAsTUsrNA89qobfzyNY4hnGzSl4RAA==", std::nullopt);
70 CheckTimeLock(
"cHNidP8BAgQCAAAAAQMEAAAAAAEEAQIBBQEBAfsEAgAAAAABDiA6Gzs8g31kiep6Mdjmx91QPAAb7z4GlY51dICNaMp4pQEPBAAAAAABEQSMjcRiAAEOIA91jb+9TafBbIozCcPIHhEA9WHqZG21sBdSxIXhvd6fAQ8EAQAAAAESBBAnAAAAAQMIT5M1dwAAAAABBBYAFAsTUsrNA89qobfzyNY4hnGzSl4RAA==", std::nullopt);
79 psbt.m_tx_modifiable.emplace();
143 psbtin7.final_script_sig.clear();
144 psbtin7.final_script_witness.stack.emplace_back();
147 psbtin7.final_script_witness.SetNull();
148 psbtin7.partial_sigs.emplace();
152 psbtin7.m_tap_key_sig.push_back(0);
156 psbtin7.m_tap_script_sigs.emplace();
159 psbtin7.m_tap_script_sigs.clear();
160 psbtin7.m_musig2_partial_sigs.emplace();
176 psbt.m_tx_modifiable.emplace();
266 return psbt.outputs[0];
273 for (
const auto& descriptor : {
"pkh(<KEY>)",
"wpkh(<KEY>)"}) {
276 BOOST_CHECK(out.hd_keypaths.contains(test.pubkey));
289 BOOST_CHECK(out.hd_keypaths.contains(test.pubkey));
299 BOOST_CHECK(out.hd_keypaths.contains(test.pubkey));
309 BOOST_CHECK(out.hd_keypaths.contains(test.pubkey));
338 psbt1.m_tx_modifiable.emplace();
341 psbt2.m_tx_modifiable.emplace();
347 psbtin.height_locktime = 100;
351 psbt1.fallback_locktime = std::nullopt;
352 psbt2.fallback_locktime = 21;
357 psbt1.fallback_locktime = 5;
358 psbt2.fallback_locktime = 19;
363 psbt1.fallback_locktime = 21;
364 psbt2.fallback_locktime = std::nullopt;
379 psbt1.m_tx_modifiable.emplace();
385 psbt1.m_tx_modifiable.reset();
386 psbt2.m_tx_modifiable.emplace();
394 psbt1.m_tx_modifiable.emplace();
396 psbt2.m_tx_modifiable.reset();
401 psbt1.m_tx_modifiable.reset();
402 psbt2.m_tx_modifiable.emplace();
408 psbt1.m_tx_modifiable.emplace();
411 psbt2.m_tx_modifiable.emplace();
CScript GetScriptForDestination(const CTxDestination &dest)
Generate a Bitcoin scriptPubKey for the given CTxDestination.
An encapsulated private key.
An outpoint - a combination of a transaction hash and an index n into its vout.
An encapsulated public key.
CKeyID GetID() const
Get the KeyID of this public key (hash of its serialization)
Serialized script, used inside transaction inputs and outputs.
void fillrand(std::span< std::byte > output) noexcept
Fill a byte span with random bytes.
A structure for PSBTs which contains per output information.
A version of CTransaction with the PSBT format.
bool Merge(const PartiallySignedTransaction &psbt)
Merge psbt into this.
std::vector< PSBTInput > inputs
std::vector< PSBTOutput > outputs
std::set< PSBTProprietary > m_proprietary
static transaction_identifier FromUint256(const uint256 &id)
static UniValue Parse(std::string_view raw, ParamFormat format=ParamFormat::JSON)
Parse string to UniValue or throw runtime_error if string contains invalid JSON.
BOOST_FIXTURE_TEST_SUITE(cuckoocache_tests, BasicTestingSetup)
Test Suite for CuckooCache.
BOOST_AUTO_TEST_SUITE_END()
std::string HexStr(const std::span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
CKey GenerateRandomKey(bool compressed) noexcept
void ReplaceAll(std::string &in_out, std::string_view search, std::string_view substitute)
Replace every non-overlapping occurrence of search with substitute, treating both literally; the repl...
#define BOOST_CHECK_EQUAL(v1, v2)
#define BOOST_CHECK(expr)
void UpdatePSBTOutput(const SigningProvider &provider, PartiallySignedTransaction &psbt, int index)
Updates a PSBTOutput with information from provider.
util::Result< PartiallySignedTransaction > DecodeBase64PSBT(const std::string &base64_tx)
Decode a base64ed PSBT into a PartiallySignedTransaction.
BOOST_AUTO_TEST_CASE(psbt2_timelock_test)
static constexpr std::size_t HAS_SIGHASH_SINGLE
static PSBTProprietary MakeProprietary(uint64_t subtype, uint8_t key_data, uint8_t value)
static constexpr std::size_t INPUTS_MODIFIABLE
static constexpr std::size_t OUTPUTS_MODIFIABLE
void CheckTimeLock(const std::string &base64_psbt, std::optional< uint32_t > timelock)
constexpr unsigned int LOCKTIME_THRESHOLD
CScript GetScriptForRawPubKey(const CPubKey &pubKey)
Generate a P2PK script for the given pubkey.
auto MakeWritableByteSpan(V &&v) noexcept
Utilities for converting data from/to strings.
A mutable version of CTransaction.
std::vector< CTxOut > vout
std::map< CKeyID, CKey > keys
PSBTOutput UpdateOutput(bool has_input) const
FlatSigningProvider provider
PSBTOutputTest(std::string descriptor)
A structure for PSBT proprietary types.
constexpr auto Ticks(Dur2 d)
Helper to count the seconds of a duration/time_point.