3 Создание токенов

В CyberWay каждый пользователь приложения может создать собственный вид токена (в EOS создавать токены могут только блок-продюсеры, что дает блок-продюсерам власть над приложениями). Токены создаваемого приложения должны разворачиваться на отдельном от cyber.token аккаунте. Пользователь при создании токенов может использовать эталонную реализацию токен-контракта cyber.token в качестве базовой, загрузив его содержимое в свою область. То есть пользователю необходимо создать свой аккаунт и свой вид токена.

3.1 Загрузить исходные файлы контрактов Войти в созданную для контрактов директорию и загрузить в нее копию удаленного репозитория с исходными файлами контрактов.

cd CONTRACTS_DIR
git clone https://github.com/cyberway/cyberway.contracts --branch <branch name> --single-branch

Репозиторий cyberway.contracts содержит несколько контрактов, но для создания токенов необходим контракт cyber.token.

cd cyberway.contracts/cyber.token

3.2 Создать аккаунт для контракта Перед тем, как развернуть токен-контракт, необходимо создать аккаунт этого контракта (учетную запись контракта), исполнив командную строку вида:

cleos create account olga olga.token <публичный  ключ>

Параметры командной строки: olga — имя аккаунта для создаваемого контракта; olga.token — имя токен-контракта, загруженного с репозитория cyberway.contracts с исходными файлами.

В качестве примера создан аккаунт контракта с именем olga.token.

3.3 Скомпилировать контракт

eosio-cpp -I include -o olga.token.wasm src/olga.token.cpp --abigen

Контракт компилируется в веб-ассемблеровский файл формата wasm. Наличие опции --abigen указывает, что будет также сгенерирован файл abi/olga.token.abi.

3.4 Установить токен-контракт

cleos set contract olga.token CONTRACTS_DIR/cyberway.contracts/olga.token --abi abi/olga.token.abi -p olga.token@active

Параметр: olga.token@active — имя, которое будет использоваться для авторизации запроса.

Токен-контракт будет считаться успешно установленным, если в результирующей выдаче выполняемой команды будет содержаться информация вида:

executed transaction:  ... 
#         eosio <= eosio::setcode               {"account":"olga.token","vmtype":0,"vmversion":0,"code":"<code>
#         eosio <= eosio::setabi                {"account":"olga.token","abi":"<code>
warning: transaction executed locally, but may not be confirmed by the network yet         ]

3.5 Создать токен Для создания нового токена используется операция-действие create. В качестве аргумента задается тип токена symbol_name, содержащий два значения — максимальное значения предложения и символ токена. Вызов данного действия имеет вид:

cleos push action olga.token create '{"issuer":"olga", "maximum_supply":"1000000000.0000 SYS"}' -p olga.token@active

Наличие опции -p olga.token@active санкционирует контрактом olga.token выполнение этого действия.

Создание токена считается успешным, если на мониторе появится информация вида:

executed transaction: <info>
#   olga.token <= olga.token::create          {"issuer":"olga","maximum_supply":"1000000000.0000 SYS"}

В результате будет создан новый токен SYS,имеющий точность четыре десятичных знака. Максимально допустимое количество токенов в обращении должно быть ограничено значением 1000000000. Для создания этого токена требуется разрешение контракта olga.token. Имя olga.token@active будет использоваться для авторизации запроса.

3.6 Выпуск токенов Автор токена может выпускать токены на предварительно созданный аккаунт, например, на аккаунт с именем «alice», исполнив:

cleos push action olga.token issue '[ "alice", "100.0000 SYS", "memo" ]' -p olga@active

В результате выполнения команды должна появиться информация вида:

executed transaction:  ... 
#   olga.token <= olga.token::issue           {"to":"user","quantity":"100.0000 SYS","memo":"memo"}
>> issue
#   olga.token <= olga.token::transfer        {"from":"olga","to":"alice","quantity":"100.0000 SYS","memo":"memo"}
>> transfer
#         olga<= olga.token::transfer        {"from":"olga","to":"alice","quantity":"100.0000 SYS","memo":"memo"}
#          user <= olga.token::transfer        {"from":"olga","to":"alice","quantity":"100.0000 SYS","memo":"memo"}

Выдача содержит одно действие issue и три действия transfer. Во время выполнения issue дополнительно генерируются три внутренних вызова с уведомлением отправителя и получателя токенов.

3.7 Трансфер токенов Часть токенов может быть переведена с баланса одного аккаунта на баланс другого аккаунта. Например, для перевода суммы 25 токенов с баланса аккаунта «alice» на баланс аккаунта «bob» необходимо использовать командную строку вида:

cleos push action olga.token transfer '[ "alice", "bob", "25.0000 SYS", "m" ]' -p alice@active

Для выполнения этого действия требуется разрешение аккаунта отправителя «alice» — наличие опции -p alice@active.

Трансфер токенов считается выполненным успешно, если по завершению действия в командном окне появляется информация вида:

executed transaction:  ... 
#   olga.token <= olga.token::transfer        {"from":"alice","to":"bob","quantity":"25.0000 SYS","memo":"Here you go bob!"}
>> transfer
#          user <= olga.token::transfer        {"from":"alice","to":"bob","quantity":"25.0000 SYS","memo":"Here you go bob!"}
#        tester <= olga.token::transfer        {"from":"alice","to":"bob","quantity":"25.0000 SYS","memo":"Here you go bob!"}

Для контроля тансвера токенов можно воспользоваться вызовом get_currency_balance для получения данных баланса аккаунтов отправителя и получателя, исполнив:

cleos get currency balance olga.token alice SYS
cleos get currency balance olga.token bob SYS

Last updated