2022-05-07|閱讀時間 ‧ 約 4 分鐘

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

講完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的寫法,還蠻實用的,可以參考看看。
有什麼想要了解或是不清楚的部份,歡迎留言和我分享。 如果喜歡我的文章歡迎追隨,按愛心,我每週都會上新文章。
分享至
成為作者繼續創作的動力吧!
有著十年以上的軟體開發經驗,喜歡投資理財,目前喜歡研究區塊鏈相關,了解虛擬貨幣投資或者是區塊鏈開發,喜歡把複雜的東西簡單化,樂於分享我的理財投資生活。
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

發表回應

成為會員 後即可發表留言