我有一个从UUPSUpgradeable智能契约继承下来的智能契约。我首先将其部署为v1,然后部署代理合同。这是我的代理合同:
// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;
import "@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract Proxy is UUPSUpgradeable, Ownable {
constructor(address _impl) {
_upgradeTo(_impl);
}
function _authorizeUpgrade(address) internal override onlyOwner {}
}我将v1.address作为构造函数参数提供给代理。我做的对吗?如果是,如何将tx发送给代理进行委托?正如你在标题中所看到的那样,我正在使用“安全帽”进行测试。
发布于 2022-05-08 11:46:49
使用attach测试已经部署的合同和一些特定的合同ABI。假设您的v1合同名为V1,您可以使用hardhat-waffle测试代理合同,如下所示:
const V1 = await ethers.getContractFactory("V1");
const v1 = await V1.deploy();
const Proxy = await ethers.getContractFactory("Proxy");
const proxy = await Proxy.deploy(v1.address);
const proxiedV1 = await V1.attach(proxy.address);然后,您可以使用proxiedV1对象调用V1的S方法和proxy契约。例如,如果V1是一个具有initialize方法的ERC20Upgradeable契约(根据UUPS模式):
await proxiedV1.initialize();
await proxiedV1.transfer(addr1, value1);
console.log(await proxiedV1.balanceOf(addr1));https://ethereum.stackexchange.com/questions/120787
复制相似问题