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

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

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

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


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

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


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

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

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

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

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

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

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

Типы данных:

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


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

{ВСЕ} - любой игрок
{СК} - любой склад
{ПР} - любой производитель
{ТР} - любой транспортироващик
{ПТ} - любой потребитель

{Y02} - конкретный логин

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

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

Длина наименования от 2 символов после "_" до 30 символов.

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


Математика:

поддерживается +, -, /, *
все операции необходимо указывать в скобках по парно, последовательность исполнения слева направо, приоритезации между умножением, сложением и пр. - отсуствует.
правильно:

(2+3)
((2*3)+4)
((1/1)+(3/4))

не правильно:

2+3
(2+3+4)
((1+3)+(3+4)+(3+5))


Логика:

базовые, применяются в ^УСЛ:

&&, ||, >=, <=, !=, >, <

знак @@ - проверят, заполнено ли поле, используется внутри ^УСЛ как "@@_переменная"

Формулы:

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

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

^ВЕС(arg1) - вес слова/буквы
^АВТОР(arg1) - кто заполнил поле
^ДЛИНА(arg1) - число символов в слове

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

КОНТРАКТ#
_цена: $число {Y02};
_стартовоеСлово: $слово {Y02};
РЕЗУЛЬТАТ#
Bank: 0;
Y02: ^УСЛ(@@_цена ? (^ДЛИНА(_стартовоеСлово) + _цена) | 0);


Write a comment…