本文介绍了验证智能合约源代码的五种方法,并强调了智能合约的重要性、工具及其应用。重点包括使用Etherscan、Hardhat、Remix.IDE等进行合约验证的具体步骤。文章结构清晰,包含丰富的内容和代码示例,并提供了具体的实现步骤与工具建议。
信息
Brownie,一个基于 Python 的智能合约开发和测试框架,已不再积极维护。虽然未来可能会偶尔发布更新,但也可能根本不会发布。建议将 Ape Framework 用于你所有的 Python Ethereum 开发需求。点击这里查看我们的 Ape Framework 指南。如果你有任何问题或需要在过渡到替代解决方案方面的指导,请 联系我们。
智能合约是存储在区块链上的自执行协议。它们是用编程语言(如 Solidity)编写的,并在区块链平台上执行。智能合约用于自动化各种流程和交易,并在许多区块链应用程序中使用,如去中心化金融(DeFi)、非同质化代币(NFT)等。
然而,像任何软件一样,智能合约也容易受到错误和安全漏洞的影响。智能合约中的错误或漏洞可能导致意想不到的后果,如资金损失或安全泄露。因此,在部署智能合约到区块链之前,验证其源代码是至关重要的。本指南将讨论将智能合约源代码验证应用到你的项目的五种不同方法。
喜欢视觉演示?跟着 Sahil 学习不同的智能合约代码验证方法。
不同的方法验证智能合约代码 - YouTube
QuickNode
131K 订阅者
QuickNode
搜索
信息
购物
点击静音
如果播放尚未开始,请尝试重新启动你的设备。
你已退出登录
你观看的视频可能会添加到电视的观看历史记录中并影响电视推荐。为避免这种情况,请在计算机上取消并登录 YouTube。
取消确认
分享
包括播放列表
检索共享信息时发生错误。请稍后重试。
稍后观看
分享
复制链接
观看
0:00
/ •直播
•
订阅我们的 YouTube 频道,获取更多视频! 订阅
你可能希望在公共区块浏览器上开源(验证)你的智能合约,原因有几个。
透明性:Web3 最重要的方面之一是去中心化和透明性。当你开源项目的智能合约时,会增强社区的信任,并允许任何人检查代码并提出改进建议。
安全性:一旦你的智能合约被验证,将会有更多的目光关注它,智能合约专家可以发现任何潜在的漏洞。缺点是,有人(黑客)可能会先找到漏洞,这可能导致你的合约被利用。
创新与采用:开源代码会导致更多的创新和采用,因为其他开发者现在可以分叉你的代码,添加功能并继续在你的代码基础上进行开发。这将有效地导致一个更活跃的开发者生态系统,并迅速提高学习速度。
你需要一个 API 端点与以太坊区块链进行通信。你可以使用公共节点或部署和管理自己的基础设施;不过,如果你想要 8 倍的更快响应时间,可以将繁重的工作交给我们。请在 这里 注册一个免费账户。
登录后,你可以仅需几次点击即可创建 API 端点。点击 创建端点,并选择你需要的 以太坊 链和网络(例如,Mainnet、Sepolia 等)。本指南中,我们将要在 Sepolia 测试网中部署一个合约。
请注意,你必须更新你的非托管钱包 RPC 提供者,以包括你的 QuickNode HTTP 提供者 URL。有关示例,请查看此 指南。
在继续之前,确保你的钱包中有足够的 ETH。你可以使用 多链 QuickNode 水龙头 获取免费的测试网 ETH!(确保选择 Sepolia!)
在开始智能合约验证过程之前,我们需要将合约部署到区块链上。为此,我们将使用 Remix.IDE,一个用于开发、部署、调试和测试 Ethereum 及 EVM 兼容智能合约的在线 IDE 和工具集。
导航到 Remix.IDE,创建一个名为 "MyToken.sol" 的文件,并更新文件以包含以下代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract MyToken is ERC20 {
constructor() ERC20("MyToken", "MTK") {}
}
在本指南中,我们将演示一个 ERC-20 代币的验证过程
然后,在 Solidity 编译器 标签下编译合约,然后转到 部署 & 运行交易 标签以部署合约。选择 注入提供者 或 WalletConnect,连接你的钱包,并部署合约。
验证源代码的最简单方法是通过 Etherscan 用户界面。此过程不需要任何编程技能。
导航到你在 Etherscan 上查看的智能合约的 合约 标签,然后点击 验证并发布 链接。
然后,你需要选择文件类型、编译器版本和许可证。此步骤至关重要,因为如果智能合约类型或许可证不匹配,验证过程将失败。
如果你的智能合约在其导入中引用了不同的 Solidity 文件(如上所示),你必须选择 单文件 并上传一个扁平化版本,或选择 多文件 并上传你的智能合约引用的每个 Solidity 文件。
要扁平化你的合约,请右键单击 Remix.IDE 文件浏览器中的文件名,然后选择 扁平化。Remix.IDE 将生成你的智能合约的扁平化版本(例如,MyToken_flat.sol),你可以将其粘贴到 Etherscan 中。否则,你需要选择 多文件 并导入 MyToken.sol 和 @openzeppelin/contracts/token/ERC20/ERC20.sol 文件。
Hardhat 是一个流行的智能合约开发框架,验证源代码相对简单。请注意,你需要一个 Etherscan API 密钥 来验证你的源代码。
首先,创建一个 Hardhat 框架项目。
npx hardhat init
更新你的 hardhat.config.js 文件以包含 etherscan 对象和你的 Etherscan API 密钥。
module.exports = {
networks: {
sepolia: { ... },
},
etherscan: {
apiKey: "YOUR_ETHERSCAN_API_KEY",
},
};
然后,运行以下命令以验证你的源代码:
npx hardhat verify --network sepolia DEPLOYED_CONTRACT_ADDRESS '构造函数参数 1'
如果你使用复杂的构造函数参数,请参考以下 Hardhat 文档。
使用 Remix.IDE,你可以安装 Etherscan 插件 通过浏览器验证智能合约。
一旦合约编译完成,转到 Etherscan 插件,你可以选择要验证的智能合约。然后,按需添加Constructor arguments并点击验证。
如果你使用 Brownie 部署和测试智能合约,你可以轻松应用以下技术来验证你的智能合约源代码。如果你是 Brownie 新手,请查看此入门指南 如何使用 Brownie 部署智能合约。
要在部署时验证合约,请添加 publish_source=True 参数:
acct = accounts.load('部署账户')
Token.deploy("MyToken", "MTK", 18, 1e28, {'from': acct}, publish_source=True)
另外,如果合约已经部署,你可以使用以下命令:
token = Token.at("0x114A107C1931de1d5023594B14fc19d077FC4dfD")
Token.publish_source(token)
更多参考材料可以在 Brownie 文档 中找到。
如果你使用 Foundry 管理你的智能合约项目,在 Etherscan 上验证你的智能合约非常简单。
你可以在部署命令中添加 --verify
标志,以便在合约部署后立即在 Etherscan 上验证你的源代码。例如:
forge script script/DeployMyToken.s.sol:DeployMyToken \
--rpc-url $QUICKNODE_HTTP_URL \
--private-key $PRIVATE_KEY \
--broadcast \
--verify $ETHERSCAN_API_KEY \
-vvvv
在上面的命令中,我们引用了一个示例终端命令,该命令将使用给定标志执行部署脚本。QUICKNODE_HTTP_URL 应替换为你实际的 QuickNode HTTP 提供者 URL。此外,PRIVATE_KEY 应引用一个私钥,最后将 ETHERSCAN_API_KEY 占位符替换为你的真实 Etherscan API 密钥。有关更多信息,请参考 文档。
此外,如果你想验证已经部署的智能合约,可以使用 forge verify-contract 命令:
forge verify-contract \
--chain-id 11155111 \
0xYourContractAddress \
--etherscan-api-key $ETHERSCAN_API_KEY \
src/MyToken.sol:MyToken
在上述命令中,我们再次引用了我们的 Etherscan API 与 ETHERSCAN_API_KEY 占位符,以及 CONTRACT_ADDRESS,目录路径和合约名称(例如,src/MyToken.sol:MyToken)和链 ID(例如,11155111 或 sepolia)。
示例响应看起来像这样:
Submitting verification for [src/MyToken.sol:MyToken] "0x39919853588384E093B12BaEAaBB5e03d4DC765a".
已提交合约以进行验证:
响应: `OK`
GUID: `vdgcv4ti9wsjc5pdphbzj1pjuybxwajrmtv8eudzaik9ap9b3p`
URL:
https://sepolia.etherscan.io/address/0x39919853588384e093b12baeaabb5e03d4dc765a
请注意,你还可以使用 forge-verify-check 检查给定提供者(例如,Etherscan)上智能合约的验证状态。
有关更多信息,请参考 Foundry 文档 此处。还请随时查看我们不同体验层次的 Foundry 指南!
在验证智能合约源代码时遇到问题时,你可以使用一些故障排除技术:
再次检查合约地址:确保验证你所需的合约地址。如果你部署了多个合约,请确保你在验证正确的合约。
检查编译器版本:确保用来编译源代码的编译器版本与验证工具中指定的版本相符。如果编译器版本不同,你可能需要使用正确的版本重新编译源代码。
检查源代码:确保你验证的源代码与已部署合约匹配。如果存在任何差异,你需要重新编译并重新部署合约。
检查设置和参数:某些验证工具需要特定设置和参数正确设置。仔细检查这些设置和参数以确保它们正确。如果你的智能合约在编译时使用了优化,你必须确保在 Etherscan 中配置此设置。
确保构造函数参数正确。如果你的合约在部署时使用了构造函数,你需要在验证过程中添加此参数。
检查错误信息:如果你收到错误消息,请仔细阅读并尝试理解问题。错误消息可能提供根本原因的线索。
寻求帮助和文档:许多智能合约开发工具都有文档、论坛和其他可供参考的资源。查看这些资源寻求指导或向社区寻求帮助。
通过使用这些故障排除技术,你可以识别和解决验证智能合约源代码时出现的问题,确保你的代码安全可靠。
恭喜你,现在知道了使用各种编程语言和软件库验证智能合约源代码的不同方法。通过 Discord 或 Twitter 与我们分享你验证过的智能合约吧!
让我们知道 如果你有任何反馈或新的主题请求。我们非常想听到你的声音。
- 原文链接: quicknode.com/guides/eth...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!