了解區塊鏈中的Commit-Reveal方案

新手11/22/2023, 6:46:03 PM
了解 Commit-Reveal 方法,這是一種區塊鏈創新,可提高去中心化數字交易的隱私性和安全性。

區塊鏈技術帶來了可實現共識、安全和隱私的創新方法。其中一項創新方法就是commit-reveal方案——一種增強區塊鏈用戶隱私和安全性的加密協議。當您閲讀本課程時,您將了解 Commit-Reveal 方案爲去中心化數字領域帶來的信任、透明度和創新層。本文中的每個模塊都經過精心設計,旨在讓您全麵了解 Commit-Reveal 方案、其實施及其對區塊鏈格局的影響。

何爲區塊鏈?

本質而言,區塊鏈就像一個有變化的數字分類賬。與傳統分類賬不衕,它是去中心化的,這意味著沒有任何一個實體能控製整個區塊鏈,併且任何人都可以訪問它,他們是網絡的組成部分。區塊鏈中的每個“塊”都帶有一個交易列錶。一個區塊充滿交易後,就會形成另一個新區塊,從而創建一個連接的區塊“鏈”——因此得名“區塊鏈”。

區塊鏈的亮點之一是,它強調信任和透明度。網絡中的任何人都能訪問併查看區塊鏈上的每筆交易。這種開放性可阻止不誠實行爲併增強社區之間的信任。您可能想知道,它是如何實現這種程度的透明度的?答案在於其獨特的共識機製和密碼學原理,我們將在本課程的內容中對其進行深入研究。

Commit-Reveal方案見解

在您已了解了何爲區塊鏈之後,接下來讓我們介紹它的特殊方法:Commit-Reveal 方案。這就像一場魔術錶演,魔術師(用戶)首先錶示會進行某種錶演,而不曏觀衆(網絡)透露,然後在稍後階段揭曉該錶演。用區塊鏈術語來説,這是一個兩步過程:“提交(commit)階段”和“揭示(reveal)階段”。

在提交階段,用戶將哈希後的信息提交到區塊鏈。這個哈希版本就像原始信息的亂序版本,隱藏了實際內容。哈希函數的神奇之處在於,它是單曏的;您無法將哈希值解密回其原始形式,從而暫時保密信息。然後是揭示階段,用戶揭示原始信息,然後由網絡再次對其進行哈希驗證,併將其與初始提交的哈希進行比較(如果匹配),那麽網絡證實了這一點,魔術完成了。

通過 Commit-Reveal 方案,區塊鏈網絡可在拍賣、投票繫統等應用程序中實現新的參與水平,我們將在接下來的模塊中詳細探討這些應用程序。

提交(Commit)階段

當我們深入探討 Commit-Reveal 方案時,我們的首先要了解的是“Commit”階段。在此階段,用戶“提交”某個值,但他們的方式是對實際值保密。想象一下,您心中有一個秘密號碼,但您沒有告訴每個人它是什麽,而是將其放在一個上鎖的盒子裡併曏每個人展示。他們知道您有一個號碼,但他們不知道它是什麽。這就是區塊鏈中“提交”的意義所在!

現在,我們如何鎖定我們的秘密值呢?在區塊鏈領域中,我們使用稱爲哈希函數的東西來實現這一點。哈希函數就像一個神奇的攪拌機。您輸入您的秘密值,它就會輸出它的亂序版本,稱爲哈希值。這個哈希值是唯一的;即使原始值髮生微小變化也會産生截然不衕的哈希值。它的美妙之處在於,它是一個單曏過程——一旦值被哈希,就沒有簡單的方法可以從哈希中找出原始值。因此,當用戶提交他們的價值時,他們實際上是在與區塊鏈上的每個人分享他們價值的哈希值。

揭示(Reveal)階段

提交階段的懸念過後,就到了大揭曉的時候了!揭示(commit)階段是最終曏區塊鏈上的所有參與者揭示所提出的價值的階段。回到我們上鎖的盒子的比喻上,那麽此時就是打開盒子的時刻,每個人都能看到您隱藏的號碼。在區塊鏈世界中,揭示是一個簡單但至關重要的過程,它爲各種應用程序提供了透明度和公平性。

當用戶透露其提交的值時,網絡可對揭示的值進行哈希併將其與提交階段共享的原始哈希進行比較,以此來輕鬆驗證其真實性。如果哈希值匹配,則確認用戶沒有中途改變想法。這個簡單而強大的驗證過程有助於維護一個每個人都遵守規則的信任環境。這就像比賽中有裁判一樣,確保所有玩家都遵守商定的規則。

在智能合約中實現 Commit-Reveal

現在我們已揭開了 Commit-Reveal 方案的魔力,再讓我們看看它是如何通過智能合約在區塊鏈世界中髮揮作用。智能合約就像傳統合約一樣,但它是數字化且自動執行的。想想一個公正的機器人,它自動確保所有各方遵守他們的協議,您就會明白智能合約的想法。該工具採用了 Commit-Reveal 的理論思想,併將其應用於數字領域。通過智能合約實施 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;



// The commit function allows users to submit their hashed values

function commit(bytes32 _hash) public {

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

    commits[msg.sender].hash = _hash;

}



// The reveal function allows users to reveal their original values

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;

}



// An example finalization function that could tally votes

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;

}



// A function to audit the contract state (just an example, not practical for large datasets)

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

    return revealedValues;

}

}

代碼解釋:

  • 創建合約:CommitReveal 合約已創建。
  • 提交函數:提交函數接受哈希值 (_hash) 併將其存儲在髮送者的地址中。
  • 存儲提交的值:哈希值存儲在稱爲提交的映射中。
  • 揭示函數:揭示函數允許用戶提交其原始值 (_value) 和鹽 (_salt)。它檢查這些哈希值是否與最初提交的哈希值相匹配。
  • 驗證和確認:這是通過比較哈希值在揭示函數中完成的。
  • 最終確定:tallyVotes 函數簡化演示了如何統計選票過程。它迭代所有可能的地址(對於大型數據集來説不切實際)併對顯示的值求和。
  • 審計和測試:審計函數是一個非常簡單地演示説明如何檢查合約狀態。

該示例非常簡單,缺乏生産繫統所需的許多實際考慮因素(例如防止溢出、優化 Gas 使用、管理大型數據集以及添加適當的訪問控製等)。特別是,由於對所有可能的地址進行迭代,最終確定函數是不切合實際的,併且在現實場景中需要不衕的設計。該代碼旨在用於啟蒙和教育工具,而不是可用於實際生産的解決方案。

區塊鏈中 Commit-Reveal 方案的用例

提升拍賣平颱

在線拍賣是 Commit-Reveal 方案的典型應用之一。爲了防止其他人利用投標金額作爲杠桿,參與者可以在提交階段秘密地提交投標。當投標期結束時,揭示階段開始,允許參與者披露其投標。然後,確定最高有效出價,確保拍賣過程公平且有競爭力。

創建公平投票繫統

投票繫統可從 Commit-Reveal 方案穫得多重優勢,特別是在要求選民匿名和誠實的情況下更是如此。在這種設置中,在選舉或任何投票活動期間,選民在提交(commit)階段提交其選擇,而不曏其他人透露,從而確保投票的誠實性和保密性。投票期結束後,揭示(reveal)階段就會開始,此時選民可公開其選票。然後,繫統對這些結果進行統計以確定結果,這實現了公平和透明的投票過程。

密封投標合衕

在密封投標合衕中,投標人使用Commit-Reveal方案秘密提交其投標。這一過程確保任何投標人都不知道其他投標人的投標金額,從而實現公平競爭。投標提交(commit)期結束後,進入揭示(reveal)階段,合衕將授予具有最佳報價的合格投標人。

游戲場景

Commit-Reveal 方案在游戲場景中找到了一個有價值的應用,例如數字版的石頭剪刀布游戲。玩家在不透露自己想法的情況下做出選擇,確保游戲公平。兩名玩家都提交想法後,接下來進入揭示階段,根據所做的選擇確定穫勝者。

減輕搶先交易問題

在區塊鏈環境中,令人擔憂的問題之一是搶先交易,惡意行爲者可能會從待處理交易的信息中受益。Commit-Reveal 方案通過最初隱藏交易細節來幫助減輕此類問題。當揭示階段到來時,惡意行爲者對信息採取行動就爲時已晚,從而保持交易的誠實性。

低延遲Commit-and-Reveal架構

F3B 等較新的架構已髮展到可以減少與傳統 Commit-Reveal 方案相關開銷的地步。 F3B 最大限度地減少寫入區塊鏈的數據,提供低延遲的Commit-and-Reveal架構。這一髮展值得我們關註,因爲它標誌著 Commit-Reveal 方案在不斷優化和創新,將能更加高效運用到實際應用中。

隨機數生成

在區塊鏈環境中,由於區塊鏈協議具有確定性,要生成隨機數將不容易。Commit-Reveal 方案是在以太坊區塊鏈上生成隨機數的去中心化替代方案。例如,Randao 是一種 Commit-Reveal RNG 實現,它利用公共數據源併激勵參與隨機數生成。

結語

本文對 Commit-Reveal 這一有趣方案的探討即將結束。重要的是,要考慮這種簡單但強大的機製如何幫助在區塊鏈應用程序中建立信任和開放性。我們通過 Commit-Reveal 方案一窺究竟,了解了區塊鏈技術如何通過讓拍賣變得公平、使投票繫統誠實可信,以及讓游戲場景更具創意等方式改變許多領域。這一旅程併沒有就此結束;區塊鏈技術不斷髮展的本質提出了新的探索視野。憑借通過本課程穫得的知識,您將能夠更深入地研究區塊鏈,探索其無限的可能性,併爲塑造透明、公平和去中心化的數字未來做出貢獻。

作者: Piero
譯者: Cedar
審校: Matheus、Edward、Ashley He
* 投資有風險,入市須謹慎。本文不作為Gate.io提供的投資理財建議或其他任何類型的建議。
* 在未提及Gate.io的情況下,複製、傳播或抄襲本文將違反《版權法》,Gate.io有權追究其法律責任。

了解區塊鏈中的Commit-Reveal方案

新手11/22/2023, 6:46:03 PM
了解 Commit-Reveal 方法,這是一種區塊鏈創新,可提高去中心化數字交易的隱私性和安全性。

區塊鏈技術帶來了可實現共識、安全和隱私的創新方法。其中一項創新方法就是commit-reveal方案——一種增強區塊鏈用戶隱私和安全性的加密協議。當您閲讀本課程時,您將了解 Commit-Reveal 方案爲去中心化數字領域帶來的信任、透明度和創新層。本文中的每個模塊都經過精心設計,旨在讓您全麵了解 Commit-Reveal 方案、其實施及其對區塊鏈格局的影響。

何爲區塊鏈?

本質而言,區塊鏈就像一個有變化的數字分類賬。與傳統分類賬不衕,它是去中心化的,這意味著沒有任何一個實體能控製整個區塊鏈,併且任何人都可以訪問它,他們是網絡的組成部分。區塊鏈中的每個“塊”都帶有一個交易列錶。一個區塊充滿交易後,就會形成另一個新區塊,從而創建一個連接的區塊“鏈”——因此得名“區塊鏈”。

區塊鏈的亮點之一是,它強調信任和透明度。網絡中的任何人都能訪問併查看區塊鏈上的每筆交易。這種開放性可阻止不誠實行爲併增強社區之間的信任。您可能想知道,它是如何實現這種程度的透明度的?答案在於其獨特的共識機製和密碼學原理,我們將在本課程的內容中對其進行深入研究。

Commit-Reveal方案見解

在您已了解了何爲區塊鏈之後,接下來讓我們介紹它的特殊方法:Commit-Reveal 方案。這就像一場魔術錶演,魔術師(用戶)首先錶示會進行某種錶演,而不曏觀衆(網絡)透露,然後在稍後階段揭曉該錶演。用區塊鏈術語來説,這是一個兩步過程:“提交(commit)階段”和“揭示(reveal)階段”。

在提交階段,用戶將哈希後的信息提交到區塊鏈。這個哈希版本就像原始信息的亂序版本,隱藏了實際內容。哈希函數的神奇之處在於,它是單曏的;您無法將哈希值解密回其原始形式,從而暫時保密信息。然後是揭示階段,用戶揭示原始信息,然後由網絡再次對其進行哈希驗證,併將其與初始提交的哈希進行比較(如果匹配),那麽網絡證實了這一點,魔術完成了。

通過 Commit-Reveal 方案,區塊鏈網絡可在拍賣、投票繫統等應用程序中實現新的參與水平,我們將在接下來的模塊中詳細探討這些應用程序。

提交(Commit)階段

當我們深入探討 Commit-Reveal 方案時,我們的首先要了解的是“Commit”階段。在此階段,用戶“提交”某個值,但他們的方式是對實際值保密。想象一下,您心中有一個秘密號碼,但您沒有告訴每個人它是什麽,而是將其放在一個上鎖的盒子裡併曏每個人展示。他們知道您有一個號碼,但他們不知道它是什麽。這就是區塊鏈中“提交”的意義所在!

現在,我們如何鎖定我們的秘密值呢?在區塊鏈領域中,我們使用稱爲哈希函數的東西來實現這一點。哈希函數就像一個神奇的攪拌機。您輸入您的秘密值,它就會輸出它的亂序版本,稱爲哈希值。這個哈希值是唯一的;即使原始值髮生微小變化也會産生截然不衕的哈希值。它的美妙之處在於,它是一個單曏過程——一旦值被哈希,就沒有簡單的方法可以從哈希中找出原始值。因此,當用戶提交他們的價值時,他們實際上是在與區塊鏈上的每個人分享他們價值的哈希值。

揭示(Reveal)階段

提交階段的懸念過後,就到了大揭曉的時候了!揭示(commit)階段是最終曏區塊鏈上的所有參與者揭示所提出的價值的階段。回到我們上鎖的盒子的比喻上,那麽此時就是打開盒子的時刻,每個人都能看到您隱藏的號碼。在區塊鏈世界中,揭示是一個簡單但至關重要的過程,它爲各種應用程序提供了透明度和公平性。

當用戶透露其提交的值時,網絡可對揭示的值進行哈希併將其與提交階段共享的原始哈希進行比較,以此來輕鬆驗證其真實性。如果哈希值匹配,則確認用戶沒有中途改變想法。這個簡單而強大的驗證過程有助於維護一個每個人都遵守規則的信任環境。這就像比賽中有裁判一樣,確保所有玩家都遵守商定的規則。

在智能合約中實現 Commit-Reveal

現在我們已揭開了 Commit-Reveal 方案的魔力,再讓我們看看它是如何通過智能合約在區塊鏈世界中髮揮作用。智能合約就像傳統合約一樣,但它是數字化且自動執行的。想想一個公正的機器人,它自動確保所有各方遵守他們的協議,您就會明白智能合約的想法。該工具採用了 Commit-Reveal 的理論思想,併將其應用於數字領域。通過智能合約實施 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;



// The commit function allows users to submit their hashed values

function commit(bytes32 _hash) public {

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

    commits[msg.sender].hash = _hash;

}



// The reveal function allows users to reveal their original values

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;

}



// An example finalization function that could tally votes

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;

}



// A function to audit the contract state (just an example, not practical for large datasets)

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

    return revealedValues;

}

}

代碼解釋:

  • 創建合約:CommitReveal 合約已創建。
  • 提交函數:提交函數接受哈希值 (_hash) 併將其存儲在髮送者的地址中。
  • 存儲提交的值:哈希值存儲在稱爲提交的映射中。
  • 揭示函數:揭示函數允許用戶提交其原始值 (_value) 和鹽 (_salt)。它檢查這些哈希值是否與最初提交的哈希值相匹配。
  • 驗證和確認:這是通過比較哈希值在揭示函數中完成的。
  • 最終確定:tallyVotes 函數簡化演示了如何統計選票過程。它迭代所有可能的地址(對於大型數據集來説不切實際)併對顯示的值求和。
  • 審計和測試:審計函數是一個非常簡單地演示説明如何檢查合約狀態。

該示例非常簡單,缺乏生産繫統所需的許多實際考慮因素(例如防止溢出、優化 Gas 使用、管理大型數據集以及添加適當的訪問控製等)。特別是,由於對所有可能的地址進行迭代,最終確定函數是不切合實際的,併且在現實場景中需要不衕的設計。該代碼旨在用於啟蒙和教育工具,而不是可用於實際生産的解決方案。

區塊鏈中 Commit-Reveal 方案的用例

提升拍賣平颱

在線拍賣是 Commit-Reveal 方案的典型應用之一。爲了防止其他人利用投標金額作爲杠桿,參與者可以在提交階段秘密地提交投標。當投標期結束時,揭示階段開始,允許參與者披露其投標。然後,確定最高有效出價,確保拍賣過程公平且有競爭力。

創建公平投票繫統

投票繫統可從 Commit-Reveal 方案穫得多重優勢,特別是在要求選民匿名和誠實的情況下更是如此。在這種設置中,在選舉或任何投票活動期間,選民在提交(commit)階段提交其選擇,而不曏其他人透露,從而確保投票的誠實性和保密性。投票期結束後,揭示(reveal)階段就會開始,此時選民可公開其選票。然後,繫統對這些結果進行統計以確定結果,這實現了公平和透明的投票過程。

密封投標合衕

在密封投標合衕中,投標人使用Commit-Reveal方案秘密提交其投標。這一過程確保任何投標人都不知道其他投標人的投標金額,從而實現公平競爭。投標提交(commit)期結束後,進入揭示(reveal)階段,合衕將授予具有最佳報價的合格投標人。

游戲場景

Commit-Reveal 方案在游戲場景中找到了一個有價值的應用,例如數字版的石頭剪刀布游戲。玩家在不透露自己想法的情況下做出選擇,確保游戲公平。兩名玩家都提交想法後,接下來進入揭示階段,根據所做的選擇確定穫勝者。

減輕搶先交易問題

在區塊鏈環境中,令人擔憂的問題之一是搶先交易,惡意行爲者可能會從待處理交易的信息中受益。Commit-Reveal 方案通過最初隱藏交易細節來幫助減輕此類問題。當揭示階段到來時,惡意行爲者對信息採取行動就爲時已晚,從而保持交易的誠實性。

低延遲Commit-and-Reveal架構

F3B 等較新的架構已髮展到可以減少與傳統 Commit-Reveal 方案相關開銷的地步。 F3B 最大限度地減少寫入區塊鏈的數據,提供低延遲的Commit-and-Reveal架構。這一髮展值得我們關註,因爲它標誌著 Commit-Reveal 方案在不斷優化和創新,將能更加高效運用到實際應用中。

隨機數生成

在區塊鏈環境中,由於區塊鏈協議具有確定性,要生成隨機數將不容易。Commit-Reveal 方案是在以太坊區塊鏈上生成隨機數的去中心化替代方案。例如,Randao 是一種 Commit-Reveal RNG 實現,它利用公共數據源併激勵參與隨機數生成。

結語

本文對 Commit-Reveal 這一有趣方案的探討即將結束。重要的是,要考慮這種簡單但強大的機製如何幫助在區塊鏈應用程序中建立信任和開放性。我們通過 Commit-Reveal 方案一窺究竟,了解了區塊鏈技術如何通過讓拍賣變得公平、使投票繫統誠實可信,以及讓游戲場景更具創意等方式改變許多領域。這一旅程併沒有就此結束;區塊鏈技術不斷髮展的本質提出了新的探索視野。憑借通過本課程穫得的知識,您將能夠更深入地研究區塊鏈,探索其無限的可能性,併爲塑造透明、公平和去中心化的數字未來做出貢獻。

作者: Piero
譯者: Cedar
審校: Matheus、Edward、Ashley He
* 投資有風險,入市須謹慎。本文不作為Gate.io提供的投資理財建議或其他任何類型的建議。
* 在未提及Gate.io的情況下,複製、傳播或抄襲本文將違反《版權法》,Gate.io有權追究其法律責任。
即刻開始交易
註冊並交易即可獲得
$100
和價值
$5500
理財體驗金獎勵!