ダミヌのための分離された蚌人

ビットコむンのスケヌラビリティはその䞻芁な問題の1぀であり、その解決策は積極的に取り組んでいたす。 これらの゜リュヌションの代衚的なものの1぀に、たずえば、Lightningネットワヌクテクノロゞヌがありたすが、いく぀かの脆匱性のため、その実装はただ䞍可胜です。 別の゜リュヌション-分離された蚌人は、スケヌラビリティの向䞊を目指しおいたすが、雷の実装を劚げるたさにその脆匱性を含む䞀連の問題党䜓も解決したす。 この蚘事では、分離された蚌人の䞻な利点を怜蚎し、その仕組みを説明したす。


img


分離された目撃者、たたは倚くの堎合SegWitず呌ばれるものは、䞀連のBIP141、142、143、144、および145で蚘述された゜フトフォヌクであり、その䞻な目的は、眲名を䜿甚しおトランザクションずブロックの構造を最適化するこずですトランザクションから別の構造ぞの「 scriptSig 」、「 目撃者 」、たたは「 ロック解陀スクリプト 」ず呌ばれたす。 これにより、トランザクションのサむズを小さくしおブロックをより容量的にするだけでなく、トランザクションの構造に䟝存する支払いチャネルや皲劻などの技術にずっお非垞に重芁な「 可倉性 」 トランザクションの順応性、䞊蚘の脆匱性に぀いお前述したしたの問題も解決したすビットコむン。


仕組み


始める前に


たず、ビットコむンの支払いシステムがどのようなものかを簡単に思い出しおください。 どの銀行にも実装できるため、残高リストのようなものはありたせん。 代わりに、各アドレスの残高は、そのアドレスに送信される䞀連のトランザクションによっお衚されたす。トランザクションは、入力ず出力が䞻芁なものである構造です。 入力は、支出するために参照するトランザクションですより正確には、これらはトランザクション党䜓ではなく、特定の出力です。1぀のトランザクションでは耇数のアドレスに資金を転送できるため。出力は、資金を送金したい。 ビットコむントランザクションの構造は次のようになりたす。


類䌌画像


出力のPubKeyスクリプトフィヌルド以降scriptPubKey は、 ロックスクリプトず呌ばれるものです。 資金の転送先の䜏所の所有者のみがこの出力を䜿甚できるようにする必芁がありたす。 Signature Scriptフィヌルド以降scriptSig はロック解陀スクリプトずも呌ばれたす - ロックスクリプトを 「ロック解陀」し、アドレスの所有暩の蚌明を提䟛したす。


img


トランザクションの詳现ず、ロックおよびロック解陀スクリプトの操䜜に぀いおは、 こちらをご芧ください 。


埌方互換性


実際、分離された蚌人はトランザクションの構造だけでなく、その出力も倉曎したす。 ただし、これは、埓来のUTXO未䜿甚のトランザクション出力ずSegvitの䞡方を同じトランザクションで䜿甚できないこずを意味するものではありたせん。


Segregated Witnessは䟝然ずしお゜フトフォヌクであるため、その曎新は無芖できたす。぀たり、叀いシステムは䜕らかの圢でSegvit出力を凊理する必芁がありたす。 実際、叀いノヌドたたはりォレットの堎合、これらの出力は誰もがアクセスできるように芋えたす。぀たり、空の眲名で䜿甚できたすが、これは䟝然ずしお有効です。 曎新を受け入れたノヌドずりォレットは、もちろん、特別な「目撃者」フィヌルドの入り口の倖のすべおの眲名を怜玢したす。


䟋


Pay-to-Witness-Public-Key-Hash


それでは、トランザクションの䟋ず、分離された蚌人によっおどのように倉化するかを芋おみたしょう。 暙準のPay-to-Public-Key-HashP2PKHトランザクションから始めたす。


出力、぀たり「scriptPubKey」フィヌルドに関心がありたす。 兞型的なロックスクリプトを考えおみたしょう。


OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG 

分離された蚌人では、次のようになりたす。


 0 <PubKeyHash> 

ご芧のずおり、Segvitの出力は埓来の出力よりもはるかに単玔です。これは、スクリプト実行スタックに配眮される2぀の倀で構成されおいたす。 前に述べたように、ビットコむンクラむアントの叀いバヌゞョンでは、眲名を必芁ずしないため、この出力は誰でもアクセスできるように衚瀺されたす。 しかし、曎新されたクラむアントの堎合、最初の番号はバヌゞョン番号ずしお解釈され、2番目はロックスクリプト監芖プログラムの類䌌物ずしお解釈されたす。 実際、圧瞮された公開キヌのハッシュはここで䜿甚する必芁がありたす。これに぀いおは埌で説明したす。


ここで、この出力が費やされるトランザクションを芋おみたしょう。 埓来の堎合、次のようになりたす。


 [...] "Vin" : [ { "txid": "8adbca5e652c68f8f3c30ac658115bc4af395d0cc7e6beaea18168295c29d011", "vout": 0, "scriptSig": "<our scriptSig>" } ] [...] 

ただし、Segvit出力を䜿甚するには、トランザクションに空のsriptSigフィヌルドがあり、すべおの眲名が別の堎所に含たれおいる必芁がありたす。


 [...] "Vin" : [ { "txid": "8adbca5e652c68f8f3c30ac658115bc4af395d0cc7e6beaea18168295c29d011", "vout": 0, "scriptSig": "" } ] [...] "witness": "<Witness data>" [...] 

è­Šå‘Š


埓来の顧客はSegvitトランザクションを凊理できるずいう事実にもかかわらず叀い顧客にずっおは出力は誰でもアクセスできるように芋えるこずを思い出しおください、圌らは出力を䜿うこずができたせん。ただし、空の眲名を持぀出口。このトランザクションは実際には無効です分離された蚌人を持぀ノヌドは、このようなトランザクションを芋逃すこずはありたせん。 ぀たり、送信者は、目的のタむプの出力を䜜成するために、受信者のりォレットがsegwitをサポヌトしおいるかどうかを知る必芁がありたす。


BIP 143以降、 圧瞮された公開キヌのハッシュを䜿甚しお出力を䜜成する必芁がありたす 。 通垞のアドレスたたは非圧瞮公開キヌを䜿甚しお出力を䜜成する堎合、この出力は䜿甚されたせん。

蚌人ぞの支払いスクリプトハッシュ


次の非垞に重芁なトランザクションタむプはP2SHです。これにより、公開キヌハッシュ通垞のビットコむンアドレスではなく、スクリプトハッシュにトランザクションを送信できたす。 P2SHトランザクションの出力を費やすには、資金が送金されたスクリプトのハッシュず䞀臎するハッシュを持぀スクリプト匕き換えスクリプトず呌ばれたすず、スクリプトに応じた眲名/パスワヌド/䜕かを提䟛する必芁がありたす。 このアプロヌチを䜿甚するず、䜕も知らない方法で保護されたアドレスにビットコむンを送信できたす。たた、倚くのスペヌスを節玄できたす。たずえば、マルチ眲名りォレットを備えたりォレットの堎合、すべおを保存するずロックスクリプトが非垞に倧きくなりたす」 「ハッシュだけでなく、完党にロックしたす。


そこで、5぀のうち2぀の眲名を必芁ずするマルチ眲名りォレットの䟋を芋おみたしょう。ロックスクリプトの埓来の圢匏では、P2SHトランザクションの出力は次のようになりたす。


 HASH160 54c557e07dde5bb6cb791c7a540e0a4796f5e97e EQUAL 

それを䜿うには、マルチ眲名2 of 5、および2぀の眲名の条件を定矩する匕き換えスクリプトを提䟛する必芁がありたす。これはすべおトランザクション入力に含たれおいる必芁がありたす。


 [...] "Vin" : [ "txid": "abcdef12345...", "vout": 0, "scriptSig": "<SigA> <SigB> <2 PubA PubB PubC PubD PubE 5 CHECKMULTISIG>", ] 

次に、送信者ず受信者の䞡方が分離りィットネスを䜿甚した堎合に、これらすべおがどのように芋えるかを芋おみたしょう。


ロック終了スクリプト


 0 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73 

繰り返したすが、P2PKHトランザクションの堎合のように、結果のスクリプトははるかに単玔です。 ここで、最初の倀はバヌゞョン番号で、2番目の倀は、匕き換えscript'a監芖プログラムの32バむトのSHA256ハッシュです。 このハッシュ関数は、ハッシュ長32バむトのSHA256ず20バむトのRIPEMD160SHA256スクリプトによっお、監芖プログラムP2WPKHずP2WSHのプログラムを䜕らかの圢で区別するために遞択されたした。


この出力を䜿甚したトランザクション


 [...] "Vin" : [ "txid": "abcdef12345...", "vout": 0, "scriptSig": "", ] [...] "witness": "<SigA> <SigB> <2 PubA PubB PubC PubD PubE 5 CHECKMULTISIG>" [...] 

P2SH内に分離された蚌人を埋め蟌む


そのため、分離された蚌人の䜿甚には利点があるこずを確認したしたが、䞊蚘の䟋では、送信者ず受信者の䞡方を曎新する必芁がありたすが、これは垞に可胜ではありたせん。 たずえば、この状況を考えおみたしょう。


アリスはビットコむンをボブに送りたいず思っおいたすが、ボブには持っおいるのにセグベ財垃はありたせん。 もちろん、暙準のトランザクションを䜿甚するこずもできたすが、Bobはsegwitを䜿甚しお手数料を削枛したいず考えおいたす。


この堎合、Bobはsegwitスクリプトを含むP2SHアドレスを䜜成できたす。 アリスの堎合、圌は最も䞀般的なP2SHアドレスずしお衚瀺され、問題なく資金を送金できたす。ボブはこの出力をsegveトランザクションを䜿甚しお䜿甚でき、手数料の割匕を受けるこずができたすトランザクションを分離するための新しい手数料メトリックに぀いおは埌述したす 。


したがっお、P2WSHずP2WPKHの䞡方のタむプのセグメントトランザクションをP2SH内に実装できたす。


P2SHP2WPKH

P2SH内でP2WPKHトランザクションを䜿甚するには、Bobは公開キヌから監芖プログラムを䜜成する必芁がありたす。 次に、結果をハッシュし、P2SHアドレスに倉換する必芁がありたす。


監芖プログラムを䜜成したす。


 0 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 

い぀ものように-最初の数字はバヌゞョンで、2番目は20バむトの公開鍵ハッシュです。 結果のスクリプトは、SHA256によっおハッシュされ、次にRIPEMD160によっおハッシュされ、さらに20バむトのハッシュが発行されたす。


監芖プログラムP2WPKHのHASH160


 3e0547268b3b19288b3adef9719ec8659f4b2b0b 

そしおアドレスに倉換したす


 37Lx99uaGn5avKBxiW26HjedQE3LrDCZru 

このアドレスに送信される出力のロックスクリプトは、通垞のP2SHアドレスのスクリプトのようになりたす。


 HASH160 3e0547268b3b19288b3adef9719ec8659f4b2b0b EQUAL 

次に、Bobがこの出力をどのように䜿甚できるかを怜蚎したす。


 [...] "Vin" : [ { "txid": "8adbca5e652c68f8f3c30ac658115bc4af395d0cc7e6beaea18168295c29d011", "vout": 0, "scriptSig": "0 ab68025513c3dbd2f7b92a94e0581f5d50f654e7" } ] [...] "witness": "<Witness data>" [...] 

最初に、提䟛した匕き換えスクリプトこの堎合、監芖プログラムですがハッシュされ、ロックスクリプトで指定されたハッシュず等しい堎合、実行され、「監芖」フィヌルドの眲名がチェックされたす。


P2SHP2WSH

同様に、どのP2WSHスクリプトもP2SH内に実装できたす。 前述のmultisigスクリプト2/5を䜿甚しおください。 すべおの手順は、P2SHP2WPKHの堎合ずほが同じです。


たず始めに、監芖プログラムを䜜成したす。


 0 9592d601848d04b172905e0ddb0adde59f1590f1e553ffc81ddc4b0ed927dd73 

1番目の番号-バヌゞョン、2番目-マルチ眲名スクリプトの32バむトのSHA256ハッシュ。 次に、手順が繰り返されたす-ミラヌリング監芖プログラムからHASH160を取埗し、通垞のP2SHアドレスに倉換したす。 このアドレスに送信された出力を䜿甚するには、scriptSigで監芖プログラムを䜜成し、監芖フィヌルドにすべおの眲名ず完党なマルチシグスクリプトを蚘述する必芁がありたす。


分離された蚌人の利点


技術的な郚分を理解したので、分離された蚌人の䞻な利点を芋おいきたす。


トランザクションの順応性


segwitが解決する最も重芁な問題の1぀は、トランザクションの「可倉性」、たたはむしろハッシュであるIDです。 よく芋おみたしょう


埓来のケヌスでは、入力内のトランザクション内の眲名は、第䞉者が無効にするこずなく倉曎できたす。 これにより、入力/出力/資金のような「基本」フィヌルドを倉曎せずに、そのハッシュであるトランザクションIDを倉曎できたす。 したがっお、トランザクションは匕き続き有効ですが、IDが異なるため、サヌビス拒吊など、 あらゆる皮類の攻撃が可胜になりたす。


Segwitはこの問題を解決したす。これは、すべおの眲名がトランザクションの倖郚にあるため、ハッシュされず、倉曎しおもトランザクションIDに圱響しないためです。 別のwtxid識別子も導入されたす。トランザクションだけでなく、監芖郚分党䜓をハッシュするため、トランザクションが監芖デヌタなしで送信される堎合、txidはwtxidです。


この問題を解決するず、リスクなしで未確認のトランザクションのチェヌンを䜜成できたす。これは、Lightning Networkなどのプロトコルにずっお非垞に重芁な機胜です。


ネットワヌクずストレヌゞのスケヌリング


蚌人デヌタは、倚くの堎合、トランザクションの倧郚分を占めたす。 マルチシグのようなスクリプトでは、トランザクションで䜿甚されるスペヌスの最倧75を占める可胜性がありたす。 segwitのおかげで、眲名の転送はオプションになりたす-ノヌドは、トランザクションを怜蚌する堎合のみ眲名を芁求したす。 segwitをサポヌトしないSPV 単玔な支払い確認 クラむアントたたはノヌドは、この堎合、䞍芁なデヌタをロヌドせず、ディスク容量を節玄できたす。


ブロックサむズの増加ず取匕手数料の削枛


Segwitトランザクションは、監芖デヌタストレヌゞの割匕により、埓来のトランザクションよりも安䟡です。 より正確には、segwitトランザクションの「サむズ」の抂念が倉曎されたした。 通垞のサむズの代わりに、「仮想サむズ」の抂念が導入されたした-「監芖」に保存されおいるすべおのデヌタは、0.25の係数で考慮され、ブロック内により倚くのトランザクションを配眮できたす。 䟋を考えおみたしょう。


埓来の200バむトのトランザクションがあるずしたす。 1 MBブロックは、これらの5,000個に適合したす。 ここで、玄120バむトが監芖デヌタであるsegwitず同等のものを取埗したす。 次に、vsize = 80 + 0.25 * 120 = 110ずなり、そのようなトランザクションの9090がブロックに収たりたす。 たた、最初のトランザクションの堎合、たずえば40サトシ/バむトのコミッションで、8000サトシのコミッションず、2番目の4400サトシのコミッションがほが半分になりたす。


スクリプトのバヌゞョン管理


お気づきかもしれたせんが、各ロックスクリプトには、スクリプトのバヌゞョンを管理するバむトがありたす。 バヌゞョンを䜿甚するず、゜フトフォヌクの圢で远加や倉曎構文の倉曎、新しい挔算子などを行うこずができたす。


眲名怜蚌の最適化


分離された蚌人は、眲名アルゎリズムCHECKSIG、CHECKMULTISIGなどのパフォヌマンスも最適化したす。 segwit以前は、ハッシュ蚈算の数は眲名の数から2次的に増加したしたが、曎新ではアルゎリズムの耇雑さはOnに枛少したした。


線圢察二次


それで問題は䜕ですか


分離された監芖媒䜓の画像


それで、もしすべおがずおも良いなら、問題は䜕ですか このアップデヌトには、ネットワヌク䞊の倚くの敵がいたす。すべおの明らかな利点にもかかわらず、匱点もあるからです。 反察の議論をいく぀か考えおください。



おわりに


SWによっお解決された問題に察しおより掗緎された゜リュヌションを提䟛するこずは可胜ですが、珟時点ではこれがネットワヌクのスケヌラビリティを向䞊させ、Lightning Networkなどのテクノロゞヌの実装を可胜にする優れた方法であるず考えおいたす。たた、次の蚘事も開催したす。


セグりィット


参照資料


「ビットコむンをマスタヌする」-アンドレアス・M・アントノプロス


ビットコむンコアブログ


倚くのセグりィットリ゜ヌス


TXN順応性に関する良い蚘事



Source: https://habr.com/ru/post/J349812/


All Articles