eth/tracers/logger: remove unnecessary comparisons in accessList.equal (#24663)

This change removes extraneous/unnecessary checks for equality
when comparing 2 accessList values A and B. Given that we validate that
their lengths of A and B are equal, if so and if every element in A is
in B, reflexively every element in B is already in A. If that weren't
the case and an element g existed in A but not in B, that would mean
that there is an extra element and hence a mathematical contradiction.

Fixes #24658
pull/24743/head
Emmanuel T Odeke 3 years ago committed by GitHub
parent 40cfe71002
commit a8bb49b8ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 15
      eth/tracers/logger/access_list_tracer.go

@ -62,16 +62,14 @@ func (al accessList) equal(other accessList) bool {
if len(al) != len(other) { if len(al) != len(other) {
return false return false
} }
// Given that len(al) == len(other), we only need to check that
// all the items from al are in other.
for addr := range al { for addr := range al {
if _, ok := other[addr]; !ok { if _, ok := other[addr]; !ok {
return false return false
} }
} }
for addr := range other {
if _, ok := al[addr]; !ok {
return false
}
}
// Accounts match, cross reference the storage slots too // Accounts match, cross reference the storage slots too
for addr, slots := range al { for addr, slots := range al {
otherslots := other[addr] otherslots := other[addr]
@ -79,16 +77,13 @@ func (al accessList) equal(other accessList) bool {
if len(slots) != len(otherslots) { if len(slots) != len(otherslots) {
return false return false
} }
// Given that len(slots) == len(otherslots), we only need to check that
// all the items from slots are in otherslots.
for hash := range slots { for hash := range slots {
if _, ok := otherslots[hash]; !ok { if _, ok := otherslots[hash]; !ok {
return false return false
} }
} }
for hash := range otherslots {
if _, ok := slots[hash]; !ok {
return false
}
}
} }
return true return true
} }

Loading…
Cancel
Save