<Смарт Контракты/>

Создание, разработка и программирование умных контрактов любой сложности на платформах Ethereum и Hyperledger Fabric

Примеры работ

Усилиями наших разработчиков было создано не мало умных контрактов, но по соглашениям с заказчиками и принимая во внимание некоторую конфиденциальность, мы не можем выложить все созданные нами умные контракты в открытый доступ. Однако некоторые примеры наших контрактов мы решили опубликовать на сайте, более того вы можете ими воспользоваться в своих личных целях.

Данные смарт-контракты написаны для платформы Ethereum на языке Solidity

Пример №1

В данном примере двумя способами решается задача обеспечения групповых арендных платежей. Первый одиночный смарт контракт представляет из себя микро-систему арендного расчета, хранит в себе данные по платежам. Участники расчета аккумулируют нужную сумму на контракте, после чего платеж фиксируется как выполненный и платеж исполняется, данные о расчете и его статус фиксируются в блокчейне и доступны для последующих выгрузок.

  • Язык программирования: Solidity

pragma solidity ^0.4.11;

contract Biller {
    
    struct Bill {
        uint id;
        uint status;
        address reciever;
        uint summ;
        string clientData;
        string payers;
        address[] wallets;
        int[] amounts;
        int[] payStatuses;
    }
    
    event Closed(
        uint billId
    );
    
    event Saved(
        uint billId
    );
    
    event Dead(
        uint billId
    );
    
    mapping(uint => Bill) public bills;

    function Biller() {
    }
    
    function saveOpenBill(uint id, address reciever, uint summ, string clientData, string payers, address[] wallets, int[] amounts, int[] payStatuses) {
        bills[id] = Bill(id, 1, reciever, summ, clientData, payers, wallets, amounts, payStatuses);
        Saved(id);
    }
    
    function setClosing(uint id, address[] wallets, int[] amounts) public {
        bills[id].status = 2;
        bills[id].wallets = wallets;
        bills[id].amounts = amounts;
        Closed(id);
    }
    
    function getAmounts(uint id) public constant returns (int[])  {
        return bills[id].amounts;
    }
    
    function getWallets(uint id) public constant returns (address[])  {
        return bills[id].wallets;
    }
    
    function getPayStatuses(uint id) public constant returns (int[])  {
        return bills[id].payStatuses;
    }
    
    function confirm(uint id, address wallet) public {
        var bill = bills[id];
        for (uint i = 0; i < bill.wallets.length; i++) {
            if (wallet == bill.wallets[i]) {
                bills[id].payStatuses[i] = 2;
            }
        }
        
        int notPayedCount = 0;
        for (uint j = 0; j < bills[id].amounts.length; j++) {
            if(bills[id].amounts[j] != 0) {
                if(bills[id].payStatuses[j] != 2) {
                    notPayedCount++;
                }
            }
        }
        
        if(notPayedCount == 0) {
            bills[id].status = 3;
            Dead(id);
        }
    }
    
    function getBillById(uint id) public constant returns (uint, address, uint, string, string) {
        var bill = bills[id];
        return (bill.status, bill.reciever, bill.summ, bill.clientData, bill.payers);
    }

}
                     

Пример №2

Во втором смарт-контракте поступают новые требования - нужно разделять историю платежей и историю статусов плательщиков - вводятся понятия заморозки и разморозки счетов. Комбинация из трех смарт-контрактов покрывает новые кейсы в решении проблемы.

  • Язык программирования: Solidity

pragma solidity ^0.4.11;

contract Payer {
    
    bytes32[] id;
    string name;
    uint frozeStart;
    uint period = 3000;
    uint balance = 0;
    
    event Frozen(address frozened, uint amount);
    event Unfrozen(address winner, uint amount);
    event Priveleged(bytes32[] id);
    
    function Payer(bytes32[] id, string name, uint balance) {
        id = id;
        name = name;
        balance = balance;
    }
    
    function frozePayer() {
        frozeStart = now;
    }
    
    function unfrozePayer() {
        require(now >= (frozeStart + period)); 
        Unfrozen(this, balance);
    }
    
    function addPriveleges() {
        Priveleged(id);
    }

}

contract BillFactory {
    
    
    event Dead(
        uint billId
    );
    
    Bill[] bills;

    function createBill (bytes32 name, uint summ) {
        Bill newBill = new Bill(name, summ);
        bills.push(newBill);
    } 
    
    // function getBill (uint i) public constant returns (uint, address, uint, string, string) {
    //     Bill bill = Bill(bills[i]);
    //     return (bill.status, bill.reciever, bill.summ, bill.clientData, bill.payers);
    // }
    
    string[] names;
    
    event Closed(
        uint billId
    );
    
    event Saved(
        uint billId
    );
    
    function saveOpenBill(uint id, address reciever, uint summ, string clientData, string payers, address[] wallets, int[] amounts, int[] payStatuses) {
        bills[id] = Bill(id, 1, reciever, summ, clientData, payers, wallets, amounts, payStatuses);
        Saved(id);
    }
    
    function setClosing(uint id, address[] wallets, int[] amounts) public {
        bills[id].status = 2;
        bills[id].wallets = wallets;
        bills[id].amounts = amounts;
        Closed(id);
    }
    
    function getAmounts(uint id) public constant returns (int[])  {
        return bills[id].amounts;
    }
    
    function getWallets(uint id) public constant returns (address[])  {
        return bills[id].wallets;
    }
    
    function getPayStatuses(uint id) public constant returns (int[])  {
        return bills[id].payStatuses;
    }
    
    function confirm(uint id, address wallet) public {
        
        var bill = bills[id];
        for (uint i = 0; i < bill.length; i++) {
            if (wallet == bill.wallets[i]) {
                bills[id].payStatuses[i] = 2;
            }
        }
        
        int notPayedCount = 0;
        for (uint j = 0; j < bill.length; j++) {
            if(bills[id].amounts[j] != 0) {
                if(bills[id].payStatuses[j] != 2) {
                    notPayedCount++;
                }
            }
        }
        
        if(notPayedCount == 0) {
            bills[id].status = 3;
            Dead(id);
        }
    }
    
    
}

contract Bill {
    
    event Closed(
        uint billId
    );
    
    event Saved(
        uint billId
    );
    
    event Reserved(
        uint billId
    );
    
    uint id;
    uint status;
    address reciever;
    uint summ;
    string clientData;
    Payer[] payers;
    address[] wallets;
    int[] amounts;
    int[] payStatuses;

    function Bill (bytes32 name, uint summ) {
        name = name;
        summ = summ;
    }
    
    function closeBill() {
        Closed(id);
    }
    
    function reserveBill() {
        Reserved(id);
    }
    
}
                    

Примеры работ

В ближайшее время мы планируем выкладывать свои работы на GitHub

More on GitHub

Лицензия

Вы можете свободно распространять и использовать данный код по своему усмотрению

Страница находится в постоянной доработке. Вышеприведенные примеры смарт-контрактов не единственные, написанные нашей командой

Мы на связи