上一篇有實作了一種透過「改變鏈上資訊」使 NFT 的 URI 改變的作法,但是這種方式就會被侷限在鏈上使用,玩法就變得非常的少了,大概只能透過呼叫函式或者使用鏈上的資訊,像是 tokenOwner
的轉移、block.timestamp
的改變來設計合約機制。而若是我們想要透過鏈外的資料來改變 NFT 時,就會受限於智能合約的封閉性了。因此,有一種被稱為 「Oracle」 的機制可以解決這個問題!下面就讓我來簡單介紹一下 Oracle 吧!
首先,blockchain oracle 在 Chainlink 上面的定義是:
A entity/ Entities that connect blockchains to EXTERNAL systems, there by enabling SMART CONTRACTS to execute based upon inputs and outputs from the real world. Sited from chainlink
Oracle 的中文被翻成神諭(在區塊鏈的世界則多叫預言機),通常由牧師、或是女巫來擔任這個職位,而他們的工作就是負責傳達他們的神想要傳遞給信徒的資訊。
那這個詞與區塊鏈又有什麼關係呢,暫且聽我娓娓道來。一般來說,區塊鏈是一個封閉的系統,我們可以把他想像成沒有連接網際網路的單機遊戲(像是紅黃綠版神奇寶貝)。
基本上區塊鏈只會得知在鏈上的資料,對於真實世界的所有資訊,像是現在的美國總統是誰或是美元換以太幣的資訊卻一無所知。
就像黃版神奇寶貝需要透過傳輸線才可以跟其他也有玩同款遊戲的人交換 Poke'mon,區塊鏈則需要透過 Oracle 來與外面的世界交換資訊,也就是「將外部的資訊傳入合約中執行」。
Sited from Chainlink
智能合約只要部屬在鏈上後就無法再做更改,它需要設定某些特定條件,並當條件滿足時來觸發,如下:
if (block.timestamp % 2 == 0){
statement;
}
倘若今天是以外界的訊息作為條件的話,就需要透過 Oracle 來提供現實世界中的 data。
uint ETHtoUSD = DataFromORACLE(ETHtoUSD); // 透過 Oracle 取得真實世界的資訊
if (ETHtoUSD <= 1000){
statement;
// "趕快抄底!(誤)";
}
在理解 Oracle 的實際運作方式前,可以先看看一個使用 Oracle 的產品 -- Compound
Compound 是一個去中心化的借貸平台,提供了許多 ERC20 代幣的借貸或是放貸的功能。這個平台更意象的來說就像是一個「加密貨幣的當鋪」,需要借貸的人可以透過這個平台來借款,而需要放貸的人可以透過存入代幣來獲取利息。
Compound 利用智能合約達成不同代幣的匯率轉換,但是這個匯率若是與真實世界不同時便會造成諸多不便,因此 Compound 利用了 Oracle 來獲得即時的幣價來更新抵押率。
實際去看 Compound 的白皮書中,可以看到在 Price feed 中闡述了 Price Oracle 的應用方式,但是它並沒有提到更深入的內容,例如它的機制以及是透過哪種方式來取得匯率的。
Sited from Chainlink Whitepaper v1
一個理想的 Oracle 關係,有一個製作好的 ORACLE 的 Smart contract,一個鏈外資料的來源,一個 User 使用的 Smart contract。
當 USER-SC 想要與 ORACLE-SC 取得某項資料的時候,會進行三個 method。
其實有一個明顯的問題存在於上方的關係中,那就是 Src 的資料可信度。
在 Compound 的例子中並沒有提到 Oracle 的資料來源為何,是從交易所抓下來的呢?或是他們手動更改的呢?
這種透過中心化控管的 Oracle 會為消費者帶來一定程度的風險,且這種不透明的資料管理似乎也違背了去中心化的意義,項目方仍可以透過這一個小小的漏洞來獲取利益,而消費者只能因為資訊的不對等而吃上悶虧。
在 NBA TOP SHOT 中引用了 chainlink 中 oracle 的技術(有興趣的可以參考這一篇文章),其中的功能有非常多,例如:
上圖只是個例子,左邊是在現實世界中球員在球賽中取得的成績,可以透過 chainlink 所提供的 oracle 與在鏈上 NFT 互動,使原本封閉的環境出現了一個與外界互動的管道。
上述的 dynamic NFT 中的一切變化都得依賴 Decentralized Oracle Network (DON) 來運作。但是什麼是 DON?
由於在 off-chain 上的資料來源可以有非常多種,但是你必須要驗證過資料的真實性才能被當作正確的資料來看待。DON 提供了一種像是 data 彙整的功能,除了可以將資料標準化,也提供了一定的安全性。透過此種 off-chain 資料去中心化的方式,達到 dNFT 的自動變化 (automation),不受人為控制而是透過原本寫好的規則運作。
Sited from Chainlink Whitepaper v2
在 DON 上的節點(Node),可以抓取在一些他人架在伺服器上的資料(Web server),並透過智能合約與區塊鏈互動。
而 DON 去中心化的運作原理與 IPFS 類似(見 DAY6),這些節點會將他們獲取到的資料與別的節點分享,也會得到其他的節點分享來的資料。
每個節點在與區塊鏈互動的部分被稱為「區塊鏈接口 (Core)」,而拿來 fetch 外部資料的部分則稱為「外部接口 (Adapter)」。
Chainlink 上的 Oracle 則是按照上圖的 1 到 7 步驟來獲取外部資料。
Chainlink 在他們的 Oracle 中加入了比特幣元素 -- 獎勵機制。
要成為一個在 DON 運行的節點,必須先質押一些 LINK ( Chainlink 發行的代幣 -- LINK ),使用者想要利用 Oracle 來獲取鏈外資料時,就必須付出相對應的 LINK,而這些 LINK 就會拿到當成「提供正確資訊的節點的獎勵」,而那些提供不實或是奇怪資訊的節點則會被扣除原本抵押的 LINK 為懲罰。
透過這種獎懲方式,讓這個去中心化的 Oracle 可以提供正確且系統化的資訊給用戶端,為區塊鏈建立了與真實世界的連接。
這一篇介紹了 Oracle 的應用、例子、以及中心化的 Oracle 有何種缺點,並介紹了 Chainlink 建構的去中心化 Oracle。雖然了解了這些 Oracle 是怎麼運行的,但似乎需要在 USER 端真正的使用才會看到這個東西的價值,因此明天會來介紹如何實作 Chainlink 的 Oracle!
若有文章內有任何錯誤的地方歡迎指點與討論!非常感謝!
歡迎贊助窮困潦倒大學生
0xd8538ea74825080c0c80B9B175f57e91Ff885Cb4