bitcoind/c-lightningを家で立ち上げる

Masashi Nakane
暗号通貨 とセキュリティ
14 min readMay 18, 2018

BitcoinのLightningの実装にはメジャーなものが3つある。Blockstream社のc-lightning(C言語)、Lightning Labs社のlnd(Go言語)、そして、ACINQ社によるeclair(scala言語)だ。Blockstream社は、Bitcoin Coreの開発者をたくさん抱えるまさにBitcoin(Core)カンパニーで、賛否両論ありながらも、今年、いち早くMainnetでc-lightingを公開した(2018年1月)。Lightining Labsは、その名の通り、Lighting networkだけに特化した会社で、3月にMainnetバージョンのlndを公開した。Slackのチャネルがあり非常にコミュニティが活発である。eclairはモバイル寄りの実装を主にやっているフランスの会社でeclairはフランス語で雷だ。

以下にLightning仕様書のBOLTと3つの開発プロジェクトのGithubのリンクを張っておこう。それぞれ非常に活発である。開発プロジェクトに関しては、活動度が一番大事だとおもうので、コミットの数がグラフでみえるページのリンクに以下にリストした。

lightning network 仕様書 BOLT

blockstream社のc-lightning

lightning labs社のlnd

ACINQ社のeclair

今回は、自分が初めてインストールし、実際にモノを買った経験のあるBlockstream/c-lightningのインストールの手順を書いてみたいと思う。目的は、インストールし、Blockctream社のオンラインサイトで、Tシャツ($15相当BTC)もしくは、ステッカー($2相当BTC)をlightning network上で購入することだ。
(日本への郵送も可能。https://store.blockstream.com/shop/

以降は、TestnetでなくMainnetの本物のBitcoinを使用するので、記事のミスや自分の操作ミス、使うソフトのバグ等によりBitcoinを失っても、それでも、やってみたくて仕方がないと思う人だけ読み進めてほしい。

あと注意点としては、ブロックチェーンに書くためには、トランザクションフィーがかかる。50円~1000円ほどのBitcoinがトランザクション毎にマイナーに支払う必要がある。ブロックチェーン上に最低でも3つ(lightning用アドレスへの送金、Payment Channel開始、PaymentChannel解除)のトランザクションは発生するので、掛けることの3はかかるため、この追加費用分は、気に留めておいてほしい。Lightning network上での取引に関しては、ブロックチェーンに書かないので、何回取引しても手数料は(ほとんど)かからない。Tシャツ1個とステッカー1個買うのだとすると、少々時間(ブロックチェーン上のコンファメーション)が、かかってもいいなら、手数料安めにし、Tシャツとマイニング手数料あわせて多くても30ドルでいけると思う。

手順は、いかの順番でおこなう。

  1. Bitcoindのフルノードインストール/ブロックチェーンの同期
  2. c-lightningのインストール/Bitcoindとの接続
  3. BitcoinのFundingとPaymentチャネルの設定(オープン)
  4. コマンドラインでTシャツとステッカー購入
  5. Paymentチャネルクローズしてロックされた資金回収

Bitcoind(デーモンプログラム)は、Bitcoinのブロックチェーンをジェネシスブロックからすべてもつフルノードと呼ばれ、他の世界中のBitcoinノードとやりとりしたり、お金の移動のトランザクションを作成する。そして、Lightningdは、我々の命令するコマンドに従って、Bitcoindに接続してマルチシグといわれるトランザクションの作成を依頼する。絵にすると以下のような感じだ。Bitcoindノードはほかの世界中のBitcoindノードと接続されデータをやり取りしている。Lightningノードもお互いに接続し、接続しているBitcoindをつかってデータの妥当性をチェックする。このLightningノードの繋がりをレイヤー2(第2層)とよび、Bitcoinノードたちが繋がった大きなネットワーク(1つめのネットワーク、レイヤー1)に依存した2つめのネットワークという意味になる。

想定しているインストール環境は、Linux Ubuntuだ。サーバーは、なるべくオンライン状態にし、ブロックチェーンを最新の状態にキープするため、常時電源オンにしておけるコンピューターがよい。以下のどれかのパターンでLinux のUbuntu 16.04.4 もしくは同等のLinuxをインストール済みとして、説明を開始する。(Linuxのインストール方法をそれぞれのリンクしてある)

  1. 要らないPCにLinuxをインストール (やり方はこちら)
  2. クラウド(Digital Ocean)のLinuxインスタンスをセットアップ(やり方はこちら)
  3. クラウド(Amazon Web Service)のLinuxインスタンスをセットアップ
  4. 自宅のメインPC/MacのVirtualBoxにUbuntuをインストール(やり方はこちら)

以降、Ubuntu Linux OS上での共通の手順を書く。rootもしくはsudoが可能なユーザーでログイン済みという前提で、すべてTerminalからコマンドラインから実行する形での説明になる。

Bitcoindのインストール

Bitcoin CoreをLinuxにインストールする方法は、簡単だ。公式のインストール手順を踏んでいるので、公式のページでも確認できる。

まずは、bitcoin coreのインストーラー/パッケージのレポジトリ(データベース)をaptに登録する。apt(advanced package tool)とはUbuntu Linux標準の、ソフトウエアをリモートサーバーからダウンロードしてインストールするツールである。

sudo apt-add-repository ppa:bitcoin/bitcoin

sudoが許可されたユーザーでログインしていれば、ユーザーのパスワードを聞かれるので、追加が完了する。1つ気にしてほしいのは、以下の太字のところだ。

[sudo] password for masa:
Stable Channel of bitcoin-qt and bitcoind for Ubuntu, and their dependencies
Note that you should prefer to use the official binaries, where possible, to limit trust in Launchpad/the PPA owner.No longer supports precise, due to its ancient gcc and Boost versions.
More info: https://launchpad.net/~bitcoin/+archive/ubuntu/bitcoin
Press [ENTER] to continue or ctrl-c to cancel adding it
gpg: keyring `/tmp/tmp3dha71ub/secring.gpg' created
gpg: keyring `/tmp/tmp3dha71ub/pubring.gpg' created
gpg: requesting key 8842CE5E from hkp server keyserver.ubuntu.com
gpg: /tmp/tmp3dha71ub/trustdb.gpg: trustdb created
gpg: key 8842CE5E: public key "Launchpad PPA for Bitcoin" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
OK

公式なインストーラーのバイナリーを使うように推奨している。すなわち、このレポジトリとパッケージを使うようにし、(この記事のようなMediumやブログなどで)だれか知らない人に言われたようなものは使わない方が安全だよ、という意味になる。ちゃんと、公式情報にのとって、インストールするのが大事である。ハッカーが書いたブログの手順に従ってしまうと、大変だからだ。

上記、表示内容をみると、一時フォルダが/tmpに作られて、そこにBitcoin Coreのインストーラーのgpg公開鍵(鍵ID:8842CE5E)が登録された。gpgについては、知りたい場合は、別のgpgの記事を参照してほしい。

次にOSのaptに登録してあるソフトウエアのパッケージの一覧をBitcoin含めて更新する。

sudo apt-get update

そして、一番メインのBitocindのインストールのコマンドはこれだ。

sudo apt-get install bitcoind

これでおしまい。3つのコマンドでインストールは完了した。

bitcoindの起動

じゃあ bitcoind (bitcoin daemon)を起動してみよう。

masa@masa-Vostro-3800:~$ bitcoind -daemon
Bitcoin server starting

これをすると、bitcoinデーモン(サーバー)としてが起動し、他のノードと会話を始めて2009年1月分から今までのブロックチェーンの同期を開始する。

起動時のオプションは以下のコマンドで確認できるので、つらつら見ても面白い。

bitcoind --help

bitcoinブロックチェーンの状態チェック

本当に起動したか、以下のbitcoin-cliを使って、ブロックチェーンの状態をチェックしてみよう。

bitcoin-cli getblockchaininfo

いま確認したいのは、blocksの数字だ。15855とある。ブロックチェーンのブロック数が今の時点で、15855個ということだ。起動してから、いままでに、BitcoinのMainnetのブロックが同期された数だ。同じコマンドをもう一度実行すると、少し増えているのがわかるだろう。時間がたつとどんどん増えていく。

masa@masa-Vostro-3800:~$ bitcoin-cli getblockchaininfo
{
"chain": "main",
"blocks": 15855,
"headers": 522797,
"bestblockhash": "00000000072a6ab7fcd31db654151cd491f76c5a56c7e7a13d1e2e7ad1ee5516",
"difficulty": 1,
"mediantime": 1243509435,
"verificationprogress": 4.863482177029996e-05,
"initialblockdownload": true,
"chainwork": "00000000000000000000000000000000000000000000000000003df03df03df0",
"size_on_disk": 4352468,
"pruned": false,
"softforks": [
{
"id": "bip34",
"version": 2,
"reject": {
"status": false

bitcoin-cliのオプションもさらっと、眺めてみよう。

bitcoin-cli --help

次に、実際にMainnetのBitcoinの最新のブロック高は、いまどうなっているのか一般のブロックチェーンエクスプローラーのサイトてみてみよう。有名どころでは、Blockchain.info で確認すると、最新のブロックは、522,797だった。まだまだかかるようだ。

他のサイトでも見てみよう。bitflyerのブロック・エクスプローラーでも確認してみた。最新のブロック番号は、522,798だ。スクリーンキャプチャーしている間に、新しいブロックが1つ、発掘されたようだ。(bitflyerのエクスプローラーは音がうるさいので気を付けてね。)

1-2時間寝かせて、自分のブロックチェーンが世界のものと同期されるのを待とう。他のbitcoinのフルノードたちと同じブロックまでたどり着いたら、次にc-lightningのインストールに移る。(ネットワークやコンピューターのスペック次第では、同期に1日かかるかもしれないので、気長にまつこと。自分の家のPCではケーブルTVのインターネットで3時間くらいで同期した、ちなみにDigital Oceanでは1日かかった。)

c-lightningのインストール

c-lightningのインストールの公式の方法は、こちら。BlockStream社のc-lightningのGithubソースコードレポジトリのREADMEファイルに書かれているて簡易なものである。方法は2つあり、shellコマンドでインストールする方法。もう一つは、Dockerファイルで1発でインストール&実行する方法で、こちらのが簡単だが、実行するDockerFileの詳細をみて、何やってるかとか、セキュリティは大丈夫かは確認すべきだ。以下は、シェルからコマンドを1つ1つ実行する方法で説明する。DockerFileでも同様なことを行っている。

Ubuntu LinuxのOSの状態を最新にUpdateする。

sudo apt-get update

c-lightningに必要なライブラリー等をapt-getでインストールする。
(以下は1行のコマンド)

sudo apt-get install --no-install-recommends --allow-unauthenticated python python3 git make automake autoconf libtool bitcoind build-essential libprotobuf-c-dev libsodium-dev libbase58-dev libsqlite3-dev libgmp-dev libsqlite3-dev git net-tools valgrind curl ca-certificates jq

下準備ができたので、いまいるホームディレクトりかどこかで、Githubからソースコードをダウンロード(gitクローン)するとlightningdというフォルダにC言語でかかれたc-lightningのソースコードに置かれる。(以下は1行のコマンド)

git clone https://github.com/ElementsProject/lightning.git lightningd

次に、フォルダに移動し、無事にコンパイルが終わることを祈って、makeコマンドでビルドを実行する。
(以下は2行のコマンド)

cd lightningd
make

無事に、コンパイル等のビルドが終わったとして、出来上がった実行ファイルを実行PATHに追加する。(PATHに追加すると、どこのフォルダにいてもでもlightninコマンドなどのプログラムを実行できるようになる。)

export PATH=$HOME/lightningd/lightningd:$HOME/lightningd/cli:$PATH

ではlightningdを起動してみよう。

lightningd --network=bitcoin --log-level=debug

映画のMatrixみたいに、ログが、うじゃうじゃ出てきただろうか?

これで、すべてのインストールと起動までが完了した。次は、実際のお金/Bitcoinを投入することになるが、結構長くなったので、別の記事にする。

次回、Lightningステッカーを買おう!

--

--