Saltar al contenido principal

Publicar eventos desde un contrato de Rust

Un evento puede contener temas, además de los datos que está publicando. Los datos de los temas pueden ser cualquier valor o tipo que desees.

// This function does nothing beside publishing events. Topics we are using are
// some `u32` integers for the sake of simplicity here.
pub fn events_function(env: Env) {
// A symbol will be our `data` we want published
my_data = Symbol::new(&env, "data_to_publish");

// an event with 0 topics
env.events().publish((), my_data.clone());

// an event with 1 topic (Notice the extra comma after the topic in the
// tuple? That comma is required in Rust to make a one-element tuple)
env.events().publish((1u32,), my_data.clone());

// an event with 2 topics
env.events().publish((1u32, 2u32), my_data.clone());

// an event with 3 topics
env.events().publish((1u32, 2u32, 3u32), my_data.clone());

// an event with 4 topics
env.events().publish((1u32, 2u32, 3u32, 4u32), my_data.clone());
}

Un ejemplo más realista se puede encontrar en la forma en que funciona la interfaz de token. Por ejemplo, la interfaz requiere que se publique un evento cada vez que se invoca la función transfer, con la siguiente información:

pub fn transfer(env: Env, from: Address, to: Address, amount: i128) {
// transfer logic omitted here
env.events().publish(
(symbol_short!("transfer"), from, to),
amount
);
}