use crate::msg::to_any;
use crate::proto::qorechain::svm::v1 as pb;
use cosmrs::Any;
pub use pb::SvmAccountMeta;
pub const DEPLOY_PROGRAM: &str = "/qorechain.svm.v1.MsgDeployProgram";
pub const CREATE_ACCOUNT: &str = "/qorechain.svm.v1.MsgCreateAccount";
pub const EXECUTE_PROGRAM: &str = "/qorechain.svm.v1.MsgExecuteProgram";
pub const REGISTER_SVM_PQC_KEY: &str = "/qorechain.svm.v1.MsgRegisterSVMPQCKey";
pub fn deploy_program(sender: impl Into<String>, bytecode: Vec<u8>) -> pb::MsgDeployProgram {
pb::MsgDeployProgram {
sender: sender.into(),
bytecode,
}
}
pub fn deploy_program_any(sender: impl Into<String>, bytecode: Vec<u8>) -> Any {
to_any(&deploy_program(sender, bytecode), DEPLOY_PROGRAM)
}
pub fn create_account(
sender: impl Into<String>,
owner: Vec<u8>,
space: u64,
lamports: u64,
salt: Vec<u8>,
) -> pb::MsgCreateAccount {
pb::MsgCreateAccount {
sender: sender.into(),
owner,
space,
lamports,
salt,
}
}
pub fn create_account_any(
sender: impl Into<String>,
owner: Vec<u8>,
space: u64,
lamports: u64,
salt: Vec<u8>,
) -> Any {
to_any(
&create_account(sender, owner, space, lamports, salt),
CREATE_ACCOUNT,
)
}
pub fn execute_program(
sender: impl Into<String>,
program_id: Vec<u8>,
accounts: Vec<SvmAccountMeta>,
data: Vec<u8>,
) -> pb::MsgExecuteProgram {
pb::MsgExecuteProgram {
sender: sender.into(),
program_id,
accounts,
data,
}
}
pub fn execute_program_any(
sender: impl Into<String>,
program_id: Vec<u8>,
accounts: Vec<SvmAccountMeta>,
data: Vec<u8>,
) -> Any {
to_any(
&execute_program(sender, program_id, accounts, data),
EXECUTE_PROGRAM,
)
}
pub fn register_svm_pqc_key(
sender: impl Into<String>,
svm_addr: Vec<u8>,
pqc_pub_key: Vec<u8>,
) -> pb::MsgRegisterSvmpqcKey {
pb::MsgRegisterSvmpqcKey {
sender: sender.into(),
svm_addr,
pqc_pub_key,
}
}
pub fn register_svm_pqc_key_any(
sender: impl Into<String>,
svm_addr: Vec<u8>,
pqc_pub_key: Vec<u8>,
) -> Any {
to_any(
®ister_svm_pqc_key(sender, svm_addr, pqc_pub_key),
REGISTER_SVM_PQC_KEY,
)
}