--- tags: it 鐵人賽 30 天, Web 3, ethereum --- # 從以太坊白皮書理解 web 3 概念 - Day6 ## Ethereum: Smart Contract 與 Dapp 今天要來介紹 Ethereum 中的主角 Smart Contract。 Ethereum 主要的出現就是為了能夠在 EVM 執行 Smart Contract 來強化區塊鏈能力。 Dapp 指的是 Decentrailized Application , 去中心化的應用程式也是常常會被提到的一個概念。相對於一般的應用程式具有一個中心化的資料存儲,Dapp 的資料狀態是存儲在分散式的共識網路,類似於區塊鏈這樣的資料保存機制。 ## 什麼是 Smart Contract ? [Smart Contract](https://zh.wikipedia.org/zh-tw/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6) 雖然可以翻譯做智能合約, 但其實一點不智能且也不適合約。 [Smart Contract](https://zh.wikipedia.org/zh-tw/%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6) 本質上是一個可以在 EVM 上執行的腳本,使用 Solidity 作為撰寫的語言。 具體來說,可以當作是一台數位化販賣機。當撰寫好腳本,如同設計好販賣規則。遇到對應的事件,就會自動觸發要執行的邏輯。然而,當販賣機設定完,你就無法去更改販售規則。要更改規則只能重新建立一台不同規則的販賣機。 ## Smart Contract 特性 ### 自動執行 Smart Contract 發佈到鏈上後。EVM 在接收到呼叫 Smart Contract 的 Message 時,會自動去找到對應的 Smart Contract 邏輯執行。 有點類似 AWS 中的 lambda 可以在收到註冊事件時,自動去執行註冊好的邏輯。 ### 執行碼可以公開檢視 Smart Contract 由 EOA 建立後,會把 Contract 內容發佈到鏈上。會產生該 Contract 的 [ABI(Application Binary Interface)](https://en.wikipedia.org/wiki/Application_binary_interface)來當作對應接口。 其他 EOA 或是 Smart Contract 都可以透過[ABI(Application Binary Interface)](https://en.wikipedia.org/wiki/Application_binary_interface)來對 Smart Contract 傳訊息。 ### 執行結果可預測 Smart Contract 腳本會發佈到鏈上,且其無法隨意做修改。且撰寫是由具備俱備[圖靈完備性](https://en.wikipedia.org/wiki/Turing_completeness)的語言所撰寫。所以其執行結果可以從輸入來做預測。 ### 透過 Oracle 機制來取得外部資料 Smart Contract 因為只能執行寫在腳本的內容,所以當需要創造一個隨著真實界資料而變動結果的合約,會需要一個可以統合外部資料的機制。這個機制就是所謂 Ethereum Oracle ,允許引入一些外部資料提供者到 Contract 內。來做一些更彈性的應用,比如根據天氣狀況來開分配獎金。 ## Oracle 問題 基本上可以看出,當引入外部中心化的資料來源後。 Smart Contract 就有可能被引入資料供應者所影響,而不再去中心化。 ## 解決 Oracle 問題的方法: 引入去中心化的 Oracle [chainLink](https://chain.link/)提出了一個去中心化oracle網路,來解決上述問題。 ## 參考文獻 [https://ethereum.org/en/smart-contracts/](https://ethereum.org/en/smart-contracts/) [https://www.youtube.com/watch?v=ZJfkNzyO7-U](https://www.youtube.com/watch?v=ZJfkNzyO7-U) [chainLink](https://chain.link/)