Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

最近注目を浴びているライトニングネットワークを活用するためのTypeScriptライブラリを紹介します。

Related Books

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

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

  1. 1. ビットバンク株式会社 TypeScript でライトニング ネットワークを使ってみよう Jonathan Underwood
  2. 2. Copyright © bitbank, inc. 概要 1. Lightning のノードソフトウェアプロジェクト 2. LNDを選定した理由 3. LNDをTypeScriptで扱うまでの道のり 4. gRPCでの操作 a. lnd-rpc の紹介 (ライブラリ) b. tls.cert のドメインについて c. 認証に使う macaroon の選定について 5. 留意点
  3. 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. 4. Copyright © bitbank, inc. LNDを選定した理由 1. gRPC のインタフェースを提供 a. 型が定義されているので、TypeScriptとの相性が良い 2. 開発コミュニティーが活発 a. 質問あれば slack で聞くとすぐに返事がくる 3. 開発を主導している会社はライトニングのために設立された a. ライトニングの未来をより良くする動きはLNDから始まる傾向
  5. 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. 6. Copyright © bitbank, inc. gRPCでの操作: lnd-rpcを紹介 NPM: https://www.npmjs.com/package/lnd-rpc Github: https://github.com/junderw/lnd-rpc
  7. 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. 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. 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. 10. Copyright © bitbank, inc. gRPCでの操作: 認証に使う macaroon の選定について 1. macaroonはメソッドごとにパーミッションを設定できる 2. 現時点ではmacaroonを任意のパーミッションで出すことが困難 3. デフォルトで出されるmacaroon a. admin.macaroon - 全ての操作が可能 b. invoice.macaroon - PaymentRequestのみ発行可能 c. readonly.macaroon - 読み取る操作のみ可能 (PaymentRequest発行不可)
  11. 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の今後の進展に期待

×