blockchain - truffle 对nft erc-721 contract 进行verify validation 源代码校验
访问量: 740
refer to:
https://github.com/rkalis/truffle-plugin-verify
https://medium.com/quick-programming/verify-a-smart-contract-on-etherscan-using-truffle-cb2656fd9c41
解决方案
2. 修改truffle-config.js 增加如下内容:
plugins: ['truffle-plugin-verify']
3. 在ethersan.io上申请api key
4. 修改truffle-config.js 增加:
api_keys: { etherscan: '4ANBPF8KQQHJ6J9BBU7WU53BNPDMXH????' }
5. 开始verify: truffle run verify MyTestNft --network goerli
这里要求我们的机器可以直接访问到 etherscan.io 不出意外的话是无法访问的,所以需要梯子
(该过程略,对于linux 来说,就是 trojan command line + pproxy + HTTP_PROXY, HTTPS_PROXY变量 )
否则会看到这个
Verifying TestMyNft Could not find TestMyNft artifact at /mnt/d/workspace/test_erc_721/build/contracts/TestMyNft.json Failed to verify 1 contract(s): TestMyNft
6. 设置好梯子之后,我们继续验证。为了方便调试,我增加了 --debug 标签。另外指定了contract的地址
truffle run verify MyTestNft@0x81ec27587694f9996a69dc26230643dd619cfaba --network goerli --debug
DEBUG logging is turned ON Running truffle-plugin-verify v0.5.26 Retrieving network's network ID & chain ID Verifying MyTestNft@0x81ec27587694f9996a69dc26230643dd619cfaba Reading artifact file at /mnt/d/workspace/test_erc_721/build/contracts/MyTestNft.json Custom address 0x81ec27587694f9996a69dc26230643dd619cfaba specified Retrieving constructor parameters from https://api-goerli.etherscan.io/api?apiKey=4ANBPF8KQQHJ6J9BBU7WU53BNPDMXHYJMW&module=account&action=txlist&address=0x81ec27587694f9996a69dc26230643dd619cfaba&page=1&sort=asc&offset=1 Constructor parameters retrieved: 0x Sending verify request with POST arguments: { "apikey": "4ANBPF8KQQHJ6J9BBU7WU53BNPDMXHYJMW", "module": "contract", "action": "verifysourcecode", "contractaddress": "0x81ec27587694f9996a69dc26230643dd619cfaba", "sourceCode": "{\"language\":\"Solidity\",\"sources\" "constructorArguements": "" } Checking status of verification request 2adu3ip28csr2mydpeq52jyteke7wswknetjjqcgi5fgeqcdlk Pass - Verified: https://goerli.etherscan.io/address/0x81ec27587694f9996a69dc26230643dd619cfaba#code Successfully verified 1 contract(s).
大概总耗时2分钟吧。 然后就可以看到成功校验了源代码
下面是踩坑过程:普通方式无法对truffle进行contract verify (智能合约源代码校验)
正常的渠道,对 erc-721验证,有这样三种方式: (不考虑 Vyper 的话)
1. 单sol文件
2. 多个sol文件
3. 单个json 文件
我们使用truffle 发布nft的时候,往往会有 import, 这样就会产生多个sol文件, 而你引入的 sol文件中又会引入其他的sol文件,
所以如果仅仅导入明面上看到的sol文件的话,你会进入到 import hell中:
在进行 contract verify(合约的源代码验证)的时候,会发现远远不够, 各种import根本找不到
使用单个json文件的话, 校验又会无法通过:
我怀疑是truffle 在build文件夹中生成的json文件不符合etherscan的格式要求,缺少了abi 这个项目
会提示abi找不到: