use crate::msg::to_any;
use crate::proto::qorechain::abstractaccount::v1 as pb;
use cosmrs::proto::cosmos::base::v1beta1::Coin;
use cosmrs::Any;
pub use pb::SpendingRule;
pub const CREATE_ABSTRACT_ACCOUNT: &str = "/qorechain.abstractaccount.v1.MsgCreateAbstractAccount";
pub const UPDATE_SPENDING_RULES: &str = "/qorechain.abstractaccount.v1.MsgUpdateSpendingRules";
pub const REGISTER_AUTHENTICATOR: &str = "/qorechain.abstractaccount.v1.MsgRegisterAuthenticator";
pub const REVOKE_AUTHENTICATOR: &str = "/qorechain.abstractaccount.v1.MsgRevokeAuthenticator";
pub const EXECUTE_EVM: &str = "/qorechain.abstractaccount.v1.MsgExecuteEVM";
pub const EXECUTE_COSMOS: &str = "/qorechain.abstractaccount.v1.MsgExecuteCosmos";
pub fn create_abstract_account(
owner: impl Into<String>,
account_type: impl Into<String>,
) -> pb::MsgCreateAbstractAccount {
pb::MsgCreateAbstractAccount {
owner: owner.into(),
account_type: account_type.into(),
}
}
pub fn create_abstract_account_any(
owner: impl Into<String>,
account_type: impl Into<String>,
) -> Any {
to_any(
&create_abstract_account(owner, account_type),
CREATE_ABSTRACT_ACCOUNT,
)
}
pub fn update_spending_rules(
owner: impl Into<String>,
account_address: impl Into<String>,
rules: Vec<SpendingRule>,
) -> pb::MsgUpdateSpendingRules {
pb::MsgUpdateSpendingRules {
owner: owner.into(),
account_address: account_address.into(),
rules,
}
}
pub fn update_spending_rules_any(
owner: impl Into<String>,
account_address: impl Into<String>,
rules: Vec<SpendingRule>,
) -> Any {
to_any(
&update_spending_rules(owner, account_address, rules),
UPDATE_SPENDING_RULES,
)
}
#[allow(clippy::too_many_arguments)]
pub fn register_authenticator(
owner: impl Into<String>,
account_address: impl Into<String>,
scheme: impl Into<String>,
pubkey: Vec<u8>,
permissions: Vec<String>,
expiry_unix: i64,
label: impl Into<String>,
) -> pb::MsgRegisterAuthenticator {
pb::MsgRegisterAuthenticator {
owner: owner.into(),
account_address: account_address.into(),
scheme: scheme.into(),
pubkey,
permissions,
expiry_unix,
label: label.into(),
}
}
#[allow(clippy::too_many_arguments)]
pub fn register_authenticator_any(
owner: impl Into<String>,
account_address: impl Into<String>,
scheme: impl Into<String>,
pubkey: Vec<u8>,
permissions: Vec<String>,
expiry_unix: i64,
label: impl Into<String>,
) -> Any {
to_any(
®ister_authenticator(
owner,
account_address,
scheme,
pubkey,
permissions,
expiry_unix,
label,
),
REGISTER_AUTHENTICATOR,
)
}
pub fn revoke_authenticator(
owner: impl Into<String>,
account_address: impl Into<String>,
scheme: impl Into<String>,
pubkey: Vec<u8>,
) -> pb::MsgRevokeAuthenticator {
pb::MsgRevokeAuthenticator {
owner: owner.into(),
account_address: account_address.into(),
scheme: scheme.into(),
pubkey,
}
}
pub fn revoke_authenticator_any(
owner: impl Into<String>,
account_address: impl Into<String>,
scheme: impl Into<String>,
pubkey: Vec<u8>,
) -> Any {
to_any(
&revoke_authenticator(owner, account_address, scheme, pubkey),
REVOKE_AUTHENTICATOR,
)
}
#[allow(clippy::too_many_arguments)]
pub fn execute_evm(
relayer: impl Into<String>,
account: impl Into<String>,
scheme: impl Into<String>,
pubkey: Vec<u8>,
signature: Vec<u8>,
to: impl Into<String>,
value: impl Into<String>,
data: Vec<u8>,
gas_limit: u64,
nonce: u64,
) -> pb::MsgExecuteEvm {
pb::MsgExecuteEvm {
relayer: relayer.into(),
account: account.into(),
scheme: scheme.into(),
pubkey,
signature,
to: to.into(),
value: value.into(),
data,
gas_limit,
nonce,
}
}
#[allow(clippy::too_many_arguments)]
pub fn execute_evm_any(
relayer: impl Into<String>,
account: impl Into<String>,
scheme: impl Into<String>,
pubkey: Vec<u8>,
signature: Vec<u8>,
to: impl Into<String>,
value: impl Into<String>,
data: Vec<u8>,
gas_limit: u64,
nonce: u64,
) -> Any {
to_any(
&execute_evm(
relayer, account, scheme, pubkey, signature, to, value, data, gas_limit, nonce,
),
EXECUTE_EVM,
)
}
#[allow(clippy::too_many_arguments)]
pub fn execute_cosmos(
relayer: impl Into<String>,
account: impl Into<String>,
scheme: impl Into<String>,
pubkey: Vec<u8>,
signature: Vec<u8>,
to: impl Into<String>,
amount: Vec<Coin>,
nonce: u64,
) -> pb::MsgExecuteCosmos {
pb::MsgExecuteCosmos {
relayer: relayer.into(),
account: account.into(),
scheme: scheme.into(),
pubkey,
signature,
to: to.into(),
amount,
nonce,
}
}
#[allow(clippy::too_many_arguments)]
pub fn execute_cosmos_any(
relayer: impl Into<String>,
account: impl Into<String>,
scheme: impl Into<String>,
pubkey: Vec<u8>,
signature: Vec<u8>,
to: impl Into<String>,
amount: Vec<Coin>,
nonce: u64,
) -> Any {
to_any(
&execute_cosmos(relayer, account, scheme, pubkey, signature, to, amount, nonce),
EXECUTE_COSMOS,
)
}