Что такое схема Commit-Reveal в Blockchain?

НовичокNov 22, 2023
Узнайте о методе Commit-Reveal - инновации в блокчейне, которая улучшает конфиденциальность и безопасность децентрализованных цифровых транзакций.
Что такое схема Commit-Reveal в Blockchain?

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

Что такое блокчейн?

По своей сути блокчейн похож на цифровую бухгалтерскую книгу с изюминкой. В отличие от традиционных бухгалтерских книг, она децентрализована, т.е. ни один субъект не имеет контроля над всей блокчейн, и она доступна любому, кто входит в ее сеть. Каждый "блок" в блокчейне содержит список транзакций. Как только блок заполняется транзакциями, формируется новый блок, создавая связанную "цепочку" блоков - отсюда и название "блокчейн".

Одна из самых ярких особенностей blockchain - это акцент на доверии и прозрачности. Любой человек в сети имеет доступ и может просматривать каждую транзакцию в блокчейне. Такая открытость препятствует нечестности и способствует укреплению доверия в сообществе. У Вас может возникнуть вопрос, как же достигается такой уровень прозрачности? Ответ кроется в его уникальных механизмах консенсуса и криптографических принципах, которые мы рассмотрим по мере продвижения в этом курсе.

Введение в схему Commit-Reveal

Теперь, когда Вы имеете представление о том, что такое блокчейн, давайте внесем в него особый колорит - схему Commit-Reveal. Это похоже на магическое шоу, в котором фокусник (пользователь) сначала совершает определенное действие, не раскрывая его зрителям (сети), а затем, на более поздней стадии, раскрывает это действие. В терминах блокчейна это двухэтапный процесс: 'Commit Phase' и 'Reveal Phase'.

На фазе Commit пользователь отправляет в блокчейн хэшированную версию своей информации. Эта хэшированная версия похожа на зашифрованную версию исходной информации, которая скрывает реальное содержание. Магия хэш-функции заключается в том, что это одностороннее путешествие; Вы не можете расшифровать хэш обратно в его первоначальную форму, сохраняя таким образом информацию в тайне до поры до времени. Затем наступает фаза Reveal, на которой пользователь раскрывает исходную информацию, которая затем проверяется сетью путем повторного хэширования и сравнения с первоначальным зафиксированным хэшем, если он совпадает, вуаля! Сеть подтверждает раскрытие, и фокус завершен.

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

Фаза принятия обязательств

Когда мы плывем в глубины схемы Commit-Reveal, наша первая остановка - это 'Commit Phase'. На этой фазе пользователи "принимают на себя обязательства" по определенному значению, но делают это таким образом, что фактическое значение остается в секрете. Представьте, что у Вас есть секретное число, но вместо того, чтобы сказать всем, что это за число, Вы кладете его в запертый ящик и показываете его всем. Они знают, что у Вас есть номер, но не знают, что это за номер. Вот что такое фиксация в блокчейне!

Итак, как же нам запереть нашу секретную ценность? В мире блокчейна для этого используется нечто, называемое хэш-функцией. Хэш-функция похожа на волшебный блендер. Вы вводите свое секретное значение, и система выдает его скремблированную версию, известную как хэш. Этот хэш уникален; даже крошечное изменение исходного значения создает дико отличающийся хэш. Прелесть этого процесса заключается в том, что он односторонний - после того, как значение захешировано, нет простого способа узнать исходное значение из хеша. Таким образом, когда пользователи фиксируют свою стоимость, на самом деле они делятся хэшем своей стоимости со всеми участниками блокчейна.

Фаза раскрытия

После напряженного ожидания, возникшего в фазе принятия решения, настало время для грандиозного открытия! Фаза Reveal - это фаза, на которой зафиксированные значения окончательно раскрываются для всех участников блокчейна. Возвращаясь к нашей аналогии с запертым ящиком, это тот момент, когда ящик открывается, и все видят, какое число было у Вас спрятано. В мире блокчейна раскрытие - это простой, но крайне важный процесс, который обеспечивает прозрачность и справедливость в различных приложениях.

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

Реализация Commit-Reveal в смарт-контрактах

Теперь, когда мы раскрыли магию схемы Commit-Reveal, давайте посмотрим, как она воплощается в жизнь в мире блокчейна с помощью смарт-контрактов. Смарт-контракт похож на традиционный контракт, но он цифровой и самоисполняющийся. Представьте себе беспристрастного робота, который автоматически следит за тем, чтобы все стороны придерживались своих договоренностей, и у Вас появится идея смарт-контракта. Это инструмент, который берет теоретическую идею Commit-Reveal и делает ее практичной в цифровой сфере. Реализация схемы Commit-Reveal с помощью смарт-контракта похожа на хореографию танца, где каждый шаг следует заданному ритму. Давайте пройдемся по этой хореографии шаг за шагом.

Создание контракта

Начните с создания смарт-контракта на блокчейн-платформе, такой как Ethereum. В этом контракте будут закодированы правила ведения боя по схеме Commit-Reveal.

Функция Commit

Разработайте функцию фиксации в смарт-контракте. Эта функция позволит пользователям передавать свои хэшированные значения (фаза фиксации) в контракт.

Хранение зафиксированных значений

По мере того, как пользователи будут фиксировать свои значения, смарт-контракт будет надежно хранить эти хэши в блокчейне в ожидании фазы раскрытия.

Функция Reveal

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

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

После раскрытия смарт-контракт проверит раскрытые значения путем их хэширования и сравнения с первоначально зафиксированными хэшами. Если все совпадает, раскрытие подтверждается.

Финализация

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

Аудит и тестирование

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

Пример кода

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

contract CommitReveal {

struct Commit {

    bytes32 hash;

    bool revealed;

}



mapping(address => Commit) public commits;

mapping(address => uint256) public revealedValues;



// Функция commit позволяет пользователям представлять свои хэшированные значения

function commit(bytes32 _hash) public {

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

    commits[msg.sender].hash = _hash;

}



// Функция reveal позволяет пользователям раскрывать свои исходные значения

function reveal(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;

}



// Пример функции финализации, которая может подсчитывать голоса

function tallyVotes() public view returns (uint256) {

 uint256 totalVotes = 0;

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

 if (commits[addr].revealed) {

            totalVotes += revealedValues[addr];

        }

    }

    return totalVotes;

}



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

function audit() public view returns (mapping(address => uint256) memory) {

    return revealedValues;

}

 }

Объяснение:

  • Создание контракта: Создается контракт CommitReveal.
  • Функция фиксации: Функция commit принимает хэшированное значение (_hash) и сохраняет его по отношению к адресу отправителя.
  • Хранение зафиксированных значений: Хешированные значения хранятся в связке, называемой commits.
  • Функция Reveal: Функция раскрытия позволяет пользователям представить свое исходное значение (_value) и соль (_salt). Он проверяет, что их хэш совпадает с первоначально зафиксированным хэшем.
  • Верификация и валидация: Это делается внутри функции раскрытия путем сравнения хэшей.
  • Завершение работы: Функция tallyVotes - это упрощенный пример того, как Вы можете подсчитывать голоса. Он выполняет итерацию по всем возможным адресам (непрактично для больших наборов данных) и суммирует выявленные значения.
  • Аудит и тестирование: Функция аудита - это очень упрощенный пример того, как Вы можете проверить состояние контракта.

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

Примеры использования схемы Commit-Reveal в блокчейне

Усовершенствование аукционных платформ

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

Создание справедливых систем голосования

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

Контракты с закрытыми заявками

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

Игровые сценарии

Схема Commit-Reveal находит забавное применение в игровых сценариях, таких как цифровая версия игры Rock, Paper, and Scissors. Игроки делают свой выбор, не раскрывая его, что обеспечивает честную игру. После того, как оба игрока приняли участие в игре, следует фаза раскрытия, определяющая победителя на основе сделанного выбора.

Смягчение проблем, возникающих на фронте

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

Архитектуры Commit-and-Reveal с низкой задержкой

Более новые архитектуры, такие как F3B, были разработаны с целью снижения накладных расходов, связанных с традиционными схемами Commit-Reveal. F3B минимизирует запись данных в блокчейн, предлагая архитектуру Commit-and-Reveal с низкой задержкой. Эта разработка примечательна тем, что она свидетельствует о постоянной оптимизации и инновациях в схемах Commit-Reveal, делая их более эффективными для реальных приложений.

Генерация случайных чисел

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

Заключение

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

Tác giả: Piero
Thông dịch viên: Cedar
(Những) người đánh giá: Matheus、Edward、Ashley He
* Đầu tư có rủi ro, phải thận trọng khi tham gia thị trường. Thông tin không nhằm mục đích và không cấu thành lời khuyên tài chính hay bất kỳ đề xuất nào khác thuộc bất kỳ hình thức nào được cung cấp hoặc xác nhận bởi Gate.io.
* Không được phép sao chép, truyền tải hoặc đạo nhái bài viết này mà không có sự cho phép của Gate.io. Vi phạm là hành vi vi phạm Luật Bản quyền và có thể phải chịu sự xử lý theo pháp luật.
Bắt đầu giao dịch
Đăng ký và giao dịch để nhận phần thưởng USDTEST trị giá
$100
$5500
Tạo tài khoản