mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
fix: compare prev value against new value (#4347)
This commit is contained in:
@ -310,31 +310,51 @@ impl CallTraceNode {
|
||||
// iterate over all storage diffs
|
||||
for change in self.trace.steps.iter().filter_map(|s| s.storage_change) {
|
||||
let StorageChange { key, value, had_value } = change;
|
||||
let value = H256::from(value);
|
||||
let h256_value = H256::from(value);
|
||||
match acc.storage.entry(key.into()) {
|
||||
Entry::Vacant(entry) => {
|
||||
if let Some(had_value) = had_value {
|
||||
entry.insert(Delta::Changed(ChangedType {
|
||||
from: had_value.into(),
|
||||
to: value,
|
||||
}));
|
||||
if value != had_value {
|
||||
entry.insert(Delta::Changed(ChangedType {
|
||||
from: had_value.into(),
|
||||
to: h256_value,
|
||||
}));
|
||||
}
|
||||
} else {
|
||||
entry.insert(Delta::Added(value));
|
||||
entry.insert(Delta::Added(h256_value));
|
||||
}
|
||||
}
|
||||
Entry::Occupied(mut entry) => {
|
||||
let value = match entry.get() {
|
||||
Delta::Unchanged => Delta::Added(value),
|
||||
Delta::Added(added) => {
|
||||
if added == &value {
|
||||
Delta::Added(*added)
|
||||
Delta::Unchanged => {
|
||||
if let Some(had_value) = had_value {
|
||||
if value != had_value {
|
||||
Delta::Changed(ChangedType {
|
||||
from: had_value.into(),
|
||||
to: h256_value,
|
||||
})
|
||||
} else {
|
||||
Delta::Unchanged
|
||||
}
|
||||
} else {
|
||||
Delta::Changed(ChangedType { from: *added, to: value })
|
||||
Delta::Added(h256_value)
|
||||
}
|
||||
}
|
||||
Delta::Removed(_) => Delta::Added(value),
|
||||
Delta::Added(added) => {
|
||||
if added == &h256_value {
|
||||
Delta::Added(*added)
|
||||
} else {
|
||||
Delta::Changed(ChangedType { from: *added, to: h256_value })
|
||||
}
|
||||
}
|
||||
Delta::Removed(_) => Delta::Added(h256_value),
|
||||
Delta::Changed(c) => {
|
||||
Delta::Changed(ChangedType { from: c.from, to: value })
|
||||
if c.from == h256_value {
|
||||
// remains unchanged if the value is the same
|
||||
Delta::Unchanged
|
||||
} else {
|
||||
Delta::Changed(ChangedType { from: c.from, to: h256_value })
|
||||
}
|
||||
}
|
||||
};
|
||||
entry.insert(value);
|
||||
|
||||
Reference in New Issue
Block a user