ブロックチェーンセキュリティレポート
標準トランザクションと非標準トランザクション

ブロックチェーンのスクリプトには、標準トランザクションと非標準トランザクションがあります。これらは、scriptSig、scriptPubKey、またはその組み合わせの形で評価されます。

そして、メインネットでは、標準トランザクションのみが受け入れられます。厳密に言えば、標準トランザクションのみがメモリプールに受け入れられます。これは、一度ブロックに含まれるとある程度の寛容性があり、非標準トランザクションのEvalScriptがtrueを返す場合、そのブロックをノードが受け入れることを意味します。メモリプールは、トランザクションがマイニング(またはステーキング)を通じてブロックに含まれるまで待機するエリアであり、P2Pで共有されます。

コインを受け取るとき、最初に未確認トランザクションとして通知を受け取りますよね?これは、送信されたトランザクションを含むメモリプールの内容がP2Pを通じて同期されるためです。任意のノードの第三者のマイナーがこの情報を集約し、ブロックに含めるよう報告し、その後で初めてブロックに含まれます。

したがって、メモリプールは共有されており、もしあなたが自分でマイニング(またはステーキング)を行うと、あなたのトランザクションはあなた自身によって承認され、有効となります。

非標準トランザクションについては、EvalScriptが最初に常にtrueを返す必要があります。これは、EvalScriptがtrueを返さない場合、そのトランザクションはメモリプールや他の場所に受け入れられないためです。

標準トランザクションと非標準トランザクションの区別は、各トランザクションを処理するために使用されるscriptPubKeyの形状によって決まります。例えば、P2PKHがありますよね?まず、アドレスとscriptPubKeyが分析され、それからそのスクリプトをアンロックするために必要なscriptSigが決定されます。この過程で、標準トランザクションと非標準トランザクションの区別が確立されます。

しかし、この制限には多くのスクリプトが利用できなくなるという欠点があります。これは、P2PKHなどの事前に定義された仕様のみがメモリプールに受け入れられるため、他の非標準トランザクションはブロックに含まれないことを意味します。

それにもかかわらず、非標準トランザクションがブロックに含まれる場合、各ノードはブロック受け入れプロセス中にブロック内の非標準スクリプトを検証する必要があります。したがって、非標準スクリプトが無制限にブロックに含まれると、同期中の負荷が大幅に増加する可能性があります。

このオペコードは、要求される鍵の数が可変であり、すべての指定された鍵を必ずしも必要としません。つまり、標準として扱われる3-3マルチシグまでの間では、可変長の構造を取り、1-3マルチシグおよび2-3マルチシグについては、それぞれの差分である2つと1つを自由に扱えます。この自由な部分はEvalScriptによって評価されないため、この部分に新しい機能を組み込む仕組みがありました。