Solidity中的智能合约名称作为数据类型



我正在学习一个教程。在那件事上,我把一份合同导入了另一份合同。然后,我使用导入的合约的名称作为数据类型名称来初始化一个数组。如何使用合同名称作为数据类型

import "./SimpleStorage.sol"; //importing another contract
contract StorageFactory {
SimpleStorage[] public simpleStorageArray ; //global variable
function createSimpleStorageContract() public {
SimpleStorage simpleStorage = new SimpleStorage();
simpleStorageArray.push(simpleStorage);
}
function sfStore(uint256 _simpleStorageIndex, uint256 _simpleStorageNumber) public {
SimpleStorage simpleStorage = simpleStorageArray[_simpleStorageIndex];  
simpleStorage.store(_simpleStorageNumber);
}
function sfGet(uint256 _simpleStorageIndex) public view returns(uint256){
SimpleStorage simpleStorage = simpleStorageArray[_simpleStorageIndex];
return simpleStorage.retrieve();
}
}

合同和接口类型充当指向目标合同的指针。该代码假定目标合约实现了该类型的所有externalpublic函数。

在您的案例中,StorageFactory假设存储在simpleStorageArray阵列中的所有地址都实现了SimpleStorage的接口。

因此,如果SimpleStorage实现这个函数:get() external returns (uint256)StorageFactory将期望这个函数返回一个长度为256位的二进制响应,然后将其转换为无符号整数。

文档:https://docs.soliditylang.org/en/v0.8.17/types.html#contract-类型

最新更新