Ptarmiganを使ってみよう (1)
Last Updated: 2021年7月20日
追記
2021/7/20現在、Ptarmigan開発はサスペンド中です。
Lightning Networkのノードソフトウェア、Ptarmiganを使ってみましょう。
(この記事ではversion 0.2.2を使っています。)
今回は説明を簡単にするために、以下のようにします。
- Ubuntu18.04が動いている
- Bitcoin Core(bitcoind)もインストールされている
- chainの種類はregtest
regtestを使うので、Bitcoin Coreをインストールしたばかりの環境でもブロックのダウンロードなどをせずに動かすことが出来ます。
今回はPtarmiganを起動するところまでを説明し、次回チャネルを作って送金する流れを説明します。
Bitcoin Coreの設定
今回はregtestで動かします。
bitcoin.confは、このような形になります。
rpcuser=bitcoinuser
rpcpassword=bitcoinpassword
server=1
txindex=1
regtest=1
Ptarmiganは、デフォルトではユーザフォルダの中にあるbitcoin.conf(~/.bitcoin/bitcoin.conf)を読んで、rpcuserやrpcpasswordを取得しようとします。
bitcoind -daemon
対応しているBitcoin Coreのバージョンはv0.17以上です。私の環境では、Bitcoin Core v0.18.0を使いました。
初回ですとamountが何もないので、がさっとminingしたことにしましょう。
bitcoin-cli generatetoaddress 500 `bitcoin-cli getnewaddress`
Ptarmiganはbitcoindのwalletを使います。
現在のところP2PKHやP2WPKHのアドレスに送金されたトランザクションしか使わないようになっています。
bitcoin-cli generateというコマンドの場合はP2PKアドレスに送金しますが、bitcoin-cli generatetoaddressでは指定したアドレスに送金されます。getnewaddressではP2WPKHアドレス(P2SH形式)が生成されるため、自動的にPtarmiganが使用できるamountになります(generateした場合は、sendtoaddressで送金すると良いでしょう)。
Bitcoin Core v0.18からはgenerateコマンドが使えなくなるため、generatetoaddressに使い慣れておくのもよいかと思います。
Ptarmiganのセットアップ
インストールについてはこちらを読んでいただくとよいでしょう。
まずは、いくつかビルドに必要なツール類をインストールします。
開発をしている環境であれば、インストールされていることも多いのではないでしょうか。
sudo apt install -y git autoconf pkg-config build-essential libtool python3 wget jq bc
Ptarmiganの本体をGitHubからcloneしてビルドします。
branchはmasterにしましたが、masterでは新しいバージョンの準備をしているので、この記事と差違があるかもしれません。あまりにも違いそうな場合は、tagのv0.2.2を使ってください。
git clone https://github.com/nayutaco/ptarmigan.git
cd ptarmigan
(git checkout -b tag_v0.2.2 refs/tags/v0.2.2)
make full
初回はライブラリをダウンロードしたりビルドしたりするため、make fullを実行してください。
時間がかかるので、ゆっくりお待ちください・・・。
ビルドし終わったものは、ptarmiganの中のinstallというフォルダの中に入っています。”~/.ptarmigan”のようなフォルダは作りません。
今回の説明は、installフォルダで動かすように書きますが、installフォルダごとどこかにコピーしてもよいです。
Ptarmiganの起動
Ptarmiganのおおよその使い方については、こちらを読んでいただければと思います。
いま、ビルドし終わってptarmiganフォルダの中にいるとします。
cd install
./new_nodedir.sh
Ptarmiganのノードアプリはptarmdという名前ですが、ptarmdはカレントディレクトリをワークフォルダとして動作しようとします。
そのため、new_nodedir.shというスクリプトで、ワークフォルダを作ります。引数無しの場合は「node」という名前のフォルダを作ります。
ワークフォルダ内にファイルを置くので、別の名前でワークフォルダを作ってptarmdを2つ起動する、ということもできます(ネットワークのポート番号は変更する必要がありますが)。
new_nodedir.shが行っているのは、mkdirでフォルダを作ることと、作ったフォルダの中にinstall/scriptフォルダに入っているものをコピーするという作業です。
scriptフォルダの中には、Lightning Networkでイベントが起きたときに呼び出されるスクリプトが入っています。「着金が完了したときにxxxしたい」というような使い方を想定しています。デフォルトでは、単にechoでログ出力するだけになっています(ptarmdが実行しているコンソールに出力されます)。
今回は説明を省略したいと思います。
では、起動しましょう。
今回はc-lightningを同じPC上で起動させるつもりなので、ポート番号が衝突しないように12345番を使います。
cd node
../ptarmd --network=regtest --port=12345
ptarmdが起動すると、コンソールにログが出力されます。
もし、起動しているbitcoindとchainの種類が違ったら起動しません。
だいたい、このようなログが出てくると思います。
DB checking: open...done!
DB checking: version...done!
DB checking: announcement...done!
=NODE=============================================
node_id: 02baaabe844e8c8e7b7eb570cd12da73f77ce63da84b703b5a359c1487fb68d0d6
alias= node_02baaabe844e
addr.type=0
port=12345
=============================================
listening...
{
"method": "started",
"short_channel_id": "0x0x0",
"node_id": "02baaabe844e8c8e7b7eb570cd12da73f77ce63da84b703b5a359c1487fb68d0d6"
}
この「node_id」が起動したptarmdを識別するIDです。
ptarmdを起動した後は、クライアントアプリから制御します。
今回はptarmcliを使いますが、REST-APIも用意されています。
(こちらにも書いていますが、ptarmcliについては改修を予定しています。)
ptarmdは制御用のポートとして、ptarmdがLightning Networkで使うポート番号+1を用います。
今回で言えば、12346番です。
ptarmcliにそのポート番号を指定すると制御できるのですが、ptarmdのワークフォルダでptarmcliを実行する場合は省略できます。
説明の都合上、今回はnodeフォルダ内でptarmcliを実行していきます。
例えば、起動したptarmdのnode_idを取得したい場合にはgetinfoコマンドを使います。
ptarmigan/install/node$ ../ptarmcli --getinfo
{
"result": {
"node_id": "02baaabe844e8c8e7b7eb570cd12da73f77ce63da84b703b5a359c1487fb68d0d6",
"node_port": 12345,
"total_local_msat": 0,
"peers": []
}
}
次回記事では、チャネル作成や送金を行います。