You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NEAR上的Rust智能合约是否支持事件监听?需手动轮询吗?

NEAR Rust智能合约事件相关问题解答

事件功能支持情况

NEAR链上基于Rust开发的智能合约原生支持事件能力,不存在功能层面的限制。
NEAR的事件遵循统一的NEP-297标准实现,本质是合约执行过程中输出的结构化日志,不需要依赖特殊的链上预编译合约,也不用引入额外第三方依赖,开发者直接用官方Rust SDK自带的log!宏就能触发事件,简单实现示例如下:

use near_sdk::log;
use serde::Serialize;

// 自定义事件结构
#[derive(Serialize)]
#[serde(tag = "event", content = "data")]
pub enum MyContractEvent {
    Deposit { user: String, amount: u128 },
    Withdraw { user: String, amount: u128 }
}

// 合约业务逻辑中触发事件
pub fn handle_deposit(&mut self) {
    // 省略存款校验、状态更新等核心业务逻辑
    let event = MyContractEvent::Deposit {
        user: "bob.near".to_string(),
        amount: 1_000_000_000_000_000_000
    };
    log!("{}", serde_json::to_string(&event).unwrap());
}

事件获取方式

完全不需要通过手动轮询区块链的方式获取事件数据,开发者可以直接配置监听器实时获取目标合约的事件:

  • 可以对接NEAR生态的索引服务,按目标合约地址、事件类型配置过滤规则,服务会在对应事件被链上最终确认后实时推送匹配的事件数据,同时也支持按条件查询历史事件。
  • 如果是自建节点的场景,可以直接对接节点的交易执行结果数据流,实时过滤目标合约输出的结构化日志,自行解析后就能得到对应的事件内容,适合对数据可控性要求高的场景。

手动轮询逐块扫描交易当然也能拿到事件数据,但效率极低、延迟高,还容易因为区块回滚等问题出现数据不一致,完全没有必要,现有监听方案的实时性和稳定性都远好于自写轮询逻辑。
需要额外注意的是,事件本身不会写入合约的持久化状态,仅附着在交易执行结果中,如果需要长期留存事件数据,需要在监听到事件后自行做持久化存储。

内容的提问来源于stack exchange,提问作者Віталій Казміревський БС-21м

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:42:23