---
# System prepended metadata

title: 從以太坊白皮書理解 web 3 概念 - Day6
tags: [' Web 3', it 鐵人賽 30 天, ' ethereum']

---

---
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/)