Là một tập các helper hoặc utility function. Thư viện có các tính chất sau:
- Nó là stateless nên không thể lưu dữ liệu (trừ các constant). Tất cả các hàm trong thư viện sẽ là state modifier1 là
view
hoặcpure
. - Không thể nhận dữ liệu, vì thế mà nó không có hàm
receive
hayfallback
. - Không thể kế thừa từ các contract hoặc các thư viện khác.
- Tất cả các hàm ở trong thư viện cần phải được implement.
- Không cần phải import vào các contract mà có thể được gọi thông qua interface của một standalone contract đã được deploy từ trước.
Ví dụ:
library WeirdMath {
int private constant factor = 100;
function applyFactor(int self) public pure returns (int) {
return self * factor;
}
function add(int self, int numberToAdd) public pure returns (int) {
return self + numberToAdd;
}
}
Có hai cách sử dụng các hàm của thư viện:
- Sử dụng thông qua toán tử
.
- Sử dụng thông qua một biến nào đó. Khi sử dụng cách này, ta cần khai báo sử dụng thư viện cho kiểu dữ liệu của biến đó bằng từ khóa
using
pragma solidity >=0.5.22 <=0.8.17;
contract StrangeMath {
// Method 1 - using Library name with dot notation
function multiplyWithFactor(int num) public pure returns (int) {
return WeirdMath.applyFactor(num);
}
// Method 2 - the 'using' keyword and dot notation.
// Syntax: using <<Library Name>> for data type of the first argument in the method to be called.
using WeirdMath for int;
function addTwoNums(int a, int b) public pure returns (int) {
return a.add(b);
}
}
Với cách thứ hai, tham số self
sẽ có giá trị là giá trị của caller, cụ thể trong đoạn code ở trên, giá trị của nó chính là giá trị của a
.
Footnotes
-
Xem thêm Solidity - State Modifiers. ↩