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