Solidity开发:如何获取由其他合约部署的合约地址?
问题解决说明
你贴出的代码本身完全正确——通过address(new StorageContract(_userAddress))获取新部署合约地址的方式符合Solidity 0.8.x规范,能正常将地址存入ContractData结构体中。
你之前遇到的错误Return argument type struct StorageFactory.ContractData storage ref is not implicitly convertible to expected type (type of first return variable) address,应该是编写代码时,某个函数声明返回address类型,但实际返回的是userAddressToStruct[_userAddress]这个结构体实例,导致类型不匹配。现在代码能正常运行,说明你已经无意中修正了这个问题。
如果需要调试验证,可以给createStorageContract函数添加返回值:
function createStorageContract(address _userAddress) public returns(address) { require(!userAddressToStruct[_userAddress].exists, "Account already exists"); address contractAddress = address(new StorageContract(_userAddress)); userAddressToStruct[_userAddress].contractAddress = contractAddress; userAddressToStruct[_userAddress].exists = true; return contractAddress; }
调用该函数后可直接获取新合约地址,也能通过userAddressToStruct映射查询存储的结构体数据。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

