Skip to main content

neo_devpack_solidity/runtime/state/state_impl/
query_stats.rs

1use super::*;
2
3impl StateManager {
4    /// Query state with filters
5    pub fn query_state(&self, query: StateQuery) -> Vec<&AccountState> {
6        self.accounts
7            .values()
8            .filter(|account| {
9                if let Some(ref addr) = query.account {
10                    account.address == *addr
11                } else {
12                    true
13                }
14            })
15            .collect()
16    }
17
18    /// Get state statistics
19    pub fn get_statistics(&self) -> StateStatistics {
20        let total_accounts = self.accounts.len();
21        let total_balance: u64 = self.accounts.values().map(|a| a.balance).sum();
22        let contracts = self.accounts.values().filter(|a| a.code.is_some()).count();
23
24        StateStatistics {
25            total_accounts,
26            total_balance,
27            contract_accounts: contracts,
28            external_accounts: total_accounts - contracts,
29            total_changes: self.change_count,
30            snapshots_count: self.snapshots.len(),
31        }
32    }
33}