在以太坊和EVM中设计Solidity事件的最佳实践

realtime news  Jul 31, 2024 11:37  UTC 03:37

1 Min Read

Solidity事件是以太坊和EVM区块链的一个关键特性,提供了广泛的用例,对于整个生态系统至关重要。根据EigenLayer博客,这些用例包括记录日志、链下通知、数据索引和分析、跨合约通信以及安全监控。

例如,事件允许智能合约记录关键操作和状态变化,这对追踪合约行为和调试非常重要。链下应用程序可以监听智能合约的特定链上动作并触发后续逻辑。此外,事件可以被索引、存储、处理和分析,从而提供关于智能合约的有价值见解和模式。

EigenLayer强调高效、经济地设计Solidity事件的重要性。协议本身在以太坊上发出广泛的事件,这些事件用于测试、调试和触发事件驱动的逻辑。事件也被索引到数据存储和数据湖中,以支持内部和外部分析,助力像奖励计算和削减等关键协议功能。对提款事件的实时监控有助于提醒团队任何意外行为和潜在风险。

描述性

事件应当是自描述的,使其他人能够通过名称和架构立即理解其目的。避免在命名中使用缩写,以确保清晰性。例如,使用“UserRegisteredEvent”而不是“URE”来明确指定事件的目的。

语义上的准确性

事件应当准确反映链上发生的事情而没有任何歧义。例如,使用“UserDeletionRequestedEvent”而不是“UserDeletionEvent”来澄清这是一个请求事件,而不是实际的删除操作。

原子性和可组合性

事件设计应保持行为的细粒度,通过将复杂的操作分解为更小的、原子的事件来实现。这确保每个事件都是独立的,并且可以组合在一起还原整个历史记录。例如,使用“UserDeletionRequestedEvent”、“UserDeletionWithdrawnEvent”和“UserDeletionCompletedEvent”来分别捕捉每一步。

自包含

事件应包含所有必要的信息,不依赖于外部数据进行解释。例如,一个“UserDepositEvent”应包括像“user_id”、“erc20_token”、“amount”、“from_address”和“to_address”这样的字段,以提供一个完整的画面。

对称性

链上动作通常是对称的,如注册和注销或存款和取款。事件设计应反映这种对称性,以简化数据处理。例如,“WalletDepositEvent”和“WalletWithdrawEvent”应具有相似的结构。

平坦,不深层嵌套

事件应是平坦的,而不是深层嵌套的,以便更容易处理。嵌套事件在使用前通常需要展平,增加复杂性和成本。例如,“WalletWithdrawEvent”应包括简单的字段,如“wallet_address”、“to_address”和“amount”。

面向实体和领域

事件应归类为实体或领域,如“users”、“stakers”或“operators”。使用“EntityActionEvent”(如“UserLoginEvent”)这样的命名约定有助于更高效地组织和发现事件。

其他技术考虑

  • 控制事件的大小和频率,以避免过高的成本。
  • 根据成本和必要性考虑是否在链上或链下发出事件。

总之,Solidity事件对EigenLayer及其生态系统以及以太坊和EVM上的任何协议都是至关重要的。通过遵循这些最佳实践,开发者可以设计出高效、可扩展、经济高效且对开发者友好的事件。

欲了解更多信息,请访问EigenLayer博客



Read More