Почему разработчики среды выполнения должны избегать перечисления записей хранилища EnumerableStorageMap в цепочке? - PullRequest
0 голосов
/ 22 мая 2019

Документация для EnumerableStorageMap гласит:

В основном полезен для вычислений вне цепочки. Разработчики среды выполнения должны избегать перечисления записей хранилища в цепочке.

Почему разработчики среды выполнения должны избегать перечисления этих записей хранилища в цепочке?

1 Ответ

0 голосов
/ 22 мая 2019

При разработке во время выполнения итерация списка, вообще говоря, является злом.

Если явно не защищено, это добавит неограниченную сложность O (N) к операции, которая будет взимать только O (1) сборов.В результате ваша цепочка становится уязвимой.

Кроме того, если списки становятся такими большими, и вы выполняете итерации по всем элементам, процесс может занять больше времени, чем время блока, и, таким образом, узел никогда не произведет блок.

Вы найдете ограниченные циклы в определенных модулях времени выполнения, но вам нужно помнить о сложности времени / вычислений этих циклов.

Вы можете легко "смоделировать" перечислимый список с двумяпредметы хранения:

decl_storage! {
    trait Store for Module<T: Trait> as Example {
        AllPeopleArray get(person): map u32 => T::AccountId;
        AllPeopleCount get(num_of_people): u32;
    }
}

Но я считаю, что цель состоит в том, чтобы вам было немного сложнее делать плохие вещи в ваших модулях.

...