web3.py 手動從公鑰字元串派生地址F奧德__嗯嗯_____F這rd在米米一世和sfor dummies
假設我需要從公鑰字元串中派生地址。
0xbb8250cc01a0afa7dcaee987b2adda8d1b0a0bb2f7cc427bd942a98c7837364d62e6ea4728a99db39fd55a6f7474a159ca88a96b40279044a1349a2280c8cd43
根據這裡的回复,我需要:
- 散列它:我使用了這個線上散列生成器,因為由於某種原因,內置
Web3.sha3()
函式似乎沒有返回相同的值,而且我不知道如何指定soliditySha3()
函式的輸入。所以雜湊現在是:
>>> hash = a591d48139d1f97e701cc15cb42a35c0ba7abf1aa44cfc82cdba0033779719eb
- 剪切前 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’