Создание смарт контракта - dapplicaio/waxio_document_russian GitHub Wiki

В этом разделе вы узнаете, как написать и скомпилировать WAX смарт-контракт с помощью eosio-init.

Как это работает

eosio-init - это инструмент WAX-CDT, который создает следующий шаблон/структуру каталогов смарт-контракта:

  • Папка include: включает в себя пример файла .hpp.
  • Папка ricardian: включает в себя пример файла markdown рикардианского контракта.
  • Папка src: включает в себя пример файла смарт-контракта .cpp.

Файлы шаблонов именуются в соответствии с именем проекта, которое вы указываете при использовании eosio-init из командной строки.

Использование eosio-init

Чтобы создать свой первый смарт-контракт WAX с помощью eosio-init:

  1. Создайте каталог смарт-контрактов. Для этого урока мы будем использовать папку с именем mycontracts.

mkdir mycontracts

Перейдите к этому новому каталогу:

cd mycontracts

  1. Из командной строки, используйте eosio-init с параметром -project.

eosio-init -project wax

eosio-init использует имя -project для создания следующей структуры каталогов:

a. mycontracts/wax/include b. mycontracts/wax/ricardian c. mycontracts/wax/src

  1. Необязательный. Добавить Рикардианские положения. Рикардианский контракт уже включен по умолчанию.

Теперь у вас должен быть шаблон смарт-контракта, включая образец смарт-контракта (mycontracts/wax/src/wax.cpp). Этот контракт включает в себя следующее действие:

#include <wax.hpp>
ACTION wax::hi( name nm ) {
   /* fill in action body */
   print_f("Name : %\n",nm);
}

Файл заголовка (mycontracts/wax/include/wax.hpp) наследуется от: // Inherit your contract from eosio::contract. // This exposes the following data types (available to your smart contract): // eosio::name receiver - the contract that receives an action (this contract) // eosio::name code - the contract's blockchain account // eosio::datastream - the data that's passed to the contract. In this example, it's your name. #include <eosio/eosio.hpp> using namespace eosio;

CONTRACT wax : public contract {
   public:
      using contract::contract;

      // The ACTION keyword implements the behavior of your contract. 
      // ACTION is a shortcut for [[eosio::action]]  
      ACTION hi( name nm );

      //action_wrapper: first parameter = action to call
      //second parameter = pointer to the action function
      using hi_action = action_wrapper<"hi"_n, &wax::hi>;
};

Совет: структура action_wrapper создает template/pointer на основе определенного действия. Вы можете использовать action_wrappers для совершения вызовов действий из одного контракта в другой.

Составление своего контракта

Для развертывания вашего смарт-контракта вам необходимо создать файлы .wasm и .abi. Вы можете сделать это, используя Инструментарий разработки контрактов WAX (WAX CDT).

  1. Установите WAX-CDT (если вы этого еще не сделали).
  2. В командной строке перейдите в папку сборки mycontracts/wax.

cd wax/build

  1. Инициализируйте cmake, чтобы записать необходимые файлы сборки в каталог сборки.

cmake ..

Консоль выведет следующие задачи сборки:

-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
...
-- Build files have been written to: waxblockchain/wax-blockchain/wax-cdt/examples/hello/build
  1. Соберите скрипты.

make

Консоль выведет следующее подтверждение:

Scanning dependencies of target wax
[ 50%] Building CXX object CMakeFiles/wax.dir/wax.obj
Warning, empty ricardian clause file
[100%] Linking CXX executable wax.wasm
[100%] Built target wax
[ 77%] No install step for 'wax_project'
[ 88%] No test step for 'wax_project'
[100%] Completed 'wax_project'
[100%] Built target wax_project

Вы можете найти файлы wax.wasm и wax.abi в каталоге build/wax.

Что дальше?


Создание учетных записей


⚠️ **GitHub.com Fallback** ⚠️