Ocean Protocol

Ocean Protocol


Не зная, о чём это всё, довольно сложно добраться до кода. Сайт не передаёт суть проекта вообще никак. Что-то связанное с экономикой и ИИ? С большими данными? Которое хранит в себе файлы и кучу всего помимо? Рынки?

Если я правильно в итоге поняла, то суть в следующем: кто-то выкладывает свои данные, и либо зарабатывает токены, предоставляя заинтересованным лицам к ним доступ, либо наоборот, платит за то, чтобы кто-то их обработал. Но разработчики, кажется, не имеют чёткого представления, что весь этот стэк технологий будет в итоге делать.

Покопавшись в официальной документации, можно понять, что этот протокол работает поверх сети эфира. Значит, основной репозиторий, с которого стоит начать ревью — контракты на солидити, keeper-contracts.

keeper-contracts

Расклад примерно стандартный: Truffle для деплоя, Solium как линтер, много импортов библиотек из OpenZeppelin и (неожиданно) zeppelinOS.

Стиль кода в целом слегка странноватый. Они следуют официальному Solidity style guide, но пишут даже небольшие заголовки функций, как если бы они были очень длинными, записывая модификаторы каждый на новой строке:

Документация местами хорошая и подробная, местами два слова, которые, наверное, скажут что-то разработчикам проекта, но не кому-то ещё. Что, например, делает этот контракт? Судя по коду — минтит токены для всех желающих. Но это неочевидно из описания.

Есть тесты, разбираться в том, как они работают, я не стала, но их довольно много.

Пришлось немного поискать, чтобы понять, что за контракт они импортируют всюду где надо и где не надо — это Initializable из zOS, который помогает мигрировать контракты на новый код. Из-за него вся система инициализации, которая обычно реализована через конструкторы, принимает необычный/странный вид. Не до конца ясно, как это работает и работает ли в текущем виде.

Вообще, много импортов, которые не используются. Вот этот контракт с Ownable, к примеру. Ownable предоставляет (почти) только модификатор onlyOwner, тут он не используется — но может потребовать лишний газ на деплой.

Контракты возвращают хорошие сообщения об ошибках. Те, кто уже работал с кодом на Solidity, поймут, как это важно — большая часть смарт-контрактов написана так, что дебажить их практически невозможно (плюс сам эфир не предоставляет почти никаких инструментов), а в контрактах Ocean будет понятно, на какой стадии и почему контракт ревертнул транзакцию.

Грамотно используются очень многие возможности языка Solidity, в т. ч. интерфейсы, библиотеки, модификаторы scope для функций, events, zkSNARKS. Код очень сильно декомпозирован, и это вроде бы хорошо, но, кажется, иногда стоит меньше это делать.

С самого начала меня смутили настройки линтера, там использование tx.origin помечается как warning, когда по умолчанию это ошибка. Видимо, они эту функцию используют или собираются использовать, что создаст проблемы multisig-кошелькам и смарт-контрактам, которые могли бы владеть данными в системе.

aquarius

Поднимаемся выше уровнем, поверх контрактов и evm работают aquarius, brizo и библиотеки squid.

Я не пишу на питоне, так что стиль кода оценить не смогу. Aquarius выглядит как обычная заготовка для бекенда на Flask, без толковой документации, но с кучей настроек для систем сборки (даже для GNU make!).

Есть инструкция по установке для разработчиков, но не для простых пользователей, им советуют использовать Docker. Пользователям API советуют использовать Swagger UI на уже работающем инстансе. Что ж, это хорошее решение, у Swagger один из лучших человеческих интерфейсов к API. Но вот советы выключать проверки безопасности в хроме, если вдруг что-то не заработает — не из тех, которым стоит следовать.

brizo

То же самое, только с чуть лучшей документацией. Мне стало интересно, откуда у них 200+ коммитов — похоже, что они обновляют версию одной из зависимостей, обновляют свою версию, чинят тесты и повторяют это снова и снова.

pleuston

Следующий, самый верхний слой этой системы. Это уже пользовательский интерфейс, активно разрабатываемый, с большим объёмом кода. Написан на React/redux.

Что сразу бросается в глаза, те, кто предоставляет какие-либо данные на продажу через Pleuston, должен выложить их на одно из полностью централизованных хранилищ, и пока что поддерживается только вариант с Microsoft Azure. То есть, на свой сервер выложить нельзя. Прямо-таки праздник капитализма. И полное пренебрежение интересами пользователя (который, наверное, хотел бы чуть-чуть приватности?).

Обычный код на JSX. Документации в коде нет. Тестов нет.

Report Page