Snippets

chromawallet GAW.rell

Created by August Botsford last modified
class admin {
    pubkey;
    key name;
    is_super: boolean;
    is_active: boolean;
}

class issuer {
    pubkey;
    key name;
    index admin;
}

class certifier {
    index issuer;
    key name;
    index pubkey;
}

class framework {
    index issuer;
    key name;
    commitment: text;
}

class pool {  
    index issuer; 
    key name; 
}

class bond {
    key ISIN: text;
    index issuer;
    index pool;
    index framework;
    issue_date: date;
    maturity_date: date;
    value: integer;
    shares: integer;
    currency: varchar;
}

class project {
    key name;
    index issuer;
    index pool;
    index framework;
    created: date;
    total_funded: integer;
    green_funded: integer;
    currency: text;
    description: text;
}

class location {
    key name;
    index project;
    latitude: integer;
    longitude: integer;

class category {
    key name;
    index project;
}

class rule {
    key name;
    index category;
    index certifier;
    rule: text;
    is_report: boolean;
    is_document: boolean;
    extension: text;
}

class document {
    key hash: byte_array;
    contents: byte_array;
}

class impact_report {
    issuer;
    date;
    document;
    value: text;
    unit_type: text;
}

class validation_report {
    index rule;
    certifier;
    date;
    document;
    value: text;
}

operation add_admin (admin_pubkey: signer, pubkey, name) {
    require((admin_pubkey == x"deadbeaf"), "Admin pubkey doesnt match");
    require((is_super == true), "You do not have the necessary privileges to perform this action");
    create admin (pubkey, name, is_super, is_active);
}

operation add_issuer (admin_pubkey: signer, pubkey, name) {
    require((admin_pubkey == x"deadbeaf"), "Admin pubkey doesnt match");
    create issuer (pubkey, name);
}

operation add_certifier (issuer_pubkey: signer, name, pubkey) {
    create certifier (issuer@{pubkey=issuer_pubkey}, name, pubkey);
}

operation add_framework (issuer_pubkey: signer, name) {
    create framework (issuer@{pubkey=issuer_pubkey}, name);
}

operation add_pool (issuer_pubkey: signer, name) {
    create pool (issuer@{pubkey=issuer_pubkey}, name);
}

operation add_category (issuer_pubkey: signer, name) {
    create category (issuer@{pubkey=issuer_pubkey}, name);
}

operation add_unit_type (issuer_pubkey: signer, name) {
    create unit_type (issuer@{pubkey=issuer_pubkey}, name);
}

operation add_rule (issuer_pubkey: signer, name, certifier, category, rule: text, is_report: boolean, is_document: boolean, extension: text) {
    create rule (
        issuer@{pubkey=issuer_pubkey}, 
        name,
        certifier,
        category,
        rule,
        is_report,
        is_document,
        extension
    );
}

operation add_bond (issuer_pubkey: signer, ISIN: text, pool_name: text, framework_name: text, issue_date: date, maturity_date: date, value: integer, shares: integer, currency: text)
{
    create bond (
        ISIN,
        issuer@{pubkey=issuer_pubkey},
        pool@{name=pool_name},
        framework@{name=framework_name},
        issue_date,
        maturity_date,
        value, 
        shares,
        currency
    );
}

operation add_project (issuer_pubkey: signer, project_name: text, pool_name: text, framework_name: text, creation_date: date, total_funded: integer, green_funded: integer, currency: text)
{
    create bond (
        project_name,
        issuer@{pubkey=issuer_pubkey},
        pool@{name=pool_name},
        framework@{name=framework_name},
        creation_date,
        total_funded,
        green_funded,
        currency
    );
}

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.