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

Для безпосередньої взаємодії зі смарт-контрактом KurateDAO API є наведеним нижче. Смарт-контракт можна знайти на Github.

База даних

mintDatabase - створення бази даних

function mintDatabase(
    string memory title, 
    string memory description, 
    string memory curatorName, 
    string memory curatorUrl, 
    uint timeoutCrowd, 
    uint timeoutCurator, 
    uint thresholdCurator,
    string memory jsonSchema
) public payable

getDatabasesAll - отримання всіх баз даних

function getDatabasesAll() public view returns(DatabaseSimple[] memory)

Схема

JSON Схема зберігається в смарт-контракті, щоб клієнти знали, чи відповідають рядки структурі бази даних.

{
     "$schema": "http://json-schema.org/draft-04/schema#",
     "description": "VIPs",
     "type": "object",
     "properties": {
         "name": {
             "type": "string"
         },
         "guests": {
             "type": "number"
         }
     },
     "required": ["name","guests"]
}

Методи рядків

Mint Row (payable) - карбування рядка (оплачувано)

function mintRow(uint databaseId, string memory json) public payable

Get Rows - отримання рядків

function getRows(uint databaseId) view public returns ( RowSimple[] memory)

Stake Row (payable) - стейт строки ( оплачувано)

function stakeRow(uint databaseId, uint rowId, Decision decision) public payable

Adjudicate Row - ухвалення вироку для строки

function adjudicateRow(uint databaseId, uint rowId, Decision decision) public

Burn Row - спалення строки

function burnRow(uint databaseId, uint rowId) public

База даних це живий документ. Так само, як куратор має можливість додати рядок до бази даних, він також має можливість видалити (записати) рядок, коли він стане більш корисним.

Інші методи

Run Cron Job - запустити планову роботу Cron

function cron() public

Щоб винести вирок по елементам, які вийшли за межі періоду очікування натовпу та куратора, функцію cron (планувальника) потрібно викликати приблизно раз на хвилину. Той, хто виклюка її першим у кожному циклі блоку, отримає невелику винагороду.

Події

event MintedDatabase(uint databaseId);
event MintedRow(uint databaseId, uint rowId);
event Staked(uint databaseId, uint rowId);
event Adjudicated(uint databaseId, uint rowId, Decision decision);
event BurntRow(uint databaseId, uint rowId);
event Croned();

Структура

Бази даних

struct Database {
    uint                            id;
    string                          title;
    string                          description;
    string                          curatorName;
    string                          curatorUrl;
    uint                            timeoutCrowd;
    uint                            timeoutCurator;
    uint                            thresholdCurator;
    string                          jsonSchema;
    address                         owner;
    uint                            timestamp;
    Row[]                           rows;
}

Рядок

struct Row {
    uint                            id;
    string                          json;
    uint                            timestamp;
    mapping(uint => Stake)          stakes;
    uint                            stakeLength;
    address                         owner;
}

Стейкінгу

struct Stake {
    uint                            amount;
    Decision                        decision;
    Stage                           stage;
    address                         owner;
    uint                            timestamp;
}

Рішення

enum Decision { 
    INCLUDE, 
    EXCLUDE, 
    TBD 
}

Етап

enum Stage { 
    CROWD, 
    CURATOR, 
    DATABASE 
}

Last updated