本文介绍了如何将智能合约连接到公共测试网络,以便在类似以太坊主网的环境中免费测试合约。文章涵盖了可用的测试网络、如何设置项目以连接到测试网络、如何部署合约以及如何与测试网络上的合约实例进行交互。文章提供了使用Alchemy访问测试网节点、创建新账户、配置网络以及获取测试网资金的步骤,并演示了如何在Sepolia测试网上部署和交互Box合约。
在你编写完你的合约,并且在本地尝试过它们以及彻底测试过它们之后,是时候转移到一个持久的公共测试环境了,在那里你和你的 beta 用户可以开始与你的应用程序互动。
我们将使用公共测试网络(又名 testnets)来实现这一点,这些网络的操作方式与以太坊主网络类似,但其中的 Ether 没有价值,并且可以免费获取——这使得它们成为无成本测试你的合约的理想选择。
在本指南中,我们将使用我们最喜欢的 Box
合约,并将其部署到测试网络,同时学习:
请记住,部署到公共测试网络是开发以太坊项目时的一个必要步骤。它们提供了一个安全的测试环境,可以紧密地模拟主网络——你不会想在一个错误会让你和你的用户损失金钱的网络中对你的项目进行测试!
有许多测试网络可供你选择,每个网络都有自己的特点。 推荐用于测试去中心化应用程序和智能合约的网络是 Sepolia。(id=11155111)
每个网络都由一个数字 ID 标识。 本地网络通常具有较大的随机值,而 id=1 保留给以太坊主网络。 |
要将我们的项目连接到公共测试网络,我们需要:
虽然你可以启动你自己的连接到测试网络的 以太坊节点,但访问测试网络最简单的方法是通过公共节点服务,例如 Alchemy 或 Infura。 Alchemy 和 Infura 通过免费和付费计划提供对所有测试网络和主网络的公共节点的访问。
我们说一个节点是 公共的,当它可以被公众访问,并且不管理任何帐户时。 这意味着它可以回复查询和中继签名交易,但不能自行签署交易。 |
在本指南中,我们将使用 Alchemy,尽管你可以使用 Infura 或你选择的另一个公共节点提供商。
前往 Alchemy(包括推荐代码),注册并记下你分配的 API 密钥——我们稍后将使用它来连接到网络。
要在测试网络中发送交易,你需要一个新的以太坊账户。 有很多方法可以做到这一点:在这里我们将使用 mnemonics
包,它将输出一个新的助记词(一组 12 个单词),我们将使用它来派生我们的账户:
$ npx mnemonics
drama film snack motion ...
确保你的助记词安全。 不要将秘密提交到版本控制。 即使只是为了测试目的,仍然会有恶意用户为了好玩而破坏你的测试网络部署! |
由于我们使用的是公共节点,因此我们需要在本地签署我们所有的交易。 我们将使用我们的助记词和一个 Alchemy 端点来配置网络。
这部分假设你已经设置了一个项目。 如果你还没有,请前往设置 Solidity 项目指南。 |
我们需要使用到测试网络的新网络连接来更新我们的配置文件。 在这里我们将使用 Sepolia,但你可以使用你想要的任何一个:
// hardhat.config.js
+ const { alchemyApiKey, mnemonic } = require('./secrets.json');
...
module.exports = {
+ networks: {
+ sepolia: {
+ url: `https://eth-sepolia.g.alchemy.com/v2/${alchemyApiKey}`,
+ accounts: { mnemonic: mnemonic },
+ },
+ },
...
};
有关配置选项的信息,请参阅 Hardhat 网络配置 文档。 |
请注意,在第一行中,我们从 secrets.json
文件加载项目 id 和助记词,该文件应如下所示,但使用你自己的值。 确保将其 .gitignore
,以确保你不会将机密信息提交到版本控制!
{
"mnemonic": "drama film snack motion ...",
"alchemyApiKey": "JPV2..."
}
除了 secrets.json 文件之外,你可以使用你喜欢的任何秘密管理解决方案来管理你的项目。 一个流行且简单的选择是使用 dotenv 将秘密作为环境变量注入。 |
我们现在可以通过列出我们可以用于 Sepolia 网络的帐户来测试此配置是否有效。 请记住,你的帐户会有所不同,因为它们取决于你使用的助记词。
$ npx hardhat console --network sepolia
Welcome to Node.js v20.17.0.
Type ".help" for more information.
> accounts = (await ethers.getSigners()).map(signer => signer.address)
[\
'0x6B1c3A2f2160a7Cb2ebc7Fc861b8dB71476C30E7',\
'0xC1310ade58A75E6d4fCb8238f9559188Ea3808f9',\
...\
]
我们还可以通过查询我们的帐户余额来测试与节点的连接。
> (await ethers.provider.getBalance(accounts[0])).toString()
'0'
空的! 这指向我们的下一个任务:获取测试网络资金,以便我们可以发送交易。
大多数公共测试网络都有一个 faucet:一个会免费为你提供少量测试 Ether 的站点。 如果你在 Sepolia 上,请前往 Alchemy 的免费 Sepolia faucet、Infura 的免费 Sepolia faucet 或 Google 的免费 Sepolia faucet 以获取免费的 testETH。
有了资金充足的账户,让我们将我们的合约部署到测试网络!
通过配置为在公共测试网络上工作的项目,我们现在终于可以部署我们的 Box
合约了。 此处的命令与你在 本地开发网络上时完全相同,但由于挖掘新块,因此需要几秒钟才能运行。
$ npx hardhat run --network sepolia scripts/deploy.js
Deploying Box...
Box deployed to: 0x1b99CCaCea0e4046db618770dEF72180F8138641
就是这样! 你的 Box
合约实例将永远存储在测试网络中,并且任何人都可以公开访问。
你可以在区块浏览器(例如 Etherscan)上查看你的合约。 请记住访问你部署合约的测试网络上的浏览器,例如 Sepolia 的 sepolia.etherscan.io。
你可以在此处查看我们在上面示例中部署的合约,以及发送给它的所有交易。 |
你还可以像往常一样与你的实例进行交互,无论是使用 控制台 还是 以编程方式。
$ npx hardhat console --network sepolia
Welcome to Node.js v20.17.0.
Type ".help" for more information.
> const Box = await ethers.getContractFactory('Box');
undefined
> const box = await Box.attach('0x1b99CCaCea0e4046db618770dEF72180F8138641');
undefined
> await box.store(42);
{
hash: '0x330e331d30ee83f96552d82b7fdfa6156f9f97d549a612eeef7283d18b31d107',
...
> (await box.retrieve()).toString()
'42'
请记住,每笔交易都会花费一些 gas,因此你最终需要用更多资金来充值你的帐户。
在公共测试网络上彻底测试你的应用程序之后,你就可以进行开发过程的最后一步了:在生产环境中部署你的应用程序。
- 原文链接: docs.openzeppelin.com/le...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!