Какие структуры данных в Rust недетерминированы - PullRequest
3 голосов
/ 28 мая 2020

При написании смарт-контрактов важно убедиться, что все используемые структуры данных являются детерминированными c.

В частности, если используются HashMap или HashSet - возможен ли недетерминизм Стандартная библиотека Rust?

Ответы [ 2 ]

3 голосов
/ 28 мая 2020

Поскольку среда выполнения Wasm не имеет доступа к недетерминированным c входным данным, все выполнение является детерминированным c. HashSet и HashMap используют семя из доступного источника, в случае компиляции Wasm доступного источника нет, выполнение всегда будет одинаковым. Это должно быть легко подтвердить.

2 голосов
/ 28 мая 2020

В дополнение к тому, что сказал @ evgeny-kuzyakov, единственными источниками недетерминизма являются функции уровня ОС, такие как потоки, часы, случайность ОС, сеть, устройства, файловая система и т. Д. c. Если контракт скомпилирован с кодом, который пытается получить доступ к этим функциям, он не будет выполнен в нашей цепочке блоков (хотя его можно развернуть, потому что можно развернуть любую последовательность байтов в качестве контракта) и завершится с ошибкой до начала выполнения. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...