從想法到實現:我們修改現有的橢圓曲線數位簽章方案,使其具有確定性,並在此基礎上提供獲取區塊鏈內可驗證的偽隨機數的函數。
想法
2018 年秋季,Waves 區塊鏈包括
困惑這個問題,我最終得出結論:任何區塊鏈都是一個細胞,在封閉的系統中不可能獲得可信的熵源。
但我仍然喜歡一個想法:如果
Waves區塊鏈平台使用簽名方案
顯然,以其純粹的形式,這樣的簽名不能用作偽隨機數的來源,因為它是不確定的,因此很容易被預言機操縱。
但是,事實證明,實際上可以使其具有確定性。
我曾經抱有很大的希望
經過一番思考並爭取當地分析師的支持後,VECRO 工作計畫就誕生了。
VECRO 是可驗證橢圓曲線隨機預言機的縮寫,俄語意思是橢圓曲線上可驗證的隨機預言機。
一切都變得非常簡單;為了實現確定性,您需要在要簽署的訊息出現之前固定 R 的值。 如果 R 已提交並且是正在簽署的訊息的一部分,這進一步確保 R 在正在簽署的訊息中提交,則 S 的值由使用者的訊息唯一確定,因此可以用作偽隨機數的來源。
在這樣的方案中,R 如何固定並不重要;這仍然是預言機的責任。 重要的是,S 由使用者唯一確定,但其值在預言機發布之前是未知的。 我們想要的一切!
說到固定 R,請注意
總的來說,預言機必須為使用者提供兩個功能:初始化(固定值R)和簽名(傳回值S)。在這種情況下,R、S 對是包含固定值的使用者訊息的通常可驗證簽章。值 R 和任意使用者資料。
可以說,區塊鏈的這個方案只不過是普通的方案
六個月來,實施的想法在我的腦海中醞釀,直到最終動力以形式出現
履行
那麼,在這個專案中
再次,把它放在一邊並使其更清晰。 預言機不僅僅按照提議的方案工作。 其工作完全由已建立的區塊鏈層級控制
目前,Waves 主網上有一個 VECRO 運行(你可以運行自己的,並不難,只是
為了使用預言機服務,您必須:
- 修復R;
- 向 oracle alias init@vecr 發送至少 0.005 Waves;
- 從預言機向用戶傳輸 1 個 R-vecr 代幣時,接收附件欄位中的 R 代碼;
- 獲得簽名;
- 發送至少 0.005 Waves 到 oracle 別名 random@vecr,並且還必須在附件欄位中指示先前收到的 R 代碼和附加使用者資料;
- 從預言機向用戶傳輸 1 個 S-vecr 代幣時,接收附件欄位中的 S 代碼;
- 使用S程式碼作為偽隨機數的來源。
目前實施的細微差別:
- 發送到預言機的Wave作為向用戶返回交易的佣金,最多1個Wave;
- R 代碼是「R」字元位元組和 32 位元組 base58 編碼的 R 值的串聯;
- 附件中的R代碼在前,用戶資料在R代碼之後;
- S 代碼是字元「S」的一個位元組和 S 的 32 位元組 Base58 編碼值的串聯;
- S是模除的結果,因此不能將S用作完整的256位偽隨機數(這個數字可以認為是最大的252位偽隨機數);
- 最簡單的選擇是使用 S 程式碼雜湊作為偽隨機數。
接收S程式碼範例:
- 初始化:
https://wavesexplorer.com/tx/8gc8jwM7JrPNehoDs7NVyos7BsufYktvkwVW1B6FAY6 - 取得 R 代碼:
https://wavesexplorer.com/tx/9eB25SbzEwvHEbm8pcKj7MGDrYv1u3Fxpj696FkJ96hd - 查詢R程式碼簽署結果和「隨機」使用者資料:
https://wavesexplorer.com/tx/6faoFJobEsugDFYmYmfsbtQYABmckNuE2kevaLh7ifzz - 接收S代碼:
https://wavesexplorer.com/tx/C5VrFLQcprbA1KXAToaNvMP4Kg2rq43NkwWuADAA7wXX
從技術角度來看,預言機已經完全準備好工作,您可以放心使用它。 從一般使用者使用的角度來看,缺乏方便的圖形介面,這個還得等待。
我很樂意回答問題並接受評論,謝謝。
來源: www.habr.com