{"content":{"title":"如何更改已部署智能合约的字节码","body":"作者：MixBytes团队\r\n\r\n![](https://img.learnblockchain.cn/2025/03/09/15.jpg)\r\n\r\n## 简介\r\n\r\n使用Solidity或Vyper编程语言开发智能合约时，总是需要在一个特殊环境中创建一些测试。目前，为了在测试网部署新创建的智能合约，存在几种工具，其中最受欢迎的是hardhat、brownie和truffle。在本文中，我们将讨论如何更改已在主网部署的智能合约的字节码，因此也可以在测试网中进行更改。如果你想更改某些逻辑以供测试使用，或如果你想更改预言机中的价格，比如下面将讨论的案例，这可能会很有用。\r\n\r\n如何正确使用hardhat函数来更改已部署智能合约的字节码？\r\n\r\n为了准备这些测试，我们使用了[这篇文章](https://kndrck.co/posts/local_erc20_bal_mani_w_hh/)作为示例。首先，你需要通过npm或yarn安装hardhat > 2.4.0。接下来，你必须将要更改的智能合约代码的副本添加到项目存储库中。在我们开始讨论代码之前，有一个小建议，如果你在hardhat配置中使用blockGasLimit，你必须正确调整它，以便测试能够执行（在我们的案例中，我们简单地从配置中删除了此参数）。将所有必要的更改添加到此代码中，并通过ethers.getContractFactory将其部署到测试网，如下所示：\r\n\r\n```js\r\nconst oracles = await ethers.getContractFactory(\"AaveOracle\");\r\nconst oracle = await oracles.deploy(\r\n      [\"0x6B175474E89094C44Da98b954EedeAC495271d0F\"],\r\n      [\"0x773616E4d11A78F511299002da57A0a94577F1f4\"],\r\n      \"0x5B09E578cfEAa23F1b11127A658855434e4F3e09\",\r\n      WETH.address,\r\n    );\r\n```\r\n\r\n在上面的代码中，我们有AaveOracle，其中包含Aave Oracle的所有代码，附加了一些小修改，以及WETH.address，它只是以太坊主网中的包裹ETH字符串（0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2）。deploy函数中的第一个参数是一个资产数组，这在预言机中使用（在我们的案例中，它是数组中有一个资产== DAI地址0x6B175474E89094C44Da98b954EedeAC495271d0F）。第二个参数是数据源数组（在我们的案例中，它是chainlink的DAI/ETH数据源0x773616E4d11A78F511299002da57A0a94577F1f4）。第三个参数是回退预言机（在我们的案例中，它只是Aave回退预言机0x5B09E578cfEAa23F1b11127A658855434e4F3e09）。完成所有这些步骤后，你可以使用hardhat函数eth\\_getCode()来获取新部署智能合约的字节码，然后你必须使用eth\\_setCode()将此代码添加到测试网中的合约地址：\r\n\r\n```js\r\nconst code = await hre.network.provider.send(\"eth_getCode\", [\r\n        oracle.address,\r\n    ]);\r\nawait hre.network.provider.send(\"hardhat_setCode\", [\r\n      \"0xA50ba011c48153De246E5192C8f9258A2ba79Ca9\",\r\n      code,\r\n    ]);\r\n```\r\n\r\n在上面的代码中，我们获取了已部署合约的字节码，并将其设置到Aave Oracle，该合约地址为0xA50ba011c48153De246E5192C8f9258A2ba79Ca9。\r\n\r\n## 结论\r\n\r\n你现在已经学会如何在hardhat框架中为测试目的更改已部署智能合约的字节码。有关供审计员和开发人员使用的有用工具的更多信息，请关注我们的后续文章。\r\n\r\n## 附加阅读和教程\r\n\r\n[https://hardhat.org/getting-started/](https://hardhat.org/getting-started/)\r\n\r\n[https://eth-brownie.readthedocs.io/en/stable/](https://eth-brownie.readthedocs.io/en/stable/)\r\n\r\n[https://www.youtube.com/watch?v=nkvIFE2QVp0&list=PLVOHzVzbg7bFUaOGwN0NOgkTItUAVyBBQ](https://www.youtube.com/watch?v=nkvIFE2QVp0&list=PLVOHzVzbg7bFUaOGwN0NOgkTItUAVyBBQ)\r\n\r\n- MixBytes是谁？\r\n\r\n\r\n[MixBytes](https://mixbytes.io/) 是一个专家区块链审计师和安全研究团队，专注于为EVM兼容和Substrate基础项目提供全面的智能合约审计和技术咨询服务。在[X](https://twitter.com/MixBytes)上关注我们，及时了解最新的行业趋势和见解。\r\n\r\n>- 原文链接： [mixbytes.io/blog/how-cha...](https://mixbytes.io/blog/how-change-bytecode-already-deployed-smart-contract)\r\n>- 登链社区 AI 助手，为大家转译优秀英文文章，如有翻译不通的地方，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/24680","address":null},"history":null,"timestamp":1741490252,"version":1}