2017年3月26日日曜日

"Programming The Blockchain in C# 日本語"のトランザクションパートでエラーが出る

NBitcoinのトランザクションパートでエラーが出る

問題

今回はこちらの勉強をしていたところ以下のようなエラーが発生。
file: 'file:///Program.cs'
severity: 'エラー'
message: 'The type or namespace name 'QBitNinjaClient' could not be found (are you missing a using directive or an assembly reference?) [/Users/kichino/Documents/nbtc/nbtc.csproj]'
at: '48,13'
source: ''

QBitNinjaClientが見つからないけどつまり参照がうまくできてないんじゃない?というご指摘を受けた。問題のコードは以下でした。

//QBitNinjaクライアントオブジェクトを作成
            QBitNinjaClient client = new QBitNinjaClient(Network.Main);

対処法

以下のように適切なライブラリを使うことで解決する。
今回不足していたのは4つ目のQBitNinja.Clientだった。
using System;
using NBitcoin;
using QBitNinja.Client.Models;
using QBitNinja.Client;

結果

以下にコードとその実行結果を示す。

//QBitNinjaクライアントオブジェクトを作成
            QBitNinjaClient client = new QBitNinjaClient(Network.Main);

            //文字型のトランザクションIdをパースしてuint256型に変換。これで、クライアントオブジェクトに渡せる
            var transactionId = uint256.Parse("f13dc48fb035bbf0a6e989a26b3ecb57b84f85e0836e777d6edf60d87a4a2d94");

            //QBitNinjaサーバー側に問いかける
            GetTransactionResponse transactionResponse = client.GetTransaction(transactionId).Result;

            //transactionResponseからNBitcoin.Transaaction型のオブジェクトを取り出す
            NBitcoin.Transaction transaction = transactionResponse.Transaction;

            //上記2つの例からTransaction IDを取り出す
            Console.WriteLine(transactionResponse.TransactionId);
            Console.WriteLine(transaction.GetHash());

f13dc48fb035bbf0a6e989a26b3ecb57b84f85e0836e777d6edf60d87a4a2d94
f13dc48fb035bbf0a6e989a26b3ecb57b84f85e0836e777d6edf60d87a4a2d94

以上によりQBitNinjaのAPI経由で16進数表現のトランザクション情報からトランザクションIDを抽出することができたと同時にトランザクションのハッシュ値とトランザクションIDが等しいことも確認できた。

0 件のコメント:

コメントを投稿