Now and Nawoo

読書メモ、技術メモ → C#, Solidity, Blockchain, Bitcoin, Ethereum, NFT

C#でBitcoin (1) アドレスの生成

NBitcoinは.NET用のBitcoinライブラリです。まずはBitcoinのアドレスを作ってみます。

NBitcoin関連リンク

日本語の情報は少なくて、上の解説サイトが参考になります。

プロジェクトの準備

  • VS2019 でプロジェクト新規作成 > Console(C#) & .NET5.0 を選択
  • NuGet で NBitcoin をインストール

Bitcoinアドレスの生成

// using NBitcoin; を追加しておく

var privateKey = new Key(); // 秘密鍵を作成
var wif = privateKey.GetWif(Network.Main); // WIFを作成
var publicKey = privateKey.PubKey; // 公開鍵を作成
var address1 = publicKey.GetAddress(ScriptPubKeyType.Legacy, Network.Main); // Legacyアドレスを作成
var address2 = publicKey.GetAddress(ScriptPubKeyType.SegwitP2SH, Network.Main); // Segwitアドレスを作成
var address3 = publicKey.GetAddress(ScriptPubKeyType.Segwit, Network.Main); // NativeSegwitアドレスを作成

Console.WriteLine(wif);
Console.WriteLine(publicKey);
Console.WriteLine(address1);
Console.WriteLine(address2);
Console.WriteLine(address3);

/* 出力例
KwuNkaii2w5hXU2wB1BkXWib7tzHxeSb3LBQ456hVh5gH1MoucgT
03f57135bd647501ada06047f95ac0860a21de902b348c9355851d023a4c66cc2e
1BM8PcC7hTWWVanVEAD3UF8GGJZW9sRxkW
36Lm2LeyCmMA949Z6ZFkSo6qd6gWvpNBhV
bc1qw9lma6gcykc20uhusp5xv99f26ufjh5neprlks
*/

秘密鍵とWIF

秘密鍵は単なる256bitの値です。 そのままでは使いにくいので、privateKey.GetWif(...)メソッドで、WIF (Wallet Import Format)形式に変換して扱います。 名前のとおりウォレットに秘密鍵をインポートするときなどに使います。

秘密鍵の生の値を見たいなら privateKey.ToHex()で確認できます。

公開鍵

秘密鍵から公開鍵を作ります。本来は複雑な計算が必要ですが、NBitcoinなら privateKey.PubKey で取得できます。なんて簡単。

アドレス

publicKeyのGetAddress(...)メソッドで公開鍵からアドレスを取得します。 最初の引数のScriptPubKeyTypeは、アドレスのタイプです。

名前 ScriptPubKeyType 説明
Legacy Legacy 1からはじまるアドレス
Segwit SegwitP2SH 3からはじまるアドレス
NativeSegwit Segwit bc1から始まるアドレス

2つ目の引数は、MainNet用かTestNet用かを指定します。