智能合約開發實戰(17) - Library

2022/05/07閱讀時間約 1 分鐘
講完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的寫法,還蠻實用的,可以參考看看。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。
如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
為什麼會看到廣告
宅D嘉
宅D嘉
有著十年以上的軟體開發經驗,喜歡投資理財,目前喜歡研究區塊鏈相關,了解虛擬貨幣投資或者是區塊鏈開發,喜歡把複雜的東西簡單化,樂於分享我的理財投資生活。
留言0
查看全部
發表第一個留言支持創作者!