5

在编写智能合约时,确保使用的所有数据结构都是确定性的,这一点很重要。

具体来说,如果HashMap或被HashSet使用 - 是否存在来自 Rust 标准库的可能的非确定性?

4

2 回答 2

3

由于 Wasm 运行时无法访问非确定性输入,因此整个执行是确定性的。HashSetHashMap使用可用源中的种子,如果 Wasm 编译没有可用源,则执行将始终相同。应该很容易确认。

于 2020-05-28T15:44:50.800 回答
2

补充一下@evgeny-kuzyakov 所说的,不确定性的唯一来源是操作系统级别的功能,如线程、时钟、操作系统随机性、网络、设备、文件系统等。如果合约是用试图访问这些功能,它将不会在我们的区块链上执行(尽管可以部署它,因为可以将任何字节序列部署为合约),并且在执行开始之前将失败并出现错误。

于 2020-05-28T17:18:31.390 回答