使用
$ 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" 直接使用了。