Addresses

web3.py 手動從公鑰字元串派生地址F奧德__嗯嗯_____F這rd在米米一世和sfor dummies

  • August 18, 2020

假設我需要從公鑰字元串中派生地址。 0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43

根據這裡的回复,我需要:

  1. 散列它:我使用了這個線上散列生成器,因為由於某種原因,內置Web3.sha3()函式似乎沒有返回相同的值,而且我不知道如何指定soliditySha3()函式的輸入。

所以雜湊現在是:

>>> hash = a591d48139d1f97e701cc15cb42a35c0ba7abf1aa44cfc82cdba0033779719eb

  1. 剪切前 20 個字元並添加0x前綴:

hash = "0x" + hash[24:] => 0xb42a35c0ba7abf1aa44cfc82cdba0033779719eb

不幸的是,這不是正確的地址。地址應該是0xD4aD2c314d60089654bf292874AC0488F3ee77bA

那麼假人從公鑰字元串中獲取地址的正確方法是什麼?

看看這裡:掌握乙太坊 - 密鑰和地址。本章逐步介紹了獲取公鑰的過程。

我認為主要問題是線上編碼器不期望十六進制輸入。嘗試使用 web3.js,它似乎工作得很好:

key = "0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43"

“0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43”

hash = web3.utils.keccak256(key)

“0x31e2c58dcae613b45af300b1d4ad2c314d60089654bf292874ac0488f3ee77ba”

address = "0x" + hash.slice(24+2)

“0xd4ad2c314d60089654bf292874ac0488f3ee77ba”

編輯:Web3.py 對我也一樣

>>> key = "0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43"
>>> hash = Web3.sha3(hexstr=key)
>>> address = Web3.toHex(hash[-20:])
>>> address

‘0xd4ad2c314d60089654bf292874ac0488f3ee77ba’

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