将 JSON RPC 请求解码到合约
Decode JSON RPC request to a contract
我目前正在使用一些网站来阅读一些有用的数据。使用浏览器的 Inspect>Network 我可以看到此数据来自 JSON RPC 请求到 (https://bsc-dataseed1.defibit.io/) public 可用的 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 gas?)。
据我所知,编码数据可以用模式解码,我想我可以从智能合约地址获得。 (也许就是这样?https://api.bscscan.com/api?module=contract&action=getabi&address=0x1ee38d535d541c55c9dae27b12edf090c608e6fb)
我的目标是了解请求中发送的数据和响应中给出的数据,这样我就可以从网站上复制数据,而不必从网站上抓取这些数据。
谢谢。
零成本是因为eth_call方法。这是一个只读方法,不记录任何区块链的状态变化(主要用于getter函数,在Solidity中标记为view
或pure
)。
data
字段包括:
0x
- 4 字节(8 个十六进制字符)函数签名
- 剩下的就是传递给函数的参数。
您可以在此 other answer.
中找到将函数名称转换为签名的示例
我目前正在使用一些网站来阅读一些有用的数据。使用浏览器的 Inspect>Network 我可以看到此数据来自 JSON RPC 请求到 (https://bsc-dataseed1.defibit.io/) public 可用的 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 gas?)。
据我所知,编码数据可以用模式解码,我想我可以从智能合约地址获得。 (也许就是这样?https://api.bscscan.com/api?module=contract&action=getabi&address=0x1ee38d535d541c55c9dae27b12edf090c608e6fb)
我的目标是了解请求中发送的数据和响应中给出的数据,这样我就可以从网站上复制数据,而不必从网站上抓取这些数据。
谢谢。
零成本是因为eth_call方法。这是一个只读方法,不记录任何区块链的状态变化(主要用于getter函数,在Solidity中标记为view
或pure
)。
data
字段包括:
0x
- 4 字节(8 个十六进制字符)函数签名
- 剩下的就是传递给函数的参数。
您可以在此 other answer.
中找到将函数名称转换为签名的示例