Neutrinoとライトニングネットワーク

Neutrinoってなに?

  1. NeutrinoはBIP157/158のことでBIP37が抱えるSPVウォレットのプライバシー問題を解決するための新しいプロトコル提案
  2. BIP157/158はGCSフィルターというこれまでのBloomフィルター(BIP37)よりもプライバシー向上を目指したプロトコル

Neutrinoを使うと何がいいの?

ビットコインフルノードを持つ必要がありません。主要なライトニングネットワークノードは現状ビットコインノード(bitcoindやbtcd)を必要とします。このためライトニングネットワークを使おうとしてもまずはビットコインノードの構築やデータ同期を待つ必要があり余計なコストがかかってしまいます。また、ビットコインフルノードが必要ということは、当然モバイル版LNウォレットなんて作れるわけがないですよね。以下に、Neutrinoの使い方を説明します。

Neutrinoの使い方

NeutrinoはLNDに含まれているため、まずはここからダウンロードおよびインストールが必要です。以降ではLNDのインストールが完了したことを前提に解説します。

$ lnd --bitcoin.active --bitcoin.testnet --debuglevel=debug --bitcoin.node=neutrino --neutrino.connect=faucet.lightning.community
#ウォレットのアンロック(初回起動の場合はlncli cretaeが必要)
$ lncli --network=testnet unlock#ウォレットの同期情報を取得する。"synced_to_chain": trueであれば同期完了
$ lncli --network=testnet getinfo
{
    "identity_pubkey": "03d266a4fa94c551fde023df51ecb63cf3c3203ade55cf39d5613bf039a34e778f",
    "alias": "testnet.raimu",
    "num_pending_channels": 0,
    "num_active_channels": 0,
    "num_peers": 3,
    "block_height": 1446515,
    "block_hash": "0000000000000066d74db224a0ee1b2f68093b1f6bb387ef0a6638178317c6aa",
    "synced_to_chain": true,
    "testnet": true,
    "chains": [
        "bitcoin"
    ],
    "uris": [
    ],
    "best_header_timestamp": "1543938049",
    "version": "0.5.0-beta commit=",
    "num_inactive_channels": 0
}
#まずはビットコインを入手するためのアドレスを生成し、そこへビットコインを送金
$ lncli --network=testnet newaddress np2wkh
{
    "address": "2N5rAVcu16AcXMzC1siLHrxDwiYWWFRvK3q"
}#ビットコインが送金されたかを確認
$ lncli --network=testnet walletbalance
{
    "total_balance": "741798",
    "confirmed_balance": "741798",
    "unconfirmed_balance": "0"
}#チャネル開設
$ lncli --network=testnet openchannel 037ad5d97c0ba4ac122b1c2c28deb1ea858f4a48f8d02148ba6946950871988bec 100000 --conf_target 1 --min_confs 1
#チャネルが解説中の場合は以下のコマンドで確認可能
$ lncli --network=testnet pendingchannels
{
    "total_limbo_balance": "0",
    "pending_open_channels": [
        {
            "channel": {
                "remote_node_pub": "037ad5d97c0ba4ac122b1c2c28deb1ea858f4a48f8d02148ba6946950871988bec",
                "channel_point": "7e879ace6c536fcbd436f759b9b731b5277d25aa60fea8522b07d52153bb29a3:0",
                "capacity": "100000",
                "local_balance": "90950",
                "remote_balance": "0"
            },
            "confirmation_height": 0,
            "commit_fee": "9050",
            "commit_weight": "600",
            "fee_per_kw": "12500"
        }
    ],
    "pending_closing_channels": [
    ],
    "pending_force_closing_channels": [
    ],
    "waiting_close_channels": [
    ]
}#チャネル開設が完了!
$ lncli --network=testnet listchannels
{
    "channels": [
        {
            "active": true,
            "remote_pubkey": "037ad5d97c0ba4ac122b1c2c28deb1ea858f4a48f8d02148ba6946950871988bec",
            "channel_point": "7e879ace6c536fcbd436f759b9b731b5277d25aa60fea8522b07d52153bb29a3:0",
            "chan_id": "0",
            "capacity": "100000",
            "local_balance": "90950",
            "remote_balance": "0",
            "commit_fee": "9050",
            "commit_weight": "600",
            "fee_per_kw": "12500",
            "unsettled_balance": "0",
            "total_satoshis_sent": "0",
            "total_satoshis_received": "0",
            "num_updates": "0",
            "pending_htlcs": [
            ],
            "csv_delay": 144,
            "private": false
        }
    ]
}
#支払いをする
$ lncli --network=testnet payinvoice lntb10n1pwq0nvjpp54ageafhnvpudrzmxggxhf63k7x6zwg2p06sf750v4xspndm6u8fqdqqcqzysxqyz5vqwe56hr9c86pqf7h6jewt6c7t4tcgu7gf6nyq9aszec4qv74hn5uphpppna720g728729ysvur9saqk6tnwsxnehcyqpc3kkc2t26rfqq2cpl8t -f
{
        "payment_error": "",
        "payment_preimage": "7bd5b884f5211e5e5f6b02258ca27da1b31949fdd6e91627ab8144f5217c62ac",
        "payment_route": {
                "total_time_lock": 1446778,
                "total_amt": 1,
                "hops": [
                        {
                                "chan_id": 1590472156883386369,
                                "chan_capacity": 3999000,
                                "amt_to_forward": 1,
                                "expiry": 1446778,
                                "amt_to_forward_msat": 1000,
                                "pub_key": "03c856d2dbec7454c48f311031f06bb99e3ca1ab15a9b9b35de14e139aa663b463"
                        }
                ],
                "total_amt_msat": 1000
        }
}

モバイル版LNウォレットはNeutrinoが必須?

いいえ、必須ではありません。 現状はBIP37に準拠したSPVクライアント(主にBitcoinJライブラリ)を使って以下のLNモバイルウォレットが実装されています。 ・Eclair ・Bitcoin Lightning Wallet ・Denryu Wallet(forked from BLW)

Neutrinoを使ってモバイル版LNウォレットは作れるの?

作れます。ただし現状はNeutrinoをサポートしているビットコインノード(btcd)が少なく、実装してもモバイルから接続しにいくノードが限られているため非中央集権・分散化が醍醐味のビットコインとしての特徴がなくあまり魅力的ではありません。以後、BIP157/158をサポートするビットコインノードがネットワークの全体を占めるとNeutrinoの威力が発揮されるでしょう。


Blockchain Engineer Blog

This Blog is for all Blockchain Engineer

Yuya

Written by

Yuya

夢は世界中に影響を与え社会貢献すること。感謝、親孝行/*vulnerable,empathy,introverted*/stammer/android/hitachi/pole vault/水曜どうでしょう/将棋

Blockchain Engineer Blog

This Blog is for all Blockchain Engineer