如何解决将 JSON RPC 请求解码为合约
我目前正在使用一些网站来阅读一些有用的数据。使用浏览器的 Inspect>Network,我可以看到这些数据来自 JSON RPC 请求(https://bsc-dataseed1.defibit.io/)公共可用的 BSC Explorer API 端点。
此请求具有以下格式:
请求参数:
{"jsonrpc":"2.0","id":43,"method":"eth_call","params":[{"data":"...LONGBYTESTRING!!!","to":"0x1ee38d535d541c55c9dae27b12edf090c608e6fb"},"latest"]}
回复:
{"jsonrpc":"2.0","result":"...OTHERVERYLONGBYTESTRING!!!"}
我知道 to
字段对应于智能合约 0x1ee38d535d541c55c9dae27b12edf090c608e6fb 的地址。
看起来这个请求“查询”合约以获得一些数据(但它花费 0 gas?)。
据我所知,编码数据可以用模式解码,我想我可以从智能合约地址中获得。 (也许是这样?https://api.bscscan.com/api?module=contract&action=getabi&address=0x1ee38d535d541c55c9dae27b12edf090c608e6fb)
我的目标是了解请求中发送的数据和响应中给出的数据,以便我可以从网站复制数据,而不必从网站上抓取这些数据。
谢谢。
解决方法
零成本是因为 eth_call 方法。它是一种只读方法,不会记录区块链的任何状态更改(主要用于 getter 函数,在 Solidity 中标记为 view
或 pure
)。
data
字段包括:
0x
- 4 个字节(8 个十六进制字符)函数签名
- 剩下的就是传递给函数的参数了。
您可以在此 other answer 中找到将函数名称转换为签名的示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。