Now and Nawoo

NFTの制作記録、技術メモ → C#, Solidity, Blockchain, Bitcoin, Ethereum, NFT

Nethereumサンプルコード: Account関連

Accountの作成、KeyStoreの作成、Accountの復元、ニモニックワードの作成、HDWalletの作成などのサンプルコードです。

準備

NuGetで以下をインストールしておく

  • NBitcoin ※ニモニックワードの作成に必要
  • Nethereum.Web3
  • Nethereum.HDWallet

usingは以下の通り

using NBitcoin;
using Nethereum.HdWallet;
using Nethereum.KeyStore;
using Nethereum.Signer;
using Nethereum.Web3.Accounts;

新しいAccountからKeyStoreを作成

public static void CreateNewAccount()
{
    // Accountの新規作成
    var ecKey = EthECKey.GenerateKey(); // ランダムなキーを作成
    var account = new Account(ecKey, Chain.MainNet);
    Console.WriteLine($"Address={account.Address}, PrivateKey={account.PrivateKey}");

    // KeyStoreの作成
    var password = "****"; // KeyStoreのパスワード
    var keyStoreService = new KeyStoreService();
    var keyStoreJson = keyStoreService.EncryptAndGenerateDefaultKeyStoreAsJson(password, ecKey.GetPrivateKeyAsBytes(), ecKey.GetPublicAddress());
    Console.WriteLine($"KeyStore={keyStoreJson}");
}

KeyStoreJsonをファイルに保存しておけば、PrivateKeyを直接扱うよりは安全です。パスワード忘れるとあれですが。

既存のAccountからKeyStoreを作成

public static void AccountToKeyStore(Account account, string password)
{
    var keyStoreService = new KeyStoreService();
    var privateKeyBytes = new EthECKey(account.PrivateKey).GetPrivateKeyAsBytes();
    var keyStoreJson = keyStoreService.EncryptAndGenerateDefaultKeyStoreAsJson(password, privateKeyBytes, account.Address);
    Console.WriteLine($"KeyStore={keyStoreJson}");
}

privateKey(string)からprivateKeyAsBytes(byte[])に変換するためだけにEthECKeyを使ってます。 (HexStringToBytesのような関数を自作するのが面倒だったので。)

KeyStoreからAccountを復元

public static void KeyStoreToAccount(string json, string password)
{
    var account = Account.LoadFromKeyStore(json, password);
    Console.WriteLine($"Address={account.Address}, PrivateKey={account.PrivateKey}");
}

これは簡単。メソッド一発。

ニモニックワードの作成

public static void CreateMnemonicWords()
{
    var mnemonic = new Mnemonic(Wordlist.English, WordCount.Twelve);
    var words = mnemonic.ToString();
    Console.WriteLine($"MnemonicWords={words}");
}

おなじみニモニックワードを新規作成します。

ニモニックワードからHDWalletを作成

public static void CreateHDWallet(string words)
{
    var wallet = new Wallet(words, null); // "m/44'/60'/0'/0/x"
    for (int i = 0; i < 10; i++)
    {
        var account = wallet.GetAccount(i);
        Console.WriteLine($"No.{i}: {account.Address}, {account.PrivateKey}");
    }
}

HDWalletでは複数のアカウントを一元管理できます。

参考リンク