LoginSignup
8
6

More than 5 years have passed since last update.

Graftrootメモ

Posted at

G.Maxwell が提唱した Graftroot の自分なりの理解メモ。

ビットコインで条件分岐のあるコントラクトを書く場合、条件分岐先の処理のうちいずれか一つしか実行されないので、実行されなかった処理まで含めた全プログラムをブロックチェーンに書き込むのは非常に非効率。

多くのコントラクトの場合、

if (正常な場合) then
  <AliceとBobが両者とも電子署名すれば送金できる>
else /* 異常系処理 */
  <一週間経ってAliceが応答しなかったらBobだけの電子署名で送金できる>
endif

のように「正常処理のマルチシグ + 異常系処理のコントラクト」といった組み合わせで構成されることが多い。
多くの場合、異常系処理は呼ばれないので、正常な場合は普通のマルチシグtxになって、異常な場合だけ複雑なスクリプトをブロックチェーンに書き込めば効率的。

そこで、ビットコインのコンセンサスルールをいじってあげて、異常系スクリプトと、そのスクリプトに対するAliceとBobによる電子署名があれば、そのスクリプトを実行できるようにしてあげる。

つまり、

ScriptPubKey = Pub_{Alice} Pub_{Bob} による電子署名

に対して、通常の場合には

ScriptSig = Sig_{Alice} Sig_{Bob}

でコインをredeemできるけど、異常発生時には

ScriptSig =
  <S = 異常系スクリプト>
  <AliceおよびBobによる、Sに対する電子署名>

というデータを与えればコインをredeemできるようにコンセンサスルールを変更してあげればいい。
電子署名はマルチシグを作ったときに予めAliceとBobで交換しておく。

こうすることで、Merkelized Abstract Syntax Tree (MAST) のような複雑なことをしなくても、いくつでも異常系スクリプトを仕込める(AliceとBobで異常系スクリプト S1, S2, ..., に対する電子署名を交換しておけばいい。Merkle Tree を使った commitment なんて不要)。


英語力ないんで、間違ってるかも。。。変なところがあったらTwitter等で教えてクレメンス。

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6