LND — kotlinでgetinfo

uenohiro4
5 min readDec 12, 2021

--

はじめに

Nayuta社で公開している Android の Lightning Networkが使用できるウォレットアプリである Nayuta Core では、 Lightning Networkのエンジンとして LNDを使っている。

Androidアプリを作ったことがあるならご存じかもしれないが、Nativeな開発言語としては Java か Kotlin が使われている。
LND 自体は Go言語が使われているのだが、それを Javaのライブラリとして使えるように機構があるので Androidアプリに組み込むことができる。

ゆきだるま

他にメジャーなところでは c-lightning があるのだが、これは動作するためにプロセスが複数起動するようになっているので、Androidアプリとして組み込むのが難しいと思われる。
eclair は Scala 言語という Java に近い言語で作られていて、 eclair mobile は Androidのみということで Google Playで配布されている。最近の Phoenix wallet は Android も iOS も公開されていて、こちらは Kotlin Multi Platformを使っているとブログに書かれていた。
最近では(といってももう最近ではないのだが) Rust言語で書かれた LDK (Lightning Dev Kit)もライブラリとして組み込みやすいように作られているので有力な候補となるだろう。

そういった理由から Nayuta Core では LND を使っている。

Kotlin で gRPC を使う

そんなわけで、Kotlin で LND の API を使いたい。

LND の docs/grpc にいくつかの言語で説明されているが、Kotlin はないし Java も説明が分かりづらいし更新されていない。いま(2021/12/12)時点ではプルリクで更新が進んでいるようだ。

そんなわけで、Kotlin で書いてみた。中のコードはプルリクされているものを流用したのだが、そもそも素でどうやって始めるのか、というのを重視している。

commit の 1回目が IntelliJ で Kotlinプロジェクトを作った直後、2回目が GetInfo のコードを埋め込んだ直後だ。

ファイルとして変更しているのは、build.gradle.kts と Main.kt で、それ以外は IntelliJ なり何なりが自動的に何かしたファイル達だ。

lightning.protoLND の lightning.proto をコピーしている。これは自分が動作させる LND のバージョンを調べてから該当する commit を探してコピーしよう。

ちなみにこちらは gradle init で作り始めるパターン。こっちは 3 commit に分けていて、gradle init 直後、ファイル変更、プロジェクト更新後、ということになっている。

おわりに

どちらもあれこれ試しながら作ったので、不要な変更や依存関係があるかもしれない。そこら辺は読み流してほしい。

https://github.com/lightning

株式会社Nayuta

Bitcoinの2nd Layer技術-ライトニングネットワークのプロトコルとアプリケーションの開発を両輪で行う。この分野において当社は世界的認知を得、コントリビュータとしてグローバルなコミュニティで活動を継続中。最新のリリースの中にはLightningウォレットのNayuta Coreがある。
また、様々なタイプのブロックチェーンが共存する時代が近づいていることから、エンタープライズ向けブロックチェーンに関するビジネスも行っている。

--

--