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では複数のアカウントを一元管理できます。