// Copyright (c) 2026-present The Limenka developers // Distributed under the MIT software license, see the accompanying // file COPYING or https://opensource.org/license/mit/. #include #include #include BOOST_FIXTURE_TEST_SUITE(psbt_tests, BasicTestingSetup) static PSBTProprietary MakeProprietary(uint64_t subtype, uint8_t key_data, uint8_t value) { return PSBTProprietary{ .subtype = subtype, .identifier = {'p', 's', 'b', 't'}, .key = {key_data}, .value = {value}, }; } BOOST_AUTO_TEST_CASE(merge_proprietary_fields) { CMutableTransaction tx; tx.vin.emplace_back(COutPoint{}); tx.vout.emplace_back(0, CScript{}); PartiallySignedTransaction left(tx); PartiallySignedTransaction right(tx); const auto left_prop = MakeProprietary(/*subtype=*/1, /*key_data=*/0x01, /*value=*/0xaa); const auto right_prop = MakeProprietary(/*subtype=*/2, /*key_data=*/0x02, /*value=*/0xbb); left.m_proprietary.insert(left_prop); left.inputs[0].m_proprietary.insert(left_prop); left.outputs[0].m_proprietary.insert(left_prop); right.m_proprietary.insert(right_prop); right.inputs[0].m_proprietary.insert(right_prop); right.outputs[0].m_proprietary.insert(right_prop); BOOST_REQUIRE(left.Merge(right)); BOOST_REQUIRE_EQUAL(left.m_proprietary.size(), 2U); BOOST_REQUIRE_EQUAL(left.inputs[0].m_proprietary.size(), 2U); BOOST_REQUIRE_EQUAL(left.outputs[0].m_proprietary.size(), 2U); const auto global_it = left.m_proprietary.find(right_prop); BOOST_REQUIRE(global_it != left.m_proprietary.end()); BOOST_CHECK(global_it->value == right_prop.value); const auto input_it = left.inputs[0].m_proprietary.find(right_prop); BOOST_REQUIRE(input_it != left.inputs[0].m_proprietary.end()); BOOST_CHECK(input_it->value == right_prop.value); const auto output_it = left.outputs[0].m_proprietary.find(right_prop); BOOST_REQUIRE(output_it != left.outputs[0].m_proprietary.end()); BOOST_CHECK(output_it->value == right_prop.value); } BOOST_AUTO_TEST_SUITE_END()