Здравствуйте, это команда eosBLACK!

Поскольку 15 августа 2018 года была выпущена версия 1.2.0, было сообщено, что скрипт сборки контракта «eosiocpp» из EOSIO v1.3.0 больше не будет использоваться. Кроме того, 20 сентября, с выпуском EOSIO v1.3.0, EOSIO официально представила EOSIO.CDT, который упрощает создание контрактов. В этом посте мы рассмотрим, что было обновлено с помощью этого набора инструментов.

Ссылка: https://github.com/EOSIO/eosio.cdt

К вашему сведению, eosiocpp будет оставаться доступным на данный момент, но поскольку в будущем будут происходить обновления EOSIO.CDT, рекомендуется заранее экспортировать среду разработки.

Эта статья основана на eosio.cdt v1.2.0 после установки Ubuntu 16.04 под wsl Windows 10.

Установка

● Репликация источника.

Во-первых, реплицируйте источник. Из тегов проверил v1.2.0.

● Метод сборки и установки.

Основной символ был назначен «EOS».

Путь установки: /usr/local/eosio.cdt/. Связанные команды символически связаны с «/ usr / local / bin». Основное отличие состоит в том, что вместо eosiocpp используется eosio-cpp. Давайте проиллюстрируем детали различия на реальных примерах.

Давайте рассмотрим простой пример.

Давайте попробуем создать простой пример контракта следующим образом:

mytest.hpp

mytest.cpp

Мы начнем с построения с помощью eosiocpp, чтобы сравнить это с предыдущим методом.

Размер, отображаемый для mytest.wasm, составляет 3059 байтов. ABI также отображается правильно. Мы попробуем eosio-cpp на сегодняшнем занятии.

Размер, отображаемый для mytest.wasm, составляет 2392 байта. Хотя мы объясним это позже, есть заметная диета в результатах компиляции, даже если передана та же опция -03. В EOSIO размер контракта напрямую связан со стоимостью, поэтому можно сказать, что небольшой размер является достаточной причиной для его перемещения. Видеть? Здесь ничего не отображается. Проблема в файле ABI. Да, пусто. Это потому, что eosio-abigen не может распознать «сноску» в старом формате. Начнем с создания этого ABI в законной форме.

Давайте посмотрим поближе.

Создание ABI

С помощью eosiocpp в предыдущем методе информация ABI может быть отображена путем аннотирования действия или таблицы следующим образом:

Для модифицированного eosio-cpp используйте атрибут C ++ 11 для описания отображаемого ABI.

Or,

Измените mytest.hpp, который ранее был отмечен как проблема, в соответствии с измененным правилом следующим образом.

Перестройте его, и вы увидите правильно отображаемый ABI.

Создание ABI: Дополнительно

«~ / Eosio.cdt / example / abigen_test / test.cpp» содержит примеры того, как создать ABI.
Я буду систематизировать их по каждому случаю после компиляции.

Во-первых, это определение действия структуры.

Результат выглядит следующим образом:

Ниже приводится пример указания имени унаследованной структуры. Тип «действие / таблица» может использовать 32 строки («.12345abcdefghijklmnopqrstuvwxyz») и кодируется как 64-битное целое число. Можно создать до 13 символов. Для 32 струн можно использовать до 12 цифр. 13-й символ может быть записан только как «1–5» и «a-j». Эти ограничения вызывают неудобства при кодировании, но их можно устранить, присвоив внутреннему коду и внешнему интерфейсу разные имена. Если объявление структуры и отображаемое имя ABI отличаются, они могут быть указаны следующим образом:

Выходной результат выглядит следующим образом:

Теперь давайте посмотрим, как определить действия функции. Это пример указания названия действия.

Выходной результат выглядит следующим образом:

Это пример, в котором определенное имя используется как есть. Также обратите внимание на тот факт, что переданное значение фактора - это тип test_c, определенный ранее.

И последнее, но не менее важное - это определение таблицы. На этот раз позвольте мне показать пример, в котором две разные многоиндексные таблицы определены с одинаковой структурой.

Результат выглядит следующим образом:

Это пример указания имени таблицы.

Результат выглядит следующим образом:

Изучение поведения

Вкратце, среда eosio.cdt - это интерпретатор цепочки инструментов clang, нацеленной на wasm32. Вы можете с уверенностью предположить, что eosiocpp, который был предоставлен как сценарий оболочки, заменен на C ++. Перенести скомпилированные исполняемые файлы, такие как eosio-cpp, eosio-ld и т. Д., На другой компьютер непросто, поскольку связанные каталоги, особенно путь «include» для Boost, принадлежат текущей системе во время процесса сборки. Это объясняет, почему очень важно понимать, какие параметры eosio-cpp передает фактической цепочке инструментов clang.

Источник eosio-cpp можно найти в «~ / eosio.cdt / build / EosioClang-prefix / src / EosioClang-build / eosio-cpp.cpp».

Другими словами, файл «~ / eosio.cdt / eosio_llvm / tools / clang / tools / extra / eosio_c_tool / eosio-cpp.cpp.in» был преобразован в текущую локальную среду в процессе сборки. То же самое относится к остальным источникам, включая eosio-ld.cpp, eosio-abigen.cpp и так далее.

Мы называем clang ++ для компиляции источников контракта, eosio-ld для ссылки и eosio-abigen для создания abi. Чтобы увидеть, как передаются командные строки на каждом шаге, на консоли отображаются instr, linkstr, genstr и другие eosio-cpp и eosio-ld.

После перестройки я скомпилировал mytest.cpp.

Как упоминалось ранее, «-03» передается как опция оптимизации.

Взгляните на исходный код eosio-abigen.cpp, и вы заметите, что большинство переданных параметров уже записано в самом исходном коде. Таким образом, чтобы создать ABI, как в старом «eosiocpp -g», вы можете использовать простую командную строку следующим образом:

Одна странная вещь заключается в том, что если путь eosio-abigen уже находится в вашем PATH, пропуск пути выполнения приведет к следующей ошибке:

Часть, связанная с передачей параметров, все еще редактируется, но можно ожидать, что скоро она будет исправлена. Одна из наиболее заметных опций eosio-cpp - это -I, которая служит для указания пути при использовании внешнего файла заголовка. См. Ниже его использование.

Этот параметр лучше всего передать как фактор -I при вызове clang ++, но

он опускается с абигеном.

В команде eosio-xx двойное тире «-» - это опция для передачи команд непосредственно в цепочку инструментов. Таким образом, я подумал, сработает ли это, если я попробую следующим образом:

Хотя в компиляции это передано правильно

на стадии abigen он внезапно застревает в передней части.

Следовательно, при использовании внешних заголовков вам следует добавить дополнительные параметры с двойным тире при прямом вызове eosio-abigen, как описано выше.

v1.2.1 была выпущена сразу после того, как был написан этот пост. Проблема, из-за которой параметр -I не передавался, считается исправленной.
https://github.com/EOSIO/eosio.cdt/releases/tag/v1.2.1

Подведение итогов

EOSIO все еще находится на начальной стадии. Добавление тире к eosiocpp делает процесс перехода на eosio-cpp простым и жирным. Я надеюсь, что этот пост может послужить небольшим руководством для вашего приятного процесса разработки в разгар постоянно меняющейся эозио.

Спасибо.

Команда eosBLACK

eosBLACK Контакты

Домашняя страница eosBLACK
eosBLACK Koreos
eosBLACK Medium
eosBLACK steemit
eosBLACK Facebook
eosBLACK twitter
eosBLACK Telegram (корейский)
eosBLACK Telegram (английский)

Белая книга (на китайском языке)
Белая книга (на корейском языке)
Белая книга (на английском языке)