找出 solidity 接口问题
Figuring out a solidity Interface issue
我得到了一个 solidity 接口的例子。
1/ 如果此方法准确无误,请提供任何线索,因为它是在继承自合同而不是扩展合同中实现接口。
2/ 我尝试实现它,contractA 函数 运行 正确,但是 contractB getCount 函数不正确 运行ning。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface InterfaceA {
function count() external view returns (uint256);
function increment() external;
}
contract contractA {
uint256 number = 0;
function count() external view returns (uint256) {
return number;
}
function increment() external {
number++ ;
}
}
// SPDX-License-Identifier: MIT
import './contractA.sol' ;
pragma solidity ^0.8.0;
contract contractB {
address addressA;
function setPointer(address _addressA) external {
addressA = _addressA;
}
function getCount() external view returns (uint256) {
InterfaceA b = InterfaceA(addressA);
b.count();
}
function addToIncrement() external {
InterfaceA b = InterfaceA(addressA);
b.increment();
}
}
我认为唯一的问题是您没有return从 getCount 获取任何信息。你添加了return签名,你编译的时候应该会有一个警告。
function getCount() external view returns (uint256) {
InterfaceA b = InterfaceA(addressA);
return b.count();
}
我得到了一个 solidity 接口的例子。
1/ 如果此方法准确无误,请提供任何线索,因为它是在继承自合同而不是扩展合同中实现接口。
2/ 我尝试实现它,contractA 函数 运行 正确,但是 contractB getCount 函数不正确 运行ning。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface InterfaceA {
function count() external view returns (uint256);
function increment() external;
}
contract contractA {
uint256 number = 0;
function count() external view returns (uint256) {
return number;
}
function increment() external {
number++ ;
}
}
// SPDX-License-Identifier: MIT
import './contractA.sol' ;
pragma solidity ^0.8.0;
contract contractB {
address addressA;
function setPointer(address _addressA) external {
addressA = _addressA;
}
function getCount() external view returns (uint256) {
InterfaceA b = InterfaceA(addressA);
b.count();
}
function addToIncrement() external {
InterfaceA b = InterfaceA(addressA);
b.increment();
}
}
我认为唯一的问题是您没有return从 getCount 获取任何信息。你添加了return签名,你编译的时候应该会有一个警告。
function getCount() external view returns (uint256) {
InterfaceA b = InterfaceA(addressA);
return b.count();
}