原題: 「Web3 初心者シリーズ: なぜ私のビットコインには複数のアドレスがあるのか」 出典: ZAN チーム
著者のような初心者の友人は、初めて WEB3 ウォレットを使用したとき、喜んでビットコイン ウォレットを開いてアドレスをコピーする準備をしたものの、突然、自分が作成したウォレットに実際には複数の異なるアドレスがあることに気づいた人が多いかもしれません。それは、困惑した表情を浮かべながら、見慣れない交差点に向かって歩いているようなものです。
なぜアドレスが違うのでしょうか?これらのアドレスのうちどれを使用する必要がありますか?
OKX ウォレットの複数のビットコイン アドレス
これらのアドレスは何ですか?
ビットコインコミュニティはテクノロジーが常に進化しており、テクノロジーの発展によって新たなコンテンツが生み出されるコミュニティです。さまざまなアドレス形式は、新しいテクノロジーを適用した結果であると考えられます。次に、さまざまなアドレス形式の違いを調べます。
01 レガシーアドレス (P2PKH)
この形式は、2009 年にビットコインが初めて使用されたときに使用されたため、レガシー形式と呼ばれます。当時のビットコイン アドレスは公開鍵と秘密鍵のペアから作成されていたため、Payment Public Key Hash (P2PKH) アドレスとも呼ばれます。 。
現時点では、レガシータイプのアドレスはトランザクションでより多くのスペースを占有するため、トランザクション手数料が高くなる可能性があるようです。現在、このタイプのアドレスは、新しいアドレスと互換性のない古いウォレットを使用する場合にのみ使用されます。
Legacy アドレスには特徴があり、アドレスはすべて「1」で始まることがわかります。これは、アドレスを生成するときに、さまざまなシナリオ (例: testnet/mainnet) に従って生成された公開キーの前にプレフィックスが追加され、プレフィックスが追加された公開キーがハッシュによって計算されるため、最終的にアドレスは次のようになります。 「1」。
02 ネストされた SegWit アドレス (P2SH-P2WPKH)
従来のレガシー アドレスと比較して、P2SH アドレスは公開キーのハッシュではなく、償還スクリプト (償還スクリプト) のハッシュを使用します。平たく言えば、P2PKH は公開鍵のハッシュに支払いますが、P2SH は償還スクリプトに支払います。受信者が償還スクリプトの転送条件を満たした場合にのみ、内部の資金を使用できます。
支払いオブジェクトが公開鍵からスクリプトに変換されるため、柔軟性が大幅に拡張され、引き換えスクリプトの実行ロジックをカスタマイズできます。一般的なアプリケーションには、マルチシグネチャ トランザクションの実装が含まれます。
P2SH に基づいて、Segregated Witness テクノロジーが組み込まれている場合、このアドレスの形式は Segregated Witness 互換アドレス (Nested SegWit) になります。 Segregated Witness のアドレスを紹介するときに、Segregated Witness について詳しく知ることができます。 Segregated Witness テクノロジーの導入後は、取引量を削減できるため、取引手数料が削減されます。
P2SH アドレスが「3」で始まっていることがわかります。
03 分離された証人アドレス (ネイティブ SegWit) アドレス
このタイプのアドレスを導入する前に、その内部の主要なテクノロジーである Segregated Witness (SegWit) を導入する必要があります。名前が示すように、Segregated Witness は証人データ (証人) を分離し、個別に処理します。
03 分離された証人アドレス (ネイティブ SegWit) アドレス
このタイプのアドレスを導入する前に、その内部の主要なテクノロジーである Segregated Witness (SegWit) を導入する必要があります。名前が示すように、Segregated Witness は証人データ (証人) を分離し、個別に処理します。
そうすることの大きな利点は、取引情報のサイズが減り、それによって取引手数料が削減されることです。サイズの縮小によってもたらされるもう 1 つの利点は、ビットコインのブロック トランザクション サイズの上限が 1 MB から 4 MB に増加したことです。
Segregated Witness アドレスの特徴は、アドレスが「bc1」で始まることです。
04 タップルートアドレス (Taproot)
Taproot アドレスの利点は、複雑なトランザクション シナリオにおけるプライバシーと効率性です。ネイティブ SegWit と比較して、Schnorr アルゴリズムを使用して楕円曲線デジタル署名アルゴリズムを置き換えます。前者はバッチ トランザクション シナリオでより効率的であり、マルチ署名ウォレットのプライバシーを向上します。
メインルートアドレスは、一般に「bc1q」で始まるアドレスが特徴です。
どのようなアドレス形式を選択すればよいですか?
OKX、Unisat、その他のウォレットなどの現在の主流のウォレットは上記の 4 つのアドレスをサポートしているため、トランザクションコストを削減するには、ネイティブ SegWit および Taproot 形式のアドレスを使用する方が合理的です。
さらに、ビットコインの刻印などに興味がある場合は、これら 2 つのアドレスが最良の選択です。ほとんどのウォレットは、これら 2 つのアドレスの刻印に対して追加の処理を行っており、これにより、特別な UTXO がトランザクション中に誤って転送されるのを防ぐことができます。 。 「bc1」で始まるウォレットアドレスを探してください!
もちろん、アドレス形式が異なるウォレットでも資金取引は可能ですのでご安心ください。
ビットコインの残高やブロック情報を確認したい場合は、開発者向けに豊富な API を提供する ZAN のノード サービスをご利用ください。 API ドキュメントの詳細: https://docs.zan.top/reference/zan_getbalance-enhance
さらに詳しく - 主要テクノロジーの紹介
上記の紹介を終えて、誰もが多かれ少なかれウォレットについて予備知識を持っていますが、私はウォレット内のテクノロジーのいくつかを取得することに非常に興味があるので、内部の謎に満ちたテクノロジーを見てみましょう。
01Redeem Script 引き換えスクリプト
P2SH を導入したとき、これが償還スクリプト トランザクションのためのテクノロジーであることはわかっていました。そのため、償還スクリプトとは何であり、ビットコイン エコシステムにおけるその役割は何でしょうか。
引き換えスクリプトを紹介する前に、ビットコイントランザクションの基本構造を紹介する必要があります。
以下は典型的な P2PK タイプのトランザクションで、04ae で始まるアドレスから 15kD で始まるアドレスに 10 BTC を転送したいと考えています。 04ae アドレスを持つアカウントは、実際にこのアカウントを使用する権利がある (秘密キーを所有している) ことをチェーン上の他のアカウントに示す必要があり、その後、このトランザクションで自分の身元を証明するために署名 (ScriptSig) を提供する必要があります。
署名の取得に加えて、検証者は、UTXO に対応する前のトランザクションの出力スクリプトを見つける必要もあります。これら 2 つのスクリプトが結合されて引き換えスクリプトが形成されます。引き換えスクリプトの機能は、トランザクションの正当性を証明することです。
このトランザクションでは、署名と出力スクリプトが両方ともコンピューターの命令であることがわかります。 OP_PUSHBYTES は、データをスタックに PUSH することを意味します。まず、04ae が ScriptSig で自分の秘密鍵を使用してトランザクション全体に署名し、その署名がスタックにプッシュされます。次に、公開キーをスタックにプッシュします。 OP_CHECKSIG では、公開キーを使用して署名を復号化し、トランザクションに一貫性があるかどうかを比較します。それらが一貫している場合、ID は有効です。
この P2PK 方式に加えて、引き換えスクリプトは P2PKH や P2SH などのさまざまな認証方式を実装することもできます。
この P2PK 方式に加えて、引き換えスクリプトは P2PKH や P2SH などのさまざまな認証方式を実装することもできます。
02 隔離された証人 隔離された証人
上記の紹介から、新しいウォレット形式では現在、Segregated Witness テクノロジーが使用されていることがわかります。では、Witness とは何で、どのように分離されているのでしょうか?
ここでの Witness は、Bitcoin の基本構造におけるスクリプト署名 (scriptSig) 情報と考えることができ、Segregated Witness はそれを基本構造から抽出し、新しいデータ構造に置きます。
上の図からわかるように、トランザクションに必要なコンテンツはトランザクションのソース情報とトランザクションの出力情報だけです。黄色の部分 (トランザクションの合計サイズ) にはサイズ制限があるため、トランザクションのサイズが削減されます。署名を個別に送信すると、1 つのブロックでより多くのトランザクションに対応できるようになります。さらに、トランザクションの署名を計算する際、署名部分の内容は含まれないため、トランザクションの展性の問題を効果的に解決できます。
以下は P2TR トランザクションです。このトランザクションには追加の監視部分があることがわかります。その機能は、トランザクションの正当性を検証することです。 ScriptSig の代わりに Witness を使用した後も、正当性を検証する方法は変わりません。つまり、公開鍵を使用して Witness の署名を復号し、トランザクションの内容が一貫しているかどうかを検証します。ノードがトランザクションの合法性を検証する必要がある場合にのみ、証人情報を要求します。
要約すると、Segregated Witness はトランザクション署名部分を元のトランザクションの残りの部分から分離するため、単一トランザクションのサイズが削減され、ブロック全体の容量が増加します。また、署名部分の内容はトランザクションのハッシュ値の計算に含まれないため、トランザクションの展性の問題を効果的に解決できます。
全てのコメント