用途:Somnia Reactivity 是 Somnia 区块链内置的事件驱动发布/订阅系统,用于构建响应式 dApp。当智能合约发出事件后,验证者检测事件、打包关联合约状态(按事件所在区块高度读取),并推送给订阅者,无需轮询。
主要能力:支持两种订阅方式。链下订阅使用 TypeScript 与 WebSocket 向应用实时推送事件与状态;链上订阅通过 Solidity 处理程序合约响应其他合约的事件,处理程序在与事件不同的后续区块中执行。两者均可按合约地址、事件签名等条件过滤。
必要用法:当前仅 Somnia 测试网可用,链 ID 50312,HTTP RPC 为 https://api.infra.testnet.somnia.network,WebSocket 为 wss://api.infra.testnet.somnia.network,原生代币 STT(18 位小数),区块浏览器为 https://shannon-explorer.somnia.network。链下订阅需安装 npm i @somnia-chain/reactivity viem,通过 SDK 的 subscribe 方法创建,可传 ethCalls、onData、onError、eventContractSources、topicOverrides、onlyPushChanges 等参数;高并发场景可用 npm i @somnia-chain/viem-session-account 的会话账户替代私钥 EOA,其 seed 等同于私钥需安全生成。链上订阅需安装 npm i @somnia-chain/reactivity-contracts,处理程序合约继承 SomniaEventHandler 并重写 _onEvent,可通过 TypeScript SDK 的 createSoliditySubscription 创建订阅,也可调用地址 0x0100 的 Reactivity 预编译合约 subscribe/unsubscribe/getSubscriptionInfo 自行订阅。
限制:链上订阅要求订阅所有者至少持有 32 STT;处理程序执行发生在事件之后的下一个(或多个)区块,状态读取则取事件所在区块的快照;Somnia gas 模型与以太坊不同,冷存储读取和 LOG 操作码更贵,处理逻辑需尽量轻量,并避免发出与自身订阅过滤条件匹配的事件以防循环。链下订阅随 WebSocket 连接生命周期销毁,订阅 ID 不持久;“订阅过多”错误通常来自残留连接。其余细节官方资料暂未提供。