Skip to content

Latest commit

 

History

History
66 lines (32 loc) · 9.29 KB

KIP-001_Ukr.md

File metadata and controls

66 lines (32 loc) · 9.29 KB

KIP-001: ArgoNight — Алгоритм хешування і доказу роботи з доступом до блокчейну що не підлягає аутсорсингу

в. 1.1

nuclEar_chaos, Aiwe, Luke

Тут описується пропозиція нового алгоритму доказу роботи для Карбованця.

Причина

Одним з наріжних каменів протоколу CryptoNote і Карбованця є "егалітарний proof of work" (з англ. "доказ роботи"), який був зруйнований винаходом спеціалізованих пристроїв для майнінгу т. зв. ASIC-ів для алгоритму CryptoNight, котрий використовується в CryptoNote. Карбованець досі використовує цей алгоритм незважаючи на те, що більшість монет основаних на протоколі CryptoNote змінили його на свої варіанти й модифікації різної складності під проводом Monero (здебільшого варіанти Monero й використовуються).

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

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

Спільний алгоритм з більшою монетою становить небезпеку для меншої монети тому що виникає ризик атак 51% з використанням арендованих потужностей або ризик навал майнерів що перескакують з монети на монету в пошуках більшого зиску спричиняючи флуктуації складності та часових інтервалів між блоками.

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

Тому ми зволікали з подібною зміною алгоритму і не перейшли на жоден з варіантів CryptoNight розроблених Monero чи іншими монетами (хоч і адаптували деякі) доки не розробимо свій удосконалений алгоритм, що буде не лишень стійким до ASIC-ів, але теж буде надавати перевагу соло-майнінгу, що є справді децентралізованим, без пулів, а також буде стійким до ботнетів.

Загальний огляд

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

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

Детальний огляд

Хешування у пропонованому алгоритмі працює наступним чином:

  1. Блок block хешується швидким алгоритмом Keccak для отримання підготовчого хешу hash_1.

  2. Результат hash_1 використовується для отримання з блокчейну тридцяти двох блоків на відповідних висотах.

  3. Далі block ще раз хешується разом з тридцяти двома отриманими блоками за допомогою алгоритму хешування Argon2 з використанням hash_1 в якості солі.

Термін block тут означає двійковий масив "block hashing blob", котрий містить заголовок блока, що в свою чергу, містить, серед іншого, т. зв. nonce.

Процес майнінгу в системах Proof-of-Work використовує nonce ("нонс", 32-бітне випадкове число) разом з даними блоку в якості вхідних даних для функції хешування. Загалом, майнер просто перебирає всі можливі "нонси" поки не натрапить на такий, який в результаті дасть хеш котрий задовольняє поточну цільову складність.

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

  • ефективність обмежена швидкістю операцій вводу/виводу
  • кожен майенер мусить мати доступ до блокчейну (тобто бути повним вузлом мережі)
  • передача з сервера пулу або запити даних блоків з відкритих вузлів мережі є непрактичним через затримки і обмеження швидкості/пропускної здатності.

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

Зауваження

Ми не націлюємось спеціально на майнінг лишень на CPU і не маємо мети повністю унеможливити майнінг на GPU, хоча Argon2 створює певні обмеження для GPU.

Ми припускаємо що обмеження швидкодії операцій вводу/виводу обмежать також швидкість ASIC та FPGA майнерів, якщо такі будуть створені.

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

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

Є побоювання створення "легкого" майнера, що розбирає і зберігає лишень заголовки блоків, потрібні для майнінгу замість повного блокчейну. Втім, доцільність і переваги такого майнера видаються сумнівними.