# 智能合約

> **最後更新：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](/zhi-neng-he-yue-de-shi-jie/smart-contract/solidity.md)

#### 相關條目

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.0x1.academy/zhi-neng-he-yue-de-shi-jie/smart-contract.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
