0%

solidity | 库

solidity 的库。

  • 一个特殊的合约
    • 可以像合约一样部署,但是没有状态变量,也不能存储以太币
  • 可重用
    • 部署一次,在不同合约中反复使用
    • 节约 gas ,相同代码不需要一遍遍部署

定义和使用

1
2
3
4
5
6
7
library mathlib{
plus();
}

ontract c{
mathlib.plus();
}

库函数使用委托的方式调用 delegatecall,库代码是在发起合约中执行。

using for 扩展类型

using A for B 把库函数关联到类型 B

A 库中有函数 add(B b),则可以使用 b.add()

math.sol 和 t.sol

  • math.sol 文件
1
2
3
4
5
6
library math{

function plus(uint a,uint b) public view returns(uint){
return a + b;
}
}
  • t.sol 文件
1
2
3
4
5
6
library math{

function plus(uint a,uint b) public view returns(uint){
return a + b;
}
}

using

1
2
3
4
5
6
7
8
9
10
11
12
13
pragma solidity ^0.4.18;

import "./math.sol";

contract Test{

using math for uint;

function add(uint a,uint b) public view returns(uint){
return a.plus(b);
}

}

一些常用的库

请我喝杯咖啡吧~