revm/db/states/
transition_state.rs
1use super::TransitionAccount;
2use revm_interpreter::primitives::{hash_map::Entry, Address, HashMap};
3use std::vec::Vec;
4
5#[derive(Clone, Default, Debug, PartialEq, Eq)]
6pub struct TransitionState {
7 pub transitions: HashMap<Address, TransitionAccount>,
9}
10
11impl TransitionState {
12 pub fn single(address: Address, transition: TransitionAccount) -> Self {
14 let mut transitions = HashMap::default();
15 transitions.insert(address, transition);
16 TransitionState { transitions }
17 }
18
19 pub fn take(&mut self) -> TransitionState {
22 core::mem::take(self)
23 }
24
25 pub fn add_transitions(&mut self, transitions: Vec<(Address, TransitionAccount)>) {
29 for (address, account) in transitions {
30 match self.transitions.entry(address) {
31 Entry::Occupied(entry) => {
32 let entry = entry.into_mut();
33 entry.update(account);
34 }
35 Entry::Vacant(entry) => {
36 entry.insert(account);
37 }
38 }
39 }
40 }
41}