fix: omit empty fields of AccountState (#4828)

This commit is contained in:
Matthias Seitz
2023-09-27 23:26:31 +02:00
committed by GitHub
parent 2138a8b587
commit 50175f8cf6
3 changed files with 36 additions and 22 deletions

View File

@ -192,14 +192,14 @@ impl GethTraceBuilder {
let mut prestate = PreStateMode::default();
for (addr, _) in account_diffs {
let db_acc = db.basic(addr)?.unwrap_or_default();
prestate.0.insert(
addr,
AccountState {
balance: Some(db_acc.balance),
nonce: Some(db_acc.nonce),
code: db_acc.code.as_ref().map(|code| Bytes::from(code.original_bytes())),
storage: None,
},
AccountState::from_account_info(
db_acc.nonce,
db_acc.balance,
db_acc.code.as_ref().map(|code| Bytes::from(code.original_bytes())),
),
);
}
self.update_storage_from_trace(&mut prestate.0, false);
@ -208,18 +208,16 @@ impl GethTraceBuilder {
let mut state_diff = DiffMode::default();
for (addr, changed_acc) in account_diffs {
let db_acc = db.basic(addr)?.unwrap_or_default();
let pre_state = AccountState {
balance: Some(db_acc.balance),
nonce: Some(db_acc.nonce),
code: db_acc.code.as_ref().map(|code| Bytes::from(code.original_bytes())),
storage: None,
};
let post_state = AccountState {
balance: Some(changed_acc.balance),
nonce: Some(changed_acc.nonce),
code: changed_acc.code.as_ref().map(|code| Bytes::from(code.original_bytes())),
storage: None,
};
let pre_state = AccountState::from_account_info(
db_acc.nonce,
db_acc.balance,
db_acc.code.as_ref().map(|code| Bytes::from(code.original_bytes())),
);
let post_state = AccountState::from_account_info(
changed_acc.nonce,
changed_acc.balance,
changed_acc.code.as_ref().map(|code| Bytes::from(code.original_bytes())),
);
state_diff.pre.insert(addr, pre_state);
state_diff.post.insert(addr, post_state);
}

View File

@ -517,7 +517,6 @@ impl CallTraceNode {
let acc_state = account_states.entry(addr).or_default();
for change in self.trace.steps.iter().filter_map(|s| s.storage_change) {
let StorageChange { key, value, had_value } = change;
let storage_map = acc_state.storage.get_or_insert_with(BTreeMap::new);
let value_to_insert = if post_value {
H256::from(value)
} else {
@ -526,7 +525,7 @@ impl CallTraceNode {
None => continue,
}
};
storage_map.insert(key.into(), value_to_insert);
acc_state.storage.insert(key.into(), value_to_insert);
}
}
}