特别是keccak256的用法和此处使用的return语句。
function isTokenTransferOK(address currentOwner, address newOwner)
public
pure
returns (bool ok)
{
// Check an arbitrary condition to see if transfer should proceed
return keccak256(abi.encodePacked(currentOwner, newOwner))[0] == 0x7f;
}
答案 0 :(得分:1)
abi.encodePacked()
本质上是串联数据。因此,这里的调用形成了一个40字节的序列,其中前20个字节是地址currentOwner
,后20个字节是地址newOwner
。
keccak256()
是非常类似于SHA3的哈希函数。它用于计算abi.encodePacked()
的输出的哈希值。
[0]
检索数组的第一个元素。在这种情况下,它是上面计算出的哈希的第一个字节。
== 0x7f
是true
,当且仅当该字节是十六进制值0x7f
时。
因此,该函数对当前和新的所有者地址进行哈希处理,如果该哈希的第一个字节为true
,则返回0x7f
。否则,它将返回false
。