You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

Предназначение и сценарий использования:

Данный язык разработан специально для написания простых программ(смарт-контрактов), решающих проблему расчета коэффициентов трудового участия (далее КТУ) в рамках игры "Платформизатор". 

Созданные игроками "смарт-контракты" попадают в игровой блокчейн, где далее игроки могут к нему "обратиться" двумя способами: 

  • "на чтение" - получить результаты расчета КТУ, с учетом текущих данных в смарт-контракте.
  • "на запись" - добавить данные в смарт-контракт в соотвествии с зашитым в него шаблоном.

Чтобы добавить смарт-контракт в игровой блокчейн, необходимо через клиент(в данном случае бот в телеграмме) выбрать опцию "Создать смарт-контракт".

Чтобы просмотреть "код" смарт-контракта, добавленного в блокчейн, необходимо написать  в чат бота, ведущего блокчейн: "id_смарт_контракта", где "id_смарт_контракта" - номер контракта, присвоенный автоматически при добавлении его в блокчейн.


Чтобы обратиться к смарт-контракту в режиме "на запись" - нужно написать в чат бота, ведущего блокчейн: "id_смарт_контракта→_наименование_поля_для записи: значение". 
(Пример: 7435→_слово1:молоко)

Чтобы обратиться к смарт-контракту в режиме "на чтение" - нужно написать в чат бота, ведущего блокчейн: "id_смарт_контракта→итог".
(Пример: 7435→итог)


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

  • Отправить платежное поручение, можно в разделе "Счет", указав типа платежа "смарт-контракт" и выбрав списке ID соответствующего смарт-контракта.
  • Смарт-контракт автоматически распределяет средства со счета в соответствии с полученным КТУ.
  • Если КТУ не был получен к окончанию раунда (за счет ошибки или недостатка данных) - средства вернутся отправителям.
  • В случае, если условиями смарт-контракта распределяется больше средств, чем содержится на балансе  - ВСЕ средства вернутся отправителям.
  • В случае, если условиями смарт-контракта распределяется меньше средств, чем содержится на балансе  - остаток от не распределенных средств вернется отправителям (пропорционально вкладам).


Общая конструкция языка:

Смарт-контракт состоит из двух обязательных (Контракт и Результат) блоков и одного опционального (Данные).

КОНТРАКТ# 
...
ДАННЫЕ#
...
РЕУЗЛЬТАТ#
...

В блоке КОНТРАКТ# описываются все поля, которые должны быть заполнены пользователями смарт-контракта через обращение к нему в режиме "на запись".
Поля описываются  в три этапа: 

  • Название поля
  • Тип данных
  • Уровень доступа

В блоке ДАННЫЕ# описываются переменные. Данные поля не доступны ни в режимах чтения, не в режимах записи. Он нужны для расчета промежуточных формул, которые будут использованы в формула в блоке РЕЗУЛЬТАТ#. Данный блок не является обязательным и может быть пропущен, при разработке смарт-контракта.
Переменные описываются в два этапа:

  • Название переменной
  • Формула

В блоке РЕЗУЛЬТАТ# описываются получатели средств и размер дохода по заданным в контракте формулам. В данном блоке результаты могут быть представлены только в виде числовых значений.
Результаты описываются в два этапа:

  • Логин игрока получателя или переменная с логином
  • Формула расчета получаемых средств

Типы данных:

Типы данных начинаются со знака "$". Всего в игре есть 4 типа данных:
$слово - текстовое поле состоящее из кириллицы от 1 до 20 символов;
$буква - текстовое поле, содержит в себе ровно 1 символ кириллицы;
$время - время в секундах;
$игрок - логин (уникальный идентификатор) конкретного игрока;


Уровни доступа:

{ВСЕ}
{УП}
{ПР}
{}
{}

Поля и переменные:

Наименование поля начинается с символа "_", завершается символом ":", далее тип

_Наименование_поля: $тип_данных {уровень доступа};
(Пример: _слово1: $слово: {A1})

{}

Формулы:

Условия
^УСЛ( утверждение ? [версия_если_да] [версия_если нет])

Встроенные методы и переменные:

^ВЕС(arg1)
^АВТОР(arg1)
^СИМВОЛ(arg1, arg2)

Примеры смарт-контрактов:

Смарт-контракт №1

Ситуация:
Производитель(А1) планирует создать 3 слова, неважно кто их упакует, но упаковщик получает 10% от цены продажи если успел упаковать за минуту, если за успел за две 5 у.е., если не успел за две, то только 1 у.е.; Транспортная компания (B3) обязуется купить продукты за 2 себестоимости, если их ей передадут за 5 мину до конца раунда; если за 2 минуты - то по себестоимости букв, в ином случае - не платит.

Сценарий использования:
....

Код:

КОНТРАКТ#

_слово1: $слово {A1};
_слово2: $слово {A1};
_слово3: $слово {А1};
_упаковка: $время {УП};
_получениеСлов: $время {^АВТОР(_упаковка)};
_получилПродукт: $время {B3};

ДАННЫЕ#

_себестоимостьСлов: ^ВЕС(_слово1)+^ВЕС(_слово2)+^ВЕС(_слово3);

_времяУпаковки: _упаковка - _получениеСлов;
РЕЗУЛЬТАТ#

A1: ^УСЛ(_ВРЕМЯ - _получилПродукт > 300 ?  _себестоимостьСлов*2 , ^УСЛ(_себестоимостьСлов > 120 ) ?  _себестоимостьСлов , 0);
^АВТОР(_упаковка): ^УСЛ( _времяУпаковки < 60 ? _себестоимостьСлов*0.1 , ^УСЛ(_времяУпаковки < 120 ? 5 : 1) );

Итоговое распределение средств:
...

Смарт-контракт №2

Ситуация:
....

Сценарий использования:
....

Код:

КОНТРАКТ#

...
ДАННЫЕ#

...
РЕЗУЛЬТАТ#

...

Итоговое распределение средств:
...

  • No labels