平常使用truffle做合约的开发,可以通过import将别的合约包含进来,方便代码的组织。但是,有几个特殊场景,需要将import的合约都写到当前文件里:
- 使用钱包(如Mist)发布合约,不支持import,只能将所有sol的源代码放到一起,扔进Mist编译、发布。
- 将合约代码提交到区块浏览器,供别人参阅,需要将所有sol的源代码放到一起。
import的合约数量少,可以手动解决,当合约数量增大之后,这活就太累人了。使用solidity-flattener可以完美解决这个问题。
依赖:
- python3
- pip3
安装过程:
- 安装solc:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc- 安装 solidity-flattener
pip3 install solidity-flattener
使用:
进入到truffle目录的contracts目录,执行:
- solidity_flattener XXX.sol
便可将展开后的代码输出到屏幕控制台。想要输出到文件,可以这样做:
- solidity_flattener –output sss.txt XXX.sol
假如有额外的目录,可以这样做
- solidity_flattener –solc-paths=”my_solidity_path=需要添加的文件夹名称” –output sss.txt XXX.sol
接下来,就可以将展开后的代码,公布到区块浏览器了:
https://ropsten.etherscan.io/verifyContract2?a=已发布的合约地址