仮想通貨サービス BitCapitalZ の日記

仮想通貨関連のブログです Ripple, Ethereum 仮想通貨2.0に注目しています

【リップル】nodejs 初心者が ripple-lib を使って残高確認・送金してみる 【Ripple】

Ripple REST APIRipple WebSocket API を用いて残高確認、送金等の処理ができるわけですが、Ripple WebSocket API で用意される API は非常にプリミティブでそのまま使うと非常に面倒です。
そこで Ripple Lab 公式の Ripple WebSocket API を簡単に使うためのライブラリ ripple-lib を使います。

この ripple-lib は nodejs 上で動作します。僕はこれまで nodejs を全然触ったことなかったのですが、非常に簡単でした。
以下に手順とサンプルコードを記します。ubuntu 環境を想定していますが、nodejs のインストール以外はどの環境でも変わりません。


1. nodejs をインストールする
2. ripple-lib をインストールする
3. コードを書く
4. 実行する

nodejs をインストールする

$ sudo apt-get install nodejs

ripple-lib をインストールする

作業用フォルダを作って npm コマンド一発です

$ mkdir ripple-lib-test
$ cd ripple-lib-test
$ npm install ripple-lib

コードを書く

アカウント情報を見るコード
$ touch account.js
$ vi account.js

/* Loading ripple-lib with Node.js */
var Remote = require('ripple-lib').Remote;

var remote = new Remote({
  // see the API Reference for available options
  servers: [ 'wss://s1.ripple.com:443' ]
});

var options = {
  account: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B'
};

remote.connect(function() {
  remote.requestAccountInfo(options, function(err, info) {
        process.stdout.write(JSON.stringify(info));
  });
});

実行する

$ nodejs account.js 
{"account_data":{"Account":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B","Balance":"4425291709896","Domain":"6269747374616D702E6E6574","EmailHash":"5B33B93C7FFE384D53450FC666BB11FB","Flags":131072,"LedgerEntryType":"AccountRoot","OwnerCount":0,"PreviousTxnID":"744665852058117B3AE479C81ABD4B8E8ACD281D9704AE1588CA1327DD14FF1E","PreviousTxnLgrSeq":10602541,"Sequence":603,"TransferRate":1002000000,"index":"B7D526FDDF9E3B3F95C3DC97C353065B0482302500BBB8051A5C090B596C6133","urlgravatar":"http://www.gravatar.com/avatar/5b33b93c7ffe384d53450fc666bb11fb"},"ledger_current_index":10602541,"validated":false}

これで ripple-lib を動作させることができました。

ripple-lib が用意する API の詳細は ripple-lib/REFERENCE.md at develop · ripple/ripple-lib · GitHub をご参照下さい。

送金について

送金するコードのサンプルは以下です。

/* Loading ripple-lib with Node.js */
var Remote = require('ripple-lib').Remote;

var remote = new Remote({
  // see the API Reference for available options
  servers: [ 'wss://s1.ripple.com:443' ]
});

remote.connect(function() {
  remote.setSecret('source_address', 'source_secret');
  var transaction = remote.createTransaction('Payment', {
    account: 'source_address',
    destination: 'destination_address',
    amount: 1
  });

  transaction.on('resubmitted', function() {
    // initial submission failed, resubmitting
  });

  transaction.submit(function(err, res) {
   // submission has finalized with either an error or success.
   // the transaction will not be retried after this point
  });
});

適宜 source_address, source_secret, descination_address を変えて下さい。
ここで注意すべき点が一つあります。 amount が 1 になってますが、これは 1XRP が送られるわけではありません。
Ripple WebSocket API の世界では XRP が 100万倍されて扱われています。従ってこの場合 1/100万 XRP おくられます。
もし 1XRP 送ろうとした場合 1000000 という値にする必要があります。