diff --git a/src/dexorder/blockstate/blockdata.py b/src/dexorder/blockstate/blockdata.py index eaf8a62..94684a1 100644 --- a/src/dexorder/blockstate/blockdata.py +++ b/src/dexorder/blockstate/blockdata.py @@ -71,8 +71,8 @@ class BlockData: raise KeyError return result - def delitem(self, item, overwrite=True): - self.setitem(item, DELETE, overwrite) + def delitem(self, item): + self.setitem(item, DELETE) def unload(self, item): """ @@ -134,7 +134,7 @@ class BlockSet(Generic[T], Iterable[T], BlockData): self.setitem(item, None, overwrite=False) def remove(self, item: T): - self.delitem(item, overwrite=False) + self.delitem(item) def __contains__(self, item: T) -> bool: return self.contains(item) @@ -172,6 +172,9 @@ class BlockDict(Generic[K,V], BlockData): def get(self, item: K, default: V = None) -> V: return self.getitem(item, default) + def setdefault(self, item: K, value: V): + return self.setitem(item, value, overwrite=False) + def modify(self, item: K, func: Callable[[V],V], default: V=NARG) -> V: result = func(self.getitem(item, default)) self.setitem(item, result) diff --git a/src/dexorder/blockstate/state.py b/src/dexorder/blockstate/state.py index 9ed60e2..12e28ae 100644 --- a/src/dexorder/blockstate/state.py +++ b/src/dexorder/blockstate/state.py @@ -139,7 +139,7 @@ class BlockState: def set(self, fork: Optional[Fork], series, key, value, overwrite=True): diffs = self.diffs_by_series[series][key] - if overwrite or self._get_from_diffs(fork, diffs) != value: + if overwrite or self._get_from_diffs(fork, diffs) is DELETE and value is not DELETE: diff = DiffEntry(value, fork.height if fork is not None else self.root_block.height, fork.hash if fork is not None else self.root_block.hash)