我正在尝试理解使用web3的web应用程序是如何提取数据的,以及我如何检查它。
示例:
https://charts.bogged.finance/?token=0xD2602dBB063627B80D5ae671007900F558c49E35
如果您查看网络选项卡,它将包含以下请求:
{
"id": 19,
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"data": "0x0eb22982000000000000000000000000d2602dbb06362000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
"to": "0x0bd91f45fca6428680c02a79a2496d6f97bdf24a"
},
"latest"
]
}和响应,例如:
{
"id": 19,
"jsonrpc": "2.0",
"result": "0x000000000000000000000000000000000000000000000000b0020ad7e5d55dc9"
}两者都不是特别有用。
据我所知,to是合同地址。
发布于 2021-05-14 19:41:21
请求转到https://bsc-dataseed.binance.org/,这是Binance Smart Chain的JSON-RPC endpoint。这个特殊的节点似乎是由Binance直接操作的。
eth_call是JSON-RPC的只读方法。
params.data包含传递给函数的ABI-encoded函数签名(0x后的前4个字节或8个十六进制字符)和参数(签名后)。
不幸的是,目标契约的创建者拥有not published其源代码,并且decompiled字节码有点混乱(反编译器返回一些伪代码)。但是它显示了带有签名0eb22982的函数(在伪代码的line 99上)使用两个地址作为参数:
def unknown0eb22982(addr _param1, addr _param2) payable:
require calldata.size - 4 >= 64
require ext_code.size(stor2)
static call stor2.0x8fc06c02 with:
gas gas_remaining wei
args addr(_param1), _param2,调用一个external contract (通过查询storage slot找到它的地址,也没有发布源代码),转换结果并返回转换。
如果他们发布了源代码,那么您可以通过实例性函数定义找到一个可以转换为已知签名的函数。
您可以在my other answer中找到有关将定义(例如transferOwnership(address))转换为签名(例如f2fde38b)的更多信息。
https://stackoverflow.com/questions/67529199
复制相似问题