Розрахунок витрат в Ethereum-контрактах

CryptoExplorer         Немає коментарів         Ethereum
440 переглядів
Що саме зберігають користувачі в блокчейн-мережі при володінні ефіром? У певному сенсі, вони утримують у себе здатність виконувати обчислення в мережі Ethereum. Такі обчислення виконуються децентралізованим способом:

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


Як бачимо, потрібно неймовірний надлишковий обсяг обчислень навіть для невеликої кількості оброблюваної інформації (маленької оброблюваної події) в мережі. А саме, кожен вузол повинен перевіряти результати кожної транзакції - читай: кожен вузол дублює всі обчислення.

Дивно те, що, люди, навіть незалежно від досвіду роботи з блокчейн-додатками і знаючи про вищезгаданий факт, дуже рідко прямо говорять про нього, або взагалі ніколи не згадують його. Як тільки люди торкаються технічного боку справи, така властивість блокчейн стає очевидною особливістю системи. Але якщо людина «менш посвячена», то така властивість системи не представляється їй настільки очевидною. Закономірним є запитання: хіба такий підхід не є більш витратним, наприклад, в порівнянні зі звичайними серверними обчисленнями? Так, є, і характер протоколу диктує саме такий витратний підхід. Наступний постулат, ймовірно, є основоположним принципом економіки криптовалют і пов'язаних з ними обчислень, або, того, і іншого:

Чим більше машин, що обробляють код, тим більше грошових витрат, що йдуть на обробку коду.


Ми повинні пам'ятати, що виконання коду і оновлення стану блоку (-ів) на Ефіріумі відбувається далеко не так само, як на простому сервері. Результуючі зміни стану блоку в мережі Ефіріум мають інші властивості, ніж подібні ж зміни, одержувані за допомогою обчислень на сервері, а саме - властивості незмінності і публічної можливості перевірки. Давайте спочатку подивимося, скільки насправді коштують обчислення в мережі, а потім ми зможемо спробувати вирішити, «чи варте воно того».

Отже, скільки це коштує?


Газ

Всі операції низького рівню, доступні в EVM (віртуальна машина Ethereum), називаються OPCODE. До них відносяться такі операції, як ADD - додавання двох цілих чисел, BALANCE - отримання балансу облікового запису, CREATE - створення нового контракту з наданим кодом, і ін. Кожна з цих OPCODE має пов'язане (з відповідною операцією) число, зване «газ». Газ - це абстрактне число, яке втілює в собі відносну складність операцій. Наприклад, операція ADD використовує 3 гази, в той час як операція MUL (множення двох цілих чисел) використовує 5 газів, тому MUL - складніше, ніж ADD.

Тут зібрані гази, необхідні для кожного OPCODE в EVM. Ця інформація взята з останньої версії «Yellow Paper» Ефіріума (EIP-150 Revision) - офіційної специфікації протоколу Ethereum.

Важливо відзначити, що базова вартість всіх транзакцій - 21000 газів. Тому, якщо ви просто переводите кошти і не взаємодієте з контрактом, ваша транзакція обійдеться в 21000 газів. Якщо ви взаємодієте з контрактом, ваша транзакція буде коштувати 21000 газів плюс кількість будь-яких газів, пов'язаних з виконанням контракту.

Ціна газу

У той час як кількість газу прикріплено до операції, сума, оплачувана користувачем за одиницю газу - ціна газу - динамічна і диктується ринковими умовами. Ціна газу - це значення, що показує, скільки ефіру користувач готовий заплатити за газ. Коли користувач відправляє транзакцію, він вказує ціну на газ в Gwei / Gas (1 Gwei дорівнює 0,000000001 ETH), а сума "мита", яке він платить, дорівнює добутку ціни газу на кількість використаного газу (gas_price * gas_used). Це мито сплачується майнерам і тому вони віддають перевагу угодам з більш високою ціною на газ. Чим вища ціна за газ, яку користувач готовий заплатити, тим швидше буде оброблятися його транзакція.

ETH Gas Station є відмінним ресурсом для розуміння поточних умов газового ринку. Розділ «Рекомендовані ціни на газ для споживача» ("Recommended User Gas Prices") показує діапазон цін на газ і очікуваний час транзакцій.

Скільки це коштує насправді?


Вартість операції в Ефіріумі обчислюється як gas_price * gas_used, але як це перевести в ефір і долари? Тут таблиця деяких зразкових операцій і пов'язаних з ними витрат за поточною середньою ціною на газ (28 Gwei) і поточним обмінним курсом USD/ETH ($ 295 / ETH).

Кожен рядок показує:

  • завдання і необхідну кількість газу для виконання;
  • витрати на виконання завдання в ETH і в USD;
  • кількість завдань, що припадають на 1 ETH і $ 1;
  • кількість завдань, що припадають на кожен блок;
  • кількість блоків для завершення цього завдання.

Додавання чисел

Нижче наведено приклад з таблиці, яка б показала витрати, пов'язані з додаванням або відніманням двох цілих чисел.


Ми бачимо, що витрати на додавання двох чисел 1 млн. раз складають 0.09 ETH або $ 26.55. У порівнянні з локальним комп'ютером або сервером це досить дорого. Давайте порівняємо ціни з AWS.

Можна додати два числа разом 1 мільйон разів за допомогою python за 0,04 секунди. Amazon стягує $ 0.0059 за годину за найдешевший віртуальний вузол t2.nano на хмарному сервері EC2. За секунду це буде коштувати $ 0,000001639 ($ 0,000000066 за операцію). Це означає, що $ 26,55 (за 1 млн. операцій) виявляться більше ніж в 400 млн. разів дорожче від серверних обчислень (і дорожче в 40 млн. разів, якщо ви хочете платити найнижчу ціну на газ). Вау!

Збереження даних

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


З наведеної таблиці видно, що зберігання даних в блокчейні надзвичайно дороге, але це не дарма! Коли ви зберігаєте дані в блокчейні, особливість в тому, що ви зберігаєте дані в незмінній базі даних, тиражованій в десятках тисяч вузлів. Наприклад, завантаження вашого улюбленого фільму на блокчейн буде коштувати неймовірно дорого, тому, що при зростанні обсягу інформації в блокчейні він не повинен втратити керованість. Як видно з таблиці, для зберігання всього лише одного 256-бітного слова потрібно 20000 газів, що в 6000 разів дорожче, ніж додавання чисел.

Ще одним вузьким місцем зберігання великих обсягів даних є поточний ліміт газу, який використовується для блоку - рівний приблизно 4700000 газів. При такій «стелі» для запису 1 МБ даних на блокчейн треба було б більше 132 блоків - це означає, що ви витратите весь газ на один блок, навіть не беручи до уваги інших операцій!

Що все це означає?


Справедливості заради треба зауважити, що додавання двох чисел 1 мільйон раз - трохи надумана операція. Хороший код контракту, швидше за все, перемістить такі обчислювальні складності поза блокчейн і краще подбає про оновлення стану контракту. Зберігання величезних обсягів даних також не є звичайним завданням для блокчейну і в залежності від того, що саме потрібно, користувач, швидше за все, збереже в блокчейні криптографічне посилання на дані (хеш), а іншу частину даних буде зберігати поза блокчейном мережі.

Проте, якщо ви розробник, то зобов'язані знати про ці витрати і відповідно до цього розробляти dApps. Слід знайти баланс між складністю «в блокчейні» і «поза блокчейном», при цьому оптимально використовуючи децентралізовані можливості блокчейну.

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


Шановне товариство!
Якщо Ви виявили помилку, або "мертве" посилання, виділіть проблемний фрагмент мишкою та натисніть CTRL+ENTER.
У діалоговому вікні, що з'явилося, опишіть проблему та надішліть повідомлення Адміністрації ресурсу. Дякуємо!
Схожі публікації:
Інформація
Відвідувачі, які знаходяться у групі Гості, не можуть залишати коментарі до цієї публікації.
Популярні матеріали
Опитування
В якій (географічно) частині України Ви постійно/здебільшого проживаєте?