Bitcoin Lightning networkを試してみる 〜 第三者を介して取引

Ligtning Network

前回に引き続き Bitcoin Lightning network を試してみます。
今回は第三者を介しての取引です。

こちらも前回同様全て bitcoinのtestnet上で行い、以下ライブラリ、サイト記事を参考にしています。


Sponsored Link


Lightning-network 第三者を介して取引

おおまかな流れ

1. 送金者から中間者にconnect
2. 中間者から受信者にconnect
3. 送金者から中間者にfundchannel
4. 中間者から受信者にfundchannel
5. 受信者がinvoiceを作成。rhashを送金者に渡す
6. 送金者が受信者までのルートを確認
7. 送金者が中間者を介して受信者に送金
8. チャンネル閉じる
9. 残高確認

前提環境

送金者

10.64.0.6 – lightning-0-858bcc8f55-ws79v

受信者

10.64.1.6 – lightning-1-6744d4dbf4-m6jzc

中間者

10.64.0.7 – lightning-2-7585446db5-qcdx7

手順

bitcoind と lightningdを起動しておきます。

# bitcoind -daemon -testnet=1 -datadir=/block/bitcoin
# nohup lightningd --network=testnet --port 42480 --bitcoin-datadir /block/bitcoin --log-level debug &

1. 送金者から中間者にconnect

中間者のID確認

# lightning-cli getinfo | jq .
{
  "id": "03d0e81b04811ee92ed081cae23299f922a418a545d5b5f077365d2bb4cf6ec0ca",
  "port": 42480,
  "address": [],
  "version": "v0.5.2-2016-11-21-1646-g73c3175",
  "blockheight": 1151771,
  "network": "testnet"
}

その後、送金者から中間者にconnectしておきます。

# lightning-cli connect 03d0e81b04811ee92ed081cae23299f922a418a545d5b5f077365d2bb4cf6ec0ca 10.64.0.7 42480
{ "id" : "03d0e81b04811ee92ed081cae23299f922a418a545d5b5f077365d2bb4cf6ec0ca" }

lightningの送金者アドレス作成します。

# lightning-cli newaddr
{ "address" : "2N6ovQ51qTVmGTvMj2vDvfizCTbTmjgVoAT" }

作成したアドレスに https://testnet.manu.backend.hamburg/faucet からtestnet用のbitcoinを送金しておきます
その後、ブロック生成されるのをまつと・・・

# lightning-cli listfunds | jq .
{
  "outputs": [
    {
      "txid": "cf53b5cc5ca58d4b7ffd15e0449aef5f315e96692ac80ba0fa1e01f4b7379cb5",
      "output": 0,
      "value": 130000000
    }
  ]
}

valueが増えてることが確認できます。

2. 中間者から受信者にconnect

受信者のID確認

# lightning-cli getinfo | jq .
{
  "id": "0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5",
  "port": 42480,
  "address": [],
  "version": "v0.5.2-2016-11-21-1646-g73c3175",
  "blockheight": 1283581,
  "network": "testnet"
}

中間者から受信者にconnect

# lightning-cli connect 0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5 10.64.1.6 42480
{ "id" : "0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5" }

3. 送金者から中間者にfundchannel

# lightning-cli fundchannel 03d0e81b04811ee92ed081cae23299f922a418a545d5b5f077365d2bb4cf6ec0ca 1000000 | jq .
{
  "tx": "02000000000101b59c37b7f4011efaa00bc82a69965e315fef9a44e015fd7f4b8da55cccb553cf00000000171600142bf0bf131adfccf89d867c94ae000230dd4c0659ffffffff0240420f0000000000220020296e7dbd718c650a4ad8973e48b146cffa77b148b3f4905232abda2c42b08a277c2bb00700000000160014e584ee16462625e386135a6eaac50279bf66c0b802473044022035436c5680f348928b9337386130618434399350fac53cbab725ae10a3ac7dc80220013ec236809dfaebc6cb53f35f1dbbb88180521db1ef8d1b13221f0d698065ed012102a21d0eabb53b37f1f634b44d3c9ff74ba275b87b6c2099f36cc1a7a702b95e3700000000",
  "txid": "bb1a82201e5184865840d08336a59cb5ef2bb51ad64526a48ed82b579ba2de4b"
}

peersのステータスが CHANNELD_AWAITING_LOCKIN から NORMAL に変わるまで待つ

# lightning-cli listpeers | jq .
{
  "peers": [
    {
      "id": "03d0e81b04811ee92ed081cae23299f922a418a545d5b5f077365d2bb4cf6ec0ca",
      "connected": true,
      "netaddr": [
        "10.64.0.7:42480"
      ],
      "channels": [
        {
          "state": "CHANNELD_AWAITING_LOCKIN",
          "owner": "lightning_channeld",
          "funding_txid": "bb1a82201e5184865840d08336a59cb5ef2bb51ad64526a48ed82b579ba2de4b",
          "msatoshi_to_us": 1000000000,
          "msatoshi_total": 1000000000,
          "dust_limit_satoshis": 546,
          "max_htlc_value_in_flight_msat": 18446744073709552000,
          "channel_reserve_satoshis": 0,
          "htlc_minimum_msat": 0,
          "to_self_delay": 6,
          "max_accepted_htlcs": 483
        }
      ]
    }
  ]
}

から

lightning-cli listpeers | jq .
{
  "peers": [
    {
      "id": "03d0e81b04811ee92ed081cae23299f922a418a545d5b5f077365d2bb4cf6ec0ca",
      "connected": true,
      "netaddr": [
        "10.64.0.7:42480"
      ],
      "channels": [
        {
          "state": "CHANNELD_NORMAL",
          "owner": "lightning_channeld",
          "short_channel_id": "1283582:24:0",
          "funding_txid": "bb1a82201e5184865840d08336a59cb5ef2bb51ad64526a48ed82b579ba2de4b",
          "msatoshi_to_us": 1000000000,
          "msatoshi_total": 1000000000,
          "dust_limit_satoshis": 546,
          "max_htlc_value_in_flight_msat": 18446744073709552000,
          "channel_reserve_satoshis": 0,
          "htlc_minimum_msat": 0,
          "to_self_delay": 6,
          "max_accepted_htlcs": 483
        }
      ]
    }
  ]
}

に変わります。

4. 中間者から受信者にfundchannel

中間者でもfundchannelするためにアドレスを作成して、testnet用のbitcoinを送金しておきます。

# lightning-cli newaddr
{ "address" : "2MxTkufpFT3gpDdVmKL1mgXSDugqaYEmpze" }

https://testnet.manu.backend.hamburg/faucet で送金

# lightning-cli listfunds | jq .
{
  "outputs": [
    {
      "txid": "0ce2cf2220a30b160e6100c4046ed2d2bfe021362aa5555124f2f66abc8885e6",
      "output": 0,
      "value": 65000000
    }
  ]
}

そして、fundchannelを行う

# lightning-cli fundchannel 0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5 1000000 | jq .
{
  "tx": "02000000000101e68588bc6af6f2245155a52a3621e0bfd2d26e04c400610e160ba32022cfe20c00000000171600146cfc83e8f20c16359ffc022e4297ac4217df1b7bffffffff0240420f000000000022002097dfd7f23d3ef5d617482d3456b44a51911ae51bf8b5d3b018de1ec15cc2d2da248fd0030000000016001481fe4a3bf82fa7cfa416f483274ac417cd697aaa02483045022100b4d9f7968218da421ea3cfd306340112961a815bbb50cfba718bde5755478d0702201074171219d5ff774b857994c9ce1a4bb536d125aff8c262477c47b78b68e3ac012102a804223c8ad6c36f8869ff6869d152b5125fdc94de61c0215692124057e244fb00000000",
  "txid": "0a05adc873fa982fcee5bbd2b1cceb7582b5feb776cd519da3dbc5afce6e2843"
}

listpeersで送金者、受信者に繋がっていることを確認

# lightning-cli listpeers | jq .
{
  "peers": [
    {
      "id": "025e9ec0616ba210c054b91f7afdb04cfdfb6f146ce2d28d6598e6bb1e2fbb6e35",
      "connected": true,
      "netaddr": [
        "[::ffff:10.64.0.6]:33042"
      ],
      "channels": [
        {
          "state": "CHANNELD_NORMAL",
          "owner": "lightning_channeld",
          "short_channel_id": "1283582:24:0",
          "funding_txid": "bb1a82201e5184865840d08336a59cb5ef2bb51ad64526a48ed82b579ba2de4b",
          "msatoshi_to_us": 0,
          "msatoshi_total": 1000000000,
          "dust_limit_satoshis": 546,
          "max_htlc_value_in_flight_msat": 18446744073709552000,
          "channel_reserve_satoshis": 0,
          "htlc_minimum_msat": 0,
          "to_self_delay": 6,
          "max_accepted_htlcs": 483
        }
      ]
    },
    {
      "id": "0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5",
      "connected": true,
      "netaddr": [
        "10.64.1.6:42480"
      ],
      "channels": [
        {
          "state": "CHANNELD_NORMAL",
          "owner": "lightning_channeld",
          "short_channel_id": "1283587:23:0",
          "funding_txid": "0a05adc873fa982fcee5bbd2b1cceb7582b5feb776cd519da3dbc5afce6e2843",
          "msatoshi_to_us": 1000000000,
          "msatoshi_total": 1000000000,
          "dust_limit_satoshis": 546,
          "max_htlc_value_in_flight_msat": 18446744073709552000,
          "channel_reserve_satoshis": 0,
          "htlc_minimum_msat": 0,
          "to_self_delay": 6,
          "max_accepted_htlcs": 483
        }
      ]
    }
  ]
}

5. 受信者がinvoiceを作成。rhashを送金者に渡す

# lightning-cli invoice 100000000 tx-00002 test | jq .
{
  "payment_hash": "e781889e3a0dcf0e5077b1345021ea495c6183cdcebe4f8cd463ee58f58afc17",
  "expiry_time": 1519032001,
  "expires_at": 1519032001,
  "bolt11": "lntb1m1pdg4z93pp5u7qc3836ph8su5rhky69qg02f9wxrq7de6lylrx5v0h93av2lstsdq8w3jhxaqcqpxl2mjfej92q0p3357ftfpwnalag27zxj22v0g88zjjsycydt48l9z28myj7hxahxyacyqhvclk4gy0cxp9gd5ckr8awdml97cfcsxlcsp0hqdvp"
}

作成されたことを確認

# lightning-cli listinvoice | jq .
[
  {
    "label": "tx-00002",
    "payment_hash": "e781889e3a0dcf0e5077b1345021ea495c6183cdcebe4f8cd463ee58f58afc17",
    "msatoshi": 100000000,
    "complete": false,
    "expiry_time": 1519032001,
    "expires_at": 1519032001
  }
]

6. 送金者が受信者までのルートを確認

送金者のノード上でgetrouteを行い、routeを確認

# lightning-cli getroute 0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5 100000000 1 | jq .
{
  "route": [
    {
      "id": "03d0e81b04811ee92ed081cae23299f922a418a545d5b5f077365d2bb4cf6ec0ca",
      "channel": "1283582:24:0",
      "msatoshi": 100001001,
      "delay": 15
    },
    {
      "id": "0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5",
      "channel": "1283587:23:0",
      "msatoshi": 100000000,
      "delay": 9
    }
  ]
}

7. 送金者が中間者を介して受信者に送金

送金者がsendpay

# lightning-cli sendpay '[ { "id" : "03d0e81b04811ee92ed081cae23299f922a418a545d5b5f077365d2bb4cf6ec0ca", "msatoshi" : 100001001, "delay" : 15, "channel" : "1283582:24:0" }, { "id" : "0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5", "msatoshi" : 100000000, "delay" : 9, "channel" : "1283587:23:0" } ]' e781889e3a0dcf0e5077b1345021ea495c6183cdcebe4f8cd463ee58f58afc17
{ "preimage" : "9c1ddaa6d694d876ad248446feb89c75246ba48cc19b320c9ee4cdc943a211d8" }

ちなみに以下のように改行いれてためしてみたが、送金できなかった、、、

# lightning-cli sendpay '
[
    {
      "id": "03d0e81b04811ee92ed081cae23299f922a418a545d5b5f077365d2bb4cf6ec0ca",
      "channel": "1283582:24:0",
      "msatoshi": 100001001,
      "delay": 15
    },
    {
      "id": "0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5",
      "channel": "1283587:23:0",
      "msatoshi": 100000000,
      "delay": 9
    }
]
' e781889e3a0dcf0e5077b1345021ea495c6183cdcebe4f8cd463ee58f58afc17

受信者側でpaid_atに日付はいってることを確認。

# lightning-cli listinvoice | jq .
[
  {
    "label": "tx-00002",
    "payment_hash": "e781889e3a0dcf0e5077b1345021ea495c6183cdcebe4f8cd463ee58f58afc17",
    "msatoshi": 100000000,
    "complete": true,
    "pay_index": 1,
    "msatoshi_received": 100000000,
    "paid_timestamp": 1519028526,
    "paid_at": 1519028526,
    "expiry_time": 1519032001,
    "expires_at": 1519032001
  }
]

8. チャンネル閉じる

送金者

# lightning-cli close 03d0e81b04811ee92ed081cae23299f922a418a545d5b5f077365d2bb4cf6ec0ca
{  }

中間者

# lightning-cli close 0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5
{  }

しっかり閉じてることを確認。statusで判断。

# lightning-cli listpeers | jq .
{
  "peers": [
    {
      "id": "025e9ec0616ba210c054b91f7afdb04cfdfb6f146ce2d28d6598e6bb1e2fbb6e35",
      "connected": false,
      "channels": [
        {
          "state": "ONCHAIND_THEIR_UNILATERAL",
          "owner": "lightning_onchaind",
          "short_channel_id": "1283582:24:0",
          "funding_txid": "bb1a82201e5184865840d08336a59cb5ef2bb51ad64526a48ed82b579ba2de4b",
          "msatoshi_to_us": 100001001,
          "msatoshi_total": 1000000000,
          "dust_limit_satoshis": 546,
          "max_htlc_value_in_flight_msat": 18446744073709552000,
          "channel_reserve_satoshis": 0,
          "htlc_minimum_msat": 0,
          "to_self_delay": 6,
          "max_accepted_htlcs": 483
        }
      ]
    },
    {
      "id": "0221f6301fd651d18396af13248e77178793a463c111376d009603cb71e62793c5",
      "connected": false,
      "channels": [
        {
          "state": "ONCHAIND_MUTUAL",
          "owner": "lightning_onchaind",
          "short_channel_id": "1283587:23:0",
          "funding_txid": "0a05adc873fa982fcee5bbd2b1cceb7582b5feb776cd519da3dbc5afce6e2843",
          "msatoshi_to_us": 900000000,
          "msatoshi_total": 1000000000,
          "dust_limit_satoshis": 546,
          "max_htlc_value_in_flight_msat": 18446744073709552000,
          "channel_reserve_satoshis": 0,
          "htlc_minimum_msat": 0,
          "to_self_delay": 6,
          "max_accepted_htlcs": 483
        }
      ]
    }
  ]
}

9. 残高確認

受信者で以下全て確認。

# lightning-cli listfunds | jq .
{
  "outputs": [
    {
      "txid": "3b8605fde20447f7c8e32d2dc5c39e62de8df101cb702870c73b366178c2438f",
      "output": 0,
      "value": 100000
    }
  ]
}

最後にwithdraw

# bitcoin-cli -testnet -datadir=/block/bitcoin  getaddressesbyaccount ""
[
  "mqTTZ4YwDuMob5mycUf3wyHiVeoYvu4gFA"
]
# bitcoin-cli -testnet -datadir=/block/bitcoin listaccounts
{
  "": 0.00003343
}
# lightning-cli withdraw mqTTZ4YwDuMob5mycUf3wyHiVeoYvu4gFA 10
{ 
	"tx" : "020000000001018f43c27861363bc7702870cb01f18dde629ec3c52d2de3c8f74704e2fd05863b0000000000ffffffff020a000000000000001976a9146d080499d8d1a65c25c297a9e5a877a9d18ea61c88ace28501000000000016001439ffde5a55408ff7c8245bc631acda0aa477597c0247304402202f9d8482f99e1e3382ee94a005cccb23233e9e2fc2f7f6d6ad3c3c5b3a941dc302204485436f3583291be2910f71ab7cd960c494df8f66fc858db21ee6020b617e520121038002048663a814fb68e153e6195f5fcbe44f42f0fa5128250bb6a648d84235f800000000",
	"txid" : "89ac7a08ebacfd4a700d5ca2de0cb51fde876ca52ca3483974050cf89a7e33d5" 
}

受信者側の残高が無事増えました

# bitcoin-cli -testnet -datadir=/block/bitcoin listaccounts
{
  "": 0.00003353
}
Sponsored Link

ビットコイン(Bitcoin)、イーサリアム(Ethereum)、リップル(Ripple)、ネム(NEM)などの仮想通貨を買うならZaifがおすすめです。

特に国内でETHを購入するなら、アルトコインでも板取引に対応しているZaif(ザイフ)が割安なのでよいですよ。

コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


Stablecoin
Stablecoinの 無担保型通貨 は実現するには?

以前の記事でStablecoinを扱いましたが、今回その中でも「無担保型」についてもう少し掘り下げよ …

仮想通貨全般
Stablecoin(ステーブルコイン)とは?

最近Stablecoinのツイートをよく見ており、次の仮想通貨の本命などと言われています。 ステーブ …

仮想通貨全般
難易度調整(Difficulty Adjustment)アルゴリズムとは?

最近、Monaが攻撃を受けて被害がでた件ですが 上記、大石さんの記事を引用しますが 攻撃を容易にした …