マルチシグとロックタイム。カリフォルニア大学バークレー校 ビットコインと仮想通貨の無料講義超訳|Week3-5

前回までの記事はこちら

ーーーーーーーーーー

こんにちは!クレメア(@cremea_tw)です。

前回に引き続き、カリフォルニア大学バークレー校の無料講義、
「ビットコインと仮想通貨のオンライン講座」で学んだ内容をシェアしていきます。

講義そのものにおいて、

読者対象:ビットコインや仮想通貨について詳しく知りたい全ての人
前提知識:不要

という感じなので、
講義内容を読むだけでもかなり理解が深まるのではないかと思います。

 

文章のスタイルとしては、
翻訳ではなく、個人的解釈バリバリの超訳をしていきます。

荒削りですがスピード重視で、
クレメア的な解釈も交えてお伝えするので、
間違いや意見などあればコメントいただければと思います。

 

また、太字や文字色などの文章の装飾は極力していません。

学びの本質はそこではない、時間がもったいない、あとでできる、
ということで、今回は泣く泣くカットしました。

見辛いかもしれませんが、予めご了承ください。

 

ということで、
講義の内容に沿って進めます。

今回の記事は、
マルチシグとロックタイムについてお伝えします。

それでは、本題に入っていきましょう。

イントロ:高度なビットコインスクリプトとP2SH

このセクションでは、
P2SHまたはPay to Script Hashというスキームで、
任意のスクリプトを作成する方法を見ていきます。

より理解を深めるために、
スクリプトハッシュに対する支払いを、
前のセクションのスキーム(pay to pub key hash)と比較します。

そして、より良いメンタルモデルを作るために、
顧客がベンダーに支払うトランザクションを作成する、
ベンダー – 顧客シナリオのすべてについて説明します。

つまり、顧客は送信者であり、ベンダーは受信者です。

 

P2PKH vs P2SH

ビットコインでは、
送信者が送信しているトランザクションの出力にロックスクリプトを指定し、
受信者はビットコインを使用する度にロック解除スクリプトを入力に提供します。

前のセクションでは、Pay to Pub Key Hash(P2PKH)の例を挙げました。

このスキームでは、ベンダーまたは取引の受領者は、
「この公開鍵のハッシュにコインを送付する」と述べています。

そして、後で、ベンダーは、
これらのビットコインを引き換えるために、公開鍵と署名を提供しなければなりません。

これははるかに簡単で最も一般的なケースです。

 

一方、Pay to Script Hash(P2SH)はより柔軟です。

公開鍵ハッシュだけを支払うのではなく、
もっと複雑な命令に支払うことができます。

 

このスキームでは、
ベンダーは次のように述べています。

コインをこのスクリプトのハッシュに送信します。
私は、コインを償還するときに、
スクリプトを真に評価するためのスクリプトとデータを提供します。

これは、
ベンダーが顧客に複雑な出力スクリプトを最初に作成させることを、
望んでいないためです。

ベンダーであるトランザクションの受信者がスクリプトを指定すると、
顧客にとってより使いやすいものになります。

 

P2SHの仕組み

リフレッシャーとして、
Pay to Pub Key Hashですべてが機能する方法は次のとおりです。

ボブがアリスからビットコインを受信したい場合、
アリスはボブの公開鍵ハッシュにアクセスできる必要があります。

彼女は、取引の支払いを、
ボブの公開鍵ハッシュに送ることができます。

 

ボブがアリスがちょうど彼に送ったビットコインを償還するためには、
彼は自分の身元を証明し、彼がこの取引のアウトプットから使用することを可能にする、
署名と完全な公開鍵を提供しなければならない。

 

ボブがアリスとのトランザクションに、
いくつかの機能を追加したいとしましょう。

彼がマルチシグまたはロックタイム使うことを望んでいるとしましょう。
後で紹介する2種類のスクリプトです。

アリスに公開鍵ハッシュを提供する代わりに、
ボブはまずスクリプトを作成し、そのハッシュを取り出してアリスに送信します。

アリスは、ボブのスクリプトハッシュに支払うトランザクションを送信できます。

 

アリスがちょうどボブに送ったビットコインを、
ボブが償還するためには、署名と彼が書いた完全なスクリプトを提供しなければなりません。

 

なぜP2SHを使うのか?

なぜスクリプトに支払う代わりに、
スクリプトハッシュに支払うのでしょうか?

スクリプトのハッシュを顧客に提供することによって、
ベンダーはビットコインスクリプトを顧客自身に作成するという複雑な作業を軽減します。

これは、ベンダーがビットコインの受信者であり、
顧客が送信者であるベンダー/顧客の立場から特に有用です。

ベンダーがマルチシグネチャなどの複雑な機能を使用し、
お金を受け取ることを望んでいるとすれば、
取引をするために複雑なスクリプトを書くようにして、
顧客に負担をかけたいとは思わないでしょう。

したがって、P2SHが要求するのは、
送信者がスクリプトのハッシュのみを使用してロックスクリプトを作成することです。

顧客は、スクリプトが実際に何をしているか気にしません。

彼らは正しい出力スクリプトを書いて、
その出力を償還することができるのは仕入先によって異なります。

また、顧客が簡単に送金できるように、
ベンダーが資金をどのように保有しているかを知る必要はありません。

Script To Hashは2012年にビットコインに更新されました。

以来、ビットコインの創業以来、
ビットコインにとって最も重要な改善の1つとなっています。

 

Quick Check 1

P2SHは何を表していますか?

  • Pay-to-Some-Hash
  • Pay-to-Sender-Hash
  • Pay-to-Script-Hash
  • Pay-Double-SHA-Hash

 

Quick Check 2

P2SHモデルの利点は何ですか?

  • P2SH, as in the Vendor-Customer model, gives the Vendor the power to specify a script, enhancing the ability of Bitcoin to serve as “programmable money.”
  • P2SH enables execution of arbitrary scripts on Bitcoin, without putting the burden on the transaction sender.
  • There is no advantage of using P2SH, as P2PKH already enables scripting functionality.

 

マルチシグとは

P2SHの最も広く使用されている例の1つは、
UTXOのロックを解除するために特定の数の事前に指定された署名が必要な、
マルチシグネチャです。

典型的なマルチシグスキームはm-of-nです。
トランザクションが有効になる前に、n個のうちm個の署名ユーザーが必要になります。

 

マルチシグには、
いくつかのユニークな利点があります。

 

まず1番目に、
マルチシグスキームは、資金を盗む難しさを増加させます。

1つの秘密鍵を使用して資金をロック解除する代わりに、
泥棒はマルチシグネチャ要件を満たす最小数の鍵を持っていなければなりません。

 

2番目に、複数のキーを使用してアカウントをロック解除すると、
損失を防ぐことができます。

マルチシグを使っていない状態で、
ビットコインの秘密鍵を1つ失うことは、すべてが終わりの状態になることを意味します。

ですが、たとえば、2 of 4のアドレスでは、
2つのキーから署名を提供するだけで、アドレス内の資金を引き換えられます。

 

3番目に、複数の人で、
単一のアドレスを制御するために使用することもできます。

例えば、会社の役員会は、
5人の役員のうち3人が資金を使う前に予算を承認し、3 of 5人の署名を使用することは、
その正確な目的に合致することを義務付けることができます。

マルチシグネチャスクリプトがどのように構築され、
実行されるかを見てみましょう。

左側のダイアグラムの最初のボックスには、
ユーザーがUTXOを使用できるようにする、
ロックスクリプトの条件を満たすために必要な数だけのシグネチャが含まれている、
ロック解除スクリプトが表示されます。

アンロックスクリプトの下には、
ビットコインを費やすためのすべての可能な署名と
適格な署名が入っている償還スクリプトがあります。

特定のアカウントから、
どのようにして誰がお金を使うことができるかに関するルールを設定します。

ボックスの上部にある文字mは、
署名の最小数を表し、文字nは、有効な署名の総数を表します。

この償還スクリプトは、
償還者がお金を使いたいときにのみ公開され、使用されます。

償還スクリプトはハッシュされ、
償還スクリプトのハッシュと照合され、評価されます。

最後に、ダイアグラムの一番下を見ると、
ロックスクリプトには、償還スクリプトのハッシュを後で比較するためのハッシュが
含まれています。

マルチシグトランザクションを有効にするには、
完全な償還スクリプトをハッシュし、スクリプトハッシュと比較します。

一致した場合、UTXOはロック解除されます。

 

ロックタイムとは

ロックタイムはビットコインの機能の一種であり、
特定のブロックの高さまで資金の支出を制限します。

この場合の時間は、UNIXのタイムスタンプ、ブロックの高さ、
またはトランザクションを含むブロックの上に構築されたブロックの数として、
表すことができます。

 

ロックタイムは絶対的でも相対的であってもよいです。

絶対ロックタイムは、
特定のトランザクションが通過できる将来の絶対的なポイントを指定します。

これは、UNIXタイムスタンプまたはブロックハイトを使用して行われます。

一方、相対的なロックタイムは、
ブロックの深さ、または現在のブロックの上に構築されたブロックの数を指定します。

 

また、トランザクションレベルとスクリプトレベル、
またはUTXOレベルのロックタイムの区別もあります。

スクリプトレベルのロックタイムは、
特定のUTXOにロックタイムを課すことができ、
ビットコインスクリプトで指定されますが、
トランザクションレベルのロックタイムは、
トランザクション自体にロックタイムを課します。

トランザクションレベルのロックタイムは、
ビットコインのロックタイムの最初の実装でした。

このロックタイムにより、
将来特定の時間までトランザクションを有効なブロックに含めることができなくなります。

 

ただし、ロックタイムはトランザクションにのみ配置され、
使用されるUTXOには配置されないため、
送信側はロックタイムされたトランザクションと同じUTXOから、
別のトランザクションを送信することができます。

最初のトランザクションがまだロックタイムされている限り、
この新しいトランザクションは最初に実行されます。

そして、有効である限り、実際に新しいトランザクションは、
ロックタイムされたトランザクションが費やそうとする出力が既に使用されているため、
元のロックタイムされたトランザクションを取り消すため、
ロックタイムされたトランザクションを無効にして上書きします。

 

この警告を防止するために、
UTXO自体にロックタイムを設定することもできます。

UTXOレベルのロックタイムは、
特定のUTXOが指定された時刻まで使用できないことを指定します。

これにより、UTXOの送信者は、
ロックタイムのロックが解除される前に別のアドレスにUTXOを送信することによって、
トランザクションをオーバーライドできなくなります。

 

ロックタイムを使用する場合の注意点の1つは、
ロックタイムの有効期限近くにユーザーが注意する必要があることです。

ネットワーク上のピアのクロックが潜在的にオフになる可能性があるため、
ブロックチェーンにはグローバル時間の概念はありません。

 

したがって、UNIXタイムスタンプで、
絶対ロックタイムを使用する場合は注意が必要です。

特定の時間が経過したことを前提とすると、
使用準備が整っているように見える取引は、
他の人によって早すぎると見なされる可能性があります。

また、ブロックは保証された間隔で作成されないため、
blockheightで指定されたロックタイムが期限切れになる前に、
ロックタイムされたトランザクションを取り消そうとする試みは数時間前に行われます。

 

あとがき

 

ビットコインスクリプトを活用した、
具体的な手法に関する話でしたね。

ぶっちゃけ、開発者になりたい人以外は、
そこまで深く理解する必要はないかなと思いました。

 

僕自身も背景をうっすら確認するレベルで、
必要になったら戻ってきたいと思います。

 

ってことで、
今回はこの辺で失礼します。

このブログを書く僕の目的は、
「ファンを作ること・仲間を増やすこと」です。

趣味が合う、気が合う、考え方が合う。
なんかええなーと思ったら、気軽にメッセージください。喜びます。

終わり。

 

次の記事
Week3まとめ。カリフォルニア大学バークレー校 ビットコインと仮想通貨の無料講義超訳|Week3-6

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

ABOUTこの記事をかいた人

物語の引き金を引く男 / 「てめえの人生に火をつける」 / プロ火付け役 / 腐れニートからの再始動 / 見知らぬ人にMacBook Proを買った人 / 32日で100記事達成 / ただの足跡を伝説に変えていく男 / Youtubeで #クレメアラジオ 不定期配信 / サロン「裏世界」オーナー 参加希望者はDMまで