SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
ビットバンク株式会社
TypeScript でライトニング
ネットワークを使ってみよう
Jonathan Underwood
Copyright © bitbank, inc.
概要
1. Lightning のノードソフトウェアプロジェクト
2. LNDを選定した理由
3. LNDをTypeScriptで扱うまでの道のり
4. gRPCでの操作
a. lnd-rpc の紹介 (ライブラリ)
b. tls.cert のドメインについて
c. 認証に使う macaroon の選定について
5. 留意点
Copyright © bitbank, inc.
Lightning のノードソフトウェアプロジェクト
1. LND (https://github.com/lightningnetwork/lnd)
a. 開発言語: go
b. Interfaces: JSON-REST, CLI, gRPC
2. c-lightning (https://github.com/ElementsProject/lightning)
a. 開発言語: C
b. Interfaces: JSON-REST, CLI
3. eclair (https://github.com/ACINQ/eclair)
a. 開発言語: scala
b. Interfaces: JSON-REST, GUI
Copyright © bitbank, inc.
LNDを選定した理由
1. gRPC のインタフェースを提供
a. 型が定義されているので、TypeScriptとの相性が良い
2. 開発コミュニティーが活発
a. 質問あれば slack で聞くとすぐに返事がくる
3. 開発を主導している会社はライトニングのために設立された
a. ライトニングの未来をより良くする動きはLNDから始まる傾向
Copyright © bitbank, inc.
LNDをTypeScriptで扱うまでの道のり
2017/11
LNDのリード開発者と連
絡を取り、取引所がライ
トニングを活用する場合
のベストプラクティスを
議論
2017 2018 2019
bitbank cc の開発環境にて
ライトニングの入出金を実装
・フロントは未実装
・APIでしか使えない
・testnetのみ
・TypeScript未対応
・非公開ライブラリ
2017/12
2018/01
LNDのmainnetフォークを
作り、slackで数人で共有
し、mainnetのLNの初期
の5ノードに入り、steam
card 購入
mainnetの公式リリースが出たものの、色々と不都合により延期させ、引き続きライトニングの研究
とLND開発者との連携を取り、ライトニングを促進する取り組みをいくつか考案+実装
2018/01 下旬 - 現在
2019/02
内部で使っていたライブラリをTypeScriptに
対応させ、MITライセンスでオープンソース
?
Copyright © bitbank, inc.
gRPCでの操作: lnd-rpcを紹介
NPM: https://www.npmjs.com/package/lnd-rpc
Github: https://github.com/junderw/lnd-rpc
Copyright © bitbank, inc.
gRPCでの操作: lnd-rpcを紹介
import { LightningRpc, GetInfoResponse } from 'lnd-rpc'
const LndRpc = LightningRpc. fromFilePaths (
'/home/ubuntu/.lnd/tls.cert' ,
'/home/ubuntu/.lnd/data/chain/bitcoin/mainnet/admin.macaroon'
)
async function unlockExisting() : Promise<void> {
await LndRpc. unlock("aaaaaaaa" )
let results : GetInfoResponse = await LndRpc. getInfo()
console.log(results)
}
unlockExisting ().catch(console.error)
1. 2つのファイルが必要
a. tls.cert
b. *.macaroon
2. 指定方法が2つ
a. fromFilePaths = ファイルパス
b. fromStrings = 文字列
i. cert = utf8
ii. macaroon = hex
3. waitForReady ⇒ unlock OR
create ⇒ toMain ⇒ 使う
Copyright © bitbank, inc.
gRPCでの操作: lnd-rpcを紹介
let results : RequestResponse = await LndRpc. request(1e6)
console.log(results.paymentRequest)
// ... wait for payment
// For polling:
let checkPaid : Invoice = await LndRpc
.check(results.rHash. toString ('hex'))
console.log(checkPaid.settled) // true OR false
1. request にサトシを指定
a. 現時点ではmSatの指定が不可
b. 0 指定すると、払う側が指定
2. check で rHash の hex 渡して状態確認
3. polling以外にもstreamを返す方法もある
Copyright © bitbank, inc.
gRPCでの操作: tls.cert のドメインについて
1. tls.certの中にある情報を変更するため
a. ~/.lnd/lnd.conf にて extra IP OR extra domain を追加
b. 既存のtls.certとtls.keyを削除
c. 起動すると新規のtls.certとkeyが発行される
2. デフォルトは localhost のみで利用可能 (理想)
3. 荒業として「NODE_TLS_REJECT_UNAUTHORIZED=0」 (非推奨)
Copyright © bitbank, inc.
gRPCでの操作: 認証に使う macaroon の選定について
1. macaroonはメソッドごとにパーミッションを設定できる
2. 現時点ではmacaroonを任意のパーミッションで出すことが困難
3. デフォルトで出されるmacaroon
a. admin.macaroon - 全ての操作が可能
b. invoice.macaroon - PaymentRequestのみ発行可能
c. readonly.macaroon - 読み取る操作のみ可能 (PaymentRequest発行不可)
Copyright © bitbank, inc.
留意点
1. create する時の引数が2つ、 ウォレットロックのパスワードと、復元フレーズのパス
ワード (任意)
a. 戻り値の中に seed があり、それが復元フレーズ、管理に注意すべき
b. オンチェーンのウォレットの復元に必要なデータ
i. seed + seed_password
ii. wallet_lock_password + wallet.db (file)
c. オフチェーンのライトニング財産の復元に必要なデータ
i. オンチェーンの復元情報が必須
ii. 必ず channel.db の最新状態のもの
1. channel.dbの古い状態を復元してしまうと、お金を失うリスクがある
2. これがライトニングの一番の弱点だが、対策開発中
2. send で誰かのペイメントを支払う時、2回失敗して3回目で成功するのもあり得るの
で、失敗の扱いはアプリ側で考えないといけない (日々改善している)
3. LNDの今後の進展に期待

Más contenido relacionado

Similar a TypeScriptでライトニングネットワークを使ってみよう

Node-REDのノード開発容易化ツール Node generator
Node-REDのノード開発容易化ツールNode generatorNode-REDのノード開発容易化ツールNode generator
Node-REDのノード開発容易化ツール Node generatorBMXUG
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-Saki Homma
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringYahoo!デベロッパーネットワーク
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話shigeki_ohtsu
 
C# でブロックチェーン実装
C# でブロックチェーン実装C# でブロックチェーン実装
C# でブロックチェーン実装Yuto Takei
 
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣三七男 山本
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説Takao Tetsuro
 
Network as a Service - Data plane evolution and abstraction by NSM
Network as a Service - Data plane evolution and abstraction by NSMNetwork as a Service - Data plane evolution and abstraction by NSM
Network as a Service - Data plane evolution and abstraction by NSMMiya Kohno
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しAkira Nagata
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Masahito Zembutsu
 
Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Takashi Kanai
 
Server side Swift & Photo Booth
Server side Swift & Photo Booth Server side Swift & Photo Booth
Server side Swift & Photo Booth LINE Corporation
 
ドリコムのInfrastructure as code
ドリコムのInfrastructure as codeドリコムのInfrastructure as code
ドリコムのInfrastructure as codeYosuke Hiraishi
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方Yuji Oshima
 
OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向NTT Software Innovation Center
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2Takao Tetsuro
 
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことOpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことMasaya Aoyama
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~Saki Homma
 

Similar a TypeScriptでライトニングネットワークを使ってみよう (20)

Node-REDのノード開発容易化ツール Node generator
Node-REDのノード開発容易化ツールNode generatorNode-REDのノード開発容易化ツールNode generator
Node-REDのノード開発容易化ツール Node generator
 
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
はじめてのAzure Web App for Containers! -コンテナの基礎から DevOps 環境の構築まで-
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 SpringGoでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話httpbis interim とhttp2.0相互接続試験の話
httpbis interim とhttp2.0相互接続試験の話
 
C# でブロックチェーン実装
C# でブロックチェーン実装C# でブロックチェーン実装
C# でブロックチェーン実装
 
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
Make: Ogaki Meeting 2012 Androidロボットサミットin大垣
 
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
 
Network as a Service - Data plane evolution and abstraction by NSM
Network as a Service - Data plane evolution and abstraction by NSMNetwork as a Service - Data plane evolution and abstraction by NSM
Network as a Service - Data plane evolution and abstraction by NSM
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話Docker ComposeでMastodonが必要なものを梱包する話
Docker ComposeでMastodonが必要なものを梱包する話
 
Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化Kubernetes1.9でWindowsコンテナーをクラスタ化
Kubernetes1.9でWindowsコンテナーをクラスタ化
 
Server side Swift & Photo Booth
Server side Swift & Photo Booth Server side Swift & Photo Booth
Server side Swift & Photo Booth
 
ドリコムのInfrastructure as code
ドリコムのInfrastructure as codeドリコムのInfrastructure as code
ドリコムのInfrastructure as code
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方
 
OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向OpenStack Swiftとそのエコシステムの最新動向
OpenStack Swiftとそのエコシステムの最新動向
 
Wasm blazor and wasi 2
Wasm blazor and wasi 2Wasm blazor and wasi 2
Wasm blazor and wasi 2
 
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったことOpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
OpenStack上に展開するContainer as a Service を本番で利用するために必要だったこと
 
5jCup WebRTC賞
5jCup WebRTC賞5jCup WebRTC賞
5jCup WebRTC賞
 
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
実践 Web App for Containers! ~コンテナ開発の基礎からDevOps環境の構築まで~
 

Más de bitbank, Inc. Tokyo, Japan

ビットバンクのデプロイ戦略について
ビットバンクのデプロイ戦略についてビットバンクのデプロイ戦略について
ビットバンクのデプロイ戦略についてbitbank, Inc. Tokyo, Japan
 
ビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdfビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdfbitbank, Inc. Tokyo, Japan
 
ビットバンクで求められるプロジェクトマネジメント
ビットバンクで求められるプロジェクトマネジメントビットバンクで求められるプロジェクトマネジメント
ビットバンクで求められるプロジェクトマネジメントbitbank, Inc. Tokyo, Japan
 
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境bitbank, Inc. Tokyo, Japan
 
ビットバンクのマッチングエンジン.pdf
ビットバンクのマッチングエンジン.pdfビットバンクのマッチングエンジン.pdf
ビットバンクのマッチングエンジン.pdfbitbank, Inc. Tokyo, Japan
 
ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略bitbank, Inc. Tokyo, Japan
 
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜bitbank, Inc. Tokyo, Japan
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 bitbank, Inc. Tokyo, Japan
 
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるかDeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるかbitbank, Inc. Tokyo, Japan
 
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介	ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介 bitbank, Inc. Tokyo, Japan
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことbitbank, Inc. Tokyo, Japan
 
アプリケーション開発目線から考える テストの書き方について
アプリケーション開発目線から考える テストの書き方についてアプリケーション開発目線から考える テストの書き方について
アプリケーション開発目線から考える テストの書き方についてbitbank, Inc. Tokyo, Japan
 

Más de bitbank, Inc. Tokyo, Japan (20)

インフラチームの歴史とこれから
インフラチームの歴史とこれからインフラチームの歴史とこれから
インフラチームの歴史とこれから
 
ビットバンクのデプロイ戦略について
ビットバンクのデプロイ戦略についてビットバンクのデプロイ戦略について
ビットバンクのデプロイ戦略について
 
ビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdfビットバンク流 アジャイル開発の紹介.pdf
ビットバンク流 アジャイル開発の紹介.pdf
 
ビットバンクで求められるプロジェクトマネジメント
ビットバンクで求められるプロジェクトマネジメントビットバンクで求められるプロジェクトマネジメント
ビットバンクで求められるプロジェクトマネジメント
 
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
ビットバンクでのネイティブアプリケーション開発におけるCI_CD環境
 
ビットバンクのマッチングエンジン.pdf
ビットバンクのマッチングエンジン.pdfビットバンクのマッチングエンジン.pdf
ビットバンクのマッチングエンジン.pdf
 
ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略ビットバンクにおける少人数で支えるインフラチームの戦略
ビットバンクにおける少人数で支えるインフラチームの戦略
 
bitbank Corporate Information
bitbank Corporate Informationbitbank Corporate Information
bitbank Corporate Information
 
ng build --prod & Continuous Delivery
ng build --prod & Continuous Deliveryng build --prod & Continuous Delivery
ng build --prod & Continuous Delivery
 
マーブル図で怖くないRxJS
マーブル図で怖くないRxJSマーブル図で怖くないRxJS
マーブル図で怖くないRxJS
 
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
持続的な運用開発のために社内基盤を整えている話 〜auditのCI組み込みやlintの社内PKG化〜
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
 
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるかDeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
DeveloperSuccess として何を届けられるか、様々な分野を経た先として何ができるか
 
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介	ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
ビットコインウォレットで手軽にパスワードレス認証が可能なbitidについての紹介
 
Daocasinoにおけるstate channel実装
Daocasinoにおけるstate channel実装Daocasinoにおけるstate channel実装
Daocasinoにおけるstate channel実装
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
 
20181108 bitbank lt-maintainable-e2e-testing
20181108 bitbank lt-maintainable-e2e-testing20181108 bitbank lt-maintainable-e2e-testing
20181108 bitbank lt-maintainable-e2e-testing
 
Angular Refactoring in Real World
Angular Refactoring in Real WorldAngular Refactoring in Real World
Angular Refactoring in Real World
 
アプリケーション開発目線から考える テストの書き方について
アプリケーション開発目線から考える テストの書き方についてアプリケーション開発目線から考える テストの書き方について
アプリケーション開発目線から考える テストの書き方について
 
Asana handson
Asana handsonAsana handson
Asana handson
 

TypeScriptでライトニングネットワークを使ってみよう

  • 2. Copyright © bitbank, inc. 概要 1. Lightning のノードソフトウェアプロジェクト 2. LNDを選定した理由 3. LNDをTypeScriptで扱うまでの道のり 4. gRPCでの操作 a. lnd-rpc の紹介 (ライブラリ) b. tls.cert のドメインについて c. 認証に使う macaroon の選定について 5. 留意点
  • 3. Copyright © bitbank, inc. Lightning のノードソフトウェアプロジェクト 1. LND (https://github.com/lightningnetwork/lnd) a. 開発言語: go b. Interfaces: JSON-REST, CLI, gRPC 2. c-lightning (https://github.com/ElementsProject/lightning) a. 開発言語: C b. Interfaces: JSON-REST, CLI 3. eclair (https://github.com/ACINQ/eclair) a. 開発言語: scala b. Interfaces: JSON-REST, GUI
  • 4. Copyright © bitbank, inc. LNDを選定した理由 1. gRPC のインタフェースを提供 a. 型が定義されているので、TypeScriptとの相性が良い 2. 開発コミュニティーが活発 a. 質問あれば slack で聞くとすぐに返事がくる 3. 開発を主導している会社はライトニングのために設立された a. ライトニングの未来をより良くする動きはLNDから始まる傾向
  • 5. Copyright © bitbank, inc. LNDをTypeScriptで扱うまでの道のり 2017/11 LNDのリード開発者と連 絡を取り、取引所がライ トニングを活用する場合 のベストプラクティスを 議論 2017 2018 2019 bitbank cc の開発環境にて ライトニングの入出金を実装 ・フロントは未実装 ・APIでしか使えない ・testnetのみ ・TypeScript未対応 ・非公開ライブラリ 2017/12 2018/01 LNDのmainnetフォークを 作り、slackで数人で共有 し、mainnetのLNの初期 の5ノードに入り、steam card 購入 mainnetの公式リリースが出たものの、色々と不都合により延期させ、引き続きライトニングの研究 とLND開発者との連携を取り、ライトニングを促進する取り組みをいくつか考案+実装 2018/01 下旬 - 現在 2019/02 内部で使っていたライブラリをTypeScriptに 対応させ、MITライセンスでオープンソース ?
  • 6. Copyright © bitbank, inc. gRPCでの操作: lnd-rpcを紹介 NPM: https://www.npmjs.com/package/lnd-rpc Github: https://github.com/junderw/lnd-rpc
  • 7. Copyright © bitbank, inc. gRPCでの操作: lnd-rpcを紹介 import { LightningRpc, GetInfoResponse } from 'lnd-rpc' const LndRpc = LightningRpc. fromFilePaths ( '/home/ubuntu/.lnd/tls.cert' , '/home/ubuntu/.lnd/data/chain/bitcoin/mainnet/admin.macaroon' ) async function unlockExisting() : Promise<void> { await LndRpc. unlock("aaaaaaaa" ) let results : GetInfoResponse = await LndRpc. getInfo() console.log(results) } unlockExisting ().catch(console.error) 1. 2つのファイルが必要 a. tls.cert b. *.macaroon 2. 指定方法が2つ a. fromFilePaths = ファイルパス b. fromStrings = 文字列 i. cert = utf8 ii. macaroon = hex 3. waitForReady ⇒ unlock OR create ⇒ toMain ⇒ 使う
  • 8. Copyright © bitbank, inc. gRPCでの操作: lnd-rpcを紹介 let results : RequestResponse = await LndRpc. request(1e6) console.log(results.paymentRequest) // ... wait for payment // For polling: let checkPaid : Invoice = await LndRpc .check(results.rHash. toString ('hex')) console.log(checkPaid.settled) // true OR false 1. request にサトシを指定 a. 現時点ではmSatの指定が不可 b. 0 指定すると、払う側が指定 2. check で rHash の hex 渡して状態確認 3. polling以外にもstreamを返す方法もある
  • 9. Copyright © bitbank, inc. gRPCでの操作: tls.cert のドメインについて 1. tls.certの中にある情報を変更するため a. ~/.lnd/lnd.conf にて extra IP OR extra domain を追加 b. 既存のtls.certとtls.keyを削除 c. 起動すると新規のtls.certとkeyが発行される 2. デフォルトは localhost のみで利用可能 (理想) 3. 荒業として「NODE_TLS_REJECT_UNAUTHORIZED=0」 (非推奨)
  • 10. Copyright © bitbank, inc. gRPCでの操作: 認証に使う macaroon の選定について 1. macaroonはメソッドごとにパーミッションを設定できる 2. 現時点ではmacaroonを任意のパーミッションで出すことが困難 3. デフォルトで出されるmacaroon a. admin.macaroon - 全ての操作が可能 b. invoice.macaroon - PaymentRequestのみ発行可能 c. readonly.macaroon - 読み取る操作のみ可能 (PaymentRequest発行不可)
  • 11. Copyright © bitbank, inc. 留意点 1. create する時の引数が2つ、 ウォレットロックのパスワードと、復元フレーズのパス ワード (任意) a. 戻り値の中に seed があり、それが復元フレーズ、管理に注意すべき b. オンチェーンのウォレットの復元に必要なデータ i. seed + seed_password ii. wallet_lock_password + wallet.db (file) c. オフチェーンのライトニング財産の復元に必要なデータ i. オンチェーンの復元情報が必須 ii. 必ず channel.db の最新状態のもの 1. channel.dbの古い状態を復元してしまうと、お金を失うリスクがある 2. これがライトニングの一番の弱点だが、対策開発中 2. send で誰かのペイメントを支払う時、2回失敗して3回目で成功するのもあり得るの で、失敗の扱いはアプリ側で考えないといけない (日々改善している) 3. LNDの今後の進展に期待