怎么样通过程序来获得比特币钱包余额? (NodeJs/Python)


bitcoin-logo 怎么样通过程序来获得比特币钱包余额? (NodeJs/Python) 加密货币 区块链 比特币 BTC 比特币 BTC/Bitcoin 程序设计

比特币

我们可以通过两种方式来查询任意一个区块链上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

英文:How to Check Balances of a Bitcoin (BTC) Wallet Address via NodeJs or Python?

GD Star Rating
loading...
本文一共 692 个汉字, 你数一下对不对.
怎么样通过程序来获得比特币钱包余额? (NodeJs/Python). (AMP 移动加速版本)
上一篇: 负电价活久见: 安装Octopus智能电表省电费甚至赚钱
下一篇: iPhone 15 Pro Max 1TB 体验: 手机容量进入TB时代

扫描二维码,分享本文到微信朋友圈
5f661b23e44181a92d39b909700ca2f3 怎么样通过程序来获得比特币钱包余额? (NodeJs/Python) 加密货币 区块链 比特币 BTC 比特币 BTC/Bitcoin 程序设计

评论