Біткойн: одна з систем готівки peer-to-peer

PANews редакційна примітка: 31 жовтня 2008 року Сатоші Накамото опублікував «Біла книга Біткойн», сьогодні — 17-та річниця цієї події. Нижче наведено переклад змісту білої книги від Лі Сяолай, щоб усі могли знову ознайомитися з класикою.

Огляд: Чисто одноранговий варіант електронної готівкової системи дозволить здійснювати онлайн-платежі безпосередньо від однієї сторони до іншої без участі фінансових установ. Цифрові підписи забезпечують часткове вирішення, але якщо все ще потрібна довірена третя сторона для запобігання подвійним витратам, основна перевага електронних платежів нівелюється. Ми пропонуємо рішення, яке Використовує однорангову мережу для вирішення проблеми подвійних витрат. Однорангова мережа позначає кожну Торгівлю міткою часу, шляхом запису хешу Торгівлі у постійно зростаючий ланцюг доказу роботи на основі хешу, створюючи запис, який неможливо змінити, якщо не переробити всю роботу. Найдовший ланцюг, з одного боку, підтверджує засвідчені події та їхній порядок, а також доводить, що він походить від найбільшого пулу Хеш-потужності. Поки більшість Хеш-потужності контролюється добросовісними Нодами — тобто, вони не співпрацюють з тими, хто намагається атакувати мережу — добросовісні Ноди будуть створювати найдовший ланцюг і перевершувати атакуючих за швидкістю. Мережа сама по собі потребує мінімальної структури. Інформація поширюється на основі максимальних зусиль, Ноди можуть вільно приєднуватися та залишати мережу; але приєднуючись, вони завжди повинні приймати найдовший ланцюг доказу роботи як доказ усього, що сталося під час їхньої відсутності.

1. Вступ (Introduction)

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

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

2. Торгівлі (Transactions)

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

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

Нам потрібен спосіб, який дозволяє одержувачу переконатися, що жоден з попередніх власників не підписав жодної попередньої Торгівлі. Для наших цілей важлива лише найперша Торгівля, тому нас не цікавлять подальші спроби подвійних витрат. Єдиний спосіб підтвердити відсутність Торгівлі — знати про всі Торгівлі. У моделі монетного двору монетний двір знає всі Торгівлі та може підтвердити їхній порядок. Щоб виконати це без участі «довіреної сторони», записи Торгівель мають бути публічно оголошені, і нам потрібна система, яка дозволяє учасникам погоджуватися з єдиною унікальною історією Торгівель, яку вони отримали. Одержувач повинен довести, що на момент Торгівлі більшість Нод погодилися, що це перша отримана Торгівля.

3. Сервер міток часу (Timestamp Server)

Наше рішення починається з сервера міток часу. Сервер міток часу працює так: він ставить мітку часу на хеш групи записів (Блок), а потім розсилає цей хеш, як це робить газета або як повідомлення у групі новин (Usenet)[2-5]. Очевидно, мітка часу доводить, що дані існували до цього моменту, інакше хеш не міг би бути створений. Кожна мітка часу містить у своєму хеші попередню мітку часу, створюючи ланцюг; кожна нова мітка часу додається після попередньої.

4. Доказ роботи (Proof-of-Work)

Щоб реалізувати розподілений одноранговий сервер міток часу, ми Використовуємо систему доказу роботи, подібну до Hashcash Адама Бека, а не газету чи повідомлення у групі новин. Доказ роботи полягає у пошуку числа, яке після хешування — наприклад, Використовуючи SHA-256 — дає хеш, що починається з певної кількості нулів. Збільшення вимоги щодо кількості нулів експоненціально збільшує обсяг роботи, але перевірка роботи потребує лише одного хешу.

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

Доказ роботи також вирішує питання, хто представляє більшість для прийняття рішень. Якщо «більшість» визначається як «один IP — один голос», то будь-хто, хто може отримати багато IP, може вважатися більшістю. Доказ роботи по суті — «один CPU — один голос». Більшість визначається найдовшим ланцюгом, оскільки саме в нього вкладено найбільше роботи. Якщо більшість Хеш-потужності контролюється чесними Нодами, то чесний ланцюг зростає найшвидше, випереджаючи всі конкурентні ланцюги. Щоб змінити вже створений Блок, атакуючий повинен переробити доказ роботи для цього Блоку та всіх наступних, а потім наздогнати та перевершити роботу чесних Нод. Далі буде показано, чому ймовірність того, що атакуючий, який відстає, зможе наздогнати, експоненціально зменшується з кожним новим Блоком.

Щоб врахувати зростання Загалом Хеш-потужності обладнання та можливі зміни кількості Нод з часом, складність доказу роботи визначається рухомим середнім значенням кількості Блоків, створених за годину. Якщо Блоки створюються надто швидко, складність зростає.

5. Мережа (Network)

Кроки роботи мережі:

  1. Всі нові Торгівлі транслюються всім Нодам;
  2. Кожна Нода пакує нові Торгівлі у Блок;
  3. Кожна Нода починає шукати доказ роботи для цього Блоку;
  4. Коли для Блоку знайдено доказ роботи, Нода транслює цей Блок усім Нодам;
  5. Інші Ноди приймають цей Блок лише якщо всі Торгівлі в ньому дійсні та не використані двічі;
  6. Ноди сигналізують про прийняття Блоку, Використовуючи хеш прийнятого Блоку як попередній хеш для наступного Блоку, який вони створюють.

Ноди завжди вважають найдовший ланцюг правильним і постійно додають до нього нові дані. Якщо дві Ноди одночасно транслюють два різних варіанти «наступного Блоку», деякі Ноди отримають один, а інші — інший. У такому випадку Ноди продовжують працювати над тим Блоком, який отримали першими, але зберігають іншу гілку на випадок, якщо вона стане найдовшою. Коли буде знайдено наступний доказ роботи, і одна з гілок стане довшою, тимчасова розбіжність буде вирішена, і Ноди, що працювали над іншою гілкою, переключаться на найдовший ланцюг.

Нові Торгівлі не обов’язково мають бути транслювані всім Нодам. Достатньо, щоб вони дійшли до достатньої кількості Нод, і незабаром ці Торгівлі будуть включені у Блок. Трансляція Блоків допускає втрату деяких повідомлень. Якщо Нода не отримала певний Блок, вона зрозуміє це, коли отримає наступний Блок, і тоді запитає відсутній Блок.

6. Винагорода (Incentive)

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

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

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

7. Відновлення дискового простору (Reclaiming Disk Space)

Якщо остання Торгівля монети відбулася достатньо давно, записи про витрати цієї монети до цієї Торгівлі можна видалити — для економії дискового простору. Щоб зробити це без порушення хешу Блоку, записи Торгівель хешуються у дерево Меркла[7,2,5], і лише корінь дерева включається у хеш Блоку. Обрізаючи гілки, старі Блоки можна стиснути. Внутрішні хеші не потрібно зберігати.

Заголовок Блоку без записів Торгівель займає близько 80 байтів. Припускаючи, що Блок створюється кожні 10 хвилин, 80 байтів × 6 × 24 × 365 = 4,2 МБ на рік. Станом на 2008 рік більшість комп’ютерів мали 2 ГБ пам’яті, а за прогнозом закону Мура щороку додається 1,2 ГБ, тому навіть якщо заголовки Блоків потрібно зберігати у пам’яті, це не проблема.

8. Спрощене підтвердження платежу (Simplified Payment Verification)

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

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

9. Комбінування та розділення вартості (Combining and Splitting Value)

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

Варто зазначити, що «розгалуження» тут не є проблемою — тобто, коли одна Торгівля залежить від кількох Торгівель, а ті — ще від інших. Ніколи не потрібно отримувати повну незалежну історію будь-якої Торгівлі.

10. Конфіденційність (Privacy)

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

11. Обчислення (Calculations)

Уявімо ситуацію, коли атакуючий намагається створити альтернативний ланцюг швидше, ніж чесний. Навіть якщо йому це вдасться, система не опиниться у двозначному становищі: він не може створити цінність з нічого або отримати гроші, які йому не належали. Ноди не приймуть недійсну Торгівлю як платіж, а чесні Ноди ніколи не приймуть Блок з такою Торгівлею. Атакуючий може лише змінити свої власні Торгівлі, щоб спробувати повернути вже витрачені гроші.

Змагання між чесним ланцюгом і атакуючим можна описати як біноміальне випадкове блукання. Успіх — це коли чесний ланцюг отримує новий Блок і збільшує свою перевагу на 1; невдача — коли атакуючий додає Блок і зменшує перевагу чесного ланцюга на 1.

Ймовірність того, що атакуючий наздожене, схожа на задачу про банкрутство гравця. Припустимо, гравець з нескінченними фішками починає з боргу і може робити нескінченну кількість ставок, щоб покрити борг. Ми можемо обчислити ймовірність того, що він зрештою покриє борг, тобто ймовірність того, що атакуючий наздожене чесний ланцюг[8], як показано нижче:

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

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

Одержувач створює нову пару Відкритого та закритого ключів і повідомляє Відкритий ключ відправнику незадовго до підписання. Це запобігає ситуації, коли відправник заздалегідь готує ланцюг Блоків і, якщо йому пощастить, випереджає, а потім проводить Торгівлю. Як тільки платіж здійснено, нечесний відправник починає таємно працювати над паралельним ланцюгом, намагаючись включити Зворотний варіант Торгівлі.

Одержувач чекає, поки Торгівля буде включена у Блок, і вже додано наступний Блок. Він не знає, як просувається атакуючий, але може припустити середній час створення чесних Блоків; прогрес атакуючого відповідає розподілу Пуассона з очікуваним значенням:

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

Щоб уникнути підсумовування нескінченного ряду щільності…

Перетворення у програму на C…

Отримавши часткові результати, бачимо, що ймовірність експоненціально падає зі збільшенням Z:

Якщо P менше 0,1%…

12. Висновок (Conclusion)

Ми запропонували електронну платіжну систему, яка не потребує довіри; вона починається з простого каркасу монети з цифровими підписами, який забезпечує надійний контроль власності, але не запобігає подвійним витратам. Щоб вирішити цю проблему, ми запропонували однорангову мережу з механізмом доказу роботи для запису публічної історії Торгівель; поки чесні Ноди контролюють більшість Хеш-потужності, атакуючий не може змінити систему лише за рахунок Хеш-потужності. Стійкість мережі полягає у її простоті та відсутності структури. Ноди можуть працювати одночасно з мінімальною координацією. Їм навіть не потрібно ідентифікуватися, оскільки шлях повідомлень не залежить від конкретного пункту призначення; повідомлення просто поширюються на основі максимальних зусиль. Ноди можуть вільно приєднуватися та залишати мережу, а при повторному приєднанні просто приймають ланцюг доказу роботи як доказ усього, що сталося під час їхньої відсутності. Вони голосують своєю Хеш-потужністю, додаючи нові дійсні Блоки до ланцюга та відхиляючи недійсні, тим самим висловлюючи прийняття чи неприйняття дійсних Торгівель. Будь-які необхідні правила та винагороди можуть бути примусово реалізовані через цей Консенсус.

BTC1.85%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • Прокоментувати
  • Репост
  • Поділіться
Прокоментувати
0/400
Немає коментарів
  • Закріпити