🕌

using A for B?(Solidity)

2022/09/11に公開

ERC721を読んでいたら、

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract GameItem is ERC721 {
   using Counters for Counters.Counter;
   ......
}

using A  for B

???

早速、ドキュメントを読む

using A for B; という指示はライブラリのファンクション( A というライブラリから)をどんな型(B)にも加えるのに使うことができます。

とのこと。

具体例(ほぼドキュメント通り)

// SPDX-License-Identifier: MIT

pragma solidity >=0.7.0 <0.9.0;

library Set {
    struct Num{
        uint256 num;
    }
    function set(Num storage self,uint256 p) public {
        self.num=p;
    }     
}
contract  A{
    using Set for Set.Num ;
    Set.Num n;
    function register(uint256  pos) public {
        n.num = pos;
    }
    function get() public view returns (uint256){
        return n.num;
    }
}

なかなか面白い書き方だったので取り上げてみた

Discussion