ILPのテストネットで送金を試す


# はじめに
当記事は、[ILPの公式ページ](https://interledger.org)からたどれる以下のチュートリアルに従い、テストネット上でILPを使って送金した時の手順です。

* [Using Moneyd to Join the ILP Testnet
](https://medium.com/interledger-blog/using-moneyd-to-join-the-ilp-testnet-ba64bd42bb14)
* [SPSP: Simple Payment Setup Protocol](https://medium.com/interledger-blog/spsp-simple-payment-setup-protocol-2028292e6925)

# 結論
* Moneyd, ilp-spspをインストールして、テストネット上で送金した
* 送金はPayment Channel上(つまりオフレジャー)で行われるため、残高確認の方法が分からない。


# ILPとは
ILP(Interledger Protocol)は、異なる台帳間をつないで価値の交換を行うためのプロトコルです。

詳しくは、どらさんの下記の記事が分かりやすいです。

[世界で一番分かりやすい Interledger Protocol](https://medium.com/@dora_gt/世界で一番分かりやすい-interledger-protocol-a6e6e3d11d80)


# 私の環境
Ubuntu 16.04で行いました。
作成されるファイルが分かりやすいように、「ilpuser」というユーザを作成してそのユーザで作業しています。

# Moneydのインストール
InterLedgerネットワークに接続するには、[Moneyd](https://github.com/interledgerjs/moneyd-xrp)というデーモンを介して接続します。

1.Node.jsのインストール

nvmを使って、Node.jsの最新版をインストールします。
(なぜかnpmでNode.jsをインストールした場合は、Moneydのインストール途中でエラーで止まってしまいました)

```Bash
$ cd
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
$ export NVM_DIR="$HOME/.nvm"
$ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
$ nvm --version
0.33.8
$ 
$ nvm install node
$ node -v
v9.11.1
```

2.Moneydのインストール

```Bash
$ npm --version
5.6.0
$ npm install -g moneyd
```

表示されるメッセージの最後のほうに「+ moneyd@3.3.2」と表示されればMoneydのインストール完了です。


# Moneydの設定

Moneydに「configure」オプションをつけて起動し、設定ファイルを生成します。
テストネットを使うので「--testnet」オプションもつけます。

```Bash
$ moneyd configure --testnet

setting testnet rippled server...
setting config file location to /home/ilpuser/.moneyd.test.json
acquiring testnet account...
got testnet address "rNRCN6fk8xyMctdhpDjNwsM4RuUNKBXj7D"
waiting for testnet API to fund address...
selecting a parent from connector list...
writing config file...
written to /home/ilpuser/.moneyd.test.json
```

ホームディレクトリの直下に、「.moneyd.test.json」というファイルが生成され、アドレスやシークレットキーなどが入ります。

# Moneydの起動

「start」オプションをつけて起動します。
下記、起動時にmoneydのロゴがアスキーアートで出ますが、Qiitaでは表示がくずれるので省略しています。


```Bash
$ moneyd start --testnet

starting moneyd
2018-04-11T07:03:32.517Z connector:route-broadcaster info generated random routing secret.
2018-04-11T07:03:32.558Z connector:accounts info add account. accountId=parent
2018-04-11T07:03:32.565Z connector:accounts warn DEPRECATED: plugin accessed deprecated _log property. accountId=parent
2018-04-11T07:03:32.566Z connector:accounts info add account. accountId=local
2018-04-11T07:03:32.570Z connector:accounts warn DEPRECATED: plugin accessed deprecated _log property. accountId=local
2018-04-11T07:03:32.571Z connector:accounts warn DEPRECATED: plugin accessed deprecated _store property. accountId=local
2018-04-11T07:03:32.571Z connector:accounts warn DEPRECATED: plugin accessed deprecated _store property. accountId=local

2018-04-11T07:03:46.943Z connector:accounts info setting ilp address. oldAddress=unknown newAddress=test.amundsen.bmp.btp18q1xrp.xEv665x83ew6HKvr-3upnqwtJkhq51ayOHPk9IlXC3Y
2018-04-11T07:03:46.960Z connector:admin-api info listen called
2018-04-11T07:03:46.961Z connector:app info connector ready (republic attitude). address=test.amundsen.bmp.btp18q1xrp.xEv665x83ew6HKvr-3upnqwtJkhq51ayOHPk9IlXC3Y
```

# SPSPのインストール

送金を行うには、[SPSP](https://github.com/interledger/rfcs/blob/master/0009-simple-payment-setup-protocol/0009-simple-payment-setup-protocol.md)(Simple Payment Setup Protocol)を使います。
こちらもnpmでインストールします。

```Bash
$ npm install -g ilp-spsp
```

# 送金前の残高確認(やり方不明)

送金前の残高を確認します。後述するように、送金後も変化がありませんでした。

```Bash
$ moneyd info --testnet
getting account...
balance:  9989.999988 XRP
account:  rsbjTxc6f7kgVN8VNMQGDFFhj5qJStMQwP
index  destination                         amount (drops)  balance (drops)  closing
0      rE75PyLPYbCGJ4SUiDLvtaCsuRXMd9x5ba  10000000        30000                

```

# SPSPで送金
上記のilp-spspコマンドで、テストアドレスに送金します。

```Bash
$ ilp-spsp send --amount 10 --receiver '$spsp.ilp-test.com'
paying 10 to "$spsp.ilp-test.com"...
sent!
```

# 送金後の残高確認・・・やり方が分からない！

```Bash
$ moneyd info --testnet
getting account...
balance:  9989.999988 XRP
account:  rsbjTxc6f7kgVN8VNMQGDFFhj5qJStMQwP
index  destination                         amount (drops)  balance (drops)  closing
0      rE75PyLPYbCGJ4SUiDLvtaCsuRXMd9x5ba  10000000        30000                

```

moneydで残高確認しましたが、balanceも、destination balanceも変化がありません。
moneydを何度か再起動したり、別な金額で送金したり、SPSPサーバをたててそちらに送金したりしたところ、1時間後ぐらいにdestinationのbalanceが変わりました。

[gitter](https://gitter.im/interledger/testnet-of-testnets)で質問したところ、送金はPayment Channel上で行われるので、channel上に資金を追加するまで残高は変化しない。とのことでした。

他に何か分かったら追記します。