硬核丨怎樣將智慧合約和API連線在一起?

買賣虛擬貨幣

任何區塊鏈上的智慧合約都可以透過整合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 的資訊,請檢視下方列出的資源。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;