Адрес Solidity-Type, не преобразуемый в тип uint256
Я создал массив структур, а затем попытался получить значения каждой учетной записи массива. Но мне не удалось с массивом при передаче адресной переменной, которая содержит msg.sender
и тип не является явно конвертируемым в uint256
, Как мне это сделать?
3 ответа
Начиная с Solidity v0.8, вы больше не можете использовать
address
к
uint256
.
Теперь вы можете использовать:
uint256 i = uint256(uint160(address(msg.sender)));
function f(address a) internal pure returns (uint256) {
return uint256(uint160(a));
}
Вы можете привести это явно:
uint256 i = uint256(msg.sender);
function f(address a) constant returns (uint256) {
return uint256(a);
}
До версии Solidity 0.8.0 вы могли:
pragma <0.8.0;
return address(toUint(item));
Post v0.8.0 Solidity, который вы должны сделать сейчас:
pragma ^0.8.0
return address(uint160(toUint(item)));
- использованная литература
address(uint)
а также
uint(address)
: преобразование категории типа и ширины. Замените это на
address(uint160(uint)
а также
uint(uint160(address))
соответственно.
см. критические изменения версии 0.8.0, документацию Solidity