diff --git a/lbry/lbry/wallet/server/db/writer.py b/lbry/lbry/wallet/server/db/writer.py index 8eb6d3e2c..91aac06c8 100644 --- a/lbry/lbry/wallet/server/db/writer.py +++ b/lbry/lbry/wallet/server/db/writer.py @@ -534,10 +534,6 @@ class SQLDB: """, claim_hashes) def _update_effective_amount(self, height, claim_hashes=None): - self.execute( - f"UPDATE claim SET effective_amount = amount + support_amount " - f"WHERE activation_height = {height}" - ) if claim_hashes: self.execute( f"UPDATE claim SET effective_amount = amount + support_amount " @@ -569,12 +565,13 @@ class SQLDB: claimtrie.claim_hash AS current_winner, MAX(winner.effective_amount) FROM ( - SELECT normalized, claim_hash, effective_amount FROM claim + SELECT normalized, claim_hash, effective_amount, activation_height FROM claim WHERE normalized IN ( SELECT normalized FROM claim WHERE activation_height={height} {claim_hashes_sql} ) {deleted_names_sql} ORDER BY effective_amount DESC, height ASC, tx_position ASC ) AS winner LEFT JOIN claimtrie USING (normalized) + WHERE winner.activation_height<={height} GROUP BY winner.normalized HAVING current_winner IS NULL OR current_winner <> winner.claim_hash """, changed_claim_hashes+deleted_names) diff --git a/lbry/tests/unit/wallet/server/test_sqldb.py b/lbry/tests/unit/wallet/server/test_sqldb.py index 574d13c59..68e2ba22e 100644 --- a/lbry/tests/unit/wallet/server/test_sqldb.py +++ b/lbry/tests/unit/wallet/server/test_sqldb.py @@ -167,35 +167,35 @@ class TestClaimtrie(TestSQLDB): state( controlling=('Claim A', 10*COIN, 10*COIN, 13), active=[], - accepted=[('Claim B', 20*COIN, 0, 1031)] + accepted=[('Claim B', 20*COIN, 20*COIN, 1031)] ) advance(1010, [self.get_support(stream, 14*COIN)]) state( controlling=('Claim A', 10*COIN, 24*COIN, 13), active=[], - accepted=[('Claim B', 20*COIN, 0, 1031)] + accepted=[('Claim B', 20*COIN, 20*COIN, 1031)] ) advance(1020, [self.get_stream('Claim C', 50*COIN)]) state( controlling=('Claim A', 10*COIN, 24*COIN, 13), active=[], accepted=[ - ('Claim B', 20*COIN, 0, 1031), - ('Claim C', 50*COIN, 0, 1051)] + ('Claim B', 20*COIN, 20*COIN, 1031), + ('Claim C', 50*COIN, 50*COIN, 1051)] ) advance(1031, []) state( controlling=('Claim A', 10*COIN, 24*COIN, 13), active=[('Claim B', 20*COIN, 20*COIN, 1031)], - accepted=[('Claim C', 50*COIN, 0, 1051)] + accepted=[('Claim C', 50*COIN, 50*COIN, 1051)] ) advance(1040, [self.get_stream('Claim D', 300*COIN)]) state( controlling=('Claim A', 10*COIN, 24*COIN, 13), active=[('Claim B', 20*COIN, 20*COIN, 1031)], accepted=[ - ('Claim C', 50*COIN, 0, 1051), - ('Claim D', 300*COIN, 0, 1072)] + ('Claim C', 50*COIN, 50*COIN, 1051), + ('Claim D', 300*COIN, 300*COIN, 1072)] ) advance(1051, []) state(