智慧型合約庫
頁面最後更新時間: 2025年8月21日
你無需從頭開始編寫專案中的每一個智慧型合約。 因為我們有許多開放原始碼智慧型合約庫可為你的專案提供可重複利用的組件,因此你不必從零開始。
先決條件
在使用智慧型合約庫之前,最好先清楚瞭解智慧型合約的結構。 如果您還沒看過智能合約剖析,請前往該頁面。
函式庫中有什麼
你通常可以在智慧型合約庫中找到兩種組件:可以添加到合約的可重複使用行為,與採納的各種標準。
行為
撰寫智能合約時,您很可能會發現自己需要一再撰寫類似的模式,例如指派_管理員_地址來執行合約中的受保護操作,或是在發生非預期問題時新增緊急_暫停_按鈕。
智能合約函式庫通常會以 Solidity 的 函式庫 (opens in a new tab) 或 繼承 (opens in a new tab) 形式,提供這些行為的可重複使用實作。
舉例來說,下方是 OpenZeppelin Contracts 函式庫 (opens in a new tab) 中 Ownable 合約 (opens in a new tab) 的簡化版本,它會指定一個地址作為合約的擁有者,並提供修飾符,將方法的存取權限僅限於該擁有者。
1contract Ownable {2 address public owner;34 constructor() internal {5 owner = msg.sender;6 }78 modifier onlyOwner() {9 require(owner == msg.sender, "Ownable: caller is not the owner");10 _;11 }12}顯示全部若要在你的合約中使用這種組件,首先要匯入,再於自己的合約中擴充。 這可讓您使用基礎 Ownable 合約提供的修飾符,來保護您自己的函式。
1import ".../Ownable.sol"; // Path to the imported library23contract MyContract is Ownable {4 // The following function can only be called by the owner5 function secured() onlyOwner public {6 msg.sender.transfer(1 ether);7 }8}另一個常見的例子是 SafeMath (opens in a new tab) 或 DsMath (opens in a new tab)。 這些庫(與基礎合約不同)提供了語言本身不具備的溢出檢查算術函數。 使用這些庫而非原生算術運算可以防止合約出現溢出,這類錯誤可能導致災難性後果!
標準
為了促進可組合性與互通性,以太坊社群以 ERC 的形式定義了多項標準。 您可以在標準一節中閱讀更多相關資訊。
將以太坊意見徵求納入合約時,更好的做法是尋找標準實作,而非嘗試推出自己的方式。 許多智慧型合約庫包含採用最熱門 ERC 標準的做法。 例如,在 HQ20 (opens in a new tab)、DappSys (opens in a new tab) 和 OpenZeppelin (opens in a new tab) 中,都可以找到無所不在的ERC20 可替代代幣標準。 此外,一些以太坊意見徵求也提供作為以太坊意見徵求本身一部分的規範實作。
值得一提的是,一些以太坊意見徵求並非獨立的,而是對其他以太坊意見徵求的補充。 例如,ERC2612 (opens in a new tab) 為 ERC20 新增了擴充功能,以改善其可用性。
如何新增函式庫
務必參考你要納入的庫文件,以掌握如何將其納入專案的具體說明。 有數個 Solidity 合約函式庫是使用 npm 封裝,所以您只要 npm install 即可安裝。 大多數編譯合約的工具都會在您的 node_modules 中尋找智能合約函式庫,因此您可以執行下列操作:
1// This will load the @openzeppelin/contracts library from your node_modules2import "@openzeppelin/contracts/token/ERC721/ERC721.sol";34contract MyNFT is ERC721 {5 constructor() ERC721("MyNFT", "MNFT") public { }6}無論使用哪種方法,在加入函式庫時,都務必留意語言版本。 例如,如果你使用 Solidity 0.5 編寫合約,就不能使用 Solidity 0.6 庫。
使用時機
在你的專案使用智慧型合約庫有幾個好處。 首先,這提供了現成的組件,可以納入你的系統,而不必自己編寫程式碼,從而節省時間。
安全性也是一個重要的優點。 開放原始碼智慧型合約庫也經常接受嚴格審查。 鑑於許多專案都依賴它們,社群有強烈動機加以持續審查。 在應用程式代碼中比起可重複使用的合約庫更容易發現錯誤。 有些函式庫也會經過外部稽核 (opens in a new tab),以增加安全性。
然而,使用智慧型合約庫可能將你不熟悉的程式碼納入專案。 我們會想匯入合約,並將其直接納入專案,但若未充分理解該合約的作用,可能會由於意外行為,而無意中在系統中引入問題。 務必參閱要匯入的程式碼文件,然後在納入專案前審查程式碼!
最後,在決定是否納入庫時,要考慮其總體使用情況。 獲得廣泛採用的資料庫,好處在於有取得更廣大的社群和關注來審視問題。 在建立智慧型合約時,安全性應為首要考量!
相關工具
OpenZeppelin Contracts - 最受歡迎的安全智能合約開發函式庫。
DappSys - 安全、簡單、靈活的智能合約建置組件。
HQ20 - 一個包含合約、函式庫和範例的 Solidity 專案,可協助您建置適用於真實世界、功能齊全的分散式應用程式。
thirdweb Solidity SDK - 提供有效率地建置自訂智能合約所需的工具
相關教學
- 以太坊開發人員的安全性考量 – 關於建置智能合約時安全性考量的教學,包含函式庫的使用。
- 了解 ERC-20 代幣智能合約 - 關於 ERC20 標準的教學,由多個函式庫提供。
延伸閱讀
知道一個曾經幫助你學習更多社區或社團資源? 歡迎在本頁自由編輯或添加內容!