Solidity
在 Solidity 中將 64 字節的公鑰轉換為 20 字節的地址
我正在嘗試將 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" }