智慧型合約簡介
頁面最後更新時間: 2026年2月25日
智慧型合約是什麼? 什麼是智能合約?
「智慧型合約」就是在以太坊區塊鏈上執行的程式。 這是一系列存在於以太坊區塊鏈特定地址的程式碼(函數)及資料(狀態)。
智能合約是以太坊帳戶的一種類型。 這表示智慧型合約有餘額且能作為交易目標。 然而,智慧型合約不受使用者控制,而是部署至網路,並按程式編寫方式執行。 使用者帳戶能藉由傳送交易,執行智慧型合約定義的函數,來與智慧型合約互動。 智慧型合約能定義規則,就像一般合約一樣,且完全透過程式碼自動執行。 預設情況下,智慧型合約無法刪除,且與其互動的結果無法逆轉。
先決條件
如果你剛入門,或是在尋找技術性較低的介紹,我們推薦你閱讀我們的智能合約簡介。
在進入智能合約的世界前,請確保你已閱讀過帳戶、交易和以太坊虛擬機的相關說明。
數位自動販賣機
智能合約最好的比喻或許是自動販賣機,這個概念由 Nick Szaboopens in a new tab 提出。 只要輸入正確,就保證能得到特定的輸出結果。
要從販賣機取得一包點心:
1錢 + 點心選擇 = 點心分發這種邏輯會編寫進販賣機中。
而智慧型合約就像販賣機,其中編寫了邏輯。 以下是若使用 Solidity 編寫智慧型合約,這種販賣機運作方式的簡要範例:
1pragma solidity 0.8.7;23contract VendingMachine {45 // 宣告合約的狀態變數6 address public owner;7 mapping (address => uint) public cupcakeBalances;89 // 部署「VendingMachine」合約時:10 // 1. 將部署地址設為合約擁有者11 // 2. 將部署的智能合約的杯子蛋糕餘額設為 10012 constructor() {13 owner = msg.sender;14 cupcakeBalances[address(this)] = 100;15 }1617 // 允許擁有者增加智能合約的杯子蛋糕餘額18 function refill(uint amount) public {19 require(msg.sender == owner, "只有擁有者能補充。");20 cupcakeBalances[address(this)] += amount;21 }2223 // 允許任何人購買杯子蛋糕24 function purchase(uint amount) public payable {25 require(msg.value >= amount * 1 ether, "每個杯子蛋糕至少需支付 1 ETH");26 require(cupcakeBalances[address(this)] >= amount, "庫存杯子蛋糕不足,無法完成此次購買");27 cupcakeBalances[address(this)] -= amount;28 cupcakeBalances[msg.sender] += amount;29 }30}顯示全部如同自動販賣機消除了我們對販賣員工的需求,智慧型合約也可取代許多產業的中間媒介。
無需許可
任何人都能編寫智慧型合約並部署於區塊鏈網路。 你只需要學習如何使用智能合約語言撰寫程式碼,並擁有足夠的 ETH 來部署你的合約。 部署智能合約基本上是一種交易,所以你需要支付 Gas,就像支付簡單的 ETH 轉帳一樣。 然而,部署合約的燃料成本卻遠高於此。
以太坊具備方便開發者編寫智慧型合約的程式語言:
- Solidity
- Vyper
然而,在部署合約前需要先編譯,讓以太坊的虛擬機可以解譯並儲存合約。 更多關於編譯的資訊
可組合性
智慧型合約在以太坊上公開,類似於傳統網路世界中的 Open API。 這表示你可以在自己的智慧型合約中,調用其他智慧型合約,以大幅拓展可能性。 合約甚至能部署其他合約。
進一步了解智能合約可組合性。
限制
智能合約本身無法取得「真實世界」事件的資訊,因為這些合約無法擷取鏈下來源中的資料。 這表示智慧型合約不會針對真實世界的事件做出反應。 這是刻意設計。 過度依賴外部資訊可能會破壞共識機制,而共識對安全性與去中心化至關重要。
然而,區塊鏈應用程式最好能使用鏈下資料。 解決方案是使用預言機,這是一種可以擷取鏈外資料並提供給智能合約使用的工具。
智慧型合約的另一個限制為合約大小的上限。 智慧型合約必須小於 24KB,不然燃料不足。 這個問題可以透過使用鑽石模式 (The Diamond Pattern)opens in a new tab 來解決。
多簽合約
多簽(多重簽章)合約是需要多個有效簽章,才能執行交易的智慧型合約帳戶。 這能有效預防持有大量以太幣或代幣的合約發生單點失效。 多簽合約也能將執行合約與金鑰管理的責任分散給多方,避免遺失單一私密金鑰造成資金無法回復的損失。 基於上述理由,多簽合約可用於簡單的去中心化組織管理體系。 多簽需要從 M 個可接受的簽章中取得 N 個簽章(其中 N ≤ M,且 M > 1)才能執行。 常用的組合是 N = 3, M = 5 和 N = 4, M = 7。 4/7 的多簽需要在七個可能的有效簽章中取得四個簽章。 這表示即便遺失三個簽章,仍可取回資金。 在這種情況下,這也表示大多數金鑰持有者必須同意並簽署,才能執行合約。
智能合約資源
OpenZeppelin Contracts - 用於安全智能合約開發的函式庫。