8
8

More than 3 years have passed since last update.

C#(Windowsアプリ)とJavaScriptでSymbolアカウント作成

Last updated at Posted at 2020-12-31

2020年の大晦日時点では、 .NET Framework(.NET Core)用のSDKはありません。
なのでC#(Windowsアプリ)からJavaScriptのSDKを使ってSymbolアカウントを作ってみます。

準備

  1. WebView2 ランタイム、または非安定型 Microsoft Edge (Chromium) カナリア チャネルのどちらかをインストールします。
    私はWebView2 ランタイムをインストールしました。
    WebView2 Runtime
    非安定型 Microsoft Edge (Chromium) カナリア チャネル

  2. VisualStudioを起動し、Windowsフォームアプリケーションのプロジェクトを作成します。
    (試していませんが、WPFでも出来るはずです。多分)

  3. NuGetパッケージの管理から『Microsoft.Web.WebView2』をインストールします。

  4. NuGetパッケージの管理から『System.Text.Json』をインストールします。
    ※JavaScriptからの戻り値をJSON形式で受け取るために『System.Text.Json』を使用します。

HTML作成

事前に、以下のようなHTMLファイルを作成しておきます。
これをWebView2で読み込んで、JavaScriptを実行します。



<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>C#(Windowsアプリ)とJavaScriptでSymbolアカウント作成</title>
</head>
<body>
    <h1>C#(Windowsアプリ)とJavaScriptでSymbolアカウント作成</h1>
    <script src="https://xembook.github.io/nem2-browserify/symbol-sdk-0.22.2.js"></script>
    <script language="javascript" type="text/javascript">
        function createAccount() {
            //インスタンス生成
            var nem = require("/node_modules/symbol-sdk");

        //アカウント作成
        var account = nem.Account.generateNewAccount(nem.NetworkType.TEST_NET);

        //秘密鍵とアドレスをJSONにして返す
        var obj = {
            privateKey: account.privateKey,
            address: account.address.plain()
        };

        return window.JSON.stringify(obj);
    }
</script>


</body>
</html>


symbol-sdkをbrowserify化してくださっている方がいらっしゃるので、そちらを使わせてもらっています。
<script src="" class="autolink">https://xembook.github.io/nem2-browserify/symbol-sdk-0.22.2.js"></script>


createAccount関数でやっていることはコメントに書いてある通りです。
これだけでアカウントを作れてしまうなんて簡単ですね。

Windowsアプリ作成

画面はとりあえずこんな感じで。
画面サンプル.png

JavaScriptからの戻り値をJSONで受け取るためにSystem.Text.Jsonを宣言しておきます。



using System.Text.Json;


Form1_Loadイベントで、上記で作成したHTMLを読み込みます。
(デザイナのプロパティから設定することも出来ます)


private void Form1_Load(object sender, EventArgs e)
{
    //HTML読み込み
    webView21.Source = new Uri("file:///C:/WinFormSymbol.html");
}


button1_Clickイベントで、Symbolアカウントを作成するJavaScriptの関数を実行し、秘密鍵とアドレスを受け取ります。


private async void button1_Click(object sender, EventArgs e)
{
    //Symbolアカウント作成
    string result = await webView21.ExecuteScriptAsync("createAccount()");

//先頭と最後の"を除去
result = result.Trim('"');
//\"を"に変換
result = result.Replace("\\\"", "\"");

//デシリアライズ
var json = JsonSerializer.Deserialize<Dictionary<string, string>>(result);

lblPrivateKey.Text = json["privateKey"];
lblAddress.Text = json["address"];


}


webView21.ExecuteScriptAsync("createAccount()")で、HTMLファイルで記述したJavaScriptのcreateAccount関数を実行しています。


戻り値に余計なものが付いてきていたので除去したり変換したり。
その後、デシリアライズしてラベルにセットして完了です。


まとめたものです。


public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

private void Form1_Load(object sender, EventArgs e)
{
    //HTML読み込み
    webView21.Source = new Uri("file:///C:/WinFormSymbol.html");
}

private async void button1_Click(object sender, EventArgs e)
{
    //Symbolアカウント作成
    string result = await webView21.ExecuteScriptAsync("createAccount()");

    //先頭と最後の"を除去
    result = result.Trim('"');
    //\"を"に変換
    result = result.Replace("\\\"", "\"");

    //デシリアライズ
    var json = JsonSerializer.Deserialize<Dictionary<string, string>>(result);

    lblPrivateKey.Text = json["privateKey"];
    lblAddress.Text = json["address"];
}


}

いずれは.NET Framework(.NET Core)用のSDKを誰かが作ってくれると思いますが、WindowsアプリでSymbolを使うならこういうやり方もあります、ということで。
それでは良いお年を。

参考にさせていただいたサイト

Nem Symbol-sdk(testnet) を使ったアカウントの作り方
Symbol from NEM のテストネットで送金を体験する(2020年12月時点)
WebView2 C#とJavaScriptの連携
Windows フォームでの WebView2 の概要

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8