TNJ*_*ing 1 type-conversion contract typeerror solidity remix
这个功能:
function initializeDomainSeparator() public {
// hash the name context with the contract address
EIP712_DOMAIN_HASH = keccak256(abi.encodePacked(// solium-disable-line
EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,
keccak256(bytes(name)),
bytes32(address(this))
^^^^^^^^^^^^^^^^^^^
));
}
Run Code Online (Sandbox Code Playgroud)
正在消除此错误:
TypeError: Explicit type conversion not allowed from "address" to "bytes32".
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?杂注可靠性^0.8.4;
从 Solidity 0.8.0 开始,您不能再address直接转换为bytes32. 您必须执行两次单独的转换:首先是 to bytes20,它将类型从address固定字节更改为固定字节,然后才是bytes32扩展长度。
对显式类型转换有新的限制。
int仅当符号、宽度或类型类别( 、address、bytesNN等)最多发生一项变化时才允许转换。要执行多项更改,请使用多次转换。
address(uint)anduint(address):同时转换类型类别和宽度。分别将其替换为address(uint160(uint))和uint(uint160(address))。
所以你的情况下正确的转换是bytes32(bytes20(address(this))).
但abi.encodePacked()不要求参数是字节类型,事实上你根本不需要在这里进行转换:
EIP712_DOMAIN_HASH = keccak256(abi.encodePacked(// solium-disable-line
EIP712_DOMAIN_SEPARATOR_SCHEMA_HASH,
keccak256(bytes(name)),
this
));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3523 次 |
| 最近记录: |