Допустим, мне нужно хранить и обрабатывать набор сложных данных в смарт-контракте. Там могут быть сложные правила, определяющие, кто и как может изменить элемент. В коллекции может быть несколько миллионов предметов.
Есть 2 способа реализации этой логики
контракт DataItem { ключ байт32; строковое значение; функция DataItem (bytes32 k, строка v) { ключ = к; значение = v; } } контракт DAppInterface { отображение (bytes32 => адрес) общедоступных элементов данных; function addDataItem (bytes32 k, string v) external { dataItems[k] = новый DataItem(k, v); } }
контракт DAppInterface { структура DataItem { ключ байт32; строковое значение; } отображение (bytes32 => DataItem) общедоступных элементов данных; function addDataItem (bytes32 k, string v) external { dataItems[k].key = k; dataItems[k].value = v; } }
В чем преимущество использования одного или другого подхода? Каковы рекомендации по выбору одного против другого?
В большинстве случаев структуры данных, даже сложные, должны быть структурами.
Вот несколько причин для выбора структур:
foo.bar()
), вы можете использовать библиотечный контракт , чтобы сделать это без дополнительной сложности создания контрактов для каждого экземпляра.Вот несколько причин, по которым контракты были бы лучше:
Однако они менее распространены. Мой совет: сначала попробуйте со структурами, а в крайнем случае используйте контракты структур данных.
Сергей Ильин
Мэтью Шмидт
Китта