Smart Contracts: Вчимо матчастину, або про що мовчать розробники
![безпека](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivDlRltRJW_19BPmhYq7Fo1pWgrAg3sXg_9nZN1sfOmEW9sP1u_BT49n3VkjK6Om7PjPWHC59eeESiKGS4E38XgQd1O5vfFHoo2QrODt7pk41hLVbs60IrxXPadXIHSfMKVWj2hX26IgE/s1600/177-1-bezpeke.jpg)
З експансією блокчейн-технологій в ужиток україномовного ділового середовища, поняття «смарт-контракт» перестало бути чимось з області непізнаного. Ми самі не так давно писали про смарт-контракти, розбираючи основні терміни та варіанти застосування розумних контрактів на практиці. І все ж, незважаючи на розвиток теми, в ряді випадків знання про принципи дії та застосування смарт-контрактів носять поверхневий і теоретичний характер.
Більшості підприємців, які впроваджують в бізнес блокчейн-технології, достатньо і цього. Є розуміння, що смарт-контракт - це якісь домовленості, зафіксовані у вигляді коду, і угода відбудеться тільки в разі їх виконання. Визначившись з предметом і умовами угоди, реалізацію самого механізму смарт-контракту віддають на відкуп спеціально навченим людям - розробникам.
Їхні подальші дії, непідготовленою людиною сприймаються як «танок з бубном». Розробників такий розклад цілком влаштовує: чим менше людей розуміють механіку їхньої роботи, тим вища їхня цінність як фахівців на ринку праці. Замовники, які звикли до контрактів, написаних людською мовою, тим більше не прагнуть вникати в структуру програмного коду. Подібного роду сліпе делегування ставить бізнесмена в залежність від технічної команди і в разі, якщо «щось піде не так», може привести до проблем, про саму можливість виникнення яких розробники вважають за краще замовчувати.
Високі ризики і прогалини в розумінні принципу дії смарт-контрактів підвищують і без того серйозний рівень недовіри до цього інструменту. Спробуємо вирішити проблему і розібратися в ключових аспектах технології, яка в найближчому майбутньому має всі шанси трансформувати ортодоксальні бізнес-процеси.
Смарт-контракту потрібні умови
Ідея логіки договору, коли подія Б не відбудеться, поки не відбулася подія А, не іноваційна. Вона навіть увічнена класиками у формулі «вранці гроші, ввечері стільці». Смарт-контракт забезпечує безапеляційність реалізації домовленостей, обумовлену математично, виключає залежність учасників угоди від будь-якого роду централізованої системи або впливу людського фактора і при цьому гарантує автоматизацію, прозорість і безпеку всього процесу. Але тільки в тому випадку, якщо середовище реалізації смарт-контракту передбачає можливість виконання запрограмованих умов і забезпечує прямий доступ до об'єктів контракту. Через 14 років після теоретичного опису ідеї смарт-контракту, таким середовищем став блокчейн.
На сьогоднішній день ринок пропонує розробку смарт-контрактів для Ethereum, Hyperledger Fabric, Cardano, NEO і інших блокчейн платформ. Але не всі вони добре адаптовані для виконання смарт-контрактів. Так, біткоін, наприклад, не містить маркери станів і не дає програмістам свободу дій, а NXT містить обмежену кількість шаблонів смарт-контрактів і не передбачає можливості створення своєї версії. Ethereum, позбавлений цих недоліків, став базовою платформою для реалізації смарт-контрактів.
Виходячи з цього, як би блокчейн-ентузіасти не педалювали ідею про універсальність смарт-контрактів, їх реалізація можлива лише в тому випадку, якщо ваш бізнес і бізнес вашого партнера еволюціонували до інтеграції блокчейн-технологій.
Як зрозуміти комп'ютерний код
Якими б переконливими не були перспективи використання смарт-контрактів, у скептиків з числа консерваторів залишаться аргументи проти. Навіть з огляду на весь спектр можливостей для оскарження традиційних контрактів, папірець з печаткою і підписом буде для них авторитетнішими за нематеріальний комп'ютерний алгоритм. Розробникам, яким дістанеться клієнт з подібною принциповою позицією, слід запастися терпінням і приготуватися до прохання дати почитати, помацати і покрутити в руках «те, що ви там написали».
Спробуємо розібратися, що саме являє собою смарт-контракт, як він виглядає і яку інформацію містить.
![код](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjWa3gPet2cZceUQOdJRLMEK_7mKGz7nmgxs8DMpBM5FzdDV5JaA6_0gT2oHh8hH1wtSDR8xGjFugMM8nA7zXNHm9uAtMK4-QfHZgtHnGEGIz5Hyx0_pFZprddv1k9OHODQzjuxB9XKBs/s1600/177-2-kood.png)
Смарт-контракт - це комп'ютерний код, запис послідовних функцій, що визначає параметри і логіку виконання договірних зобов'язань двох сторін. Як і будь-який код, він лаконічний і однозначний, але зрозуміло це тільки програмістам.
У 2014 році для запису коду смарт-контрактів, експертами Ethereum була спроектована спеціальна мова програмування Solidity. Він має багато спільних рис c Java Script і характеризується можливістю реалізації будь-якої обчислювальної функції.
Обсяг смарт-контракту визначається кількістю рядків із записами. Чим складніше умови, тим більше рядків в програмному коді. Готовий код смарт-контракту транслюється в байт-код віртуальної машини Ethereum, що приводить контракт у виконання. У міру виконання умов контракту, комп'ютери і вузли блокчейну оновлюють регістр.
Якщо з формою все зрозуміло, перейдемо до змісту на прикладі найпопулярнішої сфери застосування смарт-контрактів - організації первинного випуску токенів.
Структура основної частини коду являє собою ієрархію контрактів, що прописують той чи інший завершений функціональний цикл, і складається з п'яти ключових елементів. Один з найважливіших контрактів структури називається owned, його завдання - виділити власника контракту із загального числа користувачів і наділити його привілейованим функціоналом (наприклад, можливістю виводити гроші з рахунків).
Наступний контракт містить інформацію про збір коштів і розподіл токенів. Тут прописується загальна кількість випущених токенів, інформація про баланси всіх власників токенів і реакція смарт-контракту на рух токенів між власниками. Всі елементи контракту crowdsale обов'язкові, при некоректному заповненні цієї частини контракту, токени не відобразяться в гаманцях власників.
Функція fallback відповідає за порядок дій у разі надходження ефірів на рахунок смарт-контракту. Вона перевіряє наявність токенів, доступних до продажу, фіксує їх ціну і обчислює, скільки токенів потрібно відправити покупцеві.
Наступний за crowdsale підконтракт, EasyToken, фіксує повне та скорочене найменування токена, визначає його подільність або неподільність і, що найголовніше, дозволяє користувачам виводити маркери на біржу, знімати їх звідти і обмінюватися ними.
І, нарешті, найприємніша функція - можливість вивести отриманий ефір - прописується в контракті EasyCrowdsale.
Реєструвати інші умови смарт-контракту (термін проведення ICO, softcap і hardcap і так далі) можна доти, доки фантазію розробника не буде вичерпано. Однак, надмірно обтяжувати конструкцію коду без необхідності все ж не рекомендується, хоча б тому, що чим більше даних, тим вища ймовірність допущення помилки.
![контракт](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIdLSgPXlsLQZGcGLu46H9N0qHE_Odtif4oP_PCLmQgf6siGjfaot8GmiOGYRF5bsa3helxJp1G-ybFCrxrDiMrmui8k6M1KuN_4EUftiajEi6yOVMFT4z-aMQkk17lVxMjVpVNcmQXbM/s1600/177-3-kontrakt.jpg)
Право на помилку
Головне, що потрібно пам'ятати, формуючи розробнику техзавдання на написання смарт-контракту: у вас не буде можливості додумати функціонал і доопрацювати контракт в процесі роботи. Вже завантажений в блокчейн код не може бути змінений, а будь-яка помилка, допущена під час його написання, призведе до некоректного виконання контракту або повної втрати контролю над ним. Єдино можливий варіант виправлення ситуації - завантажити новий контракт з виправленим кодом.
Навіть великі гравці, під час складання смарт-контрактів, примудряються допускати помилки, які, на жаль, виявляються занадто пізно. І безперечно краще розробнику їх побачити до того, як це зроблять зловмисники. Помилка під час написання смарт-контракту компанії The DAO, дозволила хакерам у 2016 році зламати систему і вивести токени на свої гаманці, інцидент призвів до обвалу курсу ефіру і навіть відбився на котируваннях біткоіна, хоча у падінні його ціни є і інші причини.
А восени минулого року хтось під ніком Devops199 скористався критичною вразливістю смарт-контракту Parity і запустив процес його самознищення. В результаті на рахунках користувачів було заблоковано 513 774 ETH (на ті часи $160 мільйонів).
З огляду на дефіцит і високу завантаженість кваліфікованих розробників, логічним розвитком ринку послуг в сфері блокчейн-технологій стала поява компаній, які перед запуском проводять аудит смарт-контракту. За невелику, за мірками капіталізації ринку, суму, фахівці незамиленим оком перечитають код і перевірять його на помилки і можливі вразливості.
Той факт, що смарт-контракти оперують грошима і не схильні до змін, грає на руку хакерам. Кожен день солдати тіньового фронту блокчейну вивчають нові коди і роблять спроби їх зламати. Втім, про їх «досягнення» на цьому терені ми розповімо в окремому матеріалі.
Обробка: Vinci