Zeppelin OS

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:07, 15 января 2019.
ZeppelinOS
Логотип ZeppelinOS
Создатели: Demian Brener, Manuel Araoz
Разработчики: Zeppelin
Выпущена: 2017
Постоянный выпуск: ZeppelinOS 2.0 / 2018
Написана на: shell language
Локализация: english
Лицензия: Whitepaper
Веб-сайт zeppelinos.org

ZeppelinOS — это платформа для разработки, развертывания и эксплуатации проектов смарт-контрактов на Ethereum и всех других блокчейнах EVM и eWASM.

Обзор

Zeppelin — это компания, занимающаяся разработкой и проверкой безопасности смарт-контрактов на Ethereum, EVM и eWASM, платформ для создания децентрализованных приложений. Библиотека смарт-контрактов OpenZeppelin их основной продукт.

Zeppelin OS — это open source платформа, состоящая из инструментов и сервисов над EVM, предназначенная для разработки и управления децентрализованными приложениями. Команда Zeppelin выделила четыре наиболее важных компонента Zeppelin OS , часть из которых уже реализована и доступна для использования:

  1. Zeppelin OS Kernel — обновляемое и управляемое сообществом «ядро» платформы. Состоит из набора библиотек в блокчейне, которые разработчики могут подключить к своим проектам. Первопроходцем стал OpenZeppelin, который уже доступен для использования.
  2. Zeppelin OS Scheduler — позволяет контрактам запрашивать асинхронное исполнение функции, а также даёт возможность любому участнику оплачивать расходы по газу, получая за это вознаграждение.
  3. Zeppelin OS Marketplace — важная составляющая взаимодействия между контрактами и приложениями, своего рода App Store / Google Play для блокчейна. Позволяет использовать другие сервисы для создания более сложных приложений.
  4. Zeppelin OS off-chain tools — набор инструментов для работы и анализа децентрализованных приложений.

Характеристики

  1. Обновления: развертывание новых версий пакетов на блокчейн.
  2. Публикация пакетов EVM: развертывание пакетов в блокчейне, чтобы разрешить другим пользователям повторное использование проекта.
  3. Связать пакеты EVM: связать проект с пакетами EVM, уже развернутыми на блокчейн.

ZeppelinOS спонсируется компанией Zeppelin. [Источник 1]

Работа с ZeppelinOS

На данном примере можно увидеть, что с помощью Zeppelin OS можно деплоить, обновлять, компилировать и тестировать контракты. Это отличный инструмент для тех, кому удобно работать с командной строкой. Перейдем к уже реализованному функционалу. Всю документацию Zeppelin OS можно посмотреть на официальном сайте. [Источник 2] Для начала нужно установить zos:

$ npm install --global zos

Теперь создадим директорию проекта и все необходимое для него:

$ mkdir zostest && cd zostest
   $ npm init
   $ zos init zostest   ##!i##

После чего будут созданы все необходимые конфигурационные файлы. Теперь можно переходить к написанию контрактов. В качестве тестового контракта давайте напишем небольшое «хранилище переменных»:

 1     pragma solidity 0.4.24;
 2    import "zos-lib/contracts/migrations/Migratable.sol";
 3    contract SimpleStorage is Migratable {
 4     uint storedData;
 5     function initialize(uint256 _x) isInitializer("SimpleStorage", "0") public {
 6         storedData = _x;
 7     }
 8     function get() public constant returns (uint) {
 9         return storedData;
10     }
11    }

Компилируем и добавляем наш контракт, как на рисунке 1:

 $ zos add SimpleStorage 

Рисунок 1 — Компиляция контракта

Запускаем тестовую сеть (в отдельном терминале):

$ npx ganache-cli --port 9545  

Пушим в нашу локальную сеть, при этом создается новый конфигурационный файл zos.local.json, согласно рисунку 2.

$ zos push --network local 

Рисунок 2 — Создание конфигурационного файла zos.local.json


Осталось создать обновляемый контракт, попутно запустить initialize() с аргументом 88 для «хранилища», как на рисунке 3:

$ zos create SimpleStorage --init initialize --args 88 --network local 

Рисунок 3 — Создание обновляемого контракта

Теперь попробуем добавить функцию увеличения переменной в «хранилище», например, такую:

 1    pragma solidity 0.4.24;
 2    import "zos-lib/contracts/migrations/Migratable.sol";
 3    contract SimpleStorage is Migratable {
 4     uint storedData;
 5     function initialize(uint256 _x) isInitializer("SimpleStorage", "0") public {
 6         storedData = _x;
 7     }
 8     function incrementStorage(uint256 _x) public {
 9         storedData += _x;
10     }
11     function get() public constant returns (uint) {
12         return storedData;
13     }
14    }

После чего надо обновить контракт в сети, согласно рисункам 4 и 5

$ zos push --network local 

Рисунок 4 — Обновление контракта и пуш

$ zos update SimpleStorage --network local 

Рисунок 5 — Обновление контракта

Теперь можно посмотреть, что же вышло. Для этого воспользуемся следующими командами: truffle console:

$ npx truffle console --network=local
   truffle(local)> sS = SimpleStorage.at(<proxy-address>) ##!i##

А <proxy-address> можно посмотреть в zos.local.json в соответствующей графе, и проверим, что там лежит в «хранилище» и можем ли мы увеличивать переменную. Результат можно увидеть на рисунке 6:

Рисунок 6 — Результат проверки

Всё работает здорово, есть много возможностей для тестирования контрактов. Zeppelin OS можно использовать как инструмент для разработки.

Мы проверили, что с помощью Zeppelin OS можно деплоить, обновлять, компилировать и тестировать контракты. Zeppelin OS это отличный инструмент для тех, кому нравится работать с командной строкой, а от Remix в браузере бросает в дрожь. Кроме того, можно рекомендовать начать знакомство с Solidity и смарт-контрактами именно с этого проекта. [Источник 3]

ZeppelinOS 2.0

Самое фундаментальное изменение в ZeppelinOS 2.0 заключается в том, что оно расширяет связывающие функции ZeppelinOS. В 1.x вы могли связать свои проекты с тем, что раньше называлось "стандартной библиотекой". Этот "stdlib" был в основном предварительно развернутой версией набора общих многоразовых контрактов, таких как OpenZeppelin, который дал вашим проектам мгновенный доступ к сотням стандартных реализаций без необходимости компилировать или развертывать какой-либо код. В 1.x вы могли бы подключиться к различным версиям этой "стандартной библиотеки", но была только эта "стандартная библиотека". 2.x выводит это на совершенно новый уровень; теперь вы можете подключить свой проект к нескольким "стандартным библиотекам", но это еще не все, поэтому вся концепция того, что раньше было" стандартной библиотекой", развивается в концепцию"пакета EVM".

EVM

Что такое пакет EVM? Это в основном часть многоразового кода, который был развернут на блокчейне в виде байт-кода EVM. Любой может создать пакет EVM, и ваши проекты ZeppelinOS смогут подключиться к обширной экосистеме предварительно скомпилированного, предварительно развернутого многоразового кода в виде пакетов EVM.

В 1.x, контракты Вашего проекта ZeppelinOS всегда управлялись пакетным контрактом. Это дало свои контракты обновляемый и дал им возможность связи с ЭВМ пакеты (см. контракт архитектура для дополнительной информации.) Мы поняли, что это имело смысл, когда дело дошло до пакетов EVM, но не тогда, когда дело дошло до частей вашего проекта, которые не должны были быть повторно используемым кодом, т. е. кодом, который просто должен быть обновляемым, но не повторно используемым. И так, в 2.x, обновления и возможность подключения к пакетам EVM были полностью разделены.

В 2.x по умолчанию ваш проект ZeppelinOS не будет использовать свою архитектуру на цепочке приложений или пакетов, если только вы явно не укажете, что ваш код предназначен для повторного использования в качестве пакета EVM. Когда вы инициируете проект ZeppelinOS, нет никакой архитектуры, кроме кода вашего проекта. ZeppelinOS просто использует CLI для управления прокси.

Новая команда

2.x вводит несколько новых команд к своему CLI:

  1. zos publish
  2. zos check
  3. zos set-admin
  4. zos unlink

Измененные команды

В 2.x, есть незначительные изменения в командах от 1.х, как некоторые из них теперь имеют варианты, как --skip-compile , но есть и более существенные изменения.

bumpтеперь актуально только для опубликованных пакетов EVM и больше не применимо к проектам, которые не предназначены для повторного использования.

link теперь можно вызывать с несколькими пакетами EVM в качестве аргументов.

init уже не имеет --libвозможность. Теперь все ZeppelinOS проекты пакетов, и вы можете вызвать zos publish команду, чтобы сделать ваш ЭВМ пакет многоразовый другие.

Совместимость

К сожалению, 2.x вводит критические изменения, поэтому проект, который был создан с использованием 1.x не может быть автоматически обновлен до 2.х. Это означает, что если вы обновляете свой глобальный zos пакет NPM в 2.х, он не будет совместим с проектами, которые были созданы с помощью старой версии zos. В таких случаях CLI обнаружит несовместимость и предупредит вас. Это одна из причин, почему npx zos рекомендуется zos использование, так что каждый НПМ проект может направлять собственные zos версии.

Совместимые пакеты EVM

Кроме того, обратите внимание, что пакеты EVM, созданные с помощью 1.x, не могут быть связаны с проектами, использующими 2.x. Все поставщики пакетов EVM должны будут создавать новые пакеты с 2.x так, чтобы их можно было использовать в ZeppelinOS 2.x проектов. [Источник 4]

Источники

  1. ZeppelinOS // ZeppelinOS. [2017-2018]. Дата обновления: 13.02.2018 URL: https://docs.zeppelinos.org/docs/start.html (Дата обращения: 04.11.2018)
  2. ZeppelinOS // ZeppelinOS. [2017-2018]. Дата обновления: 13.02.2018 URL: https://docs.zeppelinos.org/docs/deploying.html (Дата обращения: 14.01.2019)
  3. ZeppelinOS // Habr. [2017-2018]. Дата обновления: 09.10.2018 URL:https://habr.com/company/solarsecurity/blog/424801/ (Дата обращения: 04.11.2018)
  4. ZeppelinOS // ZeppelinOS. [2017-2018]. Дата обновления: 13.02.2018 URL: https://docs.zeppelinos.org/docs/new_2.html (Дата обращения: 08.11.2018)