Contract-Development
在 Python 中獲取方法 ID“Keccak 雜湊”
我正在嘗試在 Python 中派生方法 ID、Keccak (SHA-3) 雜湊,以便在按照 ABI 文件中的詳細說明部署契約的功能後,我可以呼叫它們:https ://github.com/ethereum /wiki/wiki/Ethereum-Contract-ABI
此詳細資訊
0xcdcd77c0
應該是為具有簽名的函式派生的 IDbaz(uint32,bool)
我嘗試使用 python sha3 模組(https://pypi.python.org/pypi/pysha3)複製它:
>>> import sys >>> import hashlib >>> import sha3 >>> s = hashlib.sha3_512() >>> s.update(b"baz(uint32,bool)") >>>s.hexdigest() 'f1bb0cbc152d49505684ee7d2a37a860af1820ff8052ed6b32eddd3d82f97e89b24aac5ef334f94474264795cb7672339aecfc2cd2dc1cd0b87adccada2e7bc1'
如何以正確的格式從中獲取前四個字節以用作事務中的方法簽名?將此摘要轉換為十六進制似乎沒有給出正確的簽名。
使用最新 (>=1.0) 版本的 pysha3,您可以使用以下命令重新創建方法 ID:
from sha3 import keccak_256 sha3_hash = keccak_256("baz(uint32,bool)").hexdigest() method_id = "0x"+sha3_hash[:8] print method_id
如果您的 pysha3 舊(例如固定在
pysha3==0.3
),您需要:from sha3 import sha3_256 sha3_hash = sha3_256("baz(uint32,bool)").hexdigest() method_id = "0x"+sha3_hash[:8] print method_id
說明:在乙太坊採用了當時最新的 SHA3 候選方案後,標準發生了變化。乙太坊使用的現在稱為 Keccak 而不是 SHA3。