前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用NBitcoin进行区块链开发(4) : 交易

用NBitcoin进行区块链开发(4) : 交易

作者头像
申龙斌
发布2018-12-29 16:04:47
1.6K0
发布2018-12-29 16:04:47
举报
文章被收录于专栏:申龙斌的程序人生

本文尝试编程读取区块高度170中的一笔交易的详细信息:

https://btc.com/170

很多网站提供区块链浏览器,可以方便地读取区块和交易的详细信息,比如这些网站:

  • https://btc.com
  • https://blockchain.info
  • https://www.blocktrail.com/BTC
  • https://www.blockchain.com/explorer
  • https://blockexplorer.com
  • https://live.blockcypher.com/btc
  • https://explorer.bitcoin.com/btc
  • https://chainz.cryptoid.info/btc
  • https://chain.so

有些网站还给程序员提供更为方便的Restful的API接口,比如blockchain.info提供的查询交易信息的API接口:

https://blockchain.info/rawtx/f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16

解析上面的JSON数据并不难,但没必要重复发明轮子,已经有程序员开发好了相关服务和类库,它就是 QBitNinja.Client。源代码主站点:

https://github.com/MetacoSA/QBitNinja

用这些代码,自己可以搭建一个区块链API的服务器,当然我们这里直接调用它提供的服务,只需要安装客户端即可。网址是:

http://api.qbit.ninja/

用NuGet安装QBitNinja.Client的程序引用之后,用几行语句就可以方便地获取交易信息。

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

声明一个client实例,把交易ID转换为uint256对象,然后就可以获取交易信息。

QBitNinjaClient client = new QBitNinjaClient(Network.Main); uint256 txid = uint256.Parse("f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16"); GetTransactionResponse txr = client.GetTransaction(txid).Result; Console.WriteLine("version: " + txr.Transaction.Version); Console.WriteLine("block height: " + txr.Block.Height); Console.WriteLine("txid: " + txr.TransactionId);

这笔交易的版本是1,区块高度为170。

NBitcoin中提供了一个Transaction类,所有与交易有关的信息都在这里了,最重要的信息是交易的输入项(inputs)和输出项(outputs)。

程序的输出:

f4184fc59.......31e9e16 inputs: 0437cd7f8525......06ee5a597c9 0 outputs: 04ae1a62fe......414e7aab37397f554 a7df5f142c21c......baded5c72a704f7e6cd84c OP_CHECKSIG 1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3 1000000000 0411db93e1d......909a5cb2e0eaddfb84cc f9744464f82......99b8643f656b412a3 OP_CHECKSIG 12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S 4000000000

交易的输入项(inputs)来自于之前的某笔交易的输出(PrevOut)。

输出(outputs)有两项:一项为10BTC,一项为40BTC,注意这里的单位都是(Satoshi) 。

输出脚本中记录的都是公钥哈希,可以解析为比特币地址。

这个例子中的交易是区块高度为170的区块中的第二笔交易,所以也可以用下面的代码直接找到这笔交易。

BlockFeature height = new BlockFeature(170); GetBlockResponse gbr = client.GetBlock(height).Result; Transaction tx = gbr.Block.Transactions[1]; // 第一笔交易的序号是0

上面的代码访问了一个中心网站:

http://api.qbit.ninja

比特币既然是去中心化的,就不应该依赖于任何一个中心节点,NBitcoin也提供了连接Bitcoin Core全节点钱包的类库,下一节再介绍。

--- END ---

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 申龙斌的程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档