Karakuri.com

Fintechではたらくアプリケーションエンジニアの技術録

C#でcsharp2nemを使ってNEMのウォレットの残高などの情報を取得する

NEMはRESTFulな思想で開発が容易という特徴がありますが、さらに各言語にライブラリが公開されているので、NEMのブロックチェーンから情報を取得するのが容易になっています。今回はC#向けのライブラリであるcsharp2nemを使ってNEMのウォレットの情報取得を行ってみました。

NEMのC#向けライブラリcsharp2nemとは

Githubで公開されています

有志によって開発されGithubで公開されています。
github.com

Nugetでも公開されています

Nugetで公開されているので、Windowsアプリケーションとして利用する場合はこちらからインストールすると簡単にプロジェクトに導入できます。
www.nuget.org

Unityで使用することも可能

C#向けなのでUnityで利用することができます。つまり、AndroidやiOS向けに利用することも可能ということです。

csharp2nemを使ってウォレットの情報を取得する

Connectionの作成

NEMのブロックチェーンネットワークにはテストネットが用意されています。本番ネットワークで開発すると経済的損失を発生させる恐れが高いので、開発はテストネットで行います。

var connection = new Connection();
connection.SetTestnet();

なお、本番ネットワークと接続する場合は下記のようになります。

var connection = new Connection();
connection.SetMainnet();

DebugビルドとReleaseビルドで切り分けても良いかもしれません。

リクエストの送信とレスポンスの受信

先ほど作成したconnectionからAccountClientを作ります。AccountClientはアドレスや公開鍵からウォレットの情報を取得できます。今回はアドレスから取得します。

var client = new AccountClient(connection);
var request= client.BeginGetAccountInfoFromAddress(Address);
var response = client.EndGetAccountInfo(request);

var balance = ((double)response.Account.Balance / 1000000).ToString("N6");
var publicKey = response.Account.PublicKey;
var harvestedBlocks = response.Account.HarvestedBlocks;
var importance = response.Account.Importance;
var vestedBalance = ((double)response.Account.VestedBalance / 1000000).ToString("N6");

取得できる情報の一覧

返ってくるExistingAccount.Data型がAccountクラスのインスタンスを保有しているため、このインスタンスのプロパティからウォレットの情報を取得することができます。このクラスは下記のようなプロパティを持っています。

public class Account
{
    public Account();

    public string Address { get; set; }
    public int HarvestedBlocks { get; set; }
    public long Balance { get; set; }
    public double Importance { get; set; }
    public long VestedBalance { get; set; }
    public string PublicKey { get; set; }
    public object Label { get; set; }
    public MultisigInfo2 MultisigInfo2 { get; set; }
}

サンプルコード

Githubにサンプルプロジェクトを置いているので良ければ参考にしてください。また、他の機能については別記事でまとめたいと思います。
github.com