本文介绍了如何使用Hardhat框架更改已在主网络和测试网络上部署的智能合约的字节码。作者提供了实际应用的示例代码,包括如何配置Hardhat和调用区块链函数来实现字节码更改。这对于测试和修改合约逻辑非常有用。
作者:MixBytes团队
使用Solidity或Vyper编程语言开发智能合约时,总是需要在一个特殊环境中创建一些测试。目前,为了在测试网部署新创建的智能合约,存在几种工具,其中最受欢迎的是hardhat、brownie和truffle。在本文中,我们将讨论如何更改已在主网部署的智能合约的字节码,因此也可以在测试网中进行更改。如果你想更改某些逻辑以供测试使用,或如果你想更改预言机中的价格,比如下面将讨论的案例,这可能会很有用。
如何正确使用hardhat函数来更改已部署智能合约的字节码?
为了准备这些测试,我们使用了这篇文章作为示例。首先,你需要通过npm或yarn安装hardhat > 2.4.0。接下来,你必须将要更改的智能合约代码的副本添加到项目存储库中。在我们开始讨论代码之前,有一个小建议,如果你在hardhat配置中使用blockGasLimit,你必须正确调整它,以便测试能够执行(在我们的案例中,我们简单地从配置中删除了此参数)。将所有必要的更改添加到此代码中,并通过ethers.getContractFactory将其部署到测试网,如下所示:
const oracles = await ethers.getContractFactory("AaveOracle");
const oracle = await oracles.deploy(
["0x6B175474E89094C44Da98b954EedeAC495271d0F"],
["0x773616E4d11A78F511299002da57A0a94577F1f4"],
"0x5B09E578cfEAa23F1b11127A658855434e4F3e09",
WETH.address,
);
在上面的代码中,我们有AaveOracle,其中包含Aave Oracle的所有代码,附加了一些小修改,以及WETH.address,它只是以太坊主网中的包裹ETH字符串(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2)。deploy函数中的第一个参数是一个资产数组,这在预言机中使用(在我们的案例中,它是数组中有一个资产== DAI地址0x6B175474E89094C44Da98b954EedeAC495271d0F)。第二个参数是数据源数组(在我们的案例中,它是chainlink的DAI/ETH数据源0x773616E4d11A78F511299002da57A0a94577F1f4)。第三个参数是回退预言机(在我们的案例中,它只是Aave回退预言机0x5B09E578cfEAa23F1b11127A658855434e4F3e09)。完成所有这些步骤后,你可以使用hardhat函数eth_getCode()来获取新部署智能合约的字节码,然后你必须使用eth_setCode()将此代码添加到测试网中的合约地址:
const code = await hre.network.provider.send("eth_getCode", [
oracle.address,
]);
await hre.network.provider.send("hardhat_setCode", [
"0xA50ba011c48153De246E5192C8f9258A2ba79Ca9",
code,
]);
在上面的代码中,我们获取了已部署合约的字节码,并将其设置到Aave Oracle,该合约地址为0xA50ba011c48153De246E5192C8f9258A2ba79Ca9。
你现在已经学会如何在hardhat框架中为测试目的更改已部署智能合约的字节码。有关供审计员和开发人员使用的有用工具的更多信息,请关注我们的后续文章。
https://hardhat.org/getting-started/
https://eth-brownie.readthedocs.io/en/stable/
https://www.youtube.com/watch?v=nkvIFE2QVp0&list=PLVOHzVzbg7bFUaOGwN0NOgkTItUAVyBBQ
MixBytes 是一个专家区块链审计师和安全研究团队,专注于为EVM兼容和Substrate基础项目提供全面的智能合约审计和技术咨询服务。在X上关注我们,及时了解最新的行业趋势和见解。
- 原文链接: mixbytes.io/blog/how-cha...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!