智能合約的做用不少,可是不少數據仍是要基於互聯網,那麼如何在合約中獲取互聯網中的數據?Oraclize就是爲了這個目的而誕生的。html
智能合約經過對Oraclize發佈一個合約之間的調用請求來獲取數據,指定數據源和參數。Oraclize根據收到的請求獲取數據,利用callBack函數返回結果。python
Oraclize的數據源列表以下:git
URL:互聯網中的鏈接。github
WolframAlpha:WolframAlpha是開發計算數學應用軟件的沃爾夫勒姆研究公司開發出的新一代的搜索引擎,能根據問題直接給出答案的網站,於 2009年5月15日晚7點(美國中部當地時間,北京時間5月16日上午8點)提早上線,用戶在搜索框鍵入須要查詢的問題後,該搜索引擎將直接向用戶返回答案,而不是返回一大堆連接。安全
·blockchain:其餘區塊鏈的數據網絡
·IPFS:文件傳輸系統中的數據dom
·nested:nested數據源是一個元數據源,它不提供訪問其餘服務的權限。它用來提供簡單相加邏輯,容許單個查詢在任何可用數據源的基礎上進行子查詢,併產生一個單獨字符串做爲結果。函數
·computation:它容許抓取應用的鏈下執行結果。在退出前,該應用必須在最後一行打印查詢結果(在標準輸出欄)工具
Oraclize提供了的TLSNotary Proof來證實返回的結果是沒有通過任何人修改的。TLS是一個網絡傳輸協議,利用可信機構頒發的CA來保證傳輸正確。TLSNotary是TLS的改進,可以證實Oraclize提供給合約的數據就是某個特色時間點的正確數據。區塊鏈
合約第一次對Oraclize的調用都是免費的。
第二個調用開始須要支付以太幣,合約之間的支付,具體多少取決於調用的數據源和證實類型。
須要Proof證實數據正確性:
oraclize_setProof(proofType_TLSNotary|proofStorage_IPFS)
第一個參數是證實類型,第二個是proof存儲的位置,如今惟一的是存儲在IPFS上。
不須要Proof證實:
oraclize_setProof(proofType_NONE)
oraclize_query函數至少須要兩個實參:數據源,輸入值(查詢條件)
相似這樣:
oraclize_query("URL","http:XX//id=XX");
若是第一個參數是字符串,那麼就認定是數據源。第二個參數就是查詢條件。
若是有三個參數,則是一個POST請求,那麼第三個參數就是POST請求的參數。
oraclize還能夠作預定查詢:
oraclize_query(60,"WolframAlpha",:"random number between 0 and 100")
上述代碼的參數是60,是一個整數,那麼接口默認是一個預定查詢的請求,預約60s之後執行查詢。上面的目的是調用WolframAlpha數據源查詢0到100的隨機數,這也是不少時間solidity隨機數不安全的解決方案之一。
調用oraclize的時候須要支付必定的費用,這個費用除了oraclize本身收取以外還用於回調的時候支付的gas。默認是200000gas。用戶能夠指定callback函數的gasLimit,可是若是用戶發送給oraclize的gas太高,那麼超過gasLimit的部分將會返回給oraclize。若是gas太低,可能永遠不會收到回調。
oraclize_query("WolfameAlpha","random betwwen 0 and 100",500000);
第三個參數若是是整數就表示gas費用,這個值不能小於默認的200000.
oraclize獲取數據之後會調用合約地址的下面三個方法中的一個:
1._callback(bytes32 myid,string result)「.」Myid都是一個獨特的ID。這個ID由oraclize_query方法返回。若是合約裏有多個oraclize_query調用,則將這用於匹配該結果的查詢。
2.若是須要TLSNortary的proof,則結果爲_callback(bytes32 myid,string result,bytes proof)
3.沒有其餘方法 調用 匿名函數 function()
oraclize還提供了一些利於解析頁面的工具,相似於一些爬蟲庫封裝的解析html頁面的簡單方法。
若是在實際查詢以前想知道查詢須要多少費用,可使用Oraclize.getPrice()函數獲取所需的wei的數量。第一個實參是數據源,第二個實參是可選項,即自定義gas。一個常見的使用示例是,當以太幣餘額不足以進行查詢時,通知客戶端向合約添加以太幣
爲了知足一些場景:好比用戶不想暴露本身的查詢地址,參數等信息。Oraclize提供了一個加密查詢的方法。用python寫的:https://github.com/Oraclize/encrypted-queries。只有客戶端能解密。
這就是oraclize理論的介紹。