Python+web3如何获取当前连接区块链网络的原生代币符号
解决方案
EVM 兼容链没有统一的 RPC 接口可以直接返回原生代币符号,最稳妥的实现方式是通过链ID做预映射匹配,步骤如下:
- 调用
web3.eth.chain_id获取当前连接网络的全局唯一链ID - 维护链ID与对应原生代币符号的映射表
- 用匹配到的符号替换输出内容即可
完整代码示例
首先定义通用映射表:
# 常用EVM链 链ID-原生代币符号映射,可根据你接入的网络自行扩展 CHAIN_NATIVE_TOKEN_MAPPING = { 1: "ETH", # 以太坊主网 5: "ETH", # Goerli测试网 56: "BNB", # BSC主网 97: "BNB", # BSC测试网 137: "MATIC", # Polygon主网 80001: "MATIC",# Polygon Mumbai测试网 42161: "ETH", # Arbitrum主网 10: "ETH", # Optimism主网 43114: "AVAX" # Avalanche主网 }
修改你的业务逻辑代码:
web3 = Web3(Web3.HTTPProvider(init.differentNetwork)) # 获取当前网络链ID current_chain_id = web3.eth.chain_id # 匹配原生代币符号,未匹配到的场景保留默认占位符 native_symbol = CHAIN_NATIVE_TOKEN_MAPPING.get(current_chain_id, "network token") walletBalanceTmp = web3.eth.getBalance(init.walletAddress) # 所有EVM兼容链原生代币默认都是18位小数,使用ether单位转换无需调整 walletBalance = web3.fromWei(walletBalanceTmp, 'ether') print(f"Current wallet balance: {walletBalance} {native_symbol}")
不推荐通过解析节点URL判断网络的方案,节点域名可能调整,链ID是EVM网络的全局唯一标识,匹配准确率更高。
内容的提问来源于stack exchange,提问作者vaidab
相关产品推荐
相关产品推荐

