基本上,我需要在我的合同中使用戴铭天。我想测试它,所以我复制了DAI智能合同代码,并将其部署在本地主机上。一切都很好,但我不能为代码编写硬质测试,因为它不知道部署在本地主机上的契约。在我的合同中使用另一个合同时,我应该如何编写测试?
address daiContractAddress = 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0; // HOW TO GET THIS TO HARDHAT TESTS?
function getDaiBalanceForOwner() external view returns(uint){
IERC20 dai = IERC20(address(daiContractAddress ));
return dai.balanceOf(msg.sender); //Error: Transaction reverted: function call to a non-contract account
}发布于 2021-08-16 09:55:49
在@LauriPeltonen的帮助下,最后的解决方案是:我只是在beforeEach中部署我的dai合同,然后取其地址并将其传递给合同constructor。
address public daiContractAddress;
constructor(address _daiContractAddress ) {
daiContractAddress = _daiContractAddress;
}
function getDaiBalanceForOwner() external view returns(uint){
IERC20 dai = IERC20(address(daiContractAddress));
return dai.balanceOf(msg.sender);
}beforeEach(async function () {
dai = await ethers.getContractFactory("Dai");
myContract= await ethers.getContractFactory("MyContract");
dai = await dai.deploy(1); //deploying dai contract first
myContract = await myContract.deploy(dai.address); //deploying my contract later using dai.address in constructor
});
describe("Deployment", function() {
it("Should be able to implement usd dai stablecoin", async function() {
expect(ethers.utils.formatEther(await myContract.getDaiBalanceForOwner())).to.equal("0.0");
});
});https://ethereum.stackexchange.com/questions/107177
复制相似问题