あまりにも多くのUTXOでトランザクションに署名すると、デバイスの障害が発生する可能性があることはわかっていますが、この一般的な説明には、署名中にハードウェアウォレットが失敗する原因となるUTXOが一定数あるのか、という疑問が残ります。特定のUTXOは他のUTXOよりも多くの問題を引き起こす可能性がありますか?
このような質問に対する答えを調べているうちに、ハードウェアウォレットがトランザクションに署名するために必要な時間と労力は、送信されるUTXOの数や受信アドレスの数だけに依存しているわけではないことを発見しました。 また、各UTXOが発生した以前のトランザクションを取り巻く同様の詳細にも依存しており、私はこの現象を「署名質量」と呼んでいます。 この概念に言及している他の出版物を私は知りません。
言い換えれば、署名質量が大きいUTXO(以下で詳しく説明します)は、他のUTXOよりも署名が難しくなる可能性があります。 2つのUTXOがブロックチェーン上の同じ量のデータを使用する場合でも、ハードウェアウォレットを使用して署名するには、かなり多くの処理が必要になる可能性があります。
この事実は、 アドレスタイプ やマルチシグクォーラムにとどまりません。2-of-3マルチシグアドレスの1つのUTXOは、同じアドレス(または同等のアドレス、ビットコインの金額と宛先アドレスがまったく同じであっても)の別のUTXOよりも署名にかなりの労力を要する可能性があります。
似たような2つのUTXOが署名量が劇的に異なる理由を理解するには、ハードウェアウォレットがインターネットに接続せずに投入量を確認するために使用する回りくどい方法と、ウォレットにビットコインを受け取るさまざまな方法の間でトランザクションの複雑さがどのように異なるかを理解する必要があります。
ビットコイン取引では、インプットの量を確認することが重要です。そうしないと、大量のビットコインが誤ってマイナーに支払われる可能性があります。 なぜでしょうか。 マイナーが取る手数料は トランザクション_in明示的に 記載されておらず、インプットの値からアウトプットの値を差し引くことによって_implicitly計算されるためです。 そのため、2つの数字に大きな差があると、かかる手数料も大きくなります。
例えば、合計0.8BTCのUTXOを持っていて、それを使って0.3BTCをどこかに送った場合、残りの~0.5BTCをお釣りとして自分に送り返さなかった場合、ブロックのマイナーは0.5BTCを稼いだ手数料の一部として請求することができます。
ご安心ください! 現代的で尊敬されているすべてのビットコインツールには自動安全メカニズムが含まれているため、この間違いを犯すことは(不可能ではないにしても)非常に困難です。 このプロセスは、ブロックチェーンを検索してインプットの量を確認し、それらの合計を選択したアウトプットの合計と比較して、手数料が妥当かどうかを判断するのと同じくらい簡単です。
しかし、もちろん、ハードウェアウォレットはインターネットとは独立して機能するように設計されており、これはエアギャップデバイスの場合に特に顕著です。 インターネットやノード接続がなければ、ブロックチェーンを観察することはできません。 したがって、ほとんどのハードウェアウォレットは、インプット量を確認するために別の迂回方法を使用する必要があります。 基本的に、デバイスは署名するトランザクションを記述する情報をインポートするだけでなく、各入力がどこから来たかの履歴もインポートする必要があります。
言い換えれば、UTXOが移動されるたびに、デバイスは直前にトランザクションの詳細を再確認する必要があり、それがそのUTXOの作成につながったのです。 そのトランザクションが複雑な場合、より多くのデータをインポートする必要があり、PSBTファイルのサイズなどに反映されます。 トランザクションの複雑さを見てみましょう。
ほとんどの人は、取引所から、マイニングプールから、またはピアツーピア(P2P)トランザクションで他の人から直接、3つの方法のいずれかでビットコインをウォレットに受け取ります。 ピアツーピアトランザクションは通常、非常に低い複雑さしかなく、結果として得られるUTXOの署名量は比較的小さくなります。
しかし、取引所やマイニングプールは、資金をバッチで分配する傾向があり、同じ取引内で一度に多くの人にビットコインを送金します。 これらのトランザクションはより複雑になり、結果として得られるUTXOはより大きな署名量を持ちます。
アメリカで人気のあるいくつかのマイニングプールと取引所の分布傾向を調査したところ、以下のチャートに調査結果が示されています。 アウトプットの数は、各ディストリビューション内で通常ビットコインを送った人の数を示しています。 数値が大きいほど、トランザクションが複雑になり、受信者の署名の負担が大きくなります。
これらの数値は執筆時点での概算であり、各プールまたは取引所が将来どのように分配を行うかに応じて変更される可能性があります。
マイニングプールの分布は一般的に取引所よりも大きく、F2Poolなどの特定のマイニングプールは非常に大きな分布を使用していることに注意してください。 したがって、F2Poolの支払いから直接UTXOを受け取った場合、そのUTXOは特定のハードウェアウォレットの署名に問題が生じる可能性が高くなります。
2017年、分離されたwitnessソフトフォークが発生し、SegWitトランザクションの署名プロセスが変更されました。 ユーザーが署名でコミットするデータに入力金額を含めるための要件が導入されました。 その結果、ユーザーやデバイスを騙して、不条理なほど高い手数料で不注意に取引に署名させようとする試みは防止されると信じられていました。 ほとんどのハードウェアウォレットメーカーはそれに応じて行動し、入力金額の安全性チェックを削除し、SegWitトランザクションの署名プロセスを簡素化しました。
しかし、2020年半ばに BIP 143 に 脆弱性 が発見され、多くのハードウェアウォレットメーカーがSegWit取引の入力金額の安全性チェックを再導入するようになりました。本稿執筆時点では、入力金額の安全性チェックは、ハードウェアウォレットの署名中の通常のプロセスのままです。 コミュニティでは、手数料を暗黙的ではなく各トランザクション内で明示するなど、入力金額の安全性チェックの必要性をより効果的に排除する可能性のある将来の変更について議論されています。
署名量のばらつきは、セルフカストディのコールドストレージウォレットからビットコインを引き出そうとしているときに、そもそもビットコインをどのように入手したかに何らかの関連性があることを意味します。 ビットコインの取得に使用する方法によって、送金を承認する際に違いが生じる可能性があります。
あなたが管理している別のウォレットから移動されたUTXOを保有している場合、またはピアツーピア取引から受け取った場合、その取引は比較的単純なものであった可能性があります。 UTXOは署名量が小さくなり、将来の支出時に署名しやすくなります。 一方、マイニングプールから直接UTXOを受け取った場合、特に(前のチャートに示したように)非常に大きなディストリビューションを行うマイニングプールからUTXOを受け取った場合、UTXOの署名が難しくなることが予想されます。
幸いなことに、大量のUTXOを同時に動かそうとしているためにハードウェアウォレットが署名に失敗したとしても、ビットコインが永久にスタックしているわけではありません。 迅速で簡単な解決策は、トランザクションをいくつかのトランザクションに分割し、ビットコインをチャンクで移動させることです。 各チャンクにはデータのごく一部しか含まれず、デバイスが署名を正常に提供する可能性が高くなります。
もう一つの戦略は、保有しているUTXOの数とそれらのUTXOの署名量を制御することで、そもそも署名の失敗を防ぐことです。 マイニングプールや取引所が資金を分配する方法を変更することはできませんが、UTXOの署名量は、それ以前の取引履歴ではなく、直前の取引によって決定されることを覚えておくことが重要です。 つまり、マイニングプールからUTXOを受け取り、ピアツーピア取引を模倣して、管理する別のウォレットやアドレスにすぐに転送することができます。 新しいアドレスでのUTXOは、大きな署名量ではなく、小さな署名量になります。
署名量は、ハードウェアウォレットがトランザクションに署名するために必要な時間と労力にのみ影響し、支払うネットワーク料金には影響しないことを強調することが重要です。 これは、署名量は署名プロセス中にのみ関連し、トランザクションがブロックチェーン上のより多くのデータを占める原因にはならないためです。
つまり、F2Poolなどのマイニングプールからビットコインを受け取った場合、必ずしもより多くの取引手数料を支払う必要はなく、ディストリビューションに使用するアウトプットが少ないサービスを選択することで取引手数料が削減されることもありません。
あまりにも多くのUTXOでトランザクションに署名すると、デバイスの障害が発生する可能性があることはわかっていますが、この一般的な説明には、署名中にハードウェアウォレットが失敗する原因となるUTXOが一定数あるのか、という疑問が残ります。特定のUTXOは他のUTXOよりも多くの問題を引き起こす可能性がありますか?
このような質問に対する答えを調べているうちに、ハードウェアウォレットがトランザクションに署名するために必要な時間と労力は、送信されるUTXOの数や受信アドレスの数だけに依存しているわけではないことを発見しました。 また、各UTXOが発生した以前のトランザクションを取り巻く同様の詳細にも依存しており、私はこの現象を「署名質量」と呼んでいます。 この概念に言及している他の出版物を私は知りません。
言い換えれば、署名質量が大きいUTXO(以下で詳しく説明します)は、他のUTXOよりも署名が難しくなる可能性があります。 2つのUTXOがブロックチェーン上の同じ量のデータを使用する場合でも、ハードウェアウォレットを使用して署名するには、かなり多くの処理が必要になる可能性があります。
この事実は、 アドレスタイプ やマルチシグクォーラムにとどまりません。2-of-3マルチシグアドレスの1つのUTXOは、同じアドレス(または同等のアドレス、ビットコインの金額と宛先アドレスがまったく同じであっても)の別のUTXOよりも署名にかなりの労力を要する可能性があります。
似たような2つのUTXOが署名量が劇的に異なる理由を理解するには、ハードウェアウォレットがインターネットに接続せずに投入量を確認するために使用する回りくどい方法と、ウォレットにビットコインを受け取るさまざまな方法の間でトランザクションの複雑さがどのように異なるかを理解する必要があります。
ビットコイン取引では、インプットの量を確認することが重要です。そうしないと、大量のビットコインが誤ってマイナーに支払われる可能性があります。 なぜでしょうか。 マイナーが取る手数料は トランザクション_in明示的に 記載されておらず、インプットの値からアウトプットの値を差し引くことによって_implicitly計算されるためです。 そのため、2つの数字に大きな差があると、かかる手数料も大きくなります。
例えば、合計0.8BTCのUTXOを持っていて、それを使って0.3BTCをどこかに送った場合、残りの~0.5BTCをお釣りとして自分に送り返さなかった場合、ブロックのマイナーは0.5BTCを稼いだ手数料の一部として請求することができます。
ご安心ください! 現代的で尊敬されているすべてのビットコインツールには自動安全メカニズムが含まれているため、この間違いを犯すことは(不可能ではないにしても)非常に困難です。 このプロセスは、ブロックチェーンを検索してインプットの量を確認し、それらの合計を選択したアウトプットの合計と比較して、手数料が妥当かどうかを判断するのと同じくらい簡単です。
しかし、もちろん、ハードウェアウォレットはインターネットとは独立して機能するように設計されており、これはエアギャップデバイスの場合に特に顕著です。 インターネットやノード接続がなければ、ブロックチェーンを観察することはできません。 したがって、ほとんどのハードウェアウォレットは、インプット量を確認するために別の迂回方法を使用する必要があります。 基本的に、デバイスは署名するトランザクションを記述する情報をインポートするだけでなく、各入力がどこから来たかの履歴もインポートする必要があります。
言い換えれば、UTXOが移動されるたびに、デバイスは直前にトランザクションの詳細を再確認する必要があり、それがそのUTXOの作成につながったのです。 そのトランザクションが複雑な場合、より多くのデータをインポートする必要があり、PSBTファイルのサイズなどに反映されます。 トランザクションの複雑さを見てみましょう。
ほとんどの人は、取引所から、マイニングプールから、またはピアツーピア(P2P)トランザクションで他の人から直接、3つの方法のいずれかでビットコインをウォレットに受け取ります。 ピアツーピアトランザクションは通常、非常に低い複雑さしかなく、結果として得られるUTXOの署名量は比較的小さくなります。
しかし、取引所やマイニングプールは、資金をバッチで分配する傾向があり、同じ取引内で一度に多くの人にビットコインを送金します。 これらのトランザクションはより複雑になり、結果として得られるUTXOはより大きな署名量を持ちます。
アメリカで人気のあるいくつかのマイニングプールと取引所の分布傾向を調査したところ、以下のチャートに調査結果が示されています。 アウトプットの数は、各ディストリビューション内で通常ビットコインを送った人の数を示しています。 数値が大きいほど、トランザクションが複雑になり、受信者の署名の負担が大きくなります。
これらの数値は執筆時点での概算であり、各プールまたは取引所が将来どのように分配を行うかに応じて変更される可能性があります。
マイニングプールの分布は一般的に取引所よりも大きく、F2Poolなどの特定のマイニングプールは非常に大きな分布を使用していることに注意してください。 したがって、F2Poolの支払いから直接UTXOを受け取った場合、そのUTXOは特定のハードウェアウォレットの署名に問題が生じる可能性が高くなります。
2017年、分離されたwitnessソフトフォークが発生し、SegWitトランザクションの署名プロセスが変更されました。 ユーザーが署名でコミットするデータに入力金額を含めるための要件が導入されました。 その結果、ユーザーやデバイスを騙して、不条理なほど高い手数料で不注意に取引に署名させようとする試みは防止されると信じられていました。 ほとんどのハードウェアウォレットメーカーはそれに応じて行動し、入力金額の安全性チェックを削除し、SegWitトランザクションの署名プロセスを簡素化しました。
しかし、2020年半ばに BIP 143 に 脆弱性 が発見され、多くのハードウェアウォレットメーカーがSegWit取引の入力金額の安全性チェックを再導入するようになりました。本稿執筆時点では、入力金額の安全性チェックは、ハードウェアウォレットの署名中の通常のプロセスのままです。 コミュニティでは、手数料を暗黙的ではなく各トランザクション内で明示するなど、入力金額の安全性チェックの必要性をより効果的に排除する可能性のある将来の変更について議論されています。
署名量のばらつきは、セルフカストディのコールドストレージウォレットからビットコインを引き出そうとしているときに、そもそもビットコインをどのように入手したかに何らかの関連性があることを意味します。 ビットコインの取得に使用する方法によって、送金を承認する際に違いが生じる可能性があります。
あなたが管理している別のウォレットから移動されたUTXOを保有している場合、またはピアツーピア取引から受け取った場合、その取引は比較的単純なものであった可能性があります。 UTXOは署名量が小さくなり、将来の支出時に署名しやすくなります。 一方、マイニングプールから直接UTXOを受け取った場合、特に(前のチャートに示したように)非常に大きなディストリビューションを行うマイニングプールからUTXOを受け取った場合、UTXOの署名が難しくなることが予想されます。
幸いなことに、大量のUTXOを同時に動かそうとしているためにハードウェアウォレットが署名に失敗したとしても、ビットコインが永久にスタックしているわけではありません。 迅速で簡単な解決策は、トランザクションをいくつかのトランザクションに分割し、ビットコインをチャンクで移動させることです。 各チャンクにはデータのごく一部しか含まれず、デバイスが署名を正常に提供する可能性が高くなります。
もう一つの戦略は、保有しているUTXOの数とそれらのUTXOの署名量を制御することで、そもそも署名の失敗を防ぐことです。 マイニングプールや取引所が資金を分配する方法を変更することはできませんが、UTXOの署名量は、それ以前の取引履歴ではなく、直前の取引によって決定されることを覚えておくことが重要です。 つまり、マイニングプールからUTXOを受け取り、ピアツーピア取引を模倣して、管理する別のウォレットやアドレスにすぐに転送することができます。 新しいアドレスでのUTXOは、大きな署名量ではなく、小さな署名量になります。
署名量は、ハードウェアウォレットがトランザクションに署名するために必要な時間と労力にのみ影響し、支払うネットワーク料金には影響しないことを強調することが重要です。 これは、署名量は署名プロセス中にのみ関連し、トランザクションがブロックチェーン上のより多くのデータを占める原因にはならないためです。
つまり、F2Poolなどのマイニングプールからビットコインを受け取った場合、必ずしもより多くの取引手数料を支払う必要はなく、ディストリビューションに使用するアウトプットが少ないサービスを選択することで取引手数料が削減されることもありません。