使用导入的 OpenZeppelin 文件在 Etherscan 上验证和发布合约

Verify and Publish Contract on Etherscan with Imported OpenZeppelin file

我目前正在构建符合 ERC721 标准的合约并已在此处发布合约:https://ropsten.etherscan.io/address/0xa513bc0a0d3af384fefcd8bbc1cc0c9763307c39 - 我现在正在尝试验证并发布合约源代码

我的文件开头是这样的:

// SPDX-License-Identifier: MIT

// We will be using Solidity version 0.8.4
pragma solidity 0.8.4;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract ViperToken is ERC721 {

但是,当尝试使用 Solidity 单个文件进行验证和发布时,出现以下错误:

ParserError: Source "@openzeppelin/contracts/token/ERC721/ERC721.sol" not found: File import callback not supported
 --> myc:6:1:
  |
6 | import "@openzeppelin/contracts/token/ERC721/ERC721.sol"
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

任何人都可以指出 1. 解决此问题或 2. 有关如何正确编写合同的文档,该合同具有导入的依赖项,可以使用 Etherscan 进行验证。现在这只是一个单文件合同。

简而言之,由于我是 Solidity 的新手,所以我不得不进入一个兔子洞来解决这个问题。

我必须执行以下操作;

  1. 学习并使用 https://www.trufflesuite.com/ 设置项目并将我的合约放在那里(使用 Ganache 对 Solidity 新手的测试也有很大帮助)
  2. 使用 HD 钱包提供商包并按照此处的教程在 ropsten Etherscan 上获取它 https://medium.com/coinmonks/5-minute-guide-to-deploying-smart-contracts-with-truffle-and-ropsten-b3e30d5ee1e
  3. 最后,使用 truffle-plugin-verify https://github.com/rkalis/truffle-plugin-verify 在 Etherscan 上验证合约

总而言之,我很确定在 Etherscan 网络应用程序中无法验证包含导入文件的合约。

如果有人有兴趣了解我是如何构建它的,那么最终产品就在这里https://github.com/lukecurtis93/viper-nft(它只是我在网上找到的一个 CryptoKitties 克隆作为基础并更新了它)

我用npx hardhat flatten将所有代码编译成一页,然后将代码复制粘贴到Etherscan的单文件验证中。我认为,如果您只是想了解一下在 Etherscan 中验证您的智能合约,那很好。但是当涉及到生产级代码时,我认为OP的解决方案更好。