Solidity
如何使用 Python 在乙太坊合約中獲取方法名稱的十六進制等效項?
要呼叫的函式被呼叫
xyz()
。我的程式碼:
web3.sha3("xyz()").substr(0,10)
錯誤:
AttributeError:模組“web3”沒有屬性“sha3”
在較新版本的 web3 中,會出現上述錯誤。還有什麼可以用來獲得函式名的十六進制等價物?
程式碼來源: 如何知道數據中使用的十六進制程式碼來呼叫特定的合約函式?(該解決方案不適用於較新版本的 web3)
該方法的十六進制等效項稱為函式選擇器。
函式選擇器是函式簽名的 Keccak 散列的前 4 個字節,參數打包為字元串類型。
您可以通過以下方式獲得:
>>> from web3 import Web3 >>> Web3.keccak(text="xyz()") HexBytes('0x356bc81e51224d094b17ccb8f80b1e659fe334bcf15c6240857cce0568cbb0ba') >>> hex_bytes = Web3.keccak(text="xyz()") >>> print(hex_bytes[0:4].hex()) 0x356bc81e
你正在尋找這個:
編碼函式簽名
web3.eth.abi.encodeFunctionSignature(functionName);
將函式名稱編碼為其 ABI 簽名,這是函式名稱的 sha3 雜湊的前 4 個字節,包括類型。
https://web3js.readthedocs.io/en/v1.2.11/web3-eth-abi.html
在 python 中應該存在一個等效的呼叫