Binance chainのlight nodeを立ててみた

#Binance chain（バイナンスチェーン）について
Binance chainは中国の仮想通貨取引業者であるバイナンス社が自ら構築した仮想通貨のブロックチェーンです。
2019年2月20日にテストネットがローンチされたので、早速いじってみることにしました。

#light nodeの構成
light nodeはそれ単体ではBinance chainに接続できません。
別で稼働しているfull nodeを介して間接的にBinance chainに接続します。

[light node] →　[full node] →　[Binance chain]

順番に手順を説明します。

#gitからnode-binaryを取得する
```
$ git clone https://github.com/binance-chain/node-binary.git
Cloning into 'node-binary'...
remote: Enumerating objects: 28, done.
remote: Total 28 (delta 0), reused 0 (delta 0), pack-reused 28
Unpacking objects: 100% (28/28), done.
```
#稼働中のFull nodeの情報を取得する
```
$ curl 'https://testnet-dex.binance.org/api/v1/peers' | python3 -mjson.tool
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1776  100  1776    0     0   4852      0 --:--:-- --:--:-- --:--:--  4852
[
    {
        "accelerated": true,
        "access_addr": "https://testnet-dex.binance.org:443",
        "capabilities": [
            "qs",
            "ap",
            "ws"
        ],
        "id": "gateway-ingress",
        "listen_addr": "https://testnet-dex.binance.org:443",
        "moniker": "gateway-ingress",
        "network": "gateway",
        "stream_addr": "wss://testnet-dex.binance.org",
        "version": "1.0.0"
    },
    {
        "access_addr": "http://seed-pre-s1.binance.org:80",
        "capabilities": [
            "node"
        ],
        "id": "d2102fee37bcc94f44a4ad91d7c78c251c155c2c",
        "listen_addr": "http://seed-pre-s1.binance.org:80",
        "moniker": "seed",
        "network": "Binance-Chain-Nile",
        "original_listen_addr": "ac6d84c3f243a11e98ced0ac108d49f7-704ea117aa391bbe.elb.ap-northeast-1.amazonaws.com:27146",
        "version": "0.29.1"
    },

以下省略
```
ここでは2番目に表示されたノードを使ってみます。
networkが「Binance-Chain-Nile」、access_addrが「seed-pre-s1.binance.org:80」です。

#light nodeの実行
lightdを実行します。

```
~$ node-binary/lightnode/testnet/linux/lightd --chain-id "Binance-Chain-Nile" --node tcp://seed-pre-s1.binance.org:80 >~/node.log &
```
ログを確認してみます。

```
~$ tail node.log 
I[2019-02-23|06:52:16.787] Connecting to source HTTP client...          
I[2019-02-23|06:52:16.787] Constructing Verifier...                     
I[2019-02-23|06:52:16.787] lite/proxy/NewVerifier()...                  module=lite/proxy chainID=Binance-Chain-Nile rootDir=.binance-lite client=WSEvents
I[2019-02-23|06:52:16.805] DBProvider.LatestFullCommit()...             module=lite label=trusted.mem chainID=Binance-Chain-Nile minHeight=1 maxHeight=9223372036854775807
I[2019-02-23|06:52:16.805] DBProvider.LatestFullCommit()...             module=lite label=trusted.lvl chainID=Binance-Chain-Nile minHeight=1 maxHeight=9223372036854775807
I[2019-02-23|06:52:16.806] DBProvider.LatestFullCommit() found latest.  module=lite label=trusted.lvl height=1
I[2019-02-23|06:52:16.806] Starting proxy...                            
I[2019-02-23|06:52:16.834] Starting RPC HTTP server on 127.0.0.1:27147  

```

正常に起動するとこのようなログが出力されます。
デフォルトのポートは27147です。

#light node にコマンドを発行してみる
```
~$ curl 'localhost:27147/block?height=1963307'
{
  "jsonrpc": "2.0",
  "id": "",
  "result": {
    "block_meta": {
      "block_id": {
        "hash": "2E80C59E2C58C2BF19C4CD738512DD6E005A4FFD59A389E3B0D5686A2E257955",
        "parts": {
          "total": "1",
          "hash": "F9791204951F11E2BC7C4CB6CCDCD324F1BEDAB4C730AAA61C9F0219157C351F"
        }
      },
      "header": {
        "version": {
          "block": "9",
          "app": "0"
        },
        "chain_id": "Binance-Chain-Nile",
        "height": "1963307",
        "time": "2019-02-22T21:21:08.713601053Z",
        "num_txs": "0",
        "total_txs": "57988",
        "last_block_id": {
          "hash": "F0B2F78B4F2F7724EC58710C2501935C1DC36492247D47630EA3F4FB04F12E41",
          "parts": {
            "total": "1",
            "hash": "845008E3E016F8BCA64E4738DACB70CB7174D43BAC32CB60DA2245F8E5ADE02D"
          }
        },
        "last_commit_hash": "DA3727E8790F70DF1015525CF314466BFBC24B83653C6A13CB3AEBE153E22BD1",
        "data_hash": "",
        "validators_hash": "8C69ACE62C2D5D2E4A4C9C9534B537CE8BF85CDCA72296C529B1B52F901C7A81",
        "next_validators_hash": "8C69ACE62C2D5D2E4A4C9C9534B537CE8BF85CDCA72296C529B1B52F901C7A81",
        "consensus_hash": "294D8FBD0B94B767A7EBA9840F299A3586DA7FE6B5DEAD3B7EECBA193C400F93",
        "app_hash": "5C1A4F346B749BD0398EB77B24735DCFF44D07D2C26C295C22C3E727A63D81CC",
        "last_results_hash": "",
        "evidence_hash": "",
        "proposer_address": "418ED0315DC3DBDC57D382624915C2D6675EA898"
      }
    },

以下省略
```
ブロックの情報が取得できました。

#参考サイト
Binance Chain Technical Documentation & FAQ
https://binance-chain.github.io/