web3js - 从输入数据中查找函数名和参数
问题描述
事务哈希给出这样的输入数据“0xa9059cbb00000000000000000000000024c38db6c4a85b3e6b58631de2334105f6209da300000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000006 如果我调用这个函数 let 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)
是给出的第一个示例。
推荐阅读
- sql - 添加 Distinct() 会导致巨大的性能问题(仅有时)
- python - 读取 csv 时阻止 pandas 对数据进行分组
- php - 如何根据单击的链接创建一个加载动态/不同内容的 PHP 页面?
- r - purrr - pmap - 以整洁的风格为函数参数名称提供不同的列名
- javascript - 标签组件不会使用 BackSpace 删除 - React Native
- styles - stylegan 编码器打印图像太小
- c# - 使用窗口标题或进程名称
- python - 允许在 Sphinx 文档字符串的简短摘要中使用句号
- linux - 如何将两个 CSV 文件与 Linux 列合并?
- javascript - 使用 JavaScript 将元素中的某些文本转换为元素本身