从输入数据中查找函数名称和参数

Find the function name and parameter from input data

交易哈希给出这样的输入数据 "0xa9059cbb00000000000000000000000024c38db6c4a85b3e6b58631de2334105f6209da300000000000000000000000000000000000000000000000000000dca4f1516a8". 如果我调用这个函数 让 encodedFunctionSignature = web3.eth.abi.encodeFunctionSignature('transfer(address,uint256)');

它给我这个“0xa9059cbb”。etherscan 调用这个 methodId

我的问题是如何从这个“0xa9059cbb”中取回传输(地址,uint256)

函数选择器是规范化函数签名的 keccak256 散列的前四个字节。在这种情况下,web3.sha3('transfer(address,uint256)').substring(0, 10) === "0xa9059cbb".

除非提供合约的代码或 ABI,否则通常不可能逆转此过程。也就是说,只要其他人以前使用过给定的函数选择器并提供了其原始名称,您就可以改用该信息。

此处列出了常用函数选择器:https://github.com/ethereum-lists/4bytes,实际上 transfer(addresss,uint256) 是给出的第一个示例。

我认为https://github.com/ethereum-lists/4bytes对你有帮助 获取前 4 个字节的数据并在此 github 中使用 lib 来获取交易的函数名称

或者您可以在这里签到https://www.4byte.directory/