定義の仕方がコントラクトと似ているライブラリですが、用途はもちろん異なります。
ライブラリは指定したデータ型に対して、ライブラリで定義したメソッドを追加することができます。
ライブラリの定義
まずはライブラリの定義から。
library SafeMath {
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
assert(c / a == b);
return c;
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
assert(c >= a);
return c;
}
}
上記はOpenZeppelinのSafeMathというライブラリの一部を抜粋したものです。
第一引数と第二引数の乗算と加算を行うメソッドを定義しています。
ライブラリの使用方法
このライブラリの使用方法は以下になります。
using SafeMath for uint256
uint256 a = 3;
uint256 b = a.add(6); // bには9(3+6)が格納される
uint256 c = b.mul(7); // cには63(9×7)が格納される
まず、usingを使用してデータ型uint256に対して、SafeMathライブラリの全メソッドを使用可能にしています。
その後、addメソッドを使用して足し算を行っています。
ライブラリではaddメソッドは2つ引数が必要ですが、ここではは1つしか渡してませんね。
これは、aの値(3)が自動的に第一引数に渡されるためです。
第一引数(3)に第二引数(6)が足されるため、変数bには9が格納されます。
addメソッドの後は、mulメソッドを使用して掛け算を行っています。
引数に1つしか渡していないのはaddと同じです。
第一引数(9)に第二引数(7)を掛けて、cには63が格納されます。
まとめ
共通で使用するメソッドはライブラリとして定義しておいて、データ型に追加してあげれば、コードが簡素化され、冗長もなくせるので見やすくなりますね。