本页面使用机器翻译自英语,可能包含错误或不清楚的语言。如需最准确的信息,请参阅英文原文。由于更新频繁,部分内容可能与英文原文有出入。请加入我们在 Crowdin 上的努力,帮助我们改进本页面的翻译。 (Crowdin translation page, Contributing guide)
如何使用 Foundry 验证智能合约
本指南将教您如何使用 Foundry 直接从 CLI 在 Kaiascan 上自动验证智能合约源代码。 目前,Kaiascan 只支持在使用 Foundry 时验证扁平化合同文件。
确保您的合同已平整,然后再进行验证过程。
快速开始
本指南希望您对使用 Foundry 开发智能合约有所了解。 请参阅 Deploy smart contract using Foundry 开始使用。 我们将在下面部署和验证这个 NFT 合同样本:
// SPDX-License-Identifier: UNLICENSEDpragma solidity >=0.8.10;import { ERC721 } from "solmate/tokens/ERC721.sol";import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { Strings } from "@openzeppelin/contracts/utils/Strings.sol";error MintPriceNotPaid();error MaxSupply();error NonExistentTokenURI();error WithdrawTransfer();contract NFT is ERC721, Ownable { using Strings for uint256; string public baseURI; uint256 public currentTokenId; uint256 public constant TOTAL_SUPPLY = 10_000; uint256 public constant MINT_PRICE = 0.08 ether; constructor( string memory _name, string memory _symbol, string memory _baseURI ) ERC721(_name, _symbol) Ownable(msg.sender) { baseURI = _baseURI; } function mintTo(address recipient) public payable returns (uint256) { if (msg.value != MINT_PRICE) { revert MintPriceNotPaid(); } uint256 newTokenId = ++currentTokenId; if (newTokenId > TOTAL_SUPPLY) { revert MaxSupply(); } _safeMint(recipient, newTokenId); return newTokenId; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (ownerOf(tokenId) == address(0)) { revert NonExistentTokenURI(); } return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } function withdrawPayments(address payable payee) external onlyOwner { uint256 balance = address(this).balance; (bool transferTx, ) = payee.call{value: balance}(""); if (!transferTx) { revert WithdrawTransfer(); } }}
要使用 Foundry verify 验证合同,请参阅以下步骤: