Розширення можливостей автоматизації смарт-контрактів від Авіві

24 Серпня 2022

наступна стаття
В'ячеслав Нагнибіда

PR менеджер

В'ячеслав Нагнибіда
Розширення можливостей автоматизації смарт-контрактів від Авіві

Серед багатьох переваг смарт-контрактів, самовиконуваність чи не головна. Здатність виконуватися незалежно від бажання сторін договору — запорука справедливості, для досягнення якої і створені смарт-контракти. Однак багато користувачів розуміють поняття самовиконуваності не зовсім коректно та плутають це з автоматизацією — технологією, що дозволяю пристрою або рішенню працювати самостійно. Якраз ця здатність у смарт-контракти заздалегідь не закладена, а потребує індивідуальної розробки для кожного окремого випадку. Давайте розберемося, як же все влаштовано і що можна зробити. 

Проблема запуску

Ми знаємо, що смарт-контракт виконується у мережі блокчейн та дійсно неухильно виконує всі дії, закладені у його код автором. Саме це називають самовиконанням. Однак залишається відкритим питання, хто чи що ініціює виконання готового смарт-контракту або окремих його етапів, що потребують підтвердження ззовні. Щодо отримання інформації з зовнішього середовища за межами блокчейн, радимо попередню статтю нашого блогу “Гібридний смарт-контракт та роль оракулів”. Але як же бути зі самим запуском?

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

Методи та плата

Уявімо, що нам потрібно реалізувати смарт-контракт із функцією, що буде автоматично повторюватися щогодини. Досягти цього у Solidity з використанням штатного функціоналу просто неможливо! Максимум, що можна зробити, це зазначити годинний інтервал між операціями у смарт-контракті за допомогою оператора require ():

	 function runMe() public {

	   require(block.timestamp >= lastTriggeredAt + 1 hour);

	   ...

	 }

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

Однак тут є велика проблема: додаткова логіка не безкоштовна і потребує витрат газу не виконання. Система реагує досить просто: хто викликає модифіковані функції — той і сплачує за газ. Але слід пам’ятати, що кожна функція має власну вартість. Тому їхнє нашарування призводить до неконтрольованого використання цінного газу, що робить автоматизацію такого типу економічно-виправданою. До того ж, декорованим функціям також потрібні власні унікальні умови для запуску, що знижує їхню продуктивність. Тому стає зрозумілим, що гарну хорошу автоматизацію потрібно робити якось інакше. 

Рішення у безсерверних функціях

Як бачимо, для оптимального досягнення поставлених завдань, нам не потрібно щось розгортати додатково і чимось керувати в процесі. Спеціалісти Авіві освоїли методи роботи з безсерверними функціями, що ідеально пасують до наших потреб. Головне, що для цього необхідно — перехід на безсерверну платформу та скористатися за потреби вже готовимим рішеннями “з коробки”. Їх вже чимало, якщо ви користувач GitHub.

Функціонал безсерверних функцій практично необмежений і зводиться до можливостей фукцій JavaScript. За його допомогою можна створювати файли конфігурації, в яких одночасно зберігати як нові функції, так і події вашого сервісу. От приклад:

	 service: serverless-ethers

	 provider:

	   name: aws

	   runtime: nodejs12.x

	   environment:

	 CHAIN_ID: 3

	 DEFAULT_GAS_PRICE: 60000000000

	 functions:

	   AviviFunc:

	 handler: functions/myFunc.handler

	 events:

	    - schedule: rate(1 hour)

Із коду зрозуміло, що у нас є власна функція під назвою AviviFunc, властивість handler, що містить шлях до файлу з кодом, що ми хочемо виконати і тригер events, що описує умови для запуску функції. Тобто ми бачимо, що тепер у нас є і причина активації дії, і наслідок. А це — основа будь-якої автоматизації. 


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


Схожі статті
Записатись на консультацію

Ми зв'яжемось з Вами протягом 10 хвилин