我无法理解以下代码,任何人都可以向我澄清一下吗?

时间:2019-01-21 09:45:10

标签: solidity

特别是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;
}

1 个答案:

答案 0 :(得分:1)

abi.encodePacked()本质上是串联数据。因此,这里的调用形成了一个40字节的序列,其中前20个字节是地址currentOwner,后20个字节是地址newOwner

keccak256()是非常类似于SHA3的哈希函数。它用于计算abi.encodePacked()的输出的哈希值。

[0]检索数组的第一个元素。在这种情况下,它是上面计算出的哈希的第一个字节。

== 0x7ftrue,当且仅当该字节是十六进制值0x7f时。

因此,该函数对当前和新的所有者地址进行哈希处理,如果该哈希的第一个字节为true,则返回0x7f。否则,它将返回false