PtarmiganのElements改造

nayuta-uenohiro
6 min readDec 18, 2019

Linux PCで動作するLightning NetworkノードPtarmiganを実験的に改造して、ElementsをサポートしているLightning Networkノードc-lightningと接続して、単純な送受金ができたところまで確認しました。

Ptarmigan本体は1st Layerのウォレットを持っていないため、Linux PCで動かす場合はBitcoin Core(bitcoind)のウォレットを使っています。Elementsで動作する場合にはelementsdのウォレットを使うことになります。
そのため、Lightning Shieldなどで動かしているSPV版ではElements対応させることができません。

また、今回はElements対応していますが、c-lightningと簡単につなぐために専用のElements設定を使っています。そのためLiquidでの動作確認はしていません。

以下、$WORK_PTARM$WORK_CLN は自分の環境にあわせて読み替えてください。

Ptarmiganの準備

PtarmiganをElements版としてビルドします。

cd $WORK_PTARM
git clone https://github.com/nayutaco/ptarmigan.git
cd ptarmigan

適当なテキストエディタを使って、 options.mak`を編集してください。

ENABLE_ELEMENTS=0

ENABLE_ELEMENTS=1

に変更して保存します。

ビルドは、初めてならmake full でよいでしょう(時間がかかります)。Bitcoinで使っていたならmake clean してからmakeしてください。

Elementsの準備

Elements v0.18.1.3を使いました。Linux実行ファイルはこちらです。

ダウンロードして展開後、PATHを通してください。elementsdelements-cliが動作すれば良いです。

初めてElementsを動かす想定で書いていますが、既にElementsやLiquidを使っている場合はファイルの上書きなどに注意してください。

cd ~
mkdir .elements
cd .elements
cp $PTARM_WORK/ptarmigan/docs/elements_sample.conf ./elements.conf
elementsd -con_dyna_deploy_start=9999999999999

elements-cliコマンドで、genesis block hashとassetを確認しましょう。この値と一致しなければ動作しません。

$ elements-cli getblockhash 0
6eefff2dcad9692ad63ab96c79ccb5c67d6a073ad2ca185d3f0a9333cdb8a609
$ elements-cli dumpassetlabels
{
"bitcoin": "b4fd3d0c0f989e2571f06da93427569b702d057887ee8e0d07c0c778edeffdb5"
}

c-lightningの準備

最初にも書きましたが、テストするためにchainを追加しています。
patchファイル形式で準備しています。

cd $WORK_CLN
git clone https://github.com/ElementsProject/lightning.git
cd lightning
git checkout v0.8.0
patch -p1 < $WORK_PTARM/ptarmigan/docs/elements_lightningd.patch
./configure
make

既にc-lightningをビルドしていた場合は、一度make cleanしてからmakeしてください。

起動

ptarmiganを起動

cd $WORK_PTARM/install
./new_nodedir.sh elem
cd elem
../ptarmd --network=testchain1 --bitcoinrpcuser=user --bitcoinrpcpassword=password --bitcoinrpcport=20000 --port=3333

c-lightningを起動

cd $WORK_CLN
./lightningd/lightningd --network=testchain1 --bitcoin-rpcuser=user --bitcoin-rpcpassword=password --bitcoin-rpcport=20000 --lightning-dir=./TESTCHAIN1 --addr=0.0.0.0:33333

接続

#[CLN]get node_id
$ NODE_CLN=`$WORK_CLN/cli/lightning-cli --lightning-dir=$WORK_CLN/TESTCHAIN1 --network=testchain1 getinfo | jq -r .id`
#[PTARM]connect("3334" is RPCPORT)
$WORK_PTARM/install/ptarmcli --connect $NODE_CLN@127.0.0.1:33333 3334
#[PTARM]open channel
$ $WORK_PTARM/install/ptarmcli --connect $NODE_CLN@127.0.0.1:33333 -f 100000 3334
#generate
$ elements-cli generatetoaddress 1 `elements-cli getnewaddress`

それ以降

あとはBitcoin版と同じように操作してください。

#[CLN]create invoice
$ INVOICE=`$WORK_CLN/cli/lightning-cli --lightning-dir=$WORK_CLN/TESTCHAIN1 --network=testchain1 invoice 100000 xxx yyy | jq -r .bolt11`
#[PTARM]("3334" is RPCPORT)
$ $WORK_PTARM/install/ptarmcli --sendpay $INVOICE 3334

--

--