如果你的智慧合約需要接入任何鏈下價格資料,而不是某個預設的聚合資料,那麼Chainlink可以為你接入任何API。無論是體育比賽結果、天氣預報、航班時間或任何其他的資料,Chainlink可以將你的智慧合約接入任何所需的API介面,並將合約結果輸出到任何鏈下系統。現在有幾個已上線的智慧合約應用透過Chainlink接入任何所需的API,並實現了巨大價值,其中包括Arbol的農作物保險dApp。Arbol透過Chainlink獲取去中心化的天氣資料,推出了指數型天氣保險產品,保單基於條件引數(如某一地區在某一時間段的降雨量是否達到了設定值)自動理賠,過程中無任何人為干預。這不僅消除了中間成本,而且還避免了理賠糾紛。
這個資料請求和獲取功能是智慧合約與Chainlink去中心化節點網路互動的主要框架。你只需要擴充套件智慧合約庫,建立請求,並實現回撥函式獲得響應。Chainlink外部介面卡也可以為你的智慧合約接入任何所需的鏈下資料介面。
這個功能非常強大,可以為你的智慧合約解鎖無限可能,覆蓋任何資產並以任何方式與現實世界互動。我們之前發過一篇關於將智慧合約連線至任何API介面的文章,這篇文章教大家如何透過Chainlink輕鬆將智慧合約連線至鏈下資料.
Chainlink VRF
隨機數雖然看起來簡單,但實際上在去中心化網路中生成公正的隨機數並不容易。基於區塊雜湊值等鏈上資料生成隨機數並非理想的解決方案,因為資料可能會被礦工操控。舉個例子,一名礦工購買了彩票,而中獎彩票號碼是基於區塊雜湊值定的,那麼這名礦工就可以有選擇性地建立區塊,以操控最終中獎結果。我們推出了Chainlink VRF來解決上述問題,併為智慧合約提供安全可驗證的隨機數。
Chainlink VRF可以在鏈下生成隨機數,因此不存在鏈上隨機數的這些問題,並同時使用加密手段證明隨機數沒有被篡改。這項技術是去中心化隨機數領域的重大突破,開發者和使用者可以透過加密方式驗證隨機數在生成過程中沒有被篡改。這個功能將催生出許多創新的智慧合約應用。遊戲物品建立市場的價值高達幾十億美元,並正在擴充套件至區塊鏈遊戲領域。有了VRF,遊戲中就可以基於真實可驗證的隨機數建立NFT獎勵。具體操作方法是:請求合約先將種子值(seed value)輸入Chainlink預言機。接著,預言機使用種子及其秘鑰生成隨機值,並與加密證明一起傳送至VRF驗證合約。由於VRF合約知道預言機公鑰,而且公鑰對應的是私鑰以及種子值,因此可以驗證加密證明。如果有節點的資料被操控,證明就無法與VRF合約的計算結果匹配,因此會被拒收。VRF合約對上報的隨機數進行驗證,這與用MD5值快速驗證下載檔案內容類似,但不同的是,VRF合約用的不是簡單的雜湊值,而是非對稱金鑰對和加密證明。那麼區塊鏈開發者應如何使用這個強大的新功能呢?其實這個功能和我們的聚合價格資料一樣,非常容易整合。下面的示例程式碼是合約接入VRF資料的標準模板。
pragma solidity 0.6.6;
import “@chainlink/contracts/src/v0.6/VRFConsumerBase.sol”;
contract RandomNumberConsumer is VRFConsumerBase {
bytes32 internal keyHash;
uint256 internal fee;
uint256 public randomResult;
constructor()
VRFConsumerBase(
0x2e184F4120eFc6BF4943E3822FA0e5c3829e2fbD, // VRF Coordinator
0x20fE562d797A42Dcb3399062AE9546cd06f63280 // LINK Token
) public
{
keyHash = 0x757844cd6652a5805e9adb8203134e10a26ef59f62b864ed6a8c054733a1dcb0;
fee = 0.1 * 10 ** 18; // 0.1 LINK
}
/**
* Requests randomness from a user-provided seed
*/
function getRandomNumber(uint256 userProvidedSeed) public returns (bytes32 requestId) {
require(LINK.balanceOf(address(this)) > fee, "Not enough LINK - fill contract with faucet");
return requestRandomness(keyHash, fee, userProvidedSeed);
}
/**
你只需要匯入VRF,用VRF合約地址和秘鑰雜湊值構建智慧合約,然後再呼叫兩個函式:getRandomNumber(傳送客戶端生成的uint256種子)和fulfillRandomness(這是VRF合約使用的回撥函式,用來返回驗證過的隨機值),然後就搞定了!只需要一次匯入、一個建構函式和兩個函式,就可以在智慧合約中新增可驗證的隨機數了。
希望本文能幫助大家更深入地瞭解Chainlink的功能和作用。無論是安全的DeFi價格資料、觸發合約的API介面還是輸入到遊戲中的可驗證隨機數,Chainlink通通可以幫你實現!
立刻開始用Chainlink開發智慧合約
如果這篇文章對你有任何啟發,歡迎參加Chainlink駭客松嘗試應用你學到的新技能!這次駭客松的獎金超過4萬美元,歡迎大家踴躍報名參加!
如果當你讀到這篇文章時駭客松已經結束了,那麼也歡迎加入我們在推特、YouTube、Discord或Reddit上的社羣,轉發加上#chainlink和#ChainlinkEA標籤。
如果Chainlink預言機可以為你目前開發的產品提供任何附加價值;抑或你希望參與Chainlink網路的開源開發工作,請檢視Chainlink開發者文件或加入我們在Discord上的技術討論群。