tempo_precompiles/tip20_channel_reserve/
dispatch.rs1use 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}