1. 主页
  2. 文档
  3. Web3.0 设计教程
  4. TTT原则
  5. 3 .(推送数据)智能合约事件的透明度

3 .(推送数据)智能合约事件的透明度

事件(Event)相当于 Web3 时代的通知

(以太坊)智能合约可以发出事件,用于在区块链中存储日志,并通过 Javascript 通知 Dapps 前端已发生的事情。

了解事件非常重要

  • 事件中的日志(logs) 可以包含参数和信息
  • 在区块链中永久存储,因此可以进行搜索

开发人员通常会使用事件(Event)来处理各种事务,例如在满足特定条件时发出信号或发生特定操作时,比如新用户成为代币持有者,进行存款或从 Oracle 接收数据等等。

可以搜索事件对于记录一个 Dapp 的特定行为非常有用,并且可以了解自 Dapp 创建以来成千上万的区块中发生的事件。

为了更好地理解事件的重要性,下面阐述一个小故事:

当 Dao 在2016年遭到黑客入侵时,我有机会与小组合作解决这个大问题的一部分:找出用户在 ExtraBalance 中欠下的以太币数目及其对应账户。 当用户在ICO期间购买Dao 代币时,根据费用表,不同数量的以太将进入ExtraBalance 该团队的两个成员,Nick Johnson和Bokky Poobah,使用“CreatedToken”事件来追踪与DAO ICO相关的所有交易,而我使用另一种更硬核的方法,假设事件尚未实施,并开发区块链的解析器——一种取证工具,对于恶意或计划不当的智能合约非常有用。

之所以这样做,也是因为没有像“ReceivedByExtraBalance”这样的事件来确定交易部分。有趣的地方在于虽然他们的脚本只需要几个小时,而我的脚本需要一天或更长时间——这是因为我的脚本需要遍历(重新执行)区块链中的每一笔交易,而由于事件日志,他们可以访问 “正确” 的交易。即便如此,我们三个人花了大约两个月的时间来将所有的余额归还给原来的所有者。

这与Web3设计原则有什么关系?开发人员可以随心所欲地使用事件(Event):通过事件来发送 Dapp 的重要信息,让前端用户访问智能合约中的事件。

质量较高的事件可以成为智能合约和 Dapp 的标志,它可以是透明的,让用户知晓它在内部的工作原理,不必担心智能合约是草率的或是恶意的。

正如上面的 DAO 故事所述,缺少事件会迫使用户自我开发区块链解析器,以此了解内部发生的事情,但这是一项不可能完成的任务,因为ta还需要一个 Archival 节点(即全节点,full node)。

此外,事件对于开发人员来说非常有用,可以创建多种类型的解析,通知和响应数据源,甚至独立于智能合约所有者/创建者。 前端用户也应该可以在无需编码的前提下使用此功能。

Web3价值观:

  • 如果需要查找,查看和验证数据需要花费大量的精力,则不透明
  • 如果99%的用户不愿意查看,也不透明了[2]

🔑🔑原则🔑🔑

Dapp前端应该:

➤阐明并且用户最终可以访问所有事件,即使它们仅适用于开发人员

➤应用相关性:仅显示与当前用户相关的信息中断消息,但仍允许用户在单独的界面中检查所有事件

➤允许用户订阅,取消订阅或暂时不接收某些事件

事件是专用于合约的,因此这些是可能实现的简单建议。此外,可以通过外部工具,服务,插件或库更好地实现这些想法,而不需要 Dapp 前端开发人员将所有这些“非核心”功能在 Dapp 中实现。

示例:

  • 设立一个用户可以访问的通知中心,这可能是 “链视图” 侧面板中的一个部分
  • 为重要的消息使用 Toasts 消息提示框 创建过滤器以仅选择/取消选择某些事件或基于某些参数的自定义通知。  
  • 过滤器可以是:
    • 包含以太币/代币
    • 基于地址(我的/用户或其他地址或地址)
    • 在 timeX 和 timeY 之间,blockX和blockY
    • 等等

我们要如何帮助您?