原文: 《Solidity 極簡入門: 17. 庫合約站在巨人的肩膀上》

我最近在重新學solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每週更新1-3 講。

所有代碼和教程開源在github:github.com/AmazingAng/WTFSolidity

這一講,我們用ERC721 的引用的庫合約String 為例介紹solidity 中的庫合約(library),並總結了常用的庫函數。

庫函數

庫函數是一種特殊的合約,主要是為了提升solidity 代碼的複用性和減少gas fee 而存在。庫合約一般都是一些好用的函數合集(庫函數),由大神或者項目方創作,咱們站在巨人的肩膀上,會用就行了。

WTF Solidity極簡入門第十七講:庫合約 站在巨人的肩膀上

庫合約:站在巨人的肩膀上

他和普通合約主要有以下幾點不同:

不能存在狀態變量不能夠繼承或被繼承

不能接收以太幣

不可以被銷毀

String 庫合約

String 庫合約是將uint256 類型轉換為相應的string 類型的代碼庫,樣例代碼如下:

WTF Solidity極簡入門第十七講:庫合約 站在巨人的肩膀上

他主要包含兩個函數,toString() 將uint256 轉為string,toHexString() 將uint256 轉換為16 進制,在轉換為string。

如何使用庫合約

我們用String 庫函數的toHexString() 來演示兩種使用庫合約中函數的辦法。

1. 利用using for 指令:

指令using A for B;可用於附加庫函數(從庫A)到任何類型(B)。添加完指令後,庫A 中的函數會自動添加為B 類型變量的成員,可以直接調用。注意:在調用的時候,這個變量會被當作第一個參數傳遞給函數:

WTF Solidity極簡入門第十七講:庫合約 站在巨人的肩膀上

2. 通過庫合約名稱調用庫函數:

WTF Solidity極簡入門第十七講:庫合約 站在巨人的肩膀上

我們部署合約並輸入170 測試一下,兩種方法均能返回正確的16 進制string「0xaa」。證明我們調用庫函數成功!

WTF Solidity極簡入門第十七講:庫合約 站在巨人的肩膀上

成功調用庫函數

總結

這一講,我們用ERC721 的引用的庫函數String 為例介紹solidity 中的庫函數(Library)。 99% 的開發者都不需要自己去寫庫合約,會用大神寫的就可以了。我們只需要知道什麼情況該用什麼庫合約。常用的有:

String:將uint256 轉換為String

Address:判斷某個地址是否為合約地址

Create2:更安全的使用Create2 EVM opcode

Arrays:跟數組相關的庫函數

推特: @0xAA_Science

社區: Discord微信群官網wtf.academy

所有代碼和教程開源在github: github.com/AmazingAng/WTFSolidity