如何創(chuàng)建通用的區(qū)塊鏈智能合約
譯文【51CTO.com快譯】區(qū)塊鏈智能合約能夠通過集成去中心化的Oracle來訪問鏈外數(shù)據(jù)。用戶在深入研究如何使用它們之前,重要的是要了解區(qū)塊鏈智能合約在全局中的重要性以及為什么需要Oracle來訪問數(shù)據(jù)的原因。
如今,全球每天都在發(fā)生大量交易,并且它們通常受到協(xié)議或合同的約束。這可能是由供應商的服務條款、監(jiān)管框架或兩者的組合所驅動的。這些協(xié)議的參數(shù)并不總是明確或透明的,它們最終取決于組織以及它是否愿意按照事先商定的條款行事。
越來越多的合同正在實現(xiàn)數(shù)字化。區(qū)塊鏈技術的興起引入了智能合約,這是一種防止篡改、透明、公平的管理此類協(xié)議的系統(tǒng)。智能合約是由數(shù)學而不是組織來管理的。一旦合同生效,它們會自動執(zhí)行合同的參數(shù),為各方創(chuàng)造一個更加公平的結構。
智能合約的挑戰(zhàn)在于,它們通常依賴于將現(xiàn)實世界數(shù)據(jù)與區(qū)塊鏈(或數(shù)據(jù)從一個區(qū)塊鏈轉移到另一個區(qū)塊鏈)進行橋接的能力,以便智能合約能夠識別質量、評估可靠數(shù)據(jù)并觸發(fā)商定的結果滿足條件。而在以往這是一個過于復雜和困難的過程,限制了更廣泛的采用。
關于Chainlink
Chainlink是一個開源抽象層,它提供了一個框架,可以輕松地將區(qū)塊鏈與外部(或單獨的區(qū)塊鏈)API連接。你可以將Chainlink視為TCP/IP中傳輸層的等效區(qū)塊鏈,以確保數(shù)據(jù)可靠地傳入和傳出。Chainlink旨在成為智能合約的標準數(shù)據(jù)層,釋放其影響外部世界的真正能力,并將其轉變?yōu)榫哂型獠恳庾R的通用智能合約。
智能合約可以徹底改變業(yè)務中信任和自動化的處理方式,但是它們對區(qū)塊鏈事件應用范圍的限制嚴重限制了其潛力。開發(fā)人員希望與之交互的大部分內(nèi)容都存在于“真實世界”中,例如定價數(shù)據(jù)、航運條件、全球事件等,以創(chuàng)建通用智能合約。這些合約具有外部意識,因此可以在掌握世界數(shù)據(jù)的情況下處理廣泛而通用的工作,Chainlink網(wǎng)絡為Solidity和其他區(qū)塊鏈開發(fā)人員提供了一個用于構建分散式Oracle的框架。
可以使用這些Oracle在以太坊網(wǎng)站上實時檢索分散應用程序(dApp)的數(shù)據(jù)。
Chainlink適配器
適配器是每個Chainlink節(jié)點默認支持的數(shù)據(jù)操作功能。節(jié)點在這種情況下是分散的。它們滿足數(shù)據(jù)請求,而Chainlink網(wǎng)絡由數(shù)量不斷增長的節(jié)點組成。其節(jié)點由眾多獨立的運營商運營。通過適配器,所有開發(fā)人員都具有用于發(fā)出數(shù)據(jù)請求的標準接口,而節(jié)點操作人員將遵循用于處理該數(shù)據(jù)的標準。這些適配器包括HTTP GET、HTTP POST、比較,復制等功能。適配器是dApp與外部世界數(shù)據(jù)的連接。
例如,這是HttpGet適配器的參數(shù):
- Get:獲取包含API URL的字符串以向Get請求。
- headers:將包含鍵作為字符串,將值作為字符串數(shù)組的對象。
- queryParams:獲取URL的查詢參數(shù)的字符串或字符串數(shù)組。
- extPath:采用斜杠分隔的字符串或字符串數(shù)組,以附加到作業(yè)的URL。
Chainlink請求
為了使通用智能合約與這些適配器進行交互,需要其他功能。從Chainlink Client繼承的所有合同都可以創(chuàng)建Chainlink.Request結構,該結構允許開發(fā)人員向Chainlink分散的Oracle發(fā)出請求。該請求應根據(jù)要發(fā)出的請求將所需的適配器參數(shù)添加到結構中。提交這一請求需要一些基本字段,例如要用作Oracle的節(jié)點的地址、jobId和約定的費用。除了這些默認字段之外,還可以將所需的適配器參數(shù)添加到請求結構中:
//設置網(wǎng)址以在上執(zhí)行Get請求
- request.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD");
使用這個結構,其請求是靈活的,并且可以制定為適合各種情況的請求,這些情況涉及從任何API獲取、發(fā)布和操作數(shù)據(jù),因為請求可以包含任何適配器功能。使該系統(tǒng)去中心化的原因是Chainlink的Oracle網(wǎng)絡由許多這些節(jié)點組成,并且開發(fā)人員可以根據(jù)自己的需求自由選擇節(jié)點和數(shù)量。正如高可靠性dApp經(jīng)常需要的那樣,這可以通過多個來源實現(xiàn)冗余故障轉移和錯誤檢查。
有關構造請求以及在ChainlinkClient合同內(nèi)提交請求和接收響應所需的功能的更多信息,可以查看Chainlink的完整HTTP GET請求示例。
對于常見請求,節(jié)點操作人員可能已經(jīng)預先配置了現(xiàn)有的Oracle作業(yè),在這種情況下,其請求要簡單得多。而無需構建自定義請求結構并添加必要的適配器。無需其他適配器參數(shù),選擇的分散式預言集將基于創(chuàng)建請求結構時提供的jobId知道如何響應。
這一示例來自完整的CoinGecko Consumer API:
- Chainlink.Request memory req = build Chainlink Request(jobId, address(this),this. fulfill Ethereum Price.selector);send Chainlink Request To(oracle, req, fee);
可以使用分散的Oracle數(shù)據(jù)服務(例如Chainlink Market)搜索現(xiàn)有的Oracle及其支持的作業(yè)以找到所需的jobId。
外部適配器
但是如果智能合約有復雜的用例,而默認適配器功能未涵蓋這一用例,那么該怎么辦?如果需要執(zhí)行一些高級數(shù)據(jù)操作怎么辦?也許不是要提交到合同的原始數(shù)據(jù),而是由對多個數(shù)據(jù)點進行統(tǒng)計分析生成的元數(shù)據(jù)。也許可以使用默認適配器在鏈上操作數(shù)據(jù),但希望降低成本。也許由于使用憑據(jù)來源,不希望其API請求在鏈上,并且不想在鏈上或在Oracle作業(yè)規(guī)范中指定這些憑據(jù)。這是外部適配器發(fā)揮作用的地方。
由于外部適配器是與Chainlink Oracle節(jié)點脫鏈存在的代碼段,因此它們可以用選擇的任何語言編寫,并執(zhí)行人們可以想到的任何功能,只要數(shù)據(jù)輸入和輸出遵循適配器的JSON規(guī)范。外部適配器充當Chainlink分散式Oracle網(wǎng)絡與外部數(shù)據(jù)之間的接口,使節(jié)點操作員知道如何請求和接收JSON響應,然后在鏈上使用它們。
通過外部適配器在鏈外定義這一接口規(guī)范將帶來巨大的可能性:現(xiàn)在可以根據(jù)個人安全標準在鏈外存儲API憑據(jù),可以采用選擇的語言以任何方式對數(shù)據(jù)進行編程,所有這些無需使用任何以太坊費用來資助鏈上交易的情況。從某種意義上說,外部適配器就像去中心化Oracle的另一層一樣,以低成本、快速地將數(shù)據(jù)打包到區(qū)塊鏈外部,然后將其轉換為整潔的JSON格式,以由Chainlink oracle節(jié)點在鏈上進行驗證。
外部適配器是使Chainlink成為一個多功能的分散式Oracle網(wǎng)絡的重要部分。合同開發(fā)人員可以根據(jù)需要自由實施這些適配器,也可以從Chainlink市場上的現(xiàn)有適配器中進行選擇。如果是尋求創(chuàng)建外部適配器的智能合約開發(fā)人員,Chainlink只要求為數(shù)據(jù)請求和返回數(shù)據(jù)指定JSON接口。在這兩個接口之間,開發(fā)人員可以自由創(chuàng)建和操作數(shù)據(jù)以適應其用例。作為Oracle節(jié)點操作人員,要支持外部適配器并處理其他請求,必須在節(jié)點用戶界面中為其創(chuàng)建網(wǎng)橋,并將適配器的橋名稱添加到支持的任務中。
你可以在Chainlink構建外部適配器頁面上訪問創(chuàng)建外部適配器的完整示例。
Chainlink致力于為區(qū)塊鏈和智能合約開發(fā)人員提供工具,使他們可以根據(jù)實際需要,以真實數(shù)據(jù)來支持通用智能合約。
Chainlink致力于為區(qū)塊鏈和智能合約開發(fā)人員提供工具,使他們可以根據(jù)實際需要,以真實數(shù)據(jù)來支持通用智能合約。Chainlink的設計結合了通過默認適配器和可擴展外部適配器對任何API的直接調(diào)用,為開發(fā)人員提供了一個靈活的平臺,可以根據(jù)需要創(chuàng)建所需的任何數(shù)據(jù)。這為智能合約打開了一個真正的數(shù)據(jù)世界,并賦予新的用例。
使用Chainlink進行構建
如果是智能合約開發(fā)人員,希望通過外部數(shù)據(jù)增加智能合約的實用性,需要嘗試此Chainlink示例演練,以部署與鏈外數(shù)據(jù)進行交互的通用智能合約。
Chainlink是根據(jù)MIT許可證開放的源代碼,因此,如果要開發(fā)一款可以從Chainlink分散式預言中受益的產(chǎn)品,或者想?yún)f(xié)助開發(fā)Chainlink網(wǎng)絡,需要參考開發(fā)人員文檔或參加有關Discord的技術討論。還可以在Chainlink的網(wǎng)站、Twitter、Reddit、YouTube、Telegram和GitHub上了解更多信息。
原文標題:Create universal blockchain smart contracts,作者:Gage Mondok
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】