NEM Libraryを使ってみる(3) ウォレットの管理
NEM Libraryにはウォレットを管理するクラスも用意されています。
Walletの生成
秘密鍵からアドレスを生成する場合はWallet
クラスを継承したSimpleWallet
クラスを利用します。
let password: Password = new Password("passwordstr"); let privateKey: string = "privatekeyxxxxxxxxxxxxxxxxxxxxxxxx"; let simpleWallet: SimpleWallet = SimpleWallet.createWithPrivateKey("nextem test", password, privateKey);
生成されたSimpleWallet
は以下のようなオブジェクトになり、秘密鍵は暗号化されています。
{ "name":"nextem test", "network":104," address": { "value":"ND6VJMWYX7CZRPLYXX566DP2Z6O7ZKYG745EV2AX", "networkType":104 }, "creationDate":"2017-08-26T11:29:37.729", "schema":1, "encryptedPrivateKey": { "encryptedKey":"encryptedxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "iv":"ivxxxxxxxxxxxxxxxxxxxxxxxxx" } }
ちなみに秘密鍵をランダム生成するには、SimpleWallet
クラスのcreateメソッドを利用します。
let simpleWallet: SimpleWallet = SimpleWallet.create("random wallet", password);
Walletの利用
公開鍵や秘密鍵を利用するには、open
メソッドでAccount
クラスを作成して利用します。
秘密鍵はprivateになっているので、秘密鍵を直接操作するのではなく、戻ってくるAccount
クラスの各メソッドを利用してトランザクションへの署名や、メッセージの暗号化、復号化を実施します。
let account: Account = simpleWallet.open(password); account.signTransaction(transaction)
バックアップ
WalletのバックアップはwriteWLTFile
メソッドを利用します。
string
が返ってくるので適当に保存します。
let mimetype = 'application/octet-stream'; let url = window.URL.createObjectURL(new Blob([simpleWallet.writeWLTFile()], { 'type': mimetype })); let a = document.createElement('a'); a.target = '_blank'; a.download = simpleWallet.name + ".wlt"; a.href = url; a.click();
バックアップからの復元
wltファイルからWalletを復元するには、wltファイルの文字列を抽出した上でreadFromWLT
メソッドを利用します。
なお、NanoWalletから出力したwltファイルは形式が異なるようで読み込めませんでした。
let simpleWallet = SimpleWallet.readFromWLT("wltstrxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
このあたり自前で実装するのも面倒なので、WEBサイトなどに導入する際には地味に便利なのではないでしょうか。
※筆者のモチベーション向上のため、以下NEMアドレスへxemなりシットトークンなりの寄付を受け付けています。
NDY4RH-UZ3CZO-Z53O5H-NEXTEM-7UF5X3-MMDGH4-IMAD