使用
$ npm install truffle-flattener -g
$ truffle-flattener <solidity-files> > output.sol
为什么不是 Solidity Flattener ?
truffle-flattener 与 truffle 结合紧密,利用到它的依赖项解析逻辑。
限制
如果使用 truffle migrate 部署,它与 truffle-flattener 合并后的文件不一样,在 ethersan 上面 contract verify 是通不过的。
这种情况可以使用 Solidity Flattener 通过 Remix 来部署( 复制使用 cat output.sol | pbcopy )。当然我们通过 truffle-flattener 也可以合并整个合约 通过 Remix 部署。
注意,truffle-flattener 对别名导入不支持(如:import {symbol1 as alias, symbol2} from "filename";)。
优势
我们在开发阶段就可以使用这个工具了,方便我们在一个文件中查看依赖的所有合约方法的实现及使用方式。
比如使用 OpenZeppelin 库文件:
// xxx.sol
import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";
在一个空文件中引入库文件,然后 `truffle-flattener xxx.sol > ERC20Full.sol` 我们就可以得到包含所有依赖项的单个文件。
后面我们就可以通过 import "ERC20Full.sol" 直接使用了。