layer_climb_core/signing/authz/
msg.rs

1use anyhow::Result;
2use layer_climb_proto::authz::Grant;
3
4use crate::prelude::*;
5
6impl SigningClient {
7    pub fn authz_grant_any_msg(
8        &self,
9        granter: Option<Address>,
10        grantee: Address,
11        grant: Option<Grant>,
12    ) -> Result<layer_climb_proto::authz::MsgGrant> {
13        Ok(layer_climb_proto::authz::MsgGrant {
14            granter: granter
15                .map(|a| a.to_string())
16                .unwrap_or_else(|| self.addr.to_string()),
17            grantee: grantee.to_string(),
18            grant,
19        })
20    }
21
22    pub fn authz_grant_send_msg(
23        &self,
24        granter: Option<Address>,
25        grantee: Address,
26        spend_limit: Vec<layer_climb_proto::Coin>,
27        allow_list: Vec<Address>,
28    ) -> Result<layer_climb_proto::authz::MsgGrant> {
29        let grant = Grant {
30            authorization: Some(proto_into_any(
31                &layer_climb_proto::bank::SendAuthorization {
32                    spend_limit,
33                    allow_list: allow_list.into_iter().map(|a| a.to_string()).collect(),
34                },
35            )?),
36            expiration: None,
37        };
38
39        self.authz_grant_any_msg(granter, grantee, Some(grant))
40    }
41}