tempo_precompiles/tip1060_storage_credits/
dispatch.rs1use crate::{
4 Precompile, charge_input_cost, dispatch_call, mutate_void,
5 tip1060_storage_credits::TIP1060StorageCredits, view,
6};
7use alloy::{primitives::Address, sol_types::SolInterface};
8use revm::precompile::PrecompileResult;
9use tempo_contracts::precompiles::ITIP1060StorageCredits::ITIP1060StorageCreditsCalls;
10
11impl Precompile for TIP1060StorageCredits {
12 fn call(&mut self, calldata: &[u8], msg_sender: Address) -> PrecompileResult {
13 if let Some(err) = charge_input_cost(&mut self.storage, calldata) {
14 return err;
15 }
16
17 dispatch_call(
18 calldata,
19 &[],
20 ITIP1060StorageCreditsCalls::abi_decode,
21 |call| match call {
22 ITIP1060StorageCreditsCalls::balanceOf(call) => {
23 view(call, |c| self.balance_of(c.account))
24 }
25 ITIP1060StorageCreditsCalls::modeOf(call) => {
26 view(call, |c| self.mode_of(c.account).map(Into::into))
27 }
28 ITIP1060StorageCreditsCalls::budgetOf(call) => {
29 view(call, |c| self.budget_of(c.account))
30 }
31 ITIP1060StorageCreditsCalls::setMode(call) => {
32 mutate_void(call, msg_sender, |sender, c| {
33 self.set_mode(sender, c.newMode)
34 })
35 }
36 ITIP1060StorageCreditsCalls::setBudget(call) => {
37 mutate_void(call, msg_sender, |sender, c| {
38 self.set_budget(sender, c.creditBudget)
39 })
40 }
41 },
42 )
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::*;
49 use crate::{
50 storage::{StorageCtx, hashmap::HashMapStorageProvider},
51 test_util::{assert_full_coverage, check_selector_coverage},
52 };
53
54 #[test]
55 fn test_storage_credits_selector_coverage() -> eyre::Result<()> {
56 let mut storage = HashMapStorageProvider::new(1);
57 StorageCtx::enter(&mut storage, || {
58 let mut storage_credits_precompile = TIP1060StorageCredits::new();
59
60 let unsupported = check_selector_coverage(
61 &mut storage_credits_precompile,
62 ITIP1060StorageCreditsCalls::SELECTORS,
63 "ITIP1060StorageCredits",
64 ITIP1060StorageCreditsCalls::name_by_selector,
65 );
66
67 assert_full_coverage([unsupported]);
68 Ok(())
69 })
70 }
71}