﻿---
title: "智慧合約"
description: "了解智慧合約是什麼、區塊鏈節點如何執行它、外部資料與升級權限如何進入系統，以及互動前應核驗哪些事項。"
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 智慧合約

> 僅供教育用途，不構成投資建議。智慧合約交易可能造成不可逆的損失。

<a id="answer"></a>

## 直接答案

智慧合約是部署在區塊鏈或類似分散式執行網路上的程式。它包含程式碼，並且在許多平台上還包含持久狀態。交易或其他合約可以呼叫其函式；網路節點執行相同規則，並透過網路的驗證與共識流程接受由此產生的狀態變化。

「智慧」不表示程式能理解意圖，「合約」也不會自動使它成為具有法律強制力的協議。這個術語描述的是一種程式碼：它可以在執行環境所具備的能力與資料範圍內強制執行特定條件。

智慧合約可以：

- 按照程式設定的條件持有或轉移數位資產；
- 記錄和更新應用狀態；以及
- 與其他合約組合，建構交易所、借貸系統、遊戲、治理工具及其他鏈上應用。

它的可預測性只限於已實作的程式碼與輸入。合約即使完全按程式碼執行，也可能因缺陷、惡意設計、權限失陷或錯誤的外部資料而產生不希望出現的結果。

<a id="mechanism"></a>

## 運作原理

典型互動遵循以下步驟：

1. 開發者編寫並測試原始碼，在平台要求時進行編譯，再透過一筆交易部署生成的程式。
2. 部署為程式分配鏈上識別符或地址，並可能初始化其狀態和管理角色。
3. 使用者、應用或另一個合約傳送呼叫，其中包含函式選擇器、參數，有時還包含資產。
4. 每個驗證節點按照相同的虛擬機器與協議規則執行呼叫。如果必要條件不成立，呼叫可能回復，但交易費仍可能被收取。
5. 如果呼叫成功並被網路納入，產生的狀態變化與事件日誌就會成為區塊鏈紀錄的一部分。

執行的確定性只適用於約定執行環境內可用的資訊。合約無法自行從網際網路取得天氣、市場價格或銀行付款資訊。需要鏈外事實的應用會使用預言機、簽名訊息、橋或特權操作員，這會在合約程式碼之外增加新的信任與故障假設。

已部署的程式碼並不總是整個系統。有些合約不可變，而代理與治理模式可以把呼叫轉向新邏輯或修改參數。因此，使用者除了查看可見的應用介面，還要檢查升級金鑰、管理員權力、暫停控制、預言機設計和關聯的合約。

簽署互動前，請核驗：

- 透過獨立可信來源確認網路與完整合約地址；
- 解碼後的函式、參數、資產數量和接收方；
- 呼叫建立的代幣額度或操作員權限；
- 合約是否已驗證、可升級、已暫停或由特權帳戶控制；以及
- 在可行時，用小額測試涵蓋預期的進入與退出路徑。

<a id="example"></a>

## 範例

設想一個用於數位服務的託管合約。買方存入 1,000 USDC，合約記錄買方、賣方、金額和結算條件。如果買方確認交付，合約就把資金釋放給賣方。如果條件在 24 小時內沒有滿足，預設的退款路徑就會開放。

除非設計向合約提供相關事實，否則合約並不知道服務是否令人滿意。如果批准由買方金鑰發出，金鑰失陷就可能授權放款。如果由預言機或管理員決定結果，該方就成為信任模型的一部分。存取控制或代幣處理中的缺陷也可能破壞預期的託管規則。自動執行減少了部分人工處理，但不會免除對每項依賴的評估。

<a id="risks"></a>

## 風險與控制措施

- **程式碼缺陷：**重入、錯誤記帳、不安全的外部呼叫或邊界情況可能導致資產遺失或鎖定。優先選擇精簡且經過充分測試的設計，並檢查已部署程式碼，而不要只依賴審計標識。
- **權限與升級風險：**管理員可能暫停系統、替換邏輯、修改費用或轉移資產。檢查每個角色由誰控制、是否使用時間鎖或多簽，以及哪些內容可以改變。
- **預言機與整合風險：**正確的程式碼也可能根據過時、受操縱或單位換算錯誤的資料行動；代幣、橋或其他合約的故障還會透過組合性擴散。
- **交易與授權風險：**惡意介面可能展示錯誤的地址、函式、接收方或無限額度。解碼請求，並把權限限制在所需範圍。
- **經濟設計風險：**有效交易仍可能觸發清算、價格操縱、激勵失效或有限流動性擠兌。程式碼正確不等於經濟上有償付能力。
- **運作風險：**擁塞、鏈重組、排序器中斷或前端不可用，都可能在合約仍已部署時延誤操作。
- **不可逆性：**公鏈交易通常沒有拒付機制。如果資金透過錯誤函式傳送或進入惡意合約，可能無法追回。

審計只是關於特定程式碼版本和範圍的證據，並非保證。應核對已部署位元組碼或已驗證原始碼是否與受審版本一致，並確認後續升級、依賴或設定變化是否超出審計範圍。

<a id="misconceptions"></a>

## 常見誤解

- **「程式碼無需交易就會自動執行。」**大多數狀態變更函式需要交易或另一次鏈上呼叫；按時間觸發的操作可能還需要外部執行者。
- **「程式碼無法改變。」**不可變合約不能重寫自身已部署的位元組碼，但代理、治理和遷移設計可以改變使用者最終存取的邏輯。
- **「程式碼公開就安全。」**公開有助於審查，卻不能證明程式碼正確、管理者誠實或經濟設計穩健。
- **「審計保證安全。」**審查受到時間和範圍限制，可能遺漏缺陷，也可能不涵蓋運作與經濟風險。
- **「交易成功就表示預期操作已發生。」**成功只表示被呼叫程式碼沒有回復；使用者仍須檢查目標地址、解碼事件、資產變化和最終權限。

<a id="related"></a>

## 相關主題

- [以太坊](/zh-tw/crypto/ethereum/)
- [以太坊虛擬機](/zh-tw/crypto/evm/)
- [合約審計](/zh-tw/crypto/contract-audit/)
- [預言機](/zh-tw/crypto/oracle/)
- [代理合約](/zh-tw/crypto/proxy-contract/)

<a id="sources"></a>

## 來源

- [區塊鏈技術概述](https://doi.org/10.6028/NIST.IR.8202) - NIST（存取日期：2026-08-21）
- [智慧合約簡介](https://ethereum.org/developers/docs/smart-contracts/) - Ethereum.org（存取日期：2026-08-21）
- [安全注意事項](https://docs.soliditylang.org/en/latest/security-considerations.html) - Solidity documentation（存取日期：2026-08-21）

Source: https://wiki.fcontext.com/zh-tw/crypto/smart-contract/index.mdx
