layer_climb_core/signing/authz/
msg.rs1use 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}