nanowallet とはNEM用に開発されたウォレットで、すべてJavaScriptで記述されています。ローカルでブラウザを開くだけで起動し、ノードへの接続は必要ですが同期など時間のかかる処理は必要ありません。このJavaScriptで記述されたウォレットが暗号通貨の勉強には最適ですので、今回はこのnanowalletを参考にしてアカウントを生成する方法を学んでみたいと思います。
GET THE NANO WALLET をクリックしてzipを解凍。start.htmlをダブルクリックで起動します。(インストール不要、ブラウザ必須)。慣れてきたら起動する前にzipファイルをアポスティーユ公証にかけて改ざんされていないかを確認するクセをつてもいいでしょう。github にソースコードがありますが、まだ私の方で動作確認できていません。
なお、mijin.io にも動作環境が提供されていますが、改ざんされていない保証はありません。
解凍したソースコードのうち、NEM開発者お手製のjsソースが main.js になります。AngularJSを利用しているようですね。開発には便利なのですが、解析するには多少骨が折れました。後は外部ライブラリとしてvendorsフォルダに格納されています。
さて、本題です。nanowalletでアカウントを作成するには2つ方法を使用しているようです。
- 全くランダムに生成する
- ログイン中のアカウントをマスターキーとして新たなアカウントを生成する
今回は1つ目の全くランダムに生成する方法を説明します。
依存するライブラリは以下のとおり。
<script src="vendors/cryptoJS/core-min.js"></script>
<script src="vendors/cryptoJS/x64-core-min.js"></script>
<script src="vendors/cryptoJS/ripemd160-min.js"></script>
<script src="vendors/cryptoJS/sha3-min.js"></script>
暗号鍵を作成します。これはjsには便利なcrypto.getRandomValuesというコマンドがついています。
var rawBytes = new Uint8Array(32);
var hexPriv = ua2hex(crypto.getRandomValues(rawBytes));
32個の配列を作成し、16進数で表記します。これだけです。
次に公開鍵を作成します。
var account = new KeyPair(hexPriv);
var strPub = account.publicKey.toString();
このKeyPairが暗号通貨によってそれぞれ処理が変わってくるかと思います。
Ed25519と呼ばれる暗号化アルゴリズムを使用します。このあたりも参考になるかもしれません。
【NEM/XEM】秘密鍵から公開鍵を作成する(Ed25519)
最後に、公開鍵をアドレス化します。
var address = toAddress(account.publicKey.toString(), 104);
104というのはネットワークIDでNEM のMainnet がそれにあたります。
これでアカウントに必要な、秘密鍵、公開鍵、アドレスが出来上がりました。
まあ、なーんてうすっぺらい説明なんでしょうw
ただのWeb技術屋なので勘弁してください。
でも、秘密鍵がただの乱数という発見がありましたね。これは注目すべきことです。
PHPセッション、ApacheセッションなどWeb技術には様々な乱数で生成された文字列が活躍します。
暗号通貨技術を利用すれば、これらのセッションIDにアドレスという名のお財布機能が付与できるということです。
サイトに訪問したユーザにチップをあげる、または逆に通行料を徴収する。
チップの代わりに属性情報を持ったトークンをやりとりする。まさに広告ビジネスに使えそうですね。
大量のアクセスをさばく場合は注意が必要です。ただし、NEMの場合はmijinがありますね!あれ、何かつながりました?
では最後に動くものをアップしておきます。
demo
QRコードもここに張っておきますね
実際にはXEMという通貨を入れないと、アカウントは使い物になりません。
まずは感謝の気持ちをXEMに込めて、ぜひ周りのみなさんでアカウントと少額のXEMをプレゼントしあってみてください。
次はマスターキーから、アカウントを生成する方法を説明したいと思います。
それでは!
以下のNEMアドレスは、全てNEM上でエンジニアが活動できるための資金に使用します。
これから私が書く記事に共感していただけましたら、ご寄附いただけると助かります。
NEM ADDRESS: NBZNQL-2JDWTG-UAW237-PXV4SS-XSPORY-43GUSW-GSB7