Skip to main content

tempo_precompiles/tip20_channel_reserve/
dispatch.rs

1//! ABI dispatch for the [`TIP20ChannelReserve`] precompile.
2
3use super::{CLOSE_GRACE_PERIOD, TIP20ChannelReserve, VOUCHER_TYPEHASH};
4use crate::{Precompile, charge_input_cost, dispatch_call, metadata, mutate, mutate_void, view};
5use alloy::{primitives::Address, sol_types::SolInterface};
6use revm::precompile::PrecompileResult;
7use tempo_contracts::precompiles::{
8    ITIP20ChannelReserve, ITIP20ChannelReserve::ITIP20ChannelReserveCalls,
9};
10
11impl Precompile for TIP20ChannelReserve {
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            ITIP20ChannelReserveCalls::abi_decode,
21            |call| match call {
22                ITIP20ChannelReserveCalls::CLOSE_GRACE_PERIOD(_) => {
23                    metadata::<ITIP20ChannelReserve::CLOSE_GRACE_PERIODCall>(|| {
24                        Ok(CLOSE_GRACE_PERIOD)
25                    })
26                }
27                ITIP20ChannelReserveCalls::VOUCHER_TYPEHASH(_) => {
28                    metadata::<ITIP20ChannelReserve::VOUCHER_TYPEHASHCall>(|| Ok(*VOUCHER_TYPEHASH))
29                }
30                ITIP20ChannelReserveCalls::open(call) => {
31                    mutate(call, msg_sender, |sender, c| self.open(sender, c))
32                }
33                ITIP20ChannelReserveCalls::settle(call) => {
34                    mutate_void(call, msg_sender, |sender, c| self.settle(sender, c))
35                }
36                ITIP20ChannelReserveCalls::topUp(call) => {
37                    mutate_void(call, msg_sender, |sender, c| self.top_up(sender, c))
38                }
39                ITIP20ChannelReserveCalls::close(call) => {
40                    mutate_void(call, msg_sender, |sender, c| self.close(sender, c))
41                }
42                ITIP20ChannelReserveCalls::requestClose(call) => {
43                    mutate_void(call, msg_sender, |sender, c| self.request_close(sender, c))
44                }
45                ITIP20ChannelReserveCalls::withdraw(call) => {
46                    mutate_void(call, msg_sender, |sender, c| self.withdraw(sender, c))
47                }
48                ITIP20ChannelReserveCalls::getChannel(call) => view(call, |c| self.get_channel(c)),
49                ITIP20ChannelReserveCalls::getChannelState(call) => {
50                    view(call, |c| self.get_channel_state(c))
51                }
52                ITIP20ChannelReserveCalls::getChannelStatesBatch(call) => {
53                    view(call, |c| self.get_channel_states_batch(c))
54                }
55                ITIP20ChannelReserveCalls::computeChannelId(call) => {
56                    view(call, |c| self.compute_channel_id(c))
57                }
58                ITIP20ChannelReserveCalls::getVoucherDigest(call) => {
59                    view(call, |c| self.get_voucher_digest(c))
60                }
61                ITIP20ChannelReserveCalls::domainSeparator(call) => {
62                    view(call, |_| self.domain_separator())
63                }
64            },
65        )
66    }
67}