我们可以通过两种方式来查询任意一个区块链上BTC比特币钱包的余额。
一种方式是直接查询节点,节点可以自己架,但可能较复杂,自己架服务器节点也不便宜。但是这种方法是可以获得较低的延时 (Latency),因为从节点取的数据本来就是链上的。当然可以撸别人的节点,如果节点可靠又需要获取更实时的数据那这是一种比较好的选择。
另一种方式就是使用第三方的API服务,这样的服务一般有免费还有付费的API调用。使用这些API节点的好处是更容易更简单,但会有一定的数据延时,因为API节点需要实时的去链上取数据,再更新到数据库中,再返还给调用者,有一点的时延。
本文介绍获取比特币帐号余额的两种调用第三方服务的方式:mempool 和 blockcypher。
通过 Mempool API 来查询指定比特币钱包地址的余额
我们可以使用 Mempool.space 的 API(有免费和付费版本的 API 调用)通过以下 NodeJs 函数检查任何 BTC/比特币钱包地址的余额:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | const axios = require('axios'); async function getBTCAddressBalance(btcAddress) { const url = `https://mempool.space/api/address/${btcAddress}`; try { const response = await axios.get(url); const { chain_stats, mempool_stats } = response.data; const confirmedBalance = chain_stats.funded_txo_sum - chain_stats.spent_txo_sum; const unconfirmedBalance = mempool_stats.funded_txo_sum - mempool_stats.spent_txo_sum; const totalBalance = confirmedBalance + unconfirmedBalance; console.log(`BTC钱包地址: ${btcAddress}`); console.log(`已经确认的余额: ${confirmedBalance} satoshis`); console.log(`未经确认的余额: ${unconfirmedBalance} satoshis`); console.log(`总余额: ${totalBalance} satoshis`); return { "total": totalBalance, "confirmedBalance": confirmedBalance, "unconfirmedBalance": unconfirmedBalance, }; } catch (error) { console.error('错误:', error.message); return null; } } |
const axios = require('axios'); async function getBTCAddressBalance(btcAddress) { const url = `https://mempool.space/api/address/${btcAddress}`; try { const response = await axios.get(url); const { chain_stats, mempool_stats } = response.data; const confirmedBalance = chain_stats.funded_txo_sum - chain_stats.spent_txo_sum; const unconfirmedBalance = mempool_stats.funded_txo_sum - mempool_stats.spent_txo_sum; const totalBalance = confirmedBalance + unconfirmedBalance; console.log(`BTC钱包地址: ${btcAddress}`); console.log(`已经确认的余额: ${confirmedBalance} satoshis`); console.log(`未经确认的余额: ${unconfirmedBalance} satoshis`); console.log(`总余额: ${totalBalance} satoshis`); return { "total": totalBalance, "confirmedBalance": confirmedBalance, "unconfirmedBalance": unconfirmedBalance, }; } catch (error) { console.error('错误:', error.message); return null; } }
把上面的NodeJs的代码转换为 Python,以下是如何使用 requests 库将 JavaScript 函数转换为 Python 来执行 HTTP 请求:
这个 Python 函数执行与原始 JavaScript 函数相同的任务:它使用 Mempool Space API 获取比特币地址的余额,并以聪为单位打印出已确认、未确认和总余额。 它通过捕获 HTTP 请求期间可能发生的异常来处理错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import requests def get_btc_address_balance(btc_address): url = f'https://mempool.space/api/address/{btc_address}' try: response = requests.get(url) response.raise_for_status() # 如果API返回错误,则抛出异常 data = response.json() chain_stats = data['chain_stats'] mempool_stats = data['mempool_stats'] confirmed_balance = chain_stats['funded_txo_sum'] - chain_stats['spent_txo_sum'] unconfirmed_balance = mempool_stats['funded_txo_sum'] - mempool_stats['spent_txo_sum'] total_balance = confirmed_balance + unconfirmed_balance print(f'BTC钱包地址: {btc_address}') print(f'已经确认的余额: {confirmed_balance} satoshis') print(f'未经确认的余额: {unconfirmed_balance} satoshis') print(f'总余额: {total_balance} satoshis') return { "totalBalance": totalBalance, "confirmedBalance": confirmedBalance, "unconfirmedBalance": unconfirmedBalance, } except requests.RequestException as error: print('错误:', error) return None |
import requests def get_btc_address_balance(btc_address): url = f'https://mempool.space/api/address/{btc_address}' try: response = requests.get(url) response.raise_for_status() # 如果API返回错误,则抛出异常 data = response.json() chain_stats = data['chain_stats'] mempool_stats = data['mempool_stats'] confirmed_balance = chain_stats['funded_txo_sum'] - chain_stats['spent_txo_sum'] unconfirmed_balance = mempool_stats['funded_txo_sum'] - mempool_stats['spent_txo_sum'] total_balance = confirmed_balance + unconfirmed_balance print(f'BTC钱包地址: {btc_address}') print(f'已经确认的余额: {confirmed_balance} satoshis') print(f'未经确认的余额: {unconfirmed_balance} satoshis') print(f'总余额: {total_balance} satoshis') return { "totalBalance": totalBalance, "confirmedBalance": confirmedBalance, "unconfirmedBalance": unconfirmedBalance, } except requests.RequestException as error: print('错误:', error) return None
通过 Blockcypher API 来查询指定比特币钱包地址的余额
我们还可以利用 Blockcypher API 查询 BTC 比特币钱包的余额。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | const axios = require('axios'); async function getBTCBalance(address) { const url = `https://api.blockcypher.com/v1/btc/main/addrs/${address}/balance`; try { const response = await axios.get(url); const balance = response.data.balance; console.log('余额 Satoshis:', balance); console.log('余额 BTC:', balance / 1e8); return { "balance": balance, "balance_in_btc": balance / 1e8 } } catch (error) { console.error('错误:', error.message); } } |
const axios = require('axios'); async function getBTCBalance(address) { const url = `https://api.blockcypher.com/v1/btc/main/addrs/${address}/balance`; try { const response = await axios.get(url); const balance = response.data.balance; console.log('余额 Satoshis:', balance); console.log('余额 BTC:', balance / 1e8); return { "balance": balance, "balance_in_btc": balance / 1e8 } } catch (error) { console.error('错误:', error.message); } }
以下 Python 函数模仿原始 JavaScript 版本的行为:它从 BlockCypher API 检索并打印指定比特币地址的余额(以聪和 BTC 为单位)。 它可以优雅地处理潜在的 HTTP 或其他与请求相关的错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import requests def get_btc_balance(address): url = f'https://api.blockcypher.com/v1/btc/main/addrs/{address}/balance' try: response = requests.get(url) response.raise_for_status() # 如果 HTTP 请求返回不成功的状态代码,则引发 HTTPError data = response.json() balance = data['balance'] print('余额 Satoshis:', balance) print('余额 BTC:', balance / 1e8) return { "balance": balance, "balance_in_btc": balance / 1e8 } except requests.RequestException as error: print('错误:', error) return None |
import requests def get_btc_balance(address): url = f'https://api.blockcypher.com/v1/btc/main/addrs/{address}/balance' try: response = requests.get(url) response.raise_for_status() # 如果 HTTP 请求返回不成功的状态代码,则引发 HTTPError data = response.json() balance = data['balance'] print('余额 Satoshis:', balance) print('余额 BTC:', balance / 1e8) return { "balance": balance, "balance_in_btc": balance / 1e8 } except requests.RequestException as error: print('错误:', error) return None
比特币记帐余额并不是直接的,因为有一个找零过程:比特币转帐API中的找零参数
比特币/大饼 BTC/Bitcoin
- 怎么样通过程序来获得比特币钱包余额? (NodeJs/Python)
- 比特币/BTC的ETF是什么?
- 问了ChatGPT比特币2023年年底多少钱(ChatGPT能预测或者估计将来?)
- 比特币转帐API中的找零参数
- 在亚马逊上买了一个实体比特币
- 世界上总有些人不信比特币
- 贪心算法玩比特币玩的就是心跳
- 把比特币变现的几种方法
- 公司今天上市, 我用比特币买了午餐 - Wirex 银行卡超级好用!
- Coinbase 支持 比特币现金 BCH 的交易了!
- 比特币下车了, 真的就很难于再上车了
- 说说STEEMIT机器人, 比特币和永动机
- 小白教程 - 如何把 SBD或者STEEM转出到比特币钱包?
- 一次有惊无险的误操作 - 通过 blocktrades 转出 SBD 到比特币钱包把MEMO填错了
- 比特币钱包线上和线下有啥区别?
- 我的比特币钱包
- 深度体验: OneKey虚拟货币出金卡(美元黑卡)
- Bittrex Global交易所即将关门大吉-请把币都转走-把价值不到7美元的BTC提现全过程
- 小白教程: 怎么领取 BCC (Bitcoin Cash) ?
英文:How to Check Balances of a Bitcoin (BTC) Wallet Address via NodeJs or Python?
强烈推荐
- 英国代购-畅购英伦
- TopCashBack 返现 (英国购物必备, 积少成多, 我2年来一共得了3000多英镑)
- Quidco 返现 (也是很不错的英国返现网站, 返现率高)
- 注册就送10美元, 免费使用2个月的 DigitalOcean 云主机(性价比超高, 每月只需5美元)
- 注册就送10美元, 免费使用4个月的 Vultr 云主机(性价比超高, 每月只需2.5美元)
- 注册就送10美元, 免费使用2个月的 阿里 云主机(性价比超高, 每月只需4.5美元)
- 注册就送20美元, 免费使用4个月的 Linode 云主机(性价比超高, 每月只需5美元) (折扣码: PodCastInit2022)
- PlusNet 英国光纤(超快, 超划算! 用户名 doctorlai)
- 刷了美国运通信用卡一年得到的积分 换了 485英镑
- 注册就送50英镑 – 英国最便宜最划算的电气提供商
- 能把比特币莱特币变现的银行卡! 不需要手续费就可以把虚拟货币法币兑换
微信公众号: 小赖子的英国生活和资讯 JustYYUK