用語集 / 開発者向けリファレンス
PP script
- PP scriptとは?
- PP scriptは、BIP70の出力において必須だったフィールドで、支払者が再現しなければならなかった生のロックスクリプト、すなわち最終的にトランザクション出力に含まれるのと同じバイト列を保持していました。
BIP-70で規定されています。
BIP70がネットワーク上に送ったもののうち、ブロックチェーンに残ったのはスクリプトだけです。証明書、メモ、有効期限はすべてオフチェーンにとどまり、一方でロックスクリプトはそのままトランザクションに入り、現在も未使用のアウトプットの集合の中に存在しています。コインを誰が使えるかを決めるのは、そのバイト列であり、リクエストの中の他の何ものでもありません。
仕組み
状態:歴史的。スクリプトはOutputメッセージの2番目のフィールドであり、金額が既定でゼロだったため、マーチャントが省略できなかった唯一の部分でした。Bitcoin Coreは0.20.0でその解析をすべて停止し、2020年6月3日にリリースしました。
アドレスの代わりにスクリプトを送るのは意図的な選択でした。アドレスは人間向けの転送形式です。base58checkまたはbech32で、プレフィックス、チェックサム、そして書き留められたり読み上げられたりしても耐えられるように選ばれた文字集合を持ちます。アドレスを受け取ったウォレットは、何かを構築する前にそれをスクリプトへデコードしなければなりません。BIP70はその往復を省き、ネットワークが実際に使う形式で宛先を指定しました。
標準的な形式には固定のサイズがあり、それを知っていればブロックエクスプローラーはずっと読みやすくなります:
- Pay to public key hash、25バイト:複製、ハッシュ、20バイトをプッシュ、一致を検証、署名を検証。
- Pay to script hash、23バイト:ハッシュ、20バイトをプッシュ、一致を検証。
- 単一鍵のsegwit、22バイト:バージョン0の1バイトと20バイトのハッシュ。
- スクリプトハッシュのsegwit、34バイト:バージョン0と32バイトのハッシュ。
- Taproot、34バイト:バージョン1と32バイトの鍵。
この形式が犠牲にしたのはエラー検出です。bech32は最大89文字のアドレスで最大4文字が置換された場合でも検出することを保証し、base58checkは4バイトのハッシュで破損を検出します。生のスクリプトのバイト列はどちらも持ちません。アドレスのビットが1つ反転すれば、ウォレットが拒否する文字列になります。スクリプトのビットが1つ反転すれば、誰にも使えない有効なアウトプットになります。
目にする場面
スクリプトの種類があるため、同じ額の2回の出金でも手数料が異なることがあります。
アドレス形式を選ばせる取引所は、あなたの代わりにスクリプトを選んでいます。単一鍵のsegwitアウトプットはレガシー形式の25バイトに対して22バイトを占め、これはわずかですが、後で使う場合はそうではありません。そのインプットはおよそ68仮想バイトかかり、レガシーのものはおよそ148かかるので、今日受け取るコインはその寿命の残りの間の手数料の一部を決めます。20 sat/vBでは、その差は最終的に使うインプット1つあたりおよそ1,600サトシです。
エクスプローラーは表示する各アウトプットの種類を示すので、実際にどの種類のアウトプットに支払われたかを確認できます。新しいソフトウェアは宛先をアウトプットディスクリプタで記述します。これは1つずつスクリプトを扱うのではなく、スクリプトのファミリー全体とその導出をカバーする簡潔なテキスト形式です。
このすべてから保つ価値のある習慣は単純です。独自の画面を持つデバイスで宛先を確認してください。クリップボードのアドレスを入れ替えるマルウェアはよくあることで、実際の受取人を表示するハードウェアウォレットがそれを捕まえる確認だからです。
PP script vs pubkey script
BIP70のフィールドは容器であり、pubkey scriptはそのもの自体です。pubkey scriptはscriptPubKeyまたはロックスクリプトとも呼ばれ、これまでに作成されたすべてのトランザクションアウトプットに存在し、使用する者が満たさなければならない条件を述べます。PP scriptは、誰も実行しないプロトコルの中で、そのコピーが通った特定の1つの場所でした。フィールド名はBIP70のドキュメントを読むときだけ使い、それ以外では一般的な名称を使ってください。