0

我目前正在使用一些网站来阅读一些有用的数据。使用浏览器的 Inspect>Network,我可以看到这些数据来自 JSON RPC 请求到(https://bsc-dataseed1.defibit.io/)公共可用的 BSC 资源管理器 API 端点。

此请求具有以下格式:

请求参数:

{"jsonrpc":"2.0","id":43,"method":"eth_call","params":[{"data":"...LONGBYTESTRING!!!","to":"0x1ee38d535d541c55c9dae27b12edf090c608e6fb"},"latest"]}

回复:

{"jsonrpc":"2.0","id":43,"result":"...OTHERVERYLONGBYTESTRING!!!"}

我知道该to字段对应于智能合约的地址0x1ee38d535d541c55c9dae27b12edf090c608e6fb

看起来这请求“查询”合同以获取某些数据(但它的成本为 0 气体?)。

据我了解(很少),编码数据可以使用模式解码,我认为我可以从智能合约地址中获得。(也许就是这样?https://api.bscscan.com/api ?module=contract&action=getabi&address=0x1ee38d535d541c55c9dae27b12edf090c608e6fb )

我的目标是了解请求中发送的数据和响应中给出的数据,这样我就可以从网站上复制数据,而不必从网站上抓取这些数据。

谢谢。

4

1 回答 1

1

零成本是因为eth_call方法。它是一种只读方法,不会记录区块链的任何状态更改(主要用于 getter 函数,标记为viewpure在 Solidity 中)。

data领域包括:

  • 0x
  • 4 个字节(8 个十六进制字符)函数签名
  • 其余的是传递给函数的参数。

您可以在此其他答案中找到将函数名称转换为签名的示例。

于 2021-05-21T16:16:27.457 回答