use crate::msg::to_any;
use cosmrs::proto::cosmos::base::v1beta1::Coin;
use cosmrs::Any;
use cosmrs::proto::cosmos::bank::v1beta1::MsgSend;
use cosmrs::proto::cosmos::distribution::v1beta1::{
MsgWithdrawDelegatorReward, MsgWithdrawValidatorCommission,
};
use cosmrs::proto::cosmos::staking::v1beta1::{MsgBeginRedelegate, MsgDelegate, MsgUndelegate};
pub const MSG_SEND: &str = "/cosmos.bank.v1beta1.MsgSend";
pub fn bank_send(
from_address: impl Into<String>,
to_address: impl Into<String>,
amount: Vec<Coin>,
) -> MsgSend {
MsgSend {
from_address: from_address.into(),
to_address: to_address.into(),
amount,
}
}
pub fn bank_send_any(
from_address: impl Into<String>,
to_address: impl Into<String>,
amount: Vec<Coin>,
) -> Any {
to_any(&bank_send(from_address, to_address, amount), MSG_SEND)
}
pub const MSG_DELEGATE: &str = "/cosmos.staking.v1beta1.MsgDelegate";
pub const MSG_UNDELEGATE: &str = "/cosmos.staking.v1beta1.MsgUndelegate";
pub const MSG_BEGIN_REDELEGATE: &str = "/cosmos.staking.v1beta1.MsgBeginRedelegate";
pub fn delegate(
delegator_address: impl Into<String>,
validator_address: impl Into<String>,
amount: Coin,
) -> MsgDelegate {
MsgDelegate {
delegator_address: delegator_address.into(),
validator_address: validator_address.into(),
amount: Some(amount),
}
}
pub fn delegate_any(
delegator_address: impl Into<String>,
validator_address: impl Into<String>,
amount: Coin,
) -> Any {
to_any(
&delegate(delegator_address, validator_address, amount),
MSG_DELEGATE,
)
}
pub fn undelegate(
delegator_address: impl Into<String>,
validator_address: impl Into<String>,
amount: Coin,
) -> MsgUndelegate {
MsgUndelegate {
delegator_address: delegator_address.into(),
validator_address: validator_address.into(),
amount: Some(amount),
}
}
pub fn undelegate_any(
delegator_address: impl Into<String>,
validator_address: impl Into<String>,
amount: Coin,
) -> Any {
to_any(
&undelegate(delegator_address, validator_address, amount),
MSG_UNDELEGATE,
)
}
pub fn begin_redelegate(
delegator_address: impl Into<String>,
validator_src_address: impl Into<String>,
validator_dst_address: impl Into<String>,
amount: Coin,
) -> MsgBeginRedelegate {
MsgBeginRedelegate {
delegator_address: delegator_address.into(),
validator_src_address: validator_src_address.into(),
validator_dst_address: validator_dst_address.into(),
amount: Some(amount),
}
}
pub fn begin_redelegate_any(
delegator_address: impl Into<String>,
validator_src_address: impl Into<String>,
validator_dst_address: impl Into<String>,
amount: Coin,
) -> Any {
to_any(
&begin_redelegate(
delegator_address,
validator_src_address,
validator_dst_address,
amount,
),
MSG_BEGIN_REDELEGATE,
)
}
pub const MSG_WITHDRAW_DELEGATOR_REWARD: &str =
"/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward";
pub const MSG_WITHDRAW_VALIDATOR_COMMISSION: &str =
"/cosmos.distribution.v1beta1.MsgWithdrawValidatorCommission";
pub fn withdraw_delegator_reward(
delegator_address: impl Into<String>,
validator_address: impl Into<String>,
) -> MsgWithdrawDelegatorReward {
MsgWithdrawDelegatorReward {
delegator_address: delegator_address.into(),
validator_address: validator_address.into(),
}
}
pub fn withdraw_delegator_reward_any(
delegator_address: impl Into<String>,
validator_address: impl Into<String>,
) -> Any {
to_any(
&withdraw_delegator_reward(delegator_address, validator_address),
MSG_WITHDRAW_DELEGATOR_REWARD,
)
}
pub fn withdraw_validator_commission(
validator_address: impl Into<String>,
) -> MsgWithdrawValidatorCommission {
MsgWithdrawValidatorCommission {
validator_address: validator_address.into(),
}
}
pub fn withdraw_validator_commission_any(validator_address: impl Into<String>) -> Any {
to_any(
&withdraw_validator_commission(validator_address),
MSG_WITHDRAW_VALIDATOR_COMMISSION,
)
}
pub const MSG_VOTE: &str = "/cosmos.gov.v1.MsgVote";
pub fn vote(
proposal_id: u64,
voter: impl Into<String>,
option: i32,
metadata: impl Into<String>,
) -> cosmrs::proto::cosmos::gov::v1::MsgVote {
cosmrs::proto::cosmos::gov::v1::MsgVote {
proposal_id,
voter: voter.into(),
option,
metadata: metadata.into(),
}
}
pub fn vote_any(
proposal_id: u64,
voter: impl Into<String>,
option: i32,
metadata: impl Into<String>,
) -> Any {
to_any(&vote(proposal_id, voter, option, metadata), MSG_VOTE)
}
pub const MSG_EXEC: &str = "/cosmos.authz.v1beta1.MsgExec";
pub const MSG_REVOKE: &str = "/cosmos.authz.v1beta1.MsgRevoke";
pub fn authz_exec(
grantee: impl Into<String>,
msgs: Vec<Any>,
) -> cosmrs::proto::cosmos::authz::v1beta1::MsgExec {
cosmrs::proto::cosmos::authz::v1beta1::MsgExec {
grantee: grantee.into(),
msgs,
}
}
pub fn authz_exec_any(grantee: impl Into<String>, msgs: Vec<Any>) -> Any {
to_any(&authz_exec(grantee, msgs), MSG_EXEC)
}
pub fn authz_revoke(
granter: impl Into<String>,
grantee: impl Into<String>,
msg_type_url: impl Into<String>,
) -> cosmrs::proto::cosmos::authz::v1beta1::MsgRevoke {
cosmrs::proto::cosmos::authz::v1beta1::MsgRevoke {
granter: granter.into(),
grantee: grantee.into(),
msg_type_url: msg_type_url.into(),
}
}
pub fn authz_revoke_any(
granter: impl Into<String>,
grantee: impl Into<String>,
msg_type_url: impl Into<String>,
) -> Any {
to_any(&authz_revoke(granter, grantee, msg_type_url), MSG_REVOKE)
}
pub const MSG_REVOKE_ALLOWANCE: &str = "/cosmos.feegrant.v1beta1.MsgRevokeAllowance";
pub fn revoke_allowance(
granter: impl Into<String>,
grantee: impl Into<String>,
) -> cosmrs::proto::cosmos::feegrant::v1beta1::MsgRevokeAllowance {
cosmrs::proto::cosmos::feegrant::v1beta1::MsgRevokeAllowance {
granter: granter.into(),
grantee: grantee.into(),
}
}
pub fn revoke_allowance_any(granter: impl Into<String>, grantee: impl Into<String>) -> Any {
to_any(&revoke_allowance(granter, grantee), MSG_REVOKE_ALLOWANCE)
}
pub const MSG_TRANSFER: &str = "/ibc.applications.transfer.v1.MsgTransfer";