在智能合约中使用 env::log 的最佳实践是什么?
What's the best practice for using env::log in smart-contracts?
在以太坊中,事件是明确定义的,每个事件都是一种数据结构,用于发出某种动作的信号。在 Near 中,env::log
是消息。
示例:
- 在以太坊中,我们使用日志记录大部分代币状态变化
- NEP-21 没有提及任何关于日志的内容。
除“调试”/return 用户信息外,使用附近的日志有什么意义吗?日志应该标准化吗?
也许最好在其他地方进行讨论...?
接着是:
交易参数是序列化的并且清晰可见。记录交易参数有什么意义吗?
例如:在以太坊代币转账函数中,所有参数都额外记录在一个事件中。有几个原因:
- 有了事件,我们应该能够重新创建合约的状态;
- 浏览区块链时可读性更强。
但是在转移的情况下,我认为没有任何附加值,因为我们除了函数参数之外不记录任何其他内容。
我们还没有将以太坊事件的模拟添加到 NEAR 中。想要发出某些事件信号的合约需要 return 将其作为方法结果的一部分,例如 here。因此,我们的 env::log
目前仅供参考,可用于调试等。
一般来说,我们的合约可以选择如何序列化参数,因此合约记录自己的参数可能很有用,因为它可能会为它们使用复杂的序列化机制。
为具有复杂跨合约调用和回调的复杂合约创建日志可能会很有用,这样它就可以通知用户它是如何到达特定结果的。
在以太坊中,事件是明确定义的,每个事件都是一种数据结构,用于发出某种动作的信号。在 Near 中,env::log
是消息。
示例:
- 在以太坊中,我们使用日志记录大部分代币状态变化
- NEP-21 没有提及任何关于日志的内容。
除“调试”/return 用户信息外,使用附近的日志有什么意义吗?日志应该标准化吗? 也许最好在其他地方进行讨论...?
接着是: 交易参数是序列化的并且清晰可见。记录交易参数有什么意义吗? 例如:在以太坊代币转账函数中,所有参数都额外记录在一个事件中。有几个原因:
- 有了事件,我们应该能够重新创建合约的状态;
- 浏览区块链时可读性更强。 但是在转移的情况下,我认为没有任何附加值,因为我们除了函数参数之外不记录任何其他内容。
我们还没有将以太坊事件的模拟添加到 NEAR 中。想要发出某些事件信号的合约需要 return 将其作为方法结果的一部分,例如 here。因此,我们的 env::log
目前仅供参考,可用于调试等。
一般来说,我们的合约可以选择如何序列化参数,因此合约记录自己的参数可能很有用,因为它可能会为它们使用复杂的序列化机制。
为具有复杂跨合约调用和回调的复杂合约创建日志可能会很有用,这样它就可以通知用户它是如何到达特定结果的。