Як написати та розгорнути свій перший розумний контракт

З тих пір, як Ефіріум прикрасив криптопростір своєю присутністю в середині 2015 року, революційний винахід канадсько-російського програміста Віталіка Бутеріна породив багато нових децентралізованих додатків (dApps). Поряд з безліччю побудованих dApps, успіх Ethereum в основному пояснюється його реалізацією смарт-контрактів.

Цікаво, що винахід інтелектуальних контрактів датується 1996 р. Інформатик Нік Сабо склав термін "розумні контракти" і пояснює їх наступним чином:

«Я називаю ці нові контракти« розумними », оскільки вони набагато функціональніші, ніж їхні неживі предки на паперовій основі. Жодне використання штучного інтелекту не передбачається. Розумний контракт - це набір обіцянок, зазначених у цифровій формі, включаючи протоколи, в рамках яких сторони виконують ці обіцянки »- Нік Сабо, 1996 р.

Пізніше його робота надихнула багатьох інших дослідників і вчених, зокрема Віталіка, який створив Ефіріум.

Основна інформація

Перш ніж глибше заглибитися в посібник, важливо зрозуміти дві важливі концепції.

Перше, що нам потрібно зрозуміти, це те, що таке віртуальна машина Ethereum ( EVM ). Його єдина мета - діяти як середовище виконання для смарт-контрактів на базі Ethereum. Подумайте про це як про глобальний суперкомп’ютер, який керує всіма смарт-контрактами. Як випливає з назви, EVM є віртуальною, а не фізичною машиною. Детальніше про EVM ви можете прочитати тут.

Друге поняття, яке ми повинні зрозуміти, - це що таке газ . У EVM газ - це одиниця виміру, яка використовується для призначення комісії за кожну транзакцію за допомогою смарт-контракту. Кожне обчислення, яке відбувається в EVM, вимагає бензину. Чим складнішим та нуднішим він є, тим більше газу потрібно для виконання розумного контракту.

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

Fee for transaction = Total gas used * gas price;

Детальніше про газ читайте тут.

Тепер, коли ви маєте базові знання про те, що таке смарт-контракт і як працює смарт-контракт, ми можемо перейти безпосередньо до того, як ми збираємось складати власний смарт-контракт!

Налаштовуючи

Для цього ми використаємо інструмент: Pragma. Це проста у використанні платформа для створення та розгортання смарт-контрактів. Зареєструйтесь тут і перейдіть до редактора:

Увійдіть в Metamask. Якщо ви ще не встановили MetaMask, ви можете почати тут.

Перейдіть на тестову мережу Кована як у Pragma, так і в MetaMask.

Щоб лише коротко оглянути тестові мережі, перегляньте цю статтю.

Мережа Ethereum - це офіційна мережа Ethereum. Він більш безпечний і використовує ефір, який має реальну грошову вартість.

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

Щоб переключатися між цими мережами, натисніть на назву мережі поруч із піктограмою MetaMask і виберіть мережу. Для цього підручника, будь ласка, виберіть Kovan .

Написання смарт-контракту

У наступному контракті буде реалізована найпростіша форма криптовалюти. Можна генерувати монети з повітря, але це може зробити лише особа, яка створила контракт (тривіально застосовувати іншу схему випуску). Крім того, кожен може надсилати монети один одному, не потребуючи реєстрації за допомогою імені користувача та пароля. Все, що вам потрібно, - це пара ключів Ethereum.

Цей код в основному дозволяє карбувати та надсилати токени на інші рахунки.

Давайте пройдемося по ній за рядком:

pragma solidity ^0.4.21;

Це вказує на те, що вихідний код написаний для версії Solidity 0.4.21 або будь-чого нового, що не порушує функціональності. Це робиться для того, щоб код не поводився інакше з новими версіями компілятора.

contract yourToken

Все, що пов’язано з вашим Token, входить у цей контракт. По суті, солідний контракт - це сукупність функцій і стану (код і дані), розташованих за адресою в блокчейні Ethereum.

address public minter;

Це адреса шахтаря. Ключове слово “public” робить ці змінні читабельними ззовні.

event Sent(address from, address to, uint amount);

Події дозволяють легким клієнтам (UI) ефективно реагувати на зміни.

function yourToken() public {
minter = msg.sender;
}

Давайте встановимо вашу адресу Ethereum як майнера контракту. Вам потрібно отримати доступ до контракту через вашу MetaMask, щоб мати можливість карбувати. Ми розглянемо це ще раз після розгортання контракту.

function mint(address receiver, uint amount) public {
if(msg.sender != minter) return;
balances[receiver]+=amount;
}

Ця функція дозволяє карбувати потрібну кількість монет. Ви можете карбувати стільки жетонів, скільки захочете. Умова if говорить системі припинити виконання, якщо ви не майнер, що встановлено у функції yourToken.

Якщо ви насправді ковзач, це дозволяє карбувати жетони.

function send(address receiver, uint amount) public {
if(balances[msg.sender] < amount) return;
balances[msg.sender]-=amount;
balances[receiver]+=amount;
emit Sent(msg.sender, receiver, amount);
}

Це функція, яка дозволяє одній адресі надсилати маркери на іншу адресу. Він приймає два параметри: приймач і кількість. Це зменшує суму з адреси відправника та додає таку саму суму до адреси одержувача. Повідомлення про подію, про яке ми заявили раніше, тепер використовується для передачі. В даний час ми зберігаємо відправника як msg.sender, який є майнером, оскільки ми не хочемо ускладнювати контракт.

Це воно. Ваш договір готовий, тож давайте його складемо.

Компіляція та розгортання смарт-контракту

Після того, як договір складений, давайте розгорнемо його на блокчейні. Як вже згадувалося раніше, ми використовуватимемо тест-мережу Kovan для розгортання контракту.

Перевірте, чи розгорнуто смарт-контракт.

Для контракту, який я розгорнув для цього підручника, це транзакція. Ви також можете побачити це у Pragma за вашими контрактами.

Взаємодійте зі смарт-контрактом у Pragma

Ось вам. Ваш перший розумний контракт, розгорнутий на блокчейні. :)

Було представлено багато нових концепцій разом із кількома надзвичайно корисними інструментами. Це може бути трохи переважно, і це нормально! Просто спробуйте розібратися з концепціями, а потім побігайте з ними.

Ви створили якісь прості, але цікаві розумні контракти? Опублікуйте їх у коментарях, а я додаю їх у дописі для довідки.

Є питання? Додайте їх до коментарів або приєднайтеся до нашої групи телеграм і поговоріть з нами безпосередньо.