任何區塊鏈上的智能合約都可以通過集成Chainlink預言機連接至任何API。 Chainlink是以太坊預言機,它將solidity智能合約連接至鏈下API和數據,並推動應用量呈現爆發式增長。 Chainlink是領先的價格參考數據提供商,目前保障價值超過10億美元的DeFi應用。雖然Chainlink預言機為眾多受人熟知和喜愛的DeFi平台提供了重要價值,但光憑它的一己之力還是無法實現智能合約的顛覆創新。

Chainlink擁有一個非常宏大的目標,那就是成為智能合約標準化的數據中間件,充分釋放智能合約的潛力,並在現實世界中產生真正的價值。為了實現這個目標,Chainlink為Solidity和其他區塊鏈開發者提供了開發框架,讓他們能與所有鏈下API交互,本文將詳細闡述操作細節,並教大家如何在以太坊主網上進行部署。首先第一個概念就是適配器:所有Chainlink節點都可以接入適配器以保證數據兼容。所有開發者都可以通過這些適配器建立數據請求的標準接口,而節點運營商也可以建立數據傳輸標準。這些適配器的功能包括HTTP GET、HTTP POST、Compare和Copy等。適配器能夠將dApp連接至鏈下數據。

以下是HttpGet適配器的參數:

get:包含URL的字符串,用來發起一個GET請求headers:是一個鍵值對,鍵是字符串類型,值是包含一系列字符串的數組。 queryParams:是字符串或字符串數組,代表了URL的請求參數。 extPath:是斜線分割的字符串或字符串數組,附加在job的URL上。

如果要將適配器接入智能合約,就需要引入另一個概念,那就是數據請求。繼承ChainlinkClient的所有智能合約都可以創建Chainlink.Request結構,允許開發者向Chainlink節點發起一個數據請求。要提交數據請求需要填寫一些基本的字段,比如你想要使用的預言機節點地址、job ID以及協商的費用。除了這些默認字段以外,還必須用以下方式在數據請求結構中添加理想的適配器參數:

// Set the URL to perform the GET request onrequest.add("get", "https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD");

這樣一來,數據請求的靈活性就會非常高,而且可以適應各種不同的場景,包括獲得、發布以及處理任何API,因為數據請求中可以包含任何功能的適配器。若想了解如何創建數據請求以及在ChainlinkClient合約中發送請求和收到回复所需的功能,請查看我們完整的HTTP GET數據請求示例。

對於某些常見的請求來說,節點運營商可能已經配置了預言機任務,在這種情況下請求數據就變得簡單了許多。你無需創建一個附帶適配器的數據請求結構,只需創建默認數據請求格式即可。你也無需再創建其他適配器參數,你選擇的預言機基於創建數據請求結構時生成的JobID就能判斷如何進行響應。

下方是CoinGecko API consumer接口的完整示例:

Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this),this.fulfillEthereumPrice.selector);sendChainlinkRequestTo(oracle, req, fee);

可以用Chainlink Market搜尋現有節點以及節點支持的任務,並最終找到你需要的job ID。然而,一旦出現一些特別複雜的智能合約應用場景,超出了適配器的默認功能範圍,那該怎麼處理呢?比如說你可能需要對API數據進行一些高級的處理,這種情況下該怎麼辦?也許你不想將原始API數據傳輸至智能合約中,而是先對多個數據點進行統計分析然後再產生元數據。你可以使用默認適配器在鏈上處理數據,但同時你也希望能夠降低gas成本。也許你只是不希望在鏈上發起需要身份認證的數據請求,因為你不想將身份認證信息放到區塊鏈上或預言機的任務描述中。這種情況下就需要使用外部適配器。

外部適配器的宗旨是“無論你想要連接什麼樣的數據,我都能幫你搞定”。外部適配器是與Chainlink節點共存的鏈下代碼,代碼可以用任何一種編程語言編寫,可以執行任何你可以想到的功能,唯一需要滿足的條件就是數據輸入和輸出能匹配適配器的JSON格式。外部適配器是連接Chainlink節點和外部數據的橋樑,通知節點運營商如何請求數據並收到JSON數據響應,以供在鏈上使用。

通過外部適配器約定鏈下交互參數,將創造出各種新的應用潛力:你可以將API身份認證信息以任何方式儲存在鏈下,數據可以用任何方式進行處理,你可以用任何編程語言編寫代碼,所有這些操作都不用消耗gas。從某種程度上來說,外部適配器就像是一個layer2預言機,將鏈下數據以快速和低成本的方式打包成簡潔的JSON格式,由Chainlink節點傳輸到鏈上,並得到驗證。外部適配器極大豐富了Chainlink預言機中間件的功能性。智能合約開發者可以靈活配置適配器,也可以從Chainlink Market中挑選適配器。如果你是一名智能合約開發者,並希望創建外部適配器,你只需要確定JSON格式的數據請求和響應數據即可。只要確定了這兩種格式,開發者就可以依照具體需求任意創建和處理數據。節點運營商如果要支持外部適配器並處理額外的數據請求,就必須在節點UI中為其建立“橋樑”進行連接,並在任務中加入適配器的橋接名稱。

{"initiators":[{ "type":"runLog" }],"tasks":[{ "type":"randomNumber" },{ "type":"copy","params":{"copyPath": ["details", "current"]}},{ "type":"multiply","params":{"times":100 }},{ "type":"ethuint256" },{ "type":" ethtx" }]}

Chainlink致力於為區塊鍊和智能合約開發者提供工具,完美地將智能合約連接至鏈下數據。 Chainlink既可以通過默認適配器也可以通過外部適配器直接調用任何API,開發者可以使用任何所需的數據靈活進行創建。如果你是一名智能合約開發者,並希望將智能合約連接至外部數據;抑或你只是想了解更多關於Chainlink 的信息,請查看下方列出的資源。