Що таке схема Commit-Reveal Scheme у Blockchain?

ПочатківецьNov 22, 2023
Дізнайтеся про метод Commit-Reveal, інноваційний блокчейн, який покращує конфіденційність і безпеку в децентралізованих цифрових транзакціях.
Що таке схема Commit-Reveal Scheme у Blockchain?

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

Що таке Blockchain?

За своєю суттю блокчейн схожий на цифрову книгу з особливостями. На відміну від традиційних реєстрів, він децентралізований, тобто жодна юридична особа не має контролю над усім блокчейном, і він доступний кожному, хто є частиною його мережі. Кожен «блок» у блокчейні містить список транзакцій. Коли блок заповнюється транзакціями, формується новий блок, створюючи пов’язаний «ланцюжок» блоків — звідси й назва «блокчейн».

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

Знайомство зі схемою Commit-Reveal

Тепер, коли ви зрозуміли, що таке блокчейн, давайте представимо його особливий смак – схему Commit-Reveal. Це схоже на магічне шоу, де фокусник (користувач) спочатку виконує певну дію, не відкриваючи її аудиторії (мережі), а потім, на більш пізньому етапі, розкриває цю дію. З точки зору блокчейну, це двоетапний процес: «Фаза фіксації» та «Фаза розкриття».

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

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

Фаза фіксації

Коли ми пливемо в глибини схеми Commit-Reveal, нашою першою зупинкою є «Фаза фіксації». На цьому етапі користувачі «обов’язуються» з певним значенням, але роблять це таким чином, щоб фактичне значення залишалося в таємниці. Уявіть, що ви маєте на увазі секретне число, але замість того, щоб сказати всім, що це таке, ви кладете його в замкнену скриньку та показуєте всім. Вони знають, що у вас є номер, але не знають, що це таке. Ось що таке фіксація в блокчейні!

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

Фаза виявлення

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

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

Впровадження Commit-Reveal у смарт-контрактах

Тепер, коли ми розгадали магію схеми Commit-Reveal, давайте подивимося, як вона оживає у світі блокчейнів за допомогою розумних контрактів. Розумний контракт схожий на традиційний контракт, але він цифровий і виконується самостійно. Уявіть собі неупередженого робота, який автоматично гарантує, що всі сторони дотримуються своїх домовленостей, і у вас є ідея розумного контракту. Це інструмент, який використовує теоретичну ідею Commit-Reveal і робить її практичною в цифровій сфері. Реалізація схеми Commit-Reveal за допомогою смарт-контракту подібна до хореографії танцю, де кожен крок відповідає заданому ритму. Давайте крок за кроком пройдемося по цій хореографії.

Створення Контракту

Почніть із створення смарт-контракту на платформі блокчейн, наприклад Ethereum. У цьому контракті будуть закодовані правила взаємодії для схеми Commit-Reveal.

Функція Commit

Розробіть функцію фіксації в розумному контракті. Ця функція дозволить користувачам надсилати свої хешовані значення (фаза фіксації) до контракту.

Зберігання прийнятих значень

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

Функція виявлення

Далі в розумному контракті створіть функцію розкриття. Коли прийде час, ця функція дозволить користувачам розкрити свої початкові значення.

Верифікація та валідація

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

Доопрацювання

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

Аудит і тестування

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

Приклад коду

// SPDX-License-Identifier: MIT 

 pragma solidity ^0.8.0; 

 contract CommitReveal { 

 struct Commit {

    bytes32 hash;

    bool revealed;

}



mapping(address => Commit) public commits; 

 відображення (адреса => uint256) публічні виявлені значення; 



 // Функція фіксації дозволяє користувачам надсилати свої хешовані значення 

 function commit(bytes32 _hash) public {

    require(commits[msg.sender].hash == 0, "Already committed");

    commits[msg.sender].hash = _hash;

}



// Функція розкриття дозволяє користувачам розкривати свої вихідні значення 

 function discover(uint256 _value, string memory _salt) public {

    require(commits[msg.sender].revealed == false, "Already revealed");

    require(keccak256(abi.encodePacked(_value, _salt)) == commits[msg.sender].hash, "Hashes don't match");

    commits[msg.sender].revealed = true;

    revealedValues[msg.sender] = _value;

}



// Приклад функції фіналізації, яка може підраховувати голоси. 

 Функція tallyVotes() public view повертає (uint256) { 

 uint256 totalVotes = 0; 

 for (address addr = address(0); addr < address(-1); addr++) { 

 if (commits[addr].revealed) {

            totalVotes += revealedValues[addr];

        }

    }

    return totalVotes; 

 } 



 // Функція для аудиту стану контракту (лише приклад, непрактичний для великих наборів даних) 

 функція audit() public view повертає (mapping(address => uint256) memory) {

    return revealedValues;

}

 }

Пояснення:

  • Створення контракту: створюється контракт CommitReveal.
  • Функція фіксації: функція фіксації приймає хешоване значення (_hash) і зберігає його в адресі відправника.
  • Зберігання прийнятих значень: хешовані значення зберігаються у відображенні, що називається комітом.
  • Функція розкриття: функція розкриття дозволяє користувачам надсилати своє початкове значення (_value) і сіль (_salt). Він перевіряє, чи хеш цих даних відповідає початково зафіксованому хешу.
  • Перевірка та валідація: це робиться у функції розкриття шляхом порівняння хешів.
  • Завершення: функція tallyVotes є спрощеним прикладом того, як можна підраховувати голоси. Він перебирає всі можливі адреси (непрактично для великих наборів даних) і підсумовує виявлені значення.
  • Аудит і тестування: функція аудиту є дуже простим прикладом того, як можна перевірити стан контракту.

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

Випадки використання схеми Commit-Reveal Scheme у Blockchain

Покращення аукціонних платформ

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

Створення чесних систем голосування

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

Контракти із запечатаними заявками

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

Сценарії гри

Схема Commit-Reveal знаходить цікаве застосування в ігрових сценаріях, таких як цифрова версія «Камінь, папір і ножиці». Гравці роблять свій вибір, не розголошуючи його, забезпечуючи чесну гру. Після того, як обидва гравці взяли на себе зобов’язання, слідує фаза розкриття, яка визначає переможця на основі зробленого вибору.

Пом’якшення первинних проблем

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

Архітектури фіксації та розкриття з низькою затримкою

Новіші архітектури, такі як F3B, еволюціонували, щоб зменшити накладні витрати , пов’язані з традиційними схемами Commit-Reveal. F3B мінімізує запис даних у блокчейн, пропонуючи архітектуру Commit-and-Reveal з низькою затримкою. Ця розробка примітна, оскільки означає постійну оптимізацію та інновації в схемах Commit-Reveal, що робить їх більш ефективними для реальних програм.

Генерація випадкових чисел

У середовищах блокчейну генерування випадкових чисел може бути проблемою через детерміновану природу протоколів блокчейну. Схема Commit-Reveal служить децентралізованою альтернативою для генерації випадкових чисел у блокчейні Ethereum. Наприклад, Randao, реалізація RNG Commit-Reveal, використовує публічні канали даних і стимулює участь у генерації випадкових чисел.

Висновок

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

learn.articles.author Piero
learn.articles.translator Cedar
learn.articles.reviewer Matheus、Edward、Ashley He
learn.articles.copyrightNoticeOne
learn.articles.copyrightNoticeTwo
learn.articles.start.now
learn.articles.start.now.voucher
learn.articles.create.account