Мы назовем наш контракт MyContract как в следующей декларации —
contract MyContract {
Мы объявим две переменные следующим образом:
uint amount; uint value;
Переменная сумма будет содержать накопленные деньги, отправленные исполнителями договора создателю договора. Поле значения будет содержать стоимость контракта. Когда исполнители исполняют контракт, поле значения будет изменено, чтобы отразить сбалансированную стоимость контракта.
В конструкторе контракта мы устанавливаем значения этих двух переменных.
constructor (uint initialAmount, uint initialValue) public { amount = 0; value = 1000; }
Поскольку изначально сумма, собранная по контракту, равна нулю, мы устанавливаем в поле суммы значение 0. Мы устанавливаем в качестве значения контракта произвольное число, в данном случае это 1000. Создатель контракта принимает решение об этом значении.
Чтобы проверить собранную сумму в любой момент времени, мы предоставляем метод публичного контракта getAmount, определенный следующим образом:
function getAmount() public view returns(uint) { return amount; }
Чтобы получить сбалансированную стоимость контракта в любой момент времени, мы определяем метод getBalance следующим образом:
function getBalance() public view returns(uint) { return value; }
Наконец, мы пишем метод контракта (Отправить) . Это позволяет клиентам отправлять деньги создателю контракта —
function send(uint newDeposit) public { value = value - newDeposit; amount = amount + newDeposit; }
Выполнение метода send изменяет поля стоимости и суммы контракта.
Полный код договора приведен ниже —