Solidity

礦工操縱 PRNG(偽隨機數生成)的最昂貴解決方案

  • June 22, 2018

從這篇文章中,我了解到隨機性只能通過

外部神諭

意義

送出 - 揭示方法

但是,如果我可以擁有一個可由礦工操作的偽隨機數生成器。什麼是仍然“保護”它的最佳方法,就使惡意使用者操縱它的成本最高?

除了:

block.coinbase represents the address of the miner who mined the current block.
block.difficulty is a relative measure of how difficult it was to find the block.
block.gaslimit restricts maximum gas consumption for transactions within the block.
block.number is the height of current block.
block.timestamp is when the block was mined.
block.blockhash(block.number), which is the blockhash of the current block.
block.blockhash(block.number - 1), which is the blockhash of the last block.
block.blockhash() of a block that is at least 256 blocks older than the current one.

對於大多數應用程序來說,塊雜湊應該足夠好。如果這用於決定乙太幣或其他貨幣的贏家,如果價格低於區塊獎勵,礦工將被估計無法做某事。

此外,您將來應該使用塊的塊雜湊。也就是說,如果您正在執行彩票,您首先關閉購買,然後在獲取塊雜湊之前等待幾個塊。這將避免有人在選擇獲勝者時在同一區塊購買彩票。

送出一個數字也應該很容易,你發布雜湊,當彩票結束時,你將你的承諾與塊雜湊結合起來,這樣礦工就不再有權力,但你作為所有者也沒有權力控制結果。您將在最後顯示數字,以便人們可以驗證結果。

Oracle 的解決方案很好,但它也需要信任,儘管提供了真實性證明,但您仍然相信像 random.org 這樣的來源是真實的或沒有受到損害。

總而言之,對於較小的獎品,blockhash 就足夠了,只要你在一個特定的區塊關閉彩票並在未來使用一個區塊的雜湊(這意味著你等待一段時間才能獲得區塊雜湊)。

最安全的策略是結合多個來源。

希望這可以幫助。

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