跳至主要内容
Change page

智慧型合約簡介

頁面最後更新時間: 2026年2月25日

智慧型合約是什麼? 什麼是智能合約?

「智慧型合約」就是在以太坊區塊鏈上執行的程式。 這是一系列存在於以太坊區塊鏈特定地址的程式碼(函數)及資料(狀態)。

智能合約是以太坊帳戶的一種類型。 這表示智慧型合約有餘額且能作為交易目標。 然而,智慧型合約不受使用者控制,而是部署至網路,並按程式編寫方式執行。 使用者帳戶能藉由傳送交易,執行智慧型合約定義的函數,來與智慧型合約互動。 智慧型合約能定義規則,就像一般合約一樣,且完全透過程式碼自動執行。 預設情況下,智慧型合約無法刪除,且與其互動的結果無法逆轉。

先決條件

如果你剛入門,或是在尋找技術性較低的介紹,我們推薦你閱讀我們的智能合約簡介

在進入智能合約的世界前,請確保你已閱讀過帳戶交易以太坊虛擬機的相關說明。

數位自動販賣機

智能合約最好的比喻或許是自動販賣機,這個概念由 Nick Szaboopens in a new tab 提出。 只要輸入正確,就保證能得到特定的輸出結果。

要從販賣機取得一包點心:

1錢 + 點心選擇 = 點心分發

這種邏輯會編寫進販賣機中。

而智慧型合約就像販賣機,其中編寫了邏輯。 以下是若使用 Solidity 編寫智慧型合約,這種販賣機運作方式的簡要範例:

1pragma solidity 0.8.7;
2
3contract VendingMachine {
4
5 // 宣告合約的狀態變數
6 address public owner;
7 mapping (address => uint) public cupcakeBalances;
8
9 // 部署「VendingMachine」合約時:
10 // 1. 將部署地址設為合約擁有者
11 // 2. 將部署的智能合約的杯子蛋糕餘額設為 100
12 constructor() {
13 owner = msg.sender;
14 cupcakeBalances[address(this)] = 100;
15 }
16
17 // 允許擁有者增加智能合約的杯子蛋糕餘額
18 function refill(uint amount) public {
19 require(msg.sender == owner, "只有擁有者能補充。");
20 cupcakeBalances[address(this)] += amount;
21 }
22
23 // 允許任何人購買杯子蛋糕
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 = 5N = 4, M = 7。 4/7 的多簽需要在七個可能的有效簽章中取得四個簽章。 這表示即便遺失三個簽章,仍可取回資金。 在這種情況下,這也表示大多數金鑰持有者必須同意並簽署,才能執行合約。

智能合約資源

OpenZeppelin Contracts - 用於安全智能合約開發的函式庫。

延伸閱讀

這篇文章對你有幫助嗎?