生成5个比特币地址并转账后,用QBitNinjaClient查询余额的C#技术问询
查询比特币地址余额的完整C#实现(基于QBitNinjaClient)
首先,你已经生成了以下5个比特币主网地址并转入了资金:
- 1KmjtM8aibtBqbPiJahYYEwcEAH2Duk9QH
- 1HV55k5erZrFA3SirFLULf1rTs4sKvvqQg
- 1B1Tx9wXVVmmySSDSFYekM7cy7xCTybEMg
- 1Py6rXFPepLa7nacuRhYsJWYcfFLYE6zkw
- 1GRHuGiHqtuLY3A6roH7fT9bjbbiG1foWM
我帮你补充完整了GetBalance方法的实现,加上了必要的逻辑处理和异常捕获,代码如下:
using NBitcoin; using QBitNinja.Client; using QBitNinja.Client.Models; using System; public static void GetBalance(string ssAddress, bool ssIsUnspentOnly, bool ssIsTestNet, out decimal ssBalance, out decimal ssConfirmedBalance) { // 初始化对应网络环境(主网/测试网) Network net = ssIsTestNet ? Network.TestNet : Network.Main; QBitNinjaClient client = new QBitNinjaClient(net); // 初始化返回值 ssBalance = 0; ssConfirmedBalance = 0; try { // 解析并验证输入的比特币地址 BitcoinAddress address = BitcoinAddress.Create(ssAddress, net); // 调用QBitNinja接口获取余额数据 var balanceResponse = client.GetBalance(address, unspentOnly: ssIsUnspentOnly).Result; // 遍历交易记录计算总余额和已确认余额 foreach (var operation in balanceResponse.Operations) { decimal amountInBtc = operation.Amount.ToDecimal(MoneyUnit.BTC); ssBalance += amountInBtc; // 确认数≥1视为已确认交易 if (operation.Confirmations >= 1) { ssConfirmedBalance += amountInBtc; } } } catch (Exception ex) { // 异常处理:可根据实际需求改为日志记录或抛出异常 Console.WriteLine($"查询余额失败: {ex.Message}"); // 异常场景下返回0值,避免未初始化的输出参数报错 ssBalance = 0; ssConfirmedBalance = 0; } }
关键细节说明:
- 网络适配:通过
ssIsTestNet参数自动切换主网/测试网,确保地址解析和API请求的正确性 - 地址验证:使用
BitcoinAddress.Create校验输入地址的合法性,避免无效地址导致的错误 - 余额统计:区分总余额(包含已花费/未花费)和已确认余额(仅统计确认数≥1的交易)
- 异常防护:捕获网络请求、地址解析等可能出现的异常,保证方法的健壮性
快速使用示例:
// 查询第一个地址的全部余额(包含已花费交易) GetBalance("1KmjtM8aibtBqbPiJahYYEwcEAH2Duk9QH", ssIsUnspentOnly: false, ssIsTestNet: false, out decimal total, out decimal confirmed); Console.WriteLine($"总余额: {total} BTC"); Console.WriteLine($"已确认余额: {confirmed} BTC");
前置依赖:
确保你的项目已安装必要的NuGet包:
Install-Package NBitcoin Install-Package QBitNinja.Client
内容的提问来源于stack exchange,提问作者Lolidze
相关产品推荐
相关产品推荐

