Ejecuci贸n Sudo
La ejecuci贸n Sudo es un punto de entrada del contrato inteligente que s贸lo puede ser llamado por m贸dulos nativos Cosmos de confianza. No puede ser llamado por usuarios u otros contratos inteligentes. Como ejemplo, Sudo puede ser utilizado para hacer cumplir las propuestas de gobierno, y el contrato debe ser instanciado antes de que el gobierno pueda ejecutarlo.
Aqu铆 est谩 el tipo de msg sudo:
/// SudoMsg is only exposed for internal Cosmos SDK modules to call.
/// This is showing how we can expose "admin" functionality than can not be called by
/// external users or contracts, but only trusted (native/Go) code in the blockchain
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum SudoMsg {
MoveFunds {
recipient: String,
amount: Vec<Coin>,
},
}
Y el punto de entrada sudo:
#[entry_point]
pub fn sudo(_deps: DepsMut, _env: Env, msg: SudoMsg) -> Result<Response, HackError> {
match msg {
SudoMsg::MoveFunds { recipient, amount } => {
let msg = BankMsg::Send {
to_address: recipient,
amount,
};
Ok(Response::new().add_message(msg))
}
}
}
Esto se puede probar normalmente.
Cuando se utiliza multiprueba tendr谩 que a帽adir una llamada adicional a la envoltura del contrato:
pub fn contract_template() -> Box<dyn Contract<Empty>> {
let contract = ContractWrapper::new(
crate::contract::execute,
crate::contract::instantiate,
crate::contract::query,
);
let contract_with_sudo = contract.with_sudo(crate::contract::sudo);
Box::new(contract_with_sudo)
}
Last updated