Создание смарт контракта - dapplicaio/waxio_document_russian GitHub Wiki
В этом разделе вы узнаете, как написать и скомпилировать WAX смарт-контракт с помощью eosio-init.
eosio-init - это инструмент WAX-CDT, который создает следующий шаблон/структуру каталогов смарт-контракта:
- Папка include: включает в себя пример файла .hpp.
- Папка ricardian: включает в себя пример файла markdown рикардианского контракта.
- Папка src: включает в себя пример файла смарт-контракта .cpp.
Файлы шаблонов именуются в соответствии с именем проекта, которое вы указываете при использовании eosio-init из командной строки.
Чтобы создать свой первый смарт-контракт WAX с помощью eosio-init:
- Создайте каталог смарт-контрактов. Для этого урока мы будем использовать папку с именем mycontracts.
mkdir mycontracts
Перейдите к этому новому каталогу:
cd mycontracts
- Из командной строки, используйте eosio-init с параметром
-project
.
eosio-init -project wax
eosio-init использует имя -project
для создания следующей структуры каталогов:
a. mycontracts/wax/include b. mycontracts/wax/ricardian c. mycontracts/wax/src
- Необязательный. Добавить Рикардианские положения. Рикардианский контракт уже включен по умолчанию.
Теперь у вас должен быть шаблон смарт-контракта, включая образец смарт-контракта (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).
- Установите WAX-CDT (если вы этого еще не сделали).
- В командной строке перейдите в папку сборки mycontracts/wax.
cd wax/build
- Инициализируйте 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
- Соберите скрипты.
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.