2017年5月8日月曜日

XRP用のウォレットを自作する ー 準備編

今年の一月から暗号通貨のXRPを買い始めました。今のところ順調に価格が上昇していて、投資としては大成功です。まだまだ上がると思っているので当分売るつもりはありません。

そこでXRPを長期間保管しておきたいのですが、XRPに対応しているハードウェアウォレットがありません。そのうちTrezorやLedger nanoとかが対応してくれると思いますが、いい機会なので自分でXRPを保管しておくウォレットを作ってみようと思います。


|方針


リップルネットワークを使った送金などのTransactionは、大きく4つの段階に分けられます。

第1段階:Prepare(準備)
第2段階:Sign(シークレットキーによる署名)
第3段階:Submit(送信)
第4段階:Velify(検証)

このうち第1段階の Prepare(準備)と第2段階の Sign(シークレットキーによる署名)はインターネットに接続しないでオフラインで処理することが可能です。また、ウォレットの新規作成(アドレスとシークレットキーの生成)もオフラインで作成することが可能です。

そこで、より安全を求めるならシークレットキーはインターネットから切り離された環境で取り扱う方がよいので、ウォレットの作成および送金の際の第2段階まではインターネットに接続していないPCやスマートフォンなどで処理することにし、その処理結果をUSBメモリなどでインターネットに接続したPCやスマートフォンに移動してから第3段階以降を処理するという方法もあります。

しかしオフライン処理についての自分の理解が不十分なことと、スマートフォンでの動作に不具合があり、その解決策がわからないため、今回はまず普段使っているPCで使用するウォレットを作ってみます。オフライン処理の理解が進み、スマートフォンでの不具合が解消ができればインターネットに接続していない端末とインターネットに接続している端末の2台を使ったウォレットの作り方も書く予定です(書かないかも...


|ウォレットの仕様


ここで作るウォレットには、以下の基本的な機能のみを実装していきます。
  • 新規にウォレットを作成
  • 残高照会
  • 送金
送金できるのはXRPのみです。また、これらの機能はChromeやFirefoxなどのブラウザ上で操作できるようにします。


|ウォレットを作るための環境を構築


OSはWindows 10を前提にしています。

参考サイト




環境構築の流れ

  1. Node.js をインストール
  2. Git for Windows をインストール
  3. 作業用フォルダを作る
  4. ripple-lib をインストールしてJavaScriptファイルをビルド
  5. ビルドしたJavaScriptファイルとテスト用の test.html を作って動作を確かめる


1.Node.js をインストールする




Node.js (https://nodejs.org/ja/) のサイトから推奨版か最新版をダウンロードしてインストールしてください。

2.Git for Windows をインストールする



Git for Windows (https://git-for-windows.github.io/) のサイトからファイルをダウンロードしてインストールしてください。

3.Git Bash を起動して作業用フォルダを作る


「スタート」→「Git」→「Git Bash」をクリックしてGit Bashを起動します。



ここではプロジェクト用のフォルダとして「wallet」という名前のフォルダを作って、そこで作業をしていきます。フォルダ名は好きな名前で構いません。

Git Bash で次のコマンドを実行します('$'は入力不要)

$ mkdir wallet
$ cd wallet

4.ripple-lib をインストールしてJavaScriptファイルをビルド


Git Bash から次のコマンドを実行してください

$ git clone https://github.com/ripple/ripple-lib.git
$ cd ripple-lib
$ git checkout release
$ npm install  //この処理には時間がかかります。
               //WARN(警告)が出ますが気にしないでいいようです
$ npm run build

すると wallet\ripple-lib\buildフォルダの中に ripple-0.17.14.js (バージョン番号は異なるかもしれません)というJavaScriptファイルができているはずなので、そのファイルを walletフォルダ直下にコピーしてください。このJavaScriptファイルをHTMLファイルへ読み込むとブラウザ上でRippleAPIを使えるようになります。

5.ビルドしたJavaScriptファイルとテスト用のHTMLファイルを作って動作を確かめる


Rippleの公式サイトに サンプルコード があるのですが、そのままではうまく動きません。

まず、サンプルコードをコピーして test.html というファイルをつくり、ripple-0.17.4.js と同じwalletフォルダ直下に置きます。

それから、test.html の上から4行目に次のコードを追加します。

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.js"></script>

また、上のコードを追加した後の5行目のコードのバージョン番号を次のように修正します。ここはビルドしたjsファイル名に合わせて変えてください。

<script src="ripple-0.17.4.js"></script>

コード全体としては以下のようになります。

[test.html]
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>XRP Wallet</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.js"></script>
  <script src="ripple-0.17.4.js"></script>
  <script>
    console.log(ripple);
    var api = new ripple.RippleAPI({server:'wss://s1.ripple.com/'});
    api.connect().then(function() {
        return api.getServerInfo();
    }).then(function(server_info) {
    document.body.innerHTML += "<p>Connected to rippled server!</p>" +
"      <table>" +
"        <tr><th>Version</th>" +
"          <td>" + server_info.buildVersion + "</td></tr>" +
"        <tr><th>Ledgers available</th>" +
"          <td>" + server_info.completeLedgers + "</td></tr>" +
"        <tr><th>hostID</th>" +
"          <td>" + server_info.hostID + "</td></tr>" +
"        <tr><th>Most Recent Validated Ledger Seq.</th>" +
"          <td>" + server_info.validatedLedger.ledgerVersion + "</td></tr>" +
"        <tr><th>Most Recent Validated Ledger Hash</th>" +
"          <td>" + server_info.validatedLedger.hash + "</td></tr>" +
"        <tr><th>Seconds since last ledger validated</th>" +
"          <td>" + server_info.validatedLedger.age + "</td></tr>" +
"      </table>";
    });
  </script>
  <style type="text/css">
    td, th { border: 1px solid black; padding: 5px; }
    table { border-collapse: collapse; }
  </style>
</head>
<body></body>
</html>

test.html をブラウザで開いてみると、下の画像のように表示されるはずです。


以上でウォレット作成のための環境構築は終わりです。

0 件のコメント:

コメントを投稿