哪些Rust数据结构是非确定性的?

5
写智能合约时,确保使用的所有数据结构都是确定性的非常重要。
具体而言,如果使用了HashMap或HashSet,是否可能存在来自Rust标准库的不确定性?
2个回答

3

由于Wasm运行时没有访问非确定性输入的权限,因此整个执行过程是确定性的。HashSetHashMap使用可用来源的种子,如果在Wasm编译过程中不存在可用来源,则执行结果始终相同。这应该很容易确认。


请注意 WASI 具有 random_get,并且 WASI 和 emscripten 都具有 I/O 操作。当针对这些平台时,Rust 的 std 默认使用非确定性哈希值。因此,除非您使用 wasm32-unknown-unknown 目标,否则您的 HashMap 仍将默认为非确定性。 - sinan

2

除了@evgeny-kuzyakov所说的内容外,唯一的非确定性来源是操作系统级别的特性,比如线程、时钟、操作系统随机性、网络、设备、文件系统等。如果合约编译的代码试图访问这些功能,则不会在我们的区块链上执行(虽然可以部署它,因为可以将任何字节序列部署为合约),并且在执行开始之前就会失败并显示错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接