当我更改编译器版本 0.8 然后通过错误时,Solidity 相关问题
Solidity related question when i change compiler version 0.8 then through error
通过使用 solidity 编译器 0.8 通过不允许从“地址”到“uint256”的显式类型转换。
for (uint idx = 0; idx < v.length; idx++){
address signer = ecrecover(signedHash, v[idx], r[idx], s[idx]);
require(admins[signer]);
require(uint256(signer) > uint256(lastVoter));
lastVoter = signer;
emit NewCheckpointVote(_sectionIndex, _hash, v[idx], r[idx], s[idx]);
// Sufficient signatures present, update latest checkpoint.
if (idx+1 >= threshold){
hash = _hash;
height = block.number;
sectionIndex = _sectionIndex;
return true;
}
}
// We shouldn't wind up here, reverting un-emits the events
revert();
}
使用最新版本的 solidity 编译器,您必须将地址显式转换为所需类型的 20 字节长值。在您的情况下,您可以使用 uint256(uint160(someAddress))
;
通过使用 solidity 编译器 0.8 通过不允许从“地址”到“uint256”的显式类型转换。
for (uint idx = 0; idx < v.length; idx++){
address signer = ecrecover(signedHash, v[idx], r[idx], s[idx]);
require(admins[signer]);
require(uint256(signer) > uint256(lastVoter));
lastVoter = signer;
emit NewCheckpointVote(_sectionIndex, _hash, v[idx], r[idx], s[idx]);
// Sufficient signatures present, update latest checkpoint.
if (idx+1 >= threshold){
hash = _hash;
height = block.number;
sectionIndex = _sectionIndex;
return true;
}
}
// We shouldn't wind up here, reverting un-emits the events
revert();
}
使用最新版本的 solidity 编译器,您必须将地址显式转换为所需类型的 20 字节长值。在您的情况下,您可以使用 uint256(uint160(someAddress))
;