From 0d3845f197f85e9f73655cd86c6ebfa7f5acb979 Mon Sep 17 00:00:00 2001 From: Ash Date: Thu, 14 Nov 2024 07:56:23 +0700 Subject: [PATCH] event emission --- contracts/account/src/contract.rs | 3 ++- contracts/account/src/error.rs | 3 +++ contracts/account/src/execute.rs | 12 ++++++++++++ contracts/account/src/msg.rs | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/contracts/account/src/contract.rs b/contracts/account/src/contract.rs index 15a7f6a..b95e7ed 100644 --- a/contracts/account/src/contract.rs +++ b/contracts/account/src/contract.rs @@ -4,7 +4,7 @@ use cosmwasm_std::{ }; use crate::error::ContractError; -use crate::execute::{add_auth_method, assert_self, remove_auth_method}; +use crate::execute::{add_auth_method, assert_self, emit, remove_auth_method}; use crate::msg::{ExecuteMsg, MigrateMsg}; use crate::{ error::ContractResult, @@ -93,6 +93,7 @@ pub fn execute( add_auth_method(deps, &env, add_authenticator) } ExecuteMsg::RemoveAuthMethod { id } => remove_auth_method(deps, env, *id), + ExecuteMsg::Emit { data } => emit(env, data.to_string()), } } diff --git a/contracts/account/src/error.rs b/contracts/account/src/error.rs index bd17ab6..a5aa7c7 100644 --- a/contracts/account/src/error.rs +++ b/contracts/account/src/error.rs @@ -78,6 +78,9 @@ pub enum ContractError { #[error("cannot override existing authenticator at index {index}")] OverridingIndex { index: u8 }, + #[error("emit data too large")] + EmissionSizeExceeded, + /// Doesn't support PartialEq, moved below #[error("{0}")] SerdeJSON(String), diff --git a/contracts/account/src/execute.rs b/contracts/account/src/execute.rs index 233b924..a97f9aa 100644 --- a/contracts/account/src/execute.rs +++ b/contracts/account/src/execute.rs @@ -259,6 +259,18 @@ pub fn remove_auth_method(deps: DepsMut, env: Env, id: u8) -> ContractResult ContractResult { + if data.len() > MAX_SIZE { + Err(ContractError::EmissionSizeExceeded) + } else { + let emit_event = Event::new("account_emit") + .add_attribute("address", env.contract.address) + .add_attribute("data", data); + Ok(Response::new().add_event(emit_event)) + } +} + pub fn assert_self(sender: &Addr, contract: &Addr) -> ContractResult<()> { if sender != contract { return Err(ContractError::Unauthorized); diff --git a/contracts/account/src/msg.rs b/contracts/account/src/msg.rs index 5008673..f61a410 100644 --- a/contracts/account/src/msg.rs +++ b/contracts/account/src/msg.rs @@ -11,6 +11,7 @@ pub struct InstantiateMsg { pub enum ExecuteMsg { AddAuthMethod { add_authenticator: AddAuthenticator }, RemoveAuthMethod { id: u8 }, + Emit { data: String }, } #[cw_serde]