[LN#022]送金の転送fee

Lightning Network BOLTの概要について、書いていくシリーズ。

今回は、送金を転送する際のfee計算についてです。


Lightning Network BOLTには、送金を転送するという仕様があります。
だいたいの場合、Lightning Networkで送金をする際には、このような流れになります(図の数字と連番は関係ありません)。

  1. 送金する人(payer)が、送金先の人(payee)からinvoiceの文字列をもらう
  2. payerは、Lightning Networkのノードアプリにinvoiceを伝える
  3. payerのノードアプリが、今まで通知されたchannelの情報を使って、payeeまでのルートを作る
  4. payerは、ルートの最初の人に暗号化されたルート情報と送金額を通知
  5. 受け取った人は、暗号化されたルートから次の送金先と送金額をデコードし、それに従って通知
  6. 手順5を繰り返していき、payeeまでたどり着くと、payeeはinvoiceを解く鍵を送り返す
  7. 鍵を受け取った人はinvoiceを解いて自分への送金を受け取り、送金したルートと逆順に鍵を送っていく

image

中継する人は、経路を使った見返りとして、送金したfeeを受け取ることができます。

feeは、「受け取った送金額」と「次に渡す送金額」の差になります。
たとえばこの図では、中継Aさんがfeeとして10、中継Bさんが20を要求した場合、payeeへ100送りたいならば、payerは130送金します。


手数料はpayerが勝手に決めるわけではなく、各ノードがchannel情報をアナウンスするメッセージの中に入っています。

BOLTメッセージで言えば、channel_updateになります。
feeに関係するパラメータは、この2つです。

image

fee_base_msatは、ベースとなるfeeで、固定です(単位はmsatoshi)。
fee_proportional_millionthsは、100万satoshi=10mBTC辺りのfeeです。

なお、単に相手に送金するだけであればfeeは発生しません。

feeは、経由するチャネルごとにかかるため、経路のチャネルが増えると、feeが多くなっていきます。
しかし、feeはチャネルごとに異なるため、あまり高いfeeを設定しているとpayerがルート計算する際に除外されることでしょう。

2018年2月にTESTNETで値を見たときは、各ノードのデフォルト値はこのようになっていました。
https://github.com/nayutaco/lightning-memo/wiki/%E6%8E%A5%E7%B6%9A%E3%83%86%E3%82%B9%E3%83%88#table

TESTNETなので値が高い低いというのはあまり意味がありません(MAINNETでの値は調べていません)。

パラメータはノードアプリで設定できると思いますので、確認されると面白いでしょう。