Solidity

在 Solidity 中將 64 字節的公鑰轉換為 20 字節的地址

  • April 4, 2019

我正在嘗試將 128 個字元的十六進制編碼公鑰轉換為 Solidity (0.5) 中的地址。

例如,公鑰將是:

af80b90d25145da28c583359beb47b21796b2fe1a23c1511e443e7a64dfdb27d7434c380f0aa4c500e220aa1a9d068514b1ff4d5019e624e7ba1efe82b340a59

這應該生成一個地址:

0x627306090abaB3A6e1400e9345bC60c78a8BEf57

如何在 Solidity 中將 64 字節的公鑰轉換為 20 字節的地址?

function publicKeyToAddress (bytes memory publicKey) public pure returns (bytes20) {
   require (publicKey.length == 64);
   return bytes20 (uint160 (uint256 (keccak256 (publicKey))));
}

在混音中它給了我:

輸入:

{
   "bytes publicKey": "0xaf80b90d25145da28c583359beb47b21796b2fe1a23c1511e443e7a64dfdb27d7434c380f0aa4c500e220aa1a9d068514b1ff4d5019e624e7ba1efe82b340a59"
}

輸出:

{
   "0": "bytes20: 0x627306090abab3a6e1400e9345bc60c78a8bef57"
}

引用自:https://ethereum.stackexchange.com/questions/69213