ビットコインスクリプトにおけるコネクターアウトプット(Connector Output)とは?

お知らせ
Table of Contents

はじめに

今回は小ネタです。BitVM 1 関連の文脈で頻出のワードとして「コネクターアウトプット(Connector Output)」というものがありますが、その実態について以下フォーラムのリンク 234で紹介されていたので内容を紹介します。

コネクターアウトプットとは

UTXO Aが存在する(=ブロックチェーン上・mempool上に存在する)場合にのみ、UTXO Bを消費することができるようにするための仕組み。

UTXO Aを消費するためのトランザクションT1に署名を付加するとき、その署名は SIGHASHというパラメータを使って、署名値がトランザクションT1のどの部分にコミットするかを決定することができる。これには通常、どのUTXOを使うかという部分も含まれる。

なので、UTXO Aを消費するトランザクションT1が完全な署名と共にブロックチェーン上に存在しない段階であっても、その子としてT1のアウトプットであるUTXO Bを消費するトランザクションT2を事前に作成しておくことができる。

重要なのは、もしもUTXO Aを別のトランザクションT1'が消費した場合、そのT1'は事前に想定されたUTXO Bとは別のアウトプットを作ることになり、 UTXO Bをアンロックすることは原理的にできなくなるため、事前に用意したトランザクションT2が無効化できるということである。

このようにUTXOを排他的に消費する経路を事前に定めて署名しておくことで、UTXO B を UTXO Aと「接続」することができる。

コネクターアウトプットの実例

コネクターアウトプットが使用されている実例として、Loan shark5 というソフトウェアが挙げられる。(もちろん BitVM1 も実例といえる)
このLoan sharkは米国におけるビットコイン使用時の課税コストを少なくするために使えるという。

Loan sharkではNostrを使った2ユーザー(貸し手、借り手)間の通信を行い、古いUTXOをコラテラルとして、新しいUTXOを「借りる」ことができる。

具体的には、以下のようなtapleaf(経路)を持つスクリプトでアンロックされるコラテラル(担保)アドレスを作成する。

  1. 貸し手、借り手が協力して署名することで消費可能になる
  2. 3ヶ月間(一定期間)経ったら貸し手が消費可能になる

このコラテラルアドレスに借り手が古いUTXOを入金する前に、1の経路において以下のようなコネクターアウトプットを使った返済トランザクションを作成し、貸し手のみが署名する。

  • コラテラルアドレス入金のUTXO(コネクターアウトプット) を消費するトランザクションであり、あらかじめ決められた金額を貸し手に送金(返済)する。

なお借り手は実際にこの返済トランザクションに署名して返済してもいいし、しなくてもいい。返済しないまま3ヶ月が経過すると2の経路によってコラテラルは貸し手に全額没収される。

もしコラテラルアドレスへの入金トランザクションが実際に発行されたならば(この入金は貸し手から借り手への送金と同時にアトミックスワップとして行われるらしいが、詳細不明)、借り手は事前に用意されたコネクターアウトプットによって、返済トランザクションを有効化し、コラテラルアドレスから出金することが可能になる。

もしもコラテラルアドレスへの入金に使われるトランザクションの代わりに、同じUTXOを消費する別のトランザクションが発行されたならば、そのときコネクターアウトプットによって、返済トランザクションは無効なものとなる。貸し手側が署名した「コネクターアウトプットを消費するトランザクション」はこの返済トランザクションだけであるから、コラテラルアドレスから出金できるのは貸し手だけであると、貸し手自身が認識できることになる。

まとめ

将来的なトランザクションの消費経路が有効になるか、無効になるかどうかについて依存関係をもたせることは、古くはLighthouse6というプロジェクトでも使われていたそうですが、最近 Ark7やBitVM1で構成要素として多用されるようになり、基礎となる重要な概念として名前がつけられたという経緯があるようです。

参考文献


  1. Bitcoin上で任意の計算の検証を可能にするBitVM https://techmedia-think.hatenablog.com/entry/2023/10/19/195132 

  2. Super Testnet in BitVM Builders https://t.me/bitVM_chat/11740 

  3. Super Testnet in BitVM Builders https://t.me/bitVM_chat/11741 

  4. Super Testnet in BitVM Builders https://t.me/bitVM_chat/11742 

  5. Loan shark https://github.com/supertestnet/loan-shark 

  6. Lighthouse https://github.com/vinumeris/lighthouse 

  7. Ark Deep Dive https://www.arkpill.me/deep-dive 

タイトルとURLをコピーしました