哪些 Rust 数据结构是不确定的
Which Rust data structures are non deterministic
编写智能合约时,确保使用的所有数据结构都是确定性的非常重要。
具体来说,如果使用 HashMap
或 HashSet
- 是否存在来自 Rust 标准库的非确定性?
由于 Wasm 运行时无法访问非确定性输入,因此整个执行是确定性的。 HashSet
和 HashMap
使用可用源中的种子,如果 Wasm 编译没有可用源,执行将始终相同。应该很容易确认。
补充一下@evgeny-kuzyakov 所说的,非确定性的唯一来源是 OS 级特征,如线程、时钟、OS 随机性、网络、设备、文件系统等。如果合约是用试图访问这些功能的代码编译的,它将不会在我们的区块链上执行(尽管可以部署它,因为可以部署任何字节序列作为合约)并且会在之前失败并出现错误执行开始。
编写智能合约时,确保使用的所有数据结构都是确定性的非常重要。
具体来说,如果使用 HashMap
或 HashSet
- 是否存在来自 Rust 标准库的非确定性?
由于 Wasm 运行时无法访问非确定性输入,因此整个执行是确定性的。 HashSet
和 HashMap
使用可用源中的种子,如果 Wasm 编译没有可用源,执行将始终相同。应该很容易确认。
补充一下@evgeny-kuzyakov 所说的,非确定性的唯一来源是 OS 级特征,如线程、时钟、OS 随机性、网络、设备、文件系统等。如果合约是用试图访问这些功能的代码编译的,它将不会在我们的区块链上执行(尽管可以部署它,因为可以部署任何字节序列作为合约)并且会在之前失败并出现错误执行开始。