复杂多个合约部署验证方法

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

也可以用 Truffle 插件自动在Etherscan上验证合约代码 

安装:npm install -D truffle-plugin-verify
使用:truffle run verify ContractName安装后,将以下内容添加到 truffle-config.js 或 truffle.js 文件中,以便 Truffle 启用该插件,需要创建一个 Etherscan API 密钥并将其添加到 Truffle。
要创建 Etherscan API 密钥,首先需要在 Etherscan 网站上创建一个帐户。 创建帐户后,可以在个人资料页上添加新的 API 密钥,创建新密钥后,将其添加到 truffle-config.js 或 truffle.js 文件的 api_keys 。
建议使用 dotenv 来保存 API key, 然后在 Git 库中忽略 .env 文件,然后在 truffle-config.js 或 truffle.js 配置文件读取它,如下:

var HDWalletProvider = require("truffle-hdwallet-provider");
require('dotenv').config();

module.exports = {
  networks: {
    rinkeby: {
      provider: function() {
        return new HDWalletProvider(`${process.env.MNEMONIC}`, `https://rinkeby.infura.io/v3/${process.env.INFURA_ID}`)
      },
      network_id: 4
    }
  },
  plugins: [
   'truffle-plugin-verify'
  ],
  api_keys: {
    etherscan: process.env.ETHERSCAN_API_KEY
  }
};

你的配置文件可能和上面有所不同,但是只要设置了公共网络部署,并且正确设置了 plugins 和 api_keys 就可以。
truffle-plugin-verify 的使用设置好了,接下来就是实际部署和验证智能合约。
部署:ruffle migrate --network rinkeby
部署合同后,我们就可以使用 truffle-plugin-verify 对我们的 Casino 合同进行 Etherscan 验证:
truffle run verify cotractname --network rinkeby
通过 truffle-plugin-verify 开发者只需一个简单的命令就可以验证任何智能合约,这为手动验证提供一种简单、自动的替代方法。

猜你喜欢

转载自blog.csdn.net/jamesdodo/article/details/108455901