Hashlock

提供: tezos-wiki
移動先: 案内検索

ハッシュロックは、指定されたデータが公開されるまで、出力の支出を制限する一種の[執行妨害]です。ハッシュロックは、いったん任意のハッシュロックが公開されると、同じキーを使用して保護された他のハッシュロックも開くことができるという有用な特性を持っています。これにより、すべてが同じハッシュロックによって妨げられ、同時にすべてが消費可能になる複数の出力を作成することが可能になります。ハッシュロックは独立して使用されていますが(下記参照)、最も一般的にはHashed Timelock Contractsのようなシステムの一部として記述されています。

トランザクションパズル[編集]

Bitcoinのスクリプト言語は現在、トランザクション内に含まれるデータをハッシュする5つのオペコードを提供しています。 Scriptページには、これらのハッシュ関数の1つを使用して、この障害を満たすことができる人だけが使用できるトランザクション出力である「 transaction puzzle」を作成するトランザクションが記述されています。

 OP_HASH256 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000 OP_EQUAL

上記の妨害は、スタックの上部(図示せず)のデータを取り込み、sha256d関数でハッシュし(計算されたハッシュを作成する)、上の6fe2 ... 0000の文字列(提供されたハッシュ)と比較します。計算されたハッシュが提供されたハッシュと等しい場合、妨害が満たされ、出力が消費されることがあります。

Scriptページは、提供されたハッシュがGenesis Blockヘッダーのハッシュであることを示しているため、この妨害を満たすために必要なデータはGenesisブロックのヘッダーです。誰かがすでにこれを行っているので、この出力を費やしたブロックチェーン上のトランザクションを調べると、そのトランザクションのスクリプトシグネチャの1つにGenesis Blockヘッダーが表示されます。

複数の出力を同じデータでロック解除する[編集]

ハッシュロックを作成するために使用されたデータ(プレイメージと呼ばれる)を明らかにすることによって、ハッシュロックは、誰も今ではキー(プリイメージ)を持っており、ハッシュロックによって妨害された資金。このため、ハッシュロックで保護されている出力は、正しいプリイメージと適切な署名の両方が資金を費やすために必要となるように、シグネチャで保護する必要があります。

しかし、ハッシュロックは、複数の出力がすべて同じハッシュロックによって邪魔されるという非常に有用な性質を持っています。そのため、プレ画像を持っている人がその資金を消費するためにそれを明らかにすれば、同じハッシュロックはブロックチェーン上の最初の人のトランザクションから必要なプリイメージを得ることができます。

このプロパティでは、第三者が支払いを受けるリスクを伴わずに第三者を通じて支払いを行うことができます。例えば、

  • Danは256ビットのエントロピー(ランダム性)を持つプレイメージを作成し、sha256d関数でハッシュしてハッシュを作成します。
  • DanはハッシュをAliceに渡します。
  • アリスは、ボブの公開鍵に加えてダンによって生成されたハッシュに邪魔された出力を支払う。
  • Bobは以前に受け取った出力の1つをCharlieに費やし、その額をAliceが支払った金額(マイナスの手数料)に設定し、Charlieの公開鍵とDanによって生成されたハッシュに矛盾を設定する
  • チャーリーはボブと同じことを行い、ダンの公開鍵とハッシュ・ダンが生成されたことを証明します

ダンがチャーリーに与えたアウトプットを費やすたびに、彼はプレイメージを明らかにする必要があります。 Charlieはこれを使用してBobに与えた出力を費やし、Bobはこれを使用してAliceから受け取った出力を費やすことができます。本質的に、アリスは、ボブやチャーリーに自分自身のためにお金を盗む能力を与えずに、2つの仲介業者を通じてダンに支払った。

この単純な例は、ハッシュロックがどのようにルーティングを可能にするかを説明するためのものであり、ダイレクトトランザクションで仲介業者に支払うのは意味がないものの、直接Bitcoinトランザクションを使用しています。また、上記の構成は未確認取引に依存しているため、またBobとCharlieがAliceの資金を人質にしておくことができるため、安全ではありません。より具体的な例については、以下の「使用法」を参照してください。

用途[編集]

オン・チェーン・ベッティング: '誰か(オラクルと呼ばれる)が複数のプレイメージを生成し、それらのプレイメージを生成します。対応するハッシュ;プレイヤーは署名とハッシュロックの組み合わせによって保護された出力を作成し、次に必要なすべての署名をお互いに提供します。その後、オラクルは単一のプレイメージを明らかにし、残りを削除します。既に持っている署名と共にそのプリイメージをトランザクションに挿入し、勝ち金を集めたプレーヤー。このスキームは、依然としてオラクルが正直であることを要求していることに注意してください。ピーター・トッド(Peter Todd)は、このスキームは、Oracleが単純なシグネチャを使用するスキーマよりも劣っていると考えています。[1]

互換性[編集]

[2] Bitcoinのオペコードでいくつかの問題が発見された2010年12月、Gavin Andresen氏は、Scriptでハッシュ関数を作成するために必要なハッシュ関数を元のBitcoin 0.1リリースの一部として使用しました。これらのハッシュ関数や他のめったに使用されていないオペコードを使用するトランザクションのデフォルトでリレーやマイニングを防止するIsStandard()関数[3]オペコードがより多くの監査を受け、問題なくtestnetで何年も有効にされた後、Bitcoin Core 0.10.0(2015年2月)は、P2SHトランザクションで最も多くのIsStandard()の制限を取り除いた[4]デフォルトで中継され、採掘されるトランザクション内のハッシュロックの数。

参考文献[編集]

<リファレンス> BIP - ハッシュロックされています。<ref name = "todd_signing_oracles"> Re:<nowiki> [Bitcoin-development </ nowiki>トランザクション]
Peter Todd、取得日2016-04-11 </ ref> <ref name = "bitcoin_0_1_code"> Bitcoin 0.1 code
中本聡
検索された2016-04-11 </ ref> <ref name = "andresen_isstandard"> IsStandard()はCScriptsをチェックします:ブロックでのみリレー/インクルードCScripts Gavin Andresen(帰属)
取得済み2016-04-11 </ ref> <ref name = "core_0_10_0_release_notes"> P2SHアドレスの標準スクリプトルール緩和
Bitcoinコア開発者
取得済2016-04-11 </ ref>

</リファレンス>
  1. 引用エラー: 無効な <ref> タグです。 「todd_signing_oracles」という名前の引用句に対するテキストが指定されていません
  2. 引用エラー: 無効な <ref> タグです。 「bitcoin_0_1_code」という名前の引用句に対するテキストが指定されていません
  3. 引用エラー: 無効な <ref> タグです。 「andresen_isstandard」という名前の引用句に対するテキストが指定されていません
  4. 引用エラー: 無効な <ref> タグです。 「core_0_10_0_release_notes」という名前の引用句に対するテキストが指定されていません