From 9ce767462af51e3d129a0e53a659479b3195182c Mon Sep 17 00:00:00 2001 From: evoskuil Date: Mon, 25 May 2026 01:07:55 -0400 Subject: [PATCH 1/2] Accommodate system change to transaction_view. --- include/bitcoin/database/impl/query/archive/wire_writer.ipp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/bitcoin/database/impl/query/archive/wire_writer.ipp b/include/bitcoin/database/impl/query/archive/wire_writer.ipp index 4e4c9392..b73a146d 100644 --- a/include/bitcoin/database/impl/query/archive/wire_writer.ipp +++ b/include/bitcoin/database/impl/query/archive/wire_writer.ipp @@ -35,7 +35,9 @@ code CLASS::set_code(const tx_link& tx_fk, const transaction_view& tx, using namespace system; using ix = linkage; - if (tx.is_empty()) + // View parser treats empty as invalid, so there is no empty state. + // As a result this condition should never be hit (deserialization fails). + if (!tx.is_valid()) return error::tx_empty; const auto inputs = possible_narrow_cast(tx.inputs()); From f17c13f40601f966538fabf7f5cc96bbd2218aa7 Mon Sep 17 00:00:00 2001 From: evoskuil Date: Mon, 25 May 2026 01:08:31 -0400 Subject: [PATCH 2/2] Finish output put_view writer. --- .../bitcoin/database/tables/archives/output.hpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/include/bitcoin/database/tables/archives/output.hpp b/include/bitcoin/database/tables/archives/output.hpp index 65530eac..c29da69f 100644 --- a/include/bitcoin/database/tables/archives/output.hpp +++ b/include/bitcoin/database/tables/archives/output.hpp @@ -249,7 +249,7 @@ struct output { const auto start = source.get_read_position(); const auto value = source.read_8_bytes_little_endian(); - source.skip_bytes(value_size + source.read_size()); + source.skip_bytes(source.read_size()); const auto output_size = source.get_read_position() - start; outputs += variable_size(value) + output_size; } @@ -261,6 +261,18 @@ struct output inline bool to_data(flipper& sink) const NOEXCEPT { + using namespace system; + auto stream = tx_.get_outputs_stream(); + read::bytes::fast source{ stream }; + for (size_t out{}; out < tx_.outputs(); ++out) + { + // tx view output writer not used due to variable value. + sink.write_little_endian(parent_fk); + sink.write_variable(source.read_8_bytes_little_endian()); + sink.write_bytes(source.read_bytes(source.read_size())); + } + + BC_ASSERT(!sink || sink.get_write_position() == count()); return sink; }