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

閱讀時間約 3 分鐘

何謂函式庫?

簡單的來說就是把同類型常用的功能打包在一起,讓其他開發者能夠重複使用,達到資源有效利用的效果,以軟體開發來說就是減少多餘的程式碼,而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」歡迎自行取用。
喜歡撰寫文章的你,不妨來了解一下:
歡迎加入一起練習寫作,賺取知識,累積財富!
為什麼會看到廣告
avatar-img
116會員
262內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
我們在前幾篇有介紹到介面的用途,都知道介面可以制定規格,建議可以先複習一下這一篇「【開發智能合約 — Solidity系列】實作篇Ep.10 — 標準化的介面(Interfaces)」,而這次來介紹一個非常抽象的概念,名為「抽象化合約」,果然如其名! 不太容易理解,這種合約跟介面非常相似,都可以用來
我們上一篇有介紹了「【開發智能合約 — Solidity系列】實作篇Ep.11 — 繼承同源但不同意圖的函數覆寫(Function Overriding)」學習到overriding這個關鍵字的概念,而今天介紹另一個非常相似的名詞overloading(超載),兩者看似很像,但本質上卻存在著非常大的
我們在「【開發智能合約 — Solidity系列】實作篇Ep.9 — 何謂繼承(Inheritance)」有提到繼承的一些基本概念,然而在繼承的過程中我們可能會用到上游的方法,甚至加工,而方法名稱重複了,是否能被允許呢? 答案是「允許」的,就好比我們雖然繼承了父親的「處事技巧」,但在求新求變的時代中
在講Gas這個概念之前,我們先以汽車為例子,不論是上高速公路還是加油,都是需要費用的,而費用的計算方式也跟我們使用的資源多寡有關,因此整個Gas就是圍繞在使用者付費的基礎之上,而計價的依據則根據Gas Price、Gas Limit最終產生出Gas fee。 相信對於Gas具備基本概念之後,我們在開
Interface我們就將之想像成是一種標準化的規範,在產品還沒開發出來之前,我們心中想必已經有個藍圖,嗯…,這個功能需要什麼樣的功能,這時候就可以來制定介面,以「設計」為出發點而後再進入「實作」,如此一來我們在設計階段就能發現一些盲點,減少經過實作過程才發現的窘境,節省繁複修改的成本,而且介面定義
一個功能越趨完善且複雜的合約,勢必會拆成許多合約共同組成,而其實這些組成的合約之中許多的方法、元素都是重複的,因此我們可以使用Inheritance(繼承)的技巧,將共同的屬性、方法抽到某個上級合約,而其餘的合約只要繼承自上級合約,就能減少重複開發的狀況,我們都知道軟體開發的過程,只要開發的原始碼越
我們在前幾篇有介紹到介面的用途,都知道介面可以制定規格,建議可以先複習一下這一篇「【開發智能合約 — Solidity系列】實作篇Ep.10 — 標準化的介面(Interfaces)」,而這次來介紹一個非常抽象的概念,名為「抽象化合約」,果然如其名! 不太容易理解,這種合約跟介面非常相似,都可以用來
我們上一篇有介紹了「【開發智能合約 — Solidity系列】實作篇Ep.11 — 繼承同源但不同意圖的函數覆寫(Function Overriding)」學習到overriding這個關鍵字的概念,而今天介紹另一個非常相似的名詞overloading(超載),兩者看似很像,但本質上卻存在著非常大的
我們在「【開發智能合約 — Solidity系列】實作篇Ep.9 — 何謂繼承(Inheritance)」有提到繼承的一些基本概念,然而在繼承的過程中我們可能會用到上游的方法,甚至加工,而方法名稱重複了,是否能被允許呢? 答案是「允許」的,就好比我們雖然繼承了父親的「處事技巧」,但在求新求變的時代中
在講Gas這個概念之前,我們先以汽車為例子,不論是上高速公路還是加油,都是需要費用的,而費用的計算方式也跟我們使用的資源多寡有關,因此整個Gas就是圍繞在使用者付費的基礎之上,而計價的依據則根據Gas Price、Gas Limit最終產生出Gas fee。 相信對於Gas具備基本概念之後,我們在開
Interface我們就將之想像成是一種標準化的規範,在產品還沒開發出來之前,我們心中想必已經有個藍圖,嗯…,這個功能需要什麼樣的功能,這時候就可以來制定介面,以「設計」為出發點而後再進入「實作」,如此一來我們在設計階段就能發現一些盲點,減少經過實作過程才發現的窘境,節省繁複修改的成本,而且介面定義
一個功能越趨完善且複雜的合約,勢必會拆成許多合約共同組成,而其實這些組成的合約之中許多的方法、元素都是重複的,因此我們可以使用Inheritance(繼承)的技巧,將共同的屬性、方法抽到某個上級合約,而其餘的合約只要繼承自上級合約,就能減少重複開發的狀況,我們都知道軟體開發的過程,只要開發的原始碼越
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
为了编写智能合约,开发人员往往需要选择一种适合的编程语言,目前市场上有几种常用的智能合约编程语言,比如Solidity、Vyper、Michelson等,那么具体智能合约常用语言有哪些,让我们一起来看看吧 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续
这篇文章主要介绍了智能合约地址什么意思?智能合约安全吗?的相关资料,智能合约是表示为一段代码的合约,旨在执行一组指令。很多人不知道是智能合约地址什么意思,下面小编带大家深入的了解一下,一起来看看吧! 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣
Thumbnail
本章節旨在教導讀者如何在 Kotlin 中引入套件。將會涵蓋如何引用第三方套件,如何引用自定義模組,以及如何創建和引用自定義套件。此外,還會列出一些常用的套件,以供讀者參考。
Thumbnail
這章節的目的是介紹 Kotlin 語言中函數的基本用法和概念,包括函數的聲明、使用、參數和返回值等。通過學習這章節,讀者可以熟練掌握如何在 Kotlin 中定義和使用函數,來解決各種問題。
Thumbnail
隨著Blockchain 的日益成熟,智能合約已經成為改變多個行業,包括IT服務行業的一種重要技術。智能合約不僅提高了交易的透明度,還增強了合約執行的自動化和安全性。本文將介紹智能合約的基本概念、在IT服務管理中的具體應用,以及實施時可能遇到的挑戰。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
在 TypeScript 中,套件是模組化代碼的集合,可以提高代碼的可重用性和可維護性。常見的套件包括各種庫和框架,如 lodash、express 等。以下是有關引用套件、自定義套件和常見套件的詳細介紹。
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
本章講述了C#開發中的程序集,命名空間和 NuGet 包管理器。程序集是 .NET 應用的基礎,命名空間用於組織和預防命名衝突,而 NuGet 用於管理 .NET 的外部庫和依賴項。
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
为了编写智能合约,开发人员往往需要选择一种适合的编程语言,目前市场上有几种常用的智能合约编程语言,比如Solidity、Vyper、Michelson等,那么具体智能合约常用语言有哪些,让我们一起来看看吧 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续
这篇文章主要介绍了智能合约地址什么意思?智能合约安全吗?的相关资料,智能合约是表示为一段代码的合约,旨在执行一组指令。很多人不知道是智能合约地址什么意思,下面小编带大家深入的了解一下,一起来看看吧! 🚀 币安 - 全球最大加密货币交易所 💥 独家优惠 💥 💰 注册即享 20% 手续费返佣
Thumbnail
本章節旨在教導讀者如何在 Kotlin 中引入套件。將會涵蓋如何引用第三方套件,如何引用自定義模組,以及如何創建和引用自定義套件。此外,還會列出一些常用的套件,以供讀者參考。
Thumbnail
這章節的目的是介紹 Kotlin 語言中函數的基本用法和概念,包括函數的聲明、使用、參數和返回值等。通過學習這章節,讀者可以熟練掌握如何在 Kotlin 中定義和使用函數,來解決各種問題。
Thumbnail
隨著Blockchain 的日益成熟,智能合約已經成為改變多個行業,包括IT服務行業的一種重要技術。智能合約不僅提高了交易的透明度,還增強了合約執行的自動化和安全性。本文將介紹智能合約的基本概念、在IT服務管理中的具體應用,以及實施時可能遇到的挑戰。
Thumbnail
這篇文章介紹了面試時以及開始工作後可能會遇到的問題,包括物件導向OOP、SOLID 設計原則、測試方式,以及 Cookie、Session 與 Cache 的相似處與不同處。提供了豐富的相關資訊。
Thumbnail
在 TypeScript 中,套件是模組化代碼的集合,可以提高代碼的可重用性和可維護性。常見的套件包括各種庫和框架,如 lodash、express 等。以下是有關引用套件、自定義套件和常見套件的詳細介紹。
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
本章講述了C#開發中的程序集,命名空間和 NuGet 包管理器。程序集是 .NET 應用的基礎,命名空間用於組織和預防命名衝突,而 NuGet 用於管理 .NET 的外部庫和依賴項。
Thumbnail
題目敘述 題目會給我們一組定義好的界面和需求,要求我們設計一個資料結構,可以滿足平均O(1)的插入元素、刪除元素、隨機取得元素的操作。 RandomizedSet() 類別建構子 bool insert(int val) 插入元素的function界面 bool remove(int val