С некоторых пор (с конца октября) на Тере можно писать смарт-контракты. Язык смарт-контрактов javascript. Среда исполнения - node.js
В блокчейне Тера идея смарт-контрактов (далее по тексту смарты) была развита:
1. Код пишется на просто javascript и сразу отправляется в сеть без каких-либо манипуляций с компилированием кода или утилитами командной строки - достаточно буквально пары кликов мышки.
2. Можно писать смарты как шаблоны (библиотеки). Т.е. написав один раз им могут пользоваться все люди (создавая собственные экземпляры). Для этого человек просто прикрепляет его к своему счету (в Тере деньги хранятся на счетах по аналогии с расчетными счетами банка) и после этого управление деньгами контролируется кодом блокчейна. Смарт можно отвязать от счета, но при условии что он это разрешает.
3. Добавлена клиентская визуальная часть
Пример простого смарт-контракта под именем Promise, логика которого описана тут: https://bitcointalksearch.org/topic/m.47790792
function CheckPermission()
{
if(context.Account.Num!==context.FromNum)
throw "Access is allowed only from your own account.";
}
function OnGet()
{
if(context.Description==="UNFREEZE")
UnFreeze();
}
function OnSend()
{
CheckFreeze();
}
function OnDeleteSmart()
{
CheckFreeze();
}
function CheckFreeze()
{
var State=ReadState(context.Account.Num);
if(State.Freeze)
throw "Account is frozen";
}
"public"
function Freeze(Params)
{
CheckPermission();
CheckFreeze(0);
var State=ReadState(context.Account.Num);
State.Freeze=1;
State.UnFreezeNum=Params.UnFreezeNum;
State.DescBlock=context.BlockNum;
State.DescTr=context.TrNum;
WriteState(State);
Event("Freeze");
}
"public"
function UnFreeze(Params)
{
var State=ReadState(context.Account.Num);
if(!State.Freeze)
throw "Account already unfreeze";
if(context.FromNum===State.UnFreezeNum
|| context.FromNum===context.Smart.Owner)
{
State.UnFreezeNum=context.FromNum;
State.Freeze=0;
WriteState(State);
Event("UnFreeze");
}
else
{
throw "Access is allowed only from: "+State.UnFreezeNum+" or "+context.Smart.Owner;
}
}
Чтобы отправлять команды смарты нужна клиентская часть кода, клиент создается в виде HTML-странички. Например:
Can unfreeze:
В качестве базы данных используется сам счет, привязанный к смарту, чтобы описать структуру его полей введите в поле State format строку:
{Freeze:byte, UnFreezeNum:uint, DescBlock:uint, DescTr:uint16}
Чтобы отправить этот смарт в сеть, поместите его в окошко Dap-editor-а (верхний код в верхнее окошко, нижний с html - в нижнее), укажите имя и отправьте в сеть (Dap-editor - есть в каждом клиенте).