@@ -79,23 +79,9 @@ void protocol_electrum::do_get_balance(const hash_digest& hash) NOEXCEPT
7979{
8080 BC_ASSERT (!stranded ());
8181
82- int64_t unconfirmed{};
83- uint64_t confirmed{}, combined{};
84-
8582 const auto & query = archive ();
86- auto ec = query.get_balance (stopping_, confirmed, combined, hash);
87-
88- // get_balance() query returns positive net balances.
89- // These are differenced to obtain relative unconfirmed for electrum.
90- if (!ec)
91- {
92- if (is_limited<int64_t >(confirmed) || is_limited<int64_t >(combined) ||
93- is_subtract_overflow<int64_t >(combined, confirmed))
94- ec = error::server_error;
95- else
96- unconfirmed = subtract<int64_t >(combined, confirmed);
97- }
98-
83+ uint64_t confirmed{}, unconfirmed{};
84+ auto ec = query.get_balance (stopping_, confirmed, unconfirmed, hash);
9985 POST (complete_get_balance, ec, confirmed, unconfirmed);
10086}
10187
@@ -393,7 +379,14 @@ array_t protocol_electrum::transform(const database::histories& ins) NOEXCEPT
393379 };
394380
395381 if (unconfirmed)
382+ {
383+ // A fee of max_uint64 implies missing prevout(s). This will happen
384+ // for a block-downloaded tx queried during parallel block download
385+ // when the prevout block(s) are not yet archived or even if the tx
386+ // turned out to be in an invalid block after its block download. A
387+ // transaction is technically never invalid absent a block context.
396388 object[" fee" ] = in.fee ;
389+ }
397390
398391 return object;
399392 });
0 commit comments