摘要:對于來說通過復雜的算法生成隨機數成本太高,同時智能合約又運行在多個節點上,因此,不能使用像時鐘時間來生成隨機數。在獲得隨機數之后,針對隨機數取值范圍進行取模操作,獲得最終的隨機數。
Solidity隨機數生成
在以太坊的只能合約中,沒有提供像其他面向對象編程一樣的生成隨機數的工具類或方法。其實,所謂的隨機數也是偽隨機的,沒有哪一種語言能夠真正的生成隨機數。
對于solidity來說通過復雜的算法生成隨機數成本太高,同時智能合約又運行在多個節點上,因此,不能使用像時鐘時間來生成隨機數。
solidity隨機數生成過程在此使用最常用的算法之一是“線性同余發生器”(LCG)。基本步驟如下:
接收輸入
基于輸入執行算法
取輸出模數(除以需要范圍內的最大數量)。
function rand(uint256 _length) public view returns(uint256) { uint256 random = uint256(keccak256(abi.encodePacked(block.difficulty, now))); return random%_length; }
比如上面的代碼,通過一系列算法獲得類型為uint256的random數據,然后對random取模指定的長度,即可得到一個隨機數。其中_length的參數為你想去隨機數的范圍,比如要取0-10的隨機數,那么_length的長度便為10。
在以上方法中第一步通過abi.encodePacked(...) returns (bytes)用來計算參數的緊密打包編碼。然后通過keccak256算法對其結果進行hash計算,最后轉換成uint256的類型。在獲得隨機數之后,針對隨機數取值范圍進行取模操作,獲得最終的隨機數。
需要注意的是在solidity ^0.4.0版本中還可以直接使用keccak256對多個參數進行加密,但在0.5.10版本中keccak256只能提供一個參數。所以要使用abi.encodePacked進行處理。
原文鏈接:https://www.choupangxia.com/2...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75747.html
摘要:今天,我們繼續介紹文獻中提到的以太坊合約的安全性弱點與案例。隨機數生成的字節碼執行是確定性的。但是,一個惡意的礦工可能嘗試操縱自己生成的區塊來影響隨機數的生成與合約的執行結果。合約中的錢將被偷走。 今天,我們繼續介紹文獻中提到的以太坊合約的安全性弱點與案例。 數據保密Solidity 智能合約中的變量分 public 和 private 兩種。Private 變量表示這個數值不能被其他...
摘要:郵件列表以太坊上的開發者郵件列表停止使用。開發的移動以太坊瀏覽器開發階段由支持的瀏覽器內。是以太坊的開發環境,測試框架和資產管道。審查隨機數以太坊虛擬機是以太坊智能合約的執行環境。 去中心化應用去中心化應用是可以使用戶和供應商之間直接互動的服務(例如,連接某些市場上的買方和賣方,文件存儲里的持有者和儲存者)。以太坊去中心化應用典型地通過HTML/Javascript網絡應用與用戶互動,...
摘要:和比特幣協議有所不同的是,以太坊的設計十分靈活,極具適應性。超級賬本區塊鏈的商業應用超級賬本超級賬本是基金會下的眾多項目中的一個。證書頒發機構負責簽發撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個故事告訴你比特幣的原理及運作機制 這篇文章的定位會比較科普,盡量用類比的方法將比特幣的基本原理講出來...
摘要:可以把賬戶視為銀行賬戶,以太幣就是以太坊生態系統中的貨幣。重點合約狀態是持久化到區塊鏈上的,因此對合約狀態的修改需要消耗以太幣。也就是說它們被寫入以太幣區塊鏈中想象成寫入一個數據庫。注中,實際上是代名詞,一個位的無符號整數。建立一個命名為。 區塊鏈火熱,作為程序猿的我,當然也不能袖手旁觀,一位資深技術開發朋友曾笑說:這是屌絲程序猿改變命運為數不多的機會之一。所以,從今天開始,就要步入區...
摘要:使用基于以太坊的智能合約的集成開發環境。以太坊教程,主要介紹智能合約與應用開發,適合入門。以太坊,主要是介紹使用進行智能合約開發交互,進行賬號創建交易轉賬代幣開發以及過濾器和事件等內容。 Solidity是一種以智能合約為導向的編程語言。這是一種只有四年的年輕語言,旨在幫助開發基于以太坊數字貨幣的智能合約。 理解它官方文檔應該是學習Solidity的最佳來源:solidity.read...
閱讀 1660·2021-11-12 10:35
閱讀 1611·2021-08-03 14:02
閱讀 2655·2019-08-30 15:55
閱讀 2024·2019-08-30 15:54
閱讀 735·2019-08-30 14:01
閱讀 2421·2019-08-29 17:07
閱讀 2246·2019-08-26 18:37
閱讀 3028·2019-08-26 16:51