From cfa75312f8748a38b95b8cb25d816abeb51c2acc Mon Sep 17 00:00:00 2001 From: Joonatan Saarhelo Date: Tue, 3 Sep 2024 17:49:18 +0200 Subject: [PATCH] reverse add so it works like rust std sets --- src/rollback.rs | 4 ++-- src/world_diff.rs | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/rollback.rs b/src/rollback.rs index c22a9b62..2b1c9f6d 100644 --- a/src/rollback.rs +++ b/src/rollback.rs @@ -71,13 +71,13 @@ pub struct RollbackableSet { } impl RollbackableSet { - /// Adds `key` to the set and returns if it was already present. + /// Adds `key` to the set and returns if it was added (not present earlier). pub fn add(&mut self, key: T) -> bool { let is_new = self.map.insert(key.clone(), ()).is_none(); if is_new { self.old_entries.push(key); } - !is_new + is_new } } diff --git a/src/world_diff.rs b/src/world_diff.rs index a51c8074..4fca03bb 100644 --- a/src/world_diff.rs +++ b/src/world_diff.rs @@ -109,12 +109,12 @@ impl WorldDiff { .copied() .unwrap_or_else(|| world.read_storage(contract, key).unwrap_or_default()); - let already_accessed = self.read_storage_slots.add((contract, key)); - if !already_accessed { + let newly_added = self.read_storage_slots.add((contract, key)); + if newly_added { tracer.on_extra_prover_cycles(CycleStats::StorageRead); } - let refund = if already_accessed || world.is_free_storage_slot(&contract, &key) { + let refund = if !newly_added || world.is_free_storage_slot(&contract, &key) { WARM_READ_REFUND } else { 0 @@ -140,7 +140,7 @@ impl WorldDiff { .or_insert_with(|| world.read_storage(contract, key)); if world.is_free_storage_slot(&contract, &key) { - if !self.written_storage_slots.add((contract, key)) { + if self.written_storage_slots.add((contract, key)) { tracer.on_extra_prover_cycles(CycleStats::StorageWrite); } self.read_storage_slots.add((contract, key)); @@ -156,12 +156,12 @@ impl WorldDiff { .insert((contract, key), update_cost) .unwrap_or(0); - let refund = if self.written_storage_slots.add((contract, key)) { + let refund = if !self.written_storage_slots.add((contract, key)) { WARM_WRITE_REFUND } else { tracer.on_extra_prover_cycles(CycleStats::StorageWrite); - if self.read_storage_slots.add((contract, key)) { + if !self.read_storage_slots.add((contract, key)) { COLD_WRITE_AFTER_WARM_READ_REFUND } else { 0