Blockchain

鏈上隨機性是什麼意思?在隨機性的背景下,鏈上和鏈下操作有什麼區別?

  • January 22, 2022

我想了解隨機性背景下的鏈上和鏈下操作。請給我一個例子,這樣我就清楚了。

我在這裡發了一篇文章:

什麼是鏈下交易和鏈上交易?

但他們沒有在隨機性的背景下討論鏈下和鏈上。

鏈下的一個例子是:

我們在乙太坊上看到了一些不良隨機性的陷阱,但是如何才能產生真正的隨機數呢?標準建議是脫鏈並使用外部資源。這些通常是外部“oracle”服務(例如,Oraclize),或者是具有競爭利益的多個使用者的散列輸入。

外部“oracle”服務(例如 Oraclize)是什麼意思?什麼是散列輸入(是隨機 id 嗎?)?如果你能告訴我一個內部預言也很有用。

對於鏈上,我得到以下資訊:

總而言之,我們對鏈上隨機數生成的建議是遵循以下模式: • 接受投注,付款,註冊投注交易的區塊號。• 投注者不僅要下注,還要在未來的交易中呼叫合約(在接下來的 256 個區塊內)。合約將計算較早註冊的區塊號的區塊雜湊,並用它來確定下注的成功與否。

我的理解是,對於鏈上我們必須使用某種區塊鏈變數。我對嗎?

祖爾菲。

外部“oracle”服務(例如 Oraclize)是什麼意思?什麼是散列輸入(是隨機 id 嗎?)?如果你告訴我一個內部預言也很有用。

根據定義,預言機總是在外部,因此將其稱為“外部預言機”有些多餘。它從外部世界獲取資訊並使其在區塊鏈中可用。Oraclize(現在可證明)正在使用 Nano Ledger 生成一個隨機數。“散列輸入”可能是指使用者生成本地隨機數並在步驟 1 中發送這些數字的散列(承諾)並在步驟 2 中發送實際隨機數(顯示)的承諾方案。

我的理解是,對於鏈上我們必須使用某種區塊鏈變數。我對嗎?

是的,鏈上指的是實際上來自鏈上數據的隨機性。與鏈下的區別正是隨機數生成源。使用承諾方案,您可以讓使用者在鏈下計算隨機數,而使用 Oraclize,您可以在硬體設備上生成隨機數。對於鏈上,您必須使用來自未來塊的塊變數,另請參閱您的另一個問題Blockhash: Register the block number。這可能會在某種程度上受到礦工的影響,因此只有在風險較低的情況下才足夠好。

簡而言之; 擁有一個隨機數生成器是許多算法的一個非常重要的組成部分。大多數隨機數生成器(RNG)都是“偽”隨機數生成器,意思是;結果是由一個完整的確定性和可重複的過程產生的。具有足夠熵的隨機源來播種 PRNG 算法是該算法最重要的組成部分。通常 PRNG 熵種子來自物理事件,如 CPU 雜訊級別或由物理事件滑鼠移動驅動的虛擬事件以及計算系統的其他變數 - 檢查https://en.wikipedia.org/wiki/dev/random

正如您所觀察到的,真正的隨機性來源大多與不可預測的物理事件有關。現在想像一下,試圖在一個確定性且沙盒化的平台中實現這一目標,與外部世界的任何主動互動都是如此。大多數區塊鏈解決方案在其信任邊界中沒有參數可以提供足夠的熵來模擬這種不可預測的物理事件,並且大多數參數(塊高、時間戳等)沒有提供足夠的熵來被認為是安全的,因此鏈隨機性很難。

現在你會想我只是收集外面的隨機性並將其提供給區塊鏈層(例如使用智能合約)如何,現在的挑戰是區塊鏈的分佈式特性,這使得信任這個值本身的正確性和最終性是這不是一件容易的事,這就是分佈式預言機服務存在的原因。

https://www.random.org/randomness/ https://en.wikipedia.org/wiki/Randomness https://blog.chain.link/verifiable-random-functions-vrf-random-number-generation-rng-feature/ https://fravoll.github.io/solidity-patterns/randomness.html

引用自:https://ethereum.stackexchange.com/questions/83847