Scaling Bitcoin 2018復習シリーズ。今回はRuben Somsenによる「Statechains: Off-chain Transfer of UTXOs」の発表について見てみる。
書き起こしは↓
http://diyhpl.us/wiki/transcripts/scalingbitcoin/tokyo-2018/statechains/
ホワイトペーパー(7ページほどなので読みやすい)↓
Statechainとは?
StatechainはPayment Channelとは異なるコンセプトのレイヤー2のスケーリングソリューションになる。Payment Channelの場合、マルチシグにデポジットした金額を上限として、参加者の残高をオフチェーントランザクションで更新していくモデルだが、Statechainは基本的にはUTXOの所有権をオフチェーンで譲渡していくモデルのソリューションになる。
そのため、UTXOの量が例えば1 BTCだった場合、転送できるのは1 BTCまるごとで、1 BTCを分割して0.5 BTC分だけ渡すといったことはできない。0.5 BTCを支払いたい場合は、事前に1 BTCと0.5 BTC×2のUTXOを交換する方法を取るが、適切な交換をするためにはStatechain上のコインの流動性が求められ、適切な交換は意外と難しいんじゃないかと思う。
Statechainを運営するエンティティ
StatechainはオフチェーンでUTXOの所有権を転々と移動させていくプロトコルだが、この台帳を維持し、Statechian上でのUTXOの所有権の移動をサポートする存在としてStatechainを運営するエンティティと呼ばれるものが存在する。Federated SidechainとかのFederationに近いが、Federated Sidechainの場合Federationが機能しなくなると、サイドチェーン上のコインが動かせなかったり、それをメインチェーンに戻したりできなくなるが、そういったリスクはなく、エンティティが機能しなくなっても、Statechain上のUTXOを最終所有者がオンチェーン上で償還できるようになっている。
Statechainを構成する技術要素
このStatechainは以下の技術要素を組み合わせて実装するプロトコルになっている。そのため、プロトコル理解のためには事前に各技術要素について知っておいた方が良い。
- Schnorr署名
- Adaptor Signature
- eltoo
- Graftroot(オプション)
Statechainのプロトコル
以下の説明では、StatechainのエンティティをAとする。
Statechainへのコインの移動
ユーザーBがコインをStatechainに移動したい場合、BはエンティティAと協力して、eltooスタイルのチャネルを作成する。この時、Bは自身の鍵を使うのではなく、transitory keyと呼ばれる新しい鍵を生成する(この鍵をXと表記する)。このtransitory keyはこの後、Statechain上でコインの所有権を移動する際に、新しい所有者にも共有される鍵になる。Bは自身が持つUTXOのコインをAとXの秘密鍵の情報がないとアンロックできないスクリプト宛に送金する。
オンチェーン上にはAとX間でロックされたコインがあり(eltooのFunding Tx)、このUTXOをインプットとしたオフチェーントランザクション(eltooのTrigger Tx)が作成されるものと思われる。このセットアップ段階ではオフチェーントランザクションのアウトプットのアンロック条件はいかのいずれか。
- AXでアンロック可能
- タイムロック付きでBでアンロック可能
ホワイトペーパーには詳しいコントラクトのコードは掲載されてないけど、LNのように両者の残高を管理するのではなくUTXOの所有権を移動するだけなので、eltooで定義されているSettlement Txは不要と思われる。
また、Statechain上ではこの初期段階ではBがこのUTXOの所有者となる。
※ ここで従来のLNのコントラクトではなくeltooのコントラクトが使われるのは、Statechainの場合、UTXOの所有者がどんどん変わっていくので、参加者が2者だけでなく多数になり、不正が行われた際に誰にペナルティ分を支払うかというのが問題になる。eltooの場合ペナルティではなく最終状態が必ず適用される仕組みなので、Statechainの最終所有者にコインが渡るモデルと親和性が高い。
Statechainでコインを送付
Statechian上にコインをデポジットしたら、今度はStatechain上でコイン(UTXO)を送付する=UTXOの所有権の移動。ユーザーBはデポジットしたUTXOをユーザーCに送る。
Statechain上のUTXOの所有権がB→Cに移り、新しいオフチェーントランザクションが作成される。このオフチェーントランザクションのタイムロック条件のコインの所有者はCになる。
Statechain上でB→Cに所有権を移動する際は、Bの署名が必要となる。この署名がBがCへの所有権の移動を認めた証拠となる。またCがその移転を認めるという意味でCの署名も必要となる。この両者の署名の作成がアトミックに行われるのを保証するためにAdaptor Signatureを利用する。(この時使われるAdaptor Signatureは、A、B、Cそれぞれが共有シークレットを生成する変種のAdaptor Signature)またこの時作成したAdaptor SignatureからCがtransitory key Xの秘密鍵を知るようになる。
このようにStatechain上での所有権の移転は、エンティティAと現在の所有者B、次の所有者Cによってアトミックに行われる。この時所有権を更新したオフチェーントランザクションも新たに作成されるが、ここでもAdaptor Signatureが利用され、Statechian上で所有権の移転を認める署名が公開されると、その署名から所有権をCに更新したオフチェーントランザクションの有効な署名も作成されるようになるみたい。このためBitcoinサイドとStatechainサイドのトランザクションにもアトミック性が保証される。
Cへのコインの所有権が移動すると、transitory keyの値を知っているのはBとCとなり、Cは次のユーザーにUTXOの所有権を送付することができるようになる。
このようにStatechain上ではデポジットされたUTXO毎に、エンティティによって履歴の管理及び、所有権の移動がサポートれる。
エンティティのフェデレーション化
エンティティAについて1つの鍵のように記載されているが、これを複数人のフェデレーションにすることもできる。Schnorrの集約機能を利用して(おそらくプラス秘密分散)、実運用では8-of-10のようなフェデレーションによる合意の仕組みが用いられると思われる。
不正行為
Statechainを運営するエンティティは、すべての転送が記録される公開台帳を持つことが期待されていて、これは不正な引き出しに対する証拠として機能する。台帳上で不正な引き出しが競合するか、引き出しの際のStatechainのフォークが発生した場合、ユーザーはトランザクションがある時点でStatechainに含まれているという証拠を保存していれば、両方のケースで詐欺の証明ができる。従来のブロックチェーンと異なり、全てのUTXOはコインをマージしたり分割したりできないので、他のUTXOの履歴とは独立した履歴を持っている。そのため気になるUTXOの履歴だけを選択して検証し追跡できる。
コインの移動には常にStatechainのエンティティAの許可と、(UTXOを保有している)transitory key保有者の許可が必要になる。Statechainのエンティティは最後のtransitory keyの所有者と協力しなければならず、そうでない場合、詐欺の証拠を生成することになる。↑のようにAdaptor Signatureを利用しているのは、コインの移動に伴い参加者の署名が存在することを保証するため。
もし前の所有者と共謀して現在の所有者にだまって別の所有者にコインを送付しようとした場合、Statechain上でその証拠となる署名が残ることになり、現在の所有者はそれを詐欺の証拠として提出することができる。当然、そういった行為をしたエンティティのレピュテーションは下がる。
最悪のケース
最悪ケースは悪意あるエンティティが多くのUTXOのtransitory keyを何らかの方法で入手した場合で、この場合オンチェーン上のコインをエンティティAが盗むことができる。このような盗難が発生した場合、transitory keyを盗まれていないユーザーは、すぐにBitcoinのオフチェーントランザクションをブロードキャストして資金を償還することで被害を最小限に留める。
当然こういった行為を行ったエンティティのレピュテーションは著しく低下する。また実際に秘密鍵に該当する鍵はユーザー側が管理しているので、漏洩はユーザー側の管理次第になるが、Statechain上でのUTXOの移動が続くとそれだけtransitory keyを知るユーザーが増えるので、Statechain上での履歴がある程度長くなったら一度オンチェーンに戻す方が鍵管理の安全性上は良い。
逆にtransitory keyさえ漏洩しなければ、エンティティが勝手にコインを移動することはできない。たとえ裁判所からの押収命令があったとしても技術的に押収することは不可能。
Statechainの欠点
Statechainの欠点は良くも悪くも、UTXO単位の送金しかできないという点で、必要な金額にあわせてUTXOをマージしたり分割したりできないという点。また少額のUTXOの場合、そのUTXOをオンチェーンで償還しようとした場合の手数料の方が高くなるといったことも考えられることから、ある一定量以上のUTXOでないと受け入れられず、マイクロペイメントなどは無理だろう。
Lightning Network on Statechain
Statechain上のUTXOの送付先をボブへ送付するのではなく、ボブーキャロルのマルチシグに送付することで、Statechain上でLighting Networkをセットアップするが可能になる。
従来のLighting Networkと違うのが、チャネルはオフチェーンで開かれるので、チャネルのオープン/クローズ、Splicingを非常に安価に行うことができ、残高調整が行いやすいという点。
Graftrootの利用
Graftrootが利用できるチェーンであれば、資金をオンチェーンで償還する際の自由度が上がる。ハードフォークなどでチェーンが分岐した場合、StatechainにデポジットされたUTXOは2つのチェーンで同時に存在していることになる。Statechainのエンティティがどちらのチェーンを採択するのかという問題が浮上するが、エンティティは最新の所有者からの要求があれば、その所有者が望む条件のスクリプトへの署名を提供することで、別の条件を使ってオンチェーンでの償還を行うことができる。それがエンティティが運用すると決めたチェーンでなくても。