I am trying to derive the Method ID, the Keccak (SHA-3) hash, in Python so that I may call the functions of my contracts once they are deployed as detailed in the ABI documentation: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI
This details that 0xcdcd77c0
should be the ID derived for the function with the signature baz(uint32,bool)
I have tried to replicate this using the python sha3 module (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'
How can I get the first four bytes from this in the correct format to use as a method signature in a transaction? Converting this digest to hex doesn't seem to give the correct signature.
s = hashlib.sha3_256()
. If you consider updating your post to focus on the wrong library issue (not the wrong use of it at the same time), then s.hexgiest() of your message is'af54f249a9bc75430f5d7fcc6a2154e9f76ac500e4094c7a2167e43ff7fc53f7'
– Tankman六四 Feb 17 '18 at 10:17