在币安智能链上查询账户余额 - 解码 bech32 失败

问题描述

我正在尝试通过币安链 API 获取公共地址的余额

account_id = "0x1f5ff990d661a4DFDC0Ff7D63Ae6A7E995475b95"
response = requests.get("https://dex.binance.org/api/v1/account/" + account_id.lower())
account = response.json()

但我收到以下错误

{'code': 400,'message': 'decoding bech32 Failed: Failed converting data to bytes: invalid character not part of charset: 98'}

如何将公共地址转换为 bech32 格式?或者有没有更好的方法提取地址的余额?

解决方法

最终发现不是你。它的币安 API 给了你那个错误。经过一番挖掘,我发现由于某种原因,binance API 只采用带有 bnb 标签的 Bech32 格式地址:

import requests 
account_id = "bnb1jxfh2g85q3v0tdq56fnevx6xcxtcnhtsmcu64m" # address 91937520f40458f5b414d267961b46c19789dd70

response = requests.get("https://dex.binance.org/api/v1/account/" + account_id.lower())
account = response.json()
print(account)

但是当您搜索/获取地址时,它会以正常的 0x 格式提供给您

我确实在网上找到了一个转换器,可以将样本地址解码为正常:https://slowli.github.io/bech32-buffer/

enter image description here

但由于某种原因,API 仍然使用相同的转换器为您的地址报告 404:

import requests 
account_id = "bnb1ra0lnyxkvxjdlhq07ltr4e48ax25wku4nhunzs" # address 1f5ff990d661a4DFDC0Ff7D63Ae6A7E995475b95

response = requests.get("https://dex.binance.org/api/v1/account/" + account_id.lower())
account = response.json()
print(account)

enter image description here

即使您使用完全相同的地址,您也可以使用智能链浏览器看到它。 https://bscscan.com/address/0x1f5ff990d661a4DFDC0Ff7D63Ae6A7E995475b95

无论如何。这个问题的答案是您向 API 提供地址,而没有先将其转换为 Bech32 格式。现在你只需要弄清楚为什么即使地址转换为bech32它仍然返回404。可能需要向币安团队自己提出来

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...