# 智能合約

> **最後更新：2026 年 1 月**

## 智能合約是在區塊鏈上自動執行的程式碼——當條件滿足時，它會自動執行，不需要中間人，也沒有人能阻止它。這是區塊鏈從「數位貨幣」進化到「可程式化金融」的關鍵。

想像一台自動販賣機。

你投入硬幣，按下按鈕，飲料就會掉出來。

不需要店員。

不需要談判。

不需要信任對方會遵守承諾。

**規則寫在機器裡，機器自動執行。**

智能合約就是區塊鏈上的自動販賣機——只不過它可以處理的不只是飲料，而是任何可以用程式碼表達的協議。

### 智能合約的特性

| 特性       | 說明             | 影響                |
| -------- | -------------- | ----------------- |
| **自動執行** | 條件滿足就執行，無需人工介入 | 不需要信任對方           |
| **不可竄改** | 一旦部署就無法修改      | 安全但也有風險（Bug 也無法修） |
| **透明公開** | 程式碼公開，任何人可驗證   | 可以審計，但攻擊者也看得到     |
| **去中心化** | 運行在區塊鏈上，沒有單點故障 | 審查抵抗              |

### 智能合約如何運作？

```
傳統合約流程：
1. 甲乙雙方談判
2. 簽署紙本合約
3. 一方違約
4. 另一方提告
5. 法院判決
6. 強制執行
→ 過程：數週到數年

智能合約流程：
1. 程式碼定義規則
2. 部署到區塊鏈
3. 觸發條件
4. 自動執行
→ 過程：幾秒到幾分鐘
```

**關鍵差異**：傳統合約靠法律執行，智能合約靠程式碼執行。

這就是為什麼有人說：**「Code is Law」（程式碼即法律）**。

### 智能合約能做什麼？

| 應用      | 例子            | 傳統對應  |
| ------- | ------------- | ----- |
| 代幣發行    | ERC-20 代幣     | 股票、點數 |
| NFT     | 數位藝術品、PFP     | 所有權證明 |
| DeFi 借貸 | Aave、Compound | 銀行貸款  |
| 去中心化交易所 | Uniswap、Curve | 股票交易所 |
| 保險      | Nexus Mutual  | 保險公司  |
| 治理      | DAO 投票        | 股東會議  |
| 遊戲      | 鏈遊資產          | 遊戲道具  |

### 主流智能合約平台

| 平台                | 程式語言           | 特點          |
| ----------------- | -------------- | ----------- |
| 以太坊               | Solidity、Vyper | 最大生態系、最多開發者 |
| Solana            | Rust           | 高性能、低手續費    |
| BNB Chain         | Solidity       | 與以太坊相容、較中心化 |
| Arbitrum/Optimism | Solidity       | 以太坊 Layer 2 |
| Avalanche         | Solidity       | 快速、EVM 相容   |

{% hint style="info" %}
比特幣也有「腳本」功能，但它故意設計得很簡單，不是圖靈完備的。以太坊的突破在於創造了「圖靈完備」的智能合約——理論上可以執行任何運算。
{% endhint %}

### Solidity：智能合約的主流語言

大多數智能合約用 **Solidity** 撰寫。

```solidity
// 一個簡單的代幣合約範例
pragma solidity ^0.8.0;

contract SimpleToken {
    mapping(address => uint256) public balances;

    // 鑄造代幣
    function mint(address to, uint256 amount) public {
        balances[to] += amount;
    }

    // 轉帳
    function transfer(address to, uint256 amount) public {
        require(balances[msg.sender] >= amount, "餘額不足");
        balances[msg.sender] -= amount;
        balances[to] += amount;
    }
}
```

**Solidity 的特點**：

* 語法類似 JavaScript
* 專為區塊鏈設計
* 有完整的開發工具和文件
* 也有學習曲線和安全陷阱

### Gas：智能合約的「燃料」

在以太坊上，每個操作都需要「Gas」。

| 操作         | Gas 消耗            |
| ---------- | ----------------- |
| 簡單轉帳       | 21,000            |
| 代幣轉帳       | 約 65,000          |
| DEX 交換     | 約 150,000-300,000 |
| 複雜 DeFi 操作 | 可能超過 500,000      |

**Gas = 你願意為每單位計算付多少錢**

```
交易成本 = Gas 使用量 × Gas 價格

例如：
150,000 Gas × 30 Gwei = 0.0045 ETH ≈ $15
```

{% hint style="warning" %}
網路擁堵時，Gas 價格會飆升。2021 年 NFT 熱潮時，一筆簡單交易可能要 $100-$500 的 Gas 費。這是以太坊擴容成為急迫議題的原因之一。
{% endhint %}

### 智能合約的風險

智能合約最大的風險是：**Bug 無法修復**。

傳統軟體有 Bug？更新版本就好。

智能合約有 Bug？幾百萬美元可能就沒了。

**常見漏洞：**

| 漏洞類型 | 說明           | 著名案例                 |
| ---- | ------------ | -------------------- |
| 重入攻擊 | 在狀態更新前重複調用   | The DAO（6000 萬美元）    |
| 整數溢出 | 數字超出範圍導致異常   | 多起 ERC-20 漏洞         |
| 權限漏洞 | 敏感函數沒有限制調用者  | Parity 錢包（1.5 億美元凍結） |
| 價格操縱 | 利用閃電貸操縱預言機價格 | 多起 DeFi 攻擊           |

### 如何寫安全的智能合約？

1. **使用經過驗證的程式庫**
   * OpenZeppelin 提供標準化的安全模組
   * 不要重新發明輪子
2. **審計**
   * 找專業公司審計程式碼
   * 但審計通過不代表 100% 安全
3. **漸進式部署**
   * 先在測試網測試
   * 小額資金上線
   * 逐步增加
4. **設計安全機制**
   * 緊急暫停功能
   * 多重簽名管理
   * 時間鎖

### 可升級合約

既然智能合約不可修改，怎麼修 Bug？

**解決方案**：代理模式（Proxy Pattern）

```
用戶 → 代理合約 → 實際邏輯合約
            ↓
        可以更換指向新版本
```

**但這有取捨**：

* ✅ 可以修復 Bug
* ✅ 可以增加功能
* ❌ 犧牲了「不可竄改」的承諾
* ❌ 管理員可能濫用權力

{% hint style="info" %}
很多「去中心化」協議其實有可升級的合約，這意味著團隊仍有很大的控制權。在投資前，了解合約是否可升級、誰有升級權限，是重要的 DYOR 項目。
{% endhint %}

### ERC 標準

以太坊社群制定了各種「標準」，讓合約可以互通：

| 標準       | 用途          | 例子              |
| -------- | ----------- | --------------- |
| ERC-20   | 同質化代幣       | USDT、LINK、UNI   |
| ERC-721  | NFT（非同質化代幣） | 無聊猿、CryptoPunks |
| ERC-1155 | 多代幣標準       | 遊戲道具            |
| ERC-4626 | 代幣化金庫       | DeFi 收益聚合器      |

**標準的好處**：

* 錢包自動識別你的代幣
* 可以在 DEX 交易
* 可以在 DeFi 協議中使用
* 減少重複開發

### 智能合約的未來

| 趨勢      | 說明            |
| ------- | ------------- |
| Layer 2 | 把計算搬到 L2，降低成本 |
| 帳戶抽象    | 讓智能合約錢包更好用    |
| 形式化驗證   | 用數學證明合約正確     |
| AI 輔助審計 | 用 AI 找漏洞      |
| 跨鏈合約    | 一個合約，多條鏈執行    |

### 對一般用戶的建議

你不需要會寫智能合約，但你應該：

1. **了解授權風險**
   * 每次「Approve」都在授權合約動用你的代幣
   * 定期用 [Revoke.cash](https://revoke.cash) 檢查和撤銷授權
2. **檢查合約是否審計**
   * 主流協議通常有多份審計報告
   * 沒有審計的協議風險更高
3. **注意可升級性**
   * 誰有權升級？
   * 有沒有時間鎖？
4. **小額測試**
   * 第一次使用新協議時，用小額資金測試

{% hint style="success" %}
智能合約是區塊鏈從「數位黃金」進化到「可程式化金融」的關鍵創新。它讓「信任」從依賴人變成依賴程式碼。但程式碼也會有 Bug，所以「Code is Law」既是力量，也是風險。理解這一點，才能安全地使用這個強大的工具。
{% endhint %}

***

#### 本章節目錄

* [Solidity](https://www.0x1.academy/zhi-neng-he-yue-de-shi-jie/smart-contract/solidity)

#### 相關條目

* [以太坊](https://github.com/dAAAb/Blockpedia/blob/master/ethereum/README.md)
* [DeFi](https://www.0x1.academy/kai-fang-shi-jin-rong-xin-shi-jie/defi)
* [區塊鏈安全](https://www.0x1.academy/ren-shi-feng-xian-bao-hu-zi-chan/blockchain-security)
* [ERC-20](https://github.com/dAAAb/Blockpedia/blob/master/token/erc-20.md)
