BitcoinサイドチェーンLiquid(Blockstream)触ってみた感想

Blockstream製のElementsというサイドチェーンプロジェクトがあります。


https://elementsproject.org/

どういうものかというと、BitcoinメインチェーンからBTCを二方向ペッグしたり、匿名トランザクションを走らせたり、アセット発行したりできるものです。

このElementsを利用したサイドチェーンとして、コンソーシアムのLiquidがあります。


https://blockstream.com/liquid/

※取引所QuoineのLiquidとは別モンなので注意してください!全くの別モンです。

このLiquidを触ってみたので報告します。

インストール

ドキュメントが完全に玄人向けで、インストールをもしできたとしてもその先に進めない可能性が高いので、ここではインストール方法は省略しておきます。

bitcoindのインストールすら、コマンドさわれないとかなり難しいとおもいます…

設定

bitcoindを起動する際には、~/.bitcoin/bitcoin.confに

# どれか
# mainnet=1
# regtest=1
# testnet=3
rest=1
server=1
rpcuser=[rpcuser]
rpcpassword=[rpcpassword]
rpcport=8332

など設定を記述することになっています。

同様に、~/.liquid/liquid.confには

# どっちか
# mainnet=1
# regtest=1
rest=1
server=1
rpcuser=[rpcuser]
rpcpassword=[rpcpassword]
rpcport=9332
mainchainrpcuser=[mainchainrpcuser]
mainchainrpcpassword=[mainchainrpcpassword]
mainchainrpcport=8332

などの設定を記述します。

Peg-in

以下のコマンドを打てば、「ここにbtcをメインチェーン上で送ってくれ」というアドレスが表示されるハズです。

liquid-cli getpeginaddress

あとは、送ってごにょごにょします。

102承認を経ると、LiquidのほうでBTCが使えるようになります。

BTCメインチェーン上では、送ったBTCは凍結されています。

ペッグの仕組み

elementのドキュメント曰く、configファイルに、以下のような記述をするようです。

# This is the script that controls pegged in funds in Bitcoin network
# Users will be pegging into a P2SH of this, and the "watchmen"
# can then recover these funds and send them to users who desire to peg out.
# This template is 1-of-1 checkmultisig
#fedpegscript=5121<pubkey>51ae

この記述は、1of1のマルチシグの例になります。

Bitcoin Script一覧を見る限り、

オペコードワード意味
0x21N/A次にくるバイトはオペコードではなくデータですよ
0x51OP_11を表す
0xaeOP_CHECKMULTISIG[m][pubkeys][n]0xaeで、m-of-nマルチシグを表す

つまりelementsチェーンごとにBTCを凍結して置いておくマルチシグアドレスの管理者を決めておき、凍結解除はこのマルチシグに従ってされるというわけです。

Liquidも例に漏れず、Liquidのためのfedpegscriptが決められており、それにしたがってtwo way pegがされていると考えられます。

Peg-out

以下のコマンドを打つと、Liquid上のBTCの分だけ、BTCメインチェーンでの凍結を解除することができます。

liquid-cli sendtomainchain [bitcoin address] [btc amount]

2承認を経ると、メインチェーンのほうでBTCが使えるようになります。

使ってみた

以下のコマンドに関しては、liquid regtestにて確認できました。

  • issueasset
  • getpeginaddress
  • sendtomainchain

しかしなんとなんと、configにてmainnet=1としたところ、上記コマンドはすべてmethod not foundとして使えませんでした

なんと、mainnet=1の記述を消すと、 各種コマンドがnot foundではなくなりました。つまり、liquid.confにはmainnet=1を記述してはいけないようです。

記述なしでメインネット起動ができ、regtest=1と起動することでregtestネットになるのはbitcoindと同じですが、liquiddのほうは書かなくて良いと考えられます。

所感

根本的にBitcoinスクリプトによるマルチシグ設定をconfigファイルに記述する方法は、すぐに連署名者をコロコロ変えることができるものではない(NEMのようにそういうマルチシグ設定トランザクション機能があれば話は別である)ため、elementsを完全にパブリックとして運用することは難しいと考えられます。

事実Liquidはコンソーシアムですからね。

まあLiquidもこれはこれでコンソーシアム参加者には良いソリューションだと思われます。

BTCがパブリックなTendermintチェーンにペッグされてCosmosネットワークに流通するのはまだ難しいと考えられるため、完全トラストレスなスケーリングソリューションとしてはライトニングネットワーク以外にまだ右に出る者はなさそう。完全トラストレスでBTCがインターオペラビリティのネットワークにいけるならライトニングネットワークはいらなかったんですけど、そうもいかない。

two way pegでBTC使えるようにしたTendermintチェーンを作り、IBCでCosmosネットワークに飛ばす方法ではここでのマルチシグがパブリック用に作れないため、完全トラストレスなしくみでCosmosネットワークでBTC使うには、TendermintチェーンがLappsになる(TendermintがLightningのAPI叩く)とかになるのかもしれない。

今回の実験は今後の予測に少しタメになりました。