PtarmiganのElements改造
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を通してください。elementsd
とelements-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