Solidity之旅十七-庫 [library]
01
庫(library)
作為開發者的您,想必對專案中重複使用的工具函式,抽取到一個公共中,以便可以在您專案中的其它位置可呼叫。
而Solidity與您所 熟知的沒有什麼不同,它也是用來實現可重複呼叫,且還能省gas fee。
閒話少敘,切入正題。讓我們來看看Solidity library吧!
雖然Solidity的library看起來和合約(contract)有些類似,但它並不是一個合約,它包含了可能多個消費者合約共有的功能,這有助於避免冗餘。
來看看Solidity 對library的約束:
1、無狀態
Solidity中的庫是一個無狀態實體。它本質上意味著,與合約不同,您不能在一個庫中定義狀態變數。更簡單地說,庫函式不允許改變或修改合約的狀態。
2、僅供檢視的函式
呼叫庫函式不會消耗gas,因為它不會修改合約的狀態。換句話說,一個庫只能實現pure函式或view函式。
3、內部函式
一個庫不能從外部範圍呼叫。其他合約顯然可以呼叫它們,但它們不能從部署的外部訪問。
4、不能繼承
因為庫是一個獨立的實體,它不能繼承任何其他的庫或合約。一個庫不能被任何其他實體/庫/合同繼承。
5、沒有回退或支付功能
一個庫不能實現回退或支付功能。
(將來有可能會解除這些限制)
02
如何建立 library(庫)
在瞭解了關於庫的一些概念後,讓我們來建立一個library。
想要在Solidity建立庫,需使用library關鍵字。
//SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
library MyLibrary {
function add(uint a, uint b) public pure returns(uint) {
return a + b;
}
}
using … for … 使用庫
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
import "./library_example.sol"; //匯入庫
contract UseLibraryExample {
using MyLibrary for uint;
function getSum(uint firstNumber, uint secondNumber) public pure returns(uint) {
return firstNumber.add(secondNumber); //您對這句可能產生了困惑
}
}
為了在合約中使用任何庫,我們需要首先告訴合約該庫可以操作哪種資料型別。我們透過在合同中加入使用來操作;行來實現。
例如,library MyLibrary中的函式add對uint進行操作,因為它把uint a作為它的第一個引數。
為了便於理解,您可以簡單地,假設您的庫函式成為uint資料型別本身的一部分,並在其物件中隨時可用。
最後,當庫函式成為資料型別本身的一部分時,我們可以在其物件上呼叫該方法,如我們上面的契約所示,即firstNumber.add(secondNumber); 。
注意,庫函式的第一個引數成為函式被呼叫的物件。其餘的和後續的引數仍然在函式呼叫中。
版權宣告:本文為CSDN博主「甄齊才」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:
https://blog.csdn.net/coco2d_x2014/article/details/128431596
文章來源:CSDN博主「甄齊才」
文章原標題:《玩以太坊鏈上專案的必備技能(庫 [library]-Solidity之旅十七)》
旨在傳播區塊鏈相關技術,如有侵權請與我們聯絡刪除。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70012206/viewspace-3002798/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python學習之旅(十七)Python
- Solidity之旅(十)OOP-抽象合約SolidOOP抽象
- 初學Solidity(四):Solidity的庫Solid
- Solidity之旅(十八)內聯彙編 [inline assembly]Solidinline
- 3.14 solidity庫詳解Solid
- Solidity之旅(十三)函式及其可見性和狀態可變性Solid函式
- PanoramaGL library類庫詳細解析
- Solidity語言學習筆記————36、 庫Solid筆記
- Flask學習之旅--資料庫Flask資料庫
- 十七:主庫的DUMP執行緒(筆記)執行緒筆記
- 初學Solidity(三):Solidity物件導向Solid物件
- Solidity:assemblySolid
- 初學Solidity(六):Solidity異常處理Solid
- 《MySQL 進階篇》十七:資料庫其他調優策略MySql資料庫
- ThinkPHP3.2公共類庫、應用類庫ThinkPHP/Library講解PHP
- 初學Solidity(五):Solidity的事件與檔案Solid事件
- solidity入門Solid
- Django筆記三十七之多資料庫操作(補充版)Django筆記資料庫
- C#與資料庫訪問技術總結(十七)C#資料庫
- 智慧合約語言 Solidity 教程系列8 – Solidity APISolidAPI
- 智慧合約語言 Solidity 教程系列8 - Solidity APISolidAPI
- Solidity語言學習筆記————38、Solidity彙編Solid筆記
- Vue3+TypeScript學習之旅---聯想桌布庫VueTypeScript
- Flask連線資料庫打怪升級之旅Flask資料庫
- Java EE之旅08 資料庫基礎(2)Java資料庫
- Java EE之旅11 資料庫基礎(5)Java資料庫
- 11G資料庫之library cache lock及library cache pin模擬結合hanganalyze定位資料庫
- Library Cache Pin 及 Library Cache Lock分析
- library cache lock和library cache pin理解
- Solidity 簡易教程Solid
- Solidity教程 hello wordSolid
- Solidity:ERC721Solid
- Solidity事件,等待事件Solid事件
- boost library
- Python學習之旅:訪問MySQL資料庫PythonMySql資料庫
- Solidity語言學習筆記————1、初識Solidity語言Solid筆記
- oracle library cache之library cache lock_library cache pin wait event釋義OracleAI
- library cache內容系列一之library hash bucket--library object handle--heapObject