用C#开发自己的比特币钱包

在这个教程中,我们将使用C#来开发一个比特币钱包,我们使用NBitcoin这个库。教程中的代码实现了比特币的存储、接收和支付功能,可以很容易地移植到其他应用中。

如果要快速掌握NBitcoin的使用方法,推荐访问汇智网的课程:

开发目标

我们要开发的比特币钱包要实现以下功能:

  • 可以使用BIP39助记词恢复密钥
  • 可以创建比特地址,可以接收其他地址转来的比特币
  • 可以查看比特币地址余额
  • 可以向其他地址支付比特币

引入NBitcoin开发包

首先需要引入NBitcoin开发包以及QBitNinja开发包:

using NBitcoin;
using QBitNinja.Client;
using QBitNinja.Client.Models;

生成BIP39助记词

我们需要保存下来生成的助记词:

public void MssGenerateMnemo(out string ssMnemo) {

Mnemonic mnemonic = new Mnemonic(Wordlist.English, WordCount.Twelve);

ssMnemo = mnemonic.ToString();

}

生成比特币地址

下面的代码可以利用NBitcoin生成比特币HD地址:

public void MssGenerateAddress(
    string ssMnemo,
    int ssKeynumber,
    bool ssIsTestNet,
    out string ssAddress,
    out string ssPrivateKey) {

  Network net;
  if (ssIsTestNet)
      net = Network.TestNet;
  else
      net = Network.Main;

  Mnemonic restoreNnemo = new Mnemonic(ssMnemo);

  ExtKey masterKey = restoreNnemo.DeriveExtKey();

  KeyPath keypth = new KeyPath("m/44‘/0‘/0‘/0/" + ssKeynumber);
  ExtKey key = masterKey.Derive(keypth);

  ssAddress = key.PrivateKey.PubKey.GetAddress(net).ToString();
  ssPrivateKey = key.PrivateKey.GetBitcoinSecret(net).ToString();

}

获取比特币地址余额

下面的代码可以获取指定地址的比特币余额:

public void MssGetBalance(
    string ssAddress,
    bool ssIsUnspentOnly,
    bool ssIsTestNet,
    out decimal ssBalance,
    out decimal ssConfirmedBalance) {

  Network net;
  if (ssIsTestNet)
    net = Network.TestNet;
  else
    net = Network.Main;

  QBitNinjaClient client = new QBitNinjaClient(net);
  var balance = client.GetBalance(new BitcoinPubKeyAddress(ssAddress), ssIsUnspentOnly).Result;

  ssBalance = 0.0M;
  ssConfirmedBalance = 0.0M;

  if (balance.Operations.Count > 0)
  {
    var unspentCoins = new List<Coin>();
    var unspentCoinsConfirmed = new List<Coin>();
    foreach (var operation in balance.Operations)
    {
        unspentCoins.AddRange(operation.ReceivedCoins.Select(coin => coin as Coin));
        if(operation.Confirmations > 0)
            unspentCoinsConfirmed.AddRange(operation.ReceivedCoins.Select(coin => coin as Coin));

    }

    ssBalance = unspentCoins.Sum(x => x.Amount.ToDecimal(MoneyUnit.BTC));
    ssConfirmedBalance = unspentCoinsConfirmed.Sum(x => x.Amount.ToDecimal(MoneyUnit.BTC));
  }

}

向其他比特币地址转账

下面的代码可以利用NBitcoin实现向指定的地址转账比特币:

public void MssGetBalance(
    string ssAddress,
    bool ssIsUnspentOnly,
    bool ssIsTestNet,
    out decimal ssBalance,
    out decimal ssConfirmedBalance) {

  Network net;
  if (ssIsTestNet)
      net = Network.TestNet;
  else
      net = Network.Main;

  QBitNinjaClient client = new QBitNinjaClient(net);
  var balance = client.GetBalance(new BitcoinPubKeyAddress(ssAddress), ssIsUnspentOnly).Result;

  ssBalance = 0.0M;
  ssConfirmedBalance = 0.0M;

  if (balance.Operations.Count > 0)
  {
    var unspentCoins = new List<Coin>();
    var unspentCoinsConfirmed = new List<Coin>();
    foreach (var operation in balance.Operations)
    {
      unspentCoins.AddRange(operation.ReceivedCoins.Select(coin => coin as Coin));
      if(operation.Confirmations > 0)
          unspentCoinsConfirmed.AddRange(operation.ReceivedCoins.Select(coin => coin as Coin));

    }

    ssBalance = unspentCoins.Sum(x => x.Amount.ToDecimal(MoneyUnit.BTC));
    ssConfirmedBalance = unspentCoinsConfirmed.Sum(x => x.Amount.ToDecimal(MoneyUnit.BTC));
  }
}


原文:Step by step guide to programming your own bitcoin wallet

汇智网翻译整理,转载请标明出处。

原文地址:https://blog.51cto.com/xxzhi/2384777

时间: 2024-08-29 20:50:11

用C#开发自己的比特币钱包的相关文章

多币种钱包开发:比特币钱包应用的主要特点

由于区块链技术及其应用的巨大增长,所有金融业务都开始以一种或另一种方式投资区块链技术.由于比特币和所有其他数字资产基于区块链工作,因此对比特币应用程序开发存在巨大需求.众所周知,比特币既不是用金属制成的真币,也不是纸币,但它是加密资产.现在,人们可以使用加密资产以零或非常低的交易成本安全地执行对等交易.预见到加密资产的光明前景及其对全球商业市场的影响,供应商已开始使用比特币接受付款.为了使这种支付交易更容易,除了比特币钱包应用程序之外别无选择.使用比特币移动钱包应用程序,您可以轻松地将您从供应商

比特币家园|比特币价格|比特币钱包下载

Den German(IRS总裁)说<只有懒惰与不够自信态度是在您致富的道路上产生最大的障碍>.国际储备体--是一家全新的运营公司.如果您确定好了参与IRS,如果愿意花自己的时间为了主动地发展与宣传IRS,而且跟别人介绍什么叫比特币.那公司将可以提供给您财政的支持和补偿您消耗的时间.参与IRS吧,让您的生活改变得更好! 国际储备体 (IRS) 是一家全新的运营公司,它采用一流的多架构手段,以购买比特币为中心 . 全球会员的人数42996.将不同职业,不同年龄,不同国籍的代表聚集在一起. 额外的

比特币钱包Armory使用指南

转自:http://news.yibite.com/application/2014/0525/21603.shtml 比特币钱包Armory(https://bitcoinarmory.com/)是一款安全的,易用的比特币钱包客户端.采用“冷钱包”的原理,把比特币的私钥进行离线保存. 钱包Armory创建钱包 第一步:单击Create Wallet按钮 第二步:为创建的钱包,标注名称和钱包描述 第三步:输入钱包密码 第四步:再次输入钱包密码 第五步:选择备份钱包选项,然后单击finish按钮

比特币钱包应用breadwallet源码

breadwallet是一款安全.可靠和便捷的比特币钱包,可使用户免于恶意软件和其他应用中常见的安全问题的骚扰,充分利用了iOS提供的安全功能,包括AES硬件加密.app沙盒和数据保护.代码签名以及keychain服务.breadwallet使用了简化的支付验证或者SPV模式来直接从比特币网络检索数据. 项目详细说明:http://ios.662p.com/thread-2150-1-1.html <ignore_js_op> <ignore_js_op> <ignore_j

比特币钱包应用breadwallet源码 V1.0

breadwallet是一款安全.可靠和便捷的比特币钱包,可使用户免于恶意软件和其他应用中常见的安全问题的骚扰,充分利用了iOS提供的安全功能,包括AES硬件加密.app沙盒和数据保护.代码签名以及keychain服务.breadwallet使用了简化的支付验证或者SPV模式来直接从比特币网络检索数据. 源码下载: http://code.662p.com/view/8870.html breadwallet App Store下载地址:https://itunes.apple.com/app/

比特币钱包应用breadwallet源码iOS版

breadwallet是一款安全.可靠和便捷的比特币钱包,可使用户免于恶意软件和其他应用中常见的安全问题的骚扰,充分利用了iOS提供的安全功能,包括AES硬件加密.app沙盒和数据保护.代码签名以及keychain服务.breadwallet使用了简化的支付验证或者SPV模式来直接从比特币网络检索数据. 源码下载: http://code.662p.com/view/8870.html breadwallet App Store下载地址:https://itunes.apple.com/app/

plustoken钱包系统开发plustoken区块链钱包平台商城开发

plus Token的高附加值,科技与区块链完美融合,成就通证经济时代杰出代表.每季度利润30%用于回购plus进行销毁,销毁过程在区块链上进行,公开不可逆,直到总量控制在1亿枚.plustoken钱包系统开发plustoken区块链钱包平台商城开发[孙女士 微电: 18*6156*140*62 扣扣:28*203*087*34]非平台客服,玩家勿扰!!! 非平台客服,玩家勿扰!!! 非平台客服,玩家勿扰!!! 每天中午12点结算利息和奖金,钱包货币可随时兑换eth转出提现有短信验证提醒,一次性

抱米交易钱包系统模式APP开发,抱米钱包系统源码

抱米交易钱包系统模式APP开发,抱米钱包系统源码,抱米钱包系统模式抱米钱包系统开发咨询:+伍(aac1287)抱米钱包是区块链的一种,具体是什么样子的,接下来给大家介绍一下: 壹.抱米钱包系统的,模式1.分享奖励加速0.05-0.08(举例你推荐一个1万,有500-800的奖金)2.兑换奖励加速15层,0.01-0.03(推荐5个普通用户以上,15层以内,任何人余额兑换积分;如兑换1万,有100-300)3.流通奖励加速15层,0.004-0.007(推荐5个普通用户以上,15层以内,任何人流通

开发一个多币种钱包多少钱?区块链钱包有哪些种类?

很多时候,很多朋友一开始就喜欢问我:开发一个多币种钱包多少钱?这个问题是很常见但是每次遇到这个问题都很头疼,每次我会说:价格需要根据你的具体需求来评估,然后很多朋友就会想着我是不想报价,但是这里我想打个简单的比方,来为自己解释一下.如果你想建一栋房子,你直接说,我建一栋房子,多少钱?我肯定还是要问你的具体需求,两层平楼也是房子,两层小别墅也是房子,在郊区建房子和在市区建房子,普通装修和豪华装修,这些都是房子,那价格一样吗?天差地别.回到正题"开发一个多币种钱包多少钱?"只有转入转出功能