阿Han
阿Han

文字是留下記錄的一種媒介,將知識吸收轉化後輸出成文字進行保存。 ☕️ https://liker.land/willhanchen/civic

【開發智能合約 - Solidity系列】實作篇Ep.14 - 動動手來打造函式庫吧(Library)

動動手來玩玩智能合約吧

【開發智能合約 — Solidity系列】實作篇Ep.14 — 動動手來打造函式庫吧(Library)

圖片來源

何謂函式庫?

簡單的來說就是把同類型常用的功能打包在一起,讓其他開發者能夠重複使用,達到資源有效利用的效果,以軟體開發來說就是減少多餘的程式碼,而Solidity語言中,Library可以視為物件導向中的靜態類別,不需要產生實體就能使用,因此能有效的減少Gas。

當我們剛完成一份合約時難免因為設計尚未考慮周全而導致複雜與重複的邏輯,但當我們回頭看看之後,就會發現有一些冗餘的程式碼可以進行整理,甚至分類到不同的地方,如同撰寫文章的草稿一樣,撰寫完畢後進行檢查,會發現有些區段可以挪移到外部的文章進行嵌入…等,讓一篇文章不至於過多的雜訊,而智能合約之中亦是如此,我們可以將共同複雜的邏輯整理到Library並歸類,之後倘若設計多份合約發現共同邏輯時就能夠引入並使用,非常靈活彈性。

建立一個函式庫來玩玩唄

圖片來源

  • 情境: 自己打造一個數學函式,並檢核數值是否為「奇數」。
  • 以「library」取代「contract」。
  • 不需要有static。
  • 不需要進行初始化建構(constructor)。
library Math {
    function checkOdd(uint value) public pure returns(bool) {
        uint remainder = value % 2;
        if(remainder!=0)
            return true;
        else
            return false;
    }
}

如何使用?

引用別人撰寫好的Library會使用「import」來進行引用,而引用的對象也是一支Solidity撰寫的模組,使用起來也非常的直觀,直接以Library的名稱進行function的調用即可。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7.0;
import "./math.sol";
contract Example {
    function checkOdd(uint value)  public pure returns(bool) {
        return Math.checkOdd(value);
    }
}

結語

此篇章適合對於Solidity開發智能合約技術具有基礎認識的朋友閱讀,主要在講述除了使用內建功能之外,如何打造不同場景之下專屬的Library進行共用,就把我們的Library想像成是「🧱樂高積木」,自行完成一塊塊小積木,最後再透過不同的組合拼裝,最終完成一份完整的智能合約。

今天的範例都在這裡「📦 solidity-remix-toturial/Ep14」歡迎自行取用。

📚 更多關於Solidity的文章請看這裡…

喜歡撰寫文章的你,不妨來了解一下:

Web3.0時代下為創作者、閱讀者打造的專屬共贏平台 — 為什麼要加入?

歡迎加入一起練習寫作,賺取知識,累積財富!

資源參考


CC BY-NC-ND 2.0 版权声明

喜欢我的文章吗?
别忘了给点支持与赞赏,让我知道创作的路上有你陪伴。

加载中…
加载中…

发布评论