Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

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

275 visualizaciones

Publicado el

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

Publicado en: Ingeniería
  • Sé el primero en comentar

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の今後の進展に期待

×