講完Import,這一篇我們來講講也是很重要的Library,我們之前有提到,程式是愈直覺簡單愈好,可以大大的減少維護成本,把可以共用的部份都抽離出來寫成部份程式碼就是我們今天要講的Library,可以是共用的功能或是檢查。
Library.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
library SafeMath {
//數字新增檢查
function add(uint x, uint y) internal pure returns(uint) {
uint result = x + y;
require(result >= x, "Overflow!");
return result;
}
}
library Array {
//陣列移除某內容
function remove(uint[] storage arr, uint index) public {
arr[index] = arr[arr.length -1];
arr.pop();
}
}
testLibrary.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import "./Library.sol";
contract TestSafeMath {
using SafeMath for uint;//引用library到uint屬性內
function testAdd(uint x, uint y) public pure returns (uint) {
uint result = x.add(y);
//SafeMath.add(x,y);
return result;
}
}
contract TestArray {
using Array for uint[];//引用Library
uint[] public testArr;
function testArrayRemove() public {
testArr.push(1);
testArr.push(2);
testArr.push(3);
//testArr = [1,2,3]
testArr.remove(1);
//testArr = [1,3]
//驗證
assert(testArr.length == 2);
assert(testArr[0] == 1);
assert(testArr[1] == 3);
}
}
今天寫兩個檔案Library.sol和testLibrary.sol,把Library獨立在單一個檔案裡,這樣需要的時候就使用我們上一篇所提到的import把它引用進來使用就可以了。
library可以用"using SafeMath for uint;"或是直接"SafeMath.add(x,y);"這兩種方式來引用都可以。
最後是Deploy,Deploy時Library是不需要佈署的,所以只要Deploy TestSafeMath和TestArray就可以了。
以上是對Library的介紹,也可以參考
OpenZeppelin上面有關Library的寫法,還蠻實用的,可以參考看看。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。