原文: 《Solidity 極簡入門: 17. 庫合約站在巨人的肩膀上》
我最近在重新學solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每週更新1-3 講。
所有代碼和教程開源在github:github.com/AmazingAng/WTFSolidity
這一講,我們用ERC721 的引用的庫合約String 為例介紹solidity 中的庫合約(library),並總結了常用的庫函數。
庫函數
庫函數是一種特殊的合約,主要是為了提升solidity 代碼的複用性和減少gas fee 而存在。庫合約一般都是一些好用的函數合集(庫函數),由大神或者項目方創作,咱們站在巨人的肩膀上,會用就行了。
庫合約:站在巨人的肩膀上
他和普通合約主要有以下幾點不同:
不能存在狀態變量不能夠繼承或被繼承
不能接收以太幣
不可以被銷毀
String 庫合約
String 庫合約是將uint256 類型轉換為相應的string 類型的代碼庫,樣例代碼如下:
他主要包含兩個函數,toString() 將uint256 轉為string,toHexString() 將uint256 轉換為16 進制,在轉換為string。
如何使用庫合約
我們用String 庫函數的toHexString() 來演示兩種使用庫合約中函數的辦法。
1. 利用using for 指令:
指令using A for B;可用於附加庫函數(從庫A)到任何類型(B)。添加完指令後,庫A 中的函數會自動添加為B 類型變量的成員,可以直接調用。注意:在調用的時候,這個變量會被當作第一個參數傳遞給函數:
2. 通過庫合約名稱調用庫函數:
我們部署合約並輸入170 測試一下,兩種方法均能返回正確的16 進制string「0xaa」。證明我們調用庫函數成功!
成功調用庫函數
總結
這一講,我們用ERC721 的引用的庫函數String 為例介紹solidity 中的庫函數(Library)。 99% 的開發者都不需要自己去寫庫合約,會用大神寫的就可以了。我們只需要知道什麼情況該用什麼庫合約。常用的有:
String:將uint256 轉換為String
Address:判斷某個地址是否為合約地址
Create2:更安全的使用Create2 EVM opcode
Arrays:跟數組相關的庫函數
推特: @0xAA_Science
社區: Discord | 微信群|官網wtf.academy
所有代碼和教程開源在github: github.com/AmazingAng/WTFSolidity