为什么 Fetch 合约中的 get 函数无法获取从 SimpleStorage 合约导入的 storeData 变量的值。两份合同都存在于单独的文件中。
文件名-
importCheck.sol
代码-
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// import "contracts/Hello.sol";
import * as newSymbol from "contracts/Hello.sol";
contract Fetch {
newSymbol.SimpleStorage public demo = new newSymbol.SimpleStorage();
function getStoreData() public view returns(uint) {
return demo.get();
}
}
文件名-
Hello.sol
代码-
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
contract SimpleStorage {
uint public storeData;
function set(uint x) public {
storeData = x;
}
function get() public view returns (uint){
return storeData;
}
}
我已经在 Remix VM 和 Sepolia 测试网中部署了合约,但 storeData 变量仍然没有返回 SimpleStorage 合约中分配的值。
newSymbol.SimpleStorage public demo = new newSymbol.SimpleStorage();
原始代码中的这一行部署了
SimpleStorage
合约的新实例,并将其存储到新地址(该地址在您的 demo
变量中可用)。
如果您想访问现有合约,您可以创建一个
contract
或 interface
类型指针 ,不带 new
关键字,并将现有合约地址传递给它。
newSymbol.SimpleStorage public demo = newSymbol.SimpleStorage(address(0x123));