Discordに書き込みしたらSatoshiがもらえる仕組みを作った
こんにちは。最近のSpotlightには真面目な投稿が増えてきてますね。私はツイッターみたいな使い方をしていたのですが、今日から改めたいと思います。
さて、私は普段コインランというプライベートコミュニティのDiscordでクリプト関連の情報を発信しています。このDiscord内で書き込みをしたら、1投稿あたり100satoshiがもらえる機能を実装したので、実現までの経緯を記録したいと思います。
■ コインランの紹介ページ
https://lounge.dmm.com/detail/1114/
ビットコインのフルノードを建てる
まずここが一番の障壁です。Discordのボットを動かしているのはクラウド上のサーバーなので、ビットコインのフルノード、そしてライトニングのノードもクラウド上に構築する必要がありました。
ビットコインのチェーンサイズは執筆時点で約300GB近くあるので、その辺の格安VPSではストレージが足りません。また、愚直にAWSで立てようとすると毎月のコストが1万円を超えます。
ということで、まずはPRUNEノードでの運用を考えました。PRUNEノードは、古いチェーンのデータは捨て新しいブロックのみを管理するノード設定のことです。もしPRUNEノードでライトニングを稼働させることができれば、月1000円弱の格安VPSでも運用可能になります。
しかし、PRUNEノードではライトニングのノード(LND)は動きませんでした。LNDに対してオンチェーン送金を行うと、なぜかコンファメーション数がマイナスの値になるなど、まともに動作しませんでした。
結局、流行りのSSH採用VPSではなくHDDのVPSを利用してフルノードを建てることにしました。カゴヤのVPSならHDD400GBで月1760円なので、これなら許容範囲です。(BigStoneさんに教えてもらいました)
https://www.kagoya.jp/cloud/vps/
ライトニングのノードを建てる
ライトニングの実装はいくつかあります。今回はLNDを採用することにしました。理由は周辺ツールが一番充実しているからです。
https://github.com/lightningnetwork/lnd
外部からLNDに接続する
Discordボットからアクセスするために、LNDサーバを外部から接続できる状態にしなければいけません。最初、LNDのドキュメントを見ていたのですが、ちゃんと書かれているページがなく困りました。
結局、Zapのドキュメントが非常に分かりやすかったのでこれを使うことにしました。ZapはLNDに接続して、UI操作で送金やチャネルの開閉を行うことができるアプリです。PCやスマホからLNDの操作を行えるので神です。
https://docs.zaphq.io/docs-desktop-lnd-configure
Discordボットからは、Zapの提供しているlnd-grpcを使って接続しています。これを使えば、lndconnectのURIと数行のコードで支払い処理を記述することが可能です。神ですね。
https://github.com/LN-Zap/node-lnd-grpc
DiscordからLN送金
■ 残高確認コマンド
■ 送金コマンド
受け取り金額を指定したインボイスを作成して、先頭に"/pay "を付けて投稿するだけです。
Spotlightのノードにもチャネルを貼ったので、コインランのDiscordからいつでも送金することが可能な状態です。Spotlightで流通するsatoshiの数量が増えるといいですね。
Happy Satoshi Life !