本文へスキップ
buybitcoinsmart

用語集 / トランザクションと手数料

TRUCトランザクション

別名はTRUCトランザクション、v3トランザクション、Topologically restricted until confirmationです。

TRUCトランザクションとは?
TRUCトランザクションは、バージョン3を宣言し、未承認の親を最大1つ、未承認の子を最大1つまでしか受け入れないことで、未承認の支出を連鎖させる自由と引き換えに、信頼できる手数料の引き上げを実現するものです。

BIP-431で規定されています。

TRUCは、送信者がトランザクションのバージョンを3に設定することで自発的に選択するリレーポリシーであり、コンセンサスルールではありません。Bitcoin Core 28.0がBIP 431に基づいてこれを標準化しましたが、同BIPはトランザクションを10,000仮想バイト、その子トランザクションを1,000仮想バイトに制限しています。読者が自分で設定することはありません。BIP 431はこのポリシーをライトニングなどのプロトコルに向けたものであり、これらのコミットメントトランザクションは事前署名され、ブロードキャスト時に手数料が引き上げられます。

仕組み

TRUCは通常のトランザクションに追加される6つのルールであり、送信者はバージョンフィールドを3に設定することで6つすべてを一度に有効にします。

ルール1は、従来のBIP125方式のシグナルがあるかどうかにかかわらずトランザクションを置換可能にします。この区別は、同じリリースが完全なreplace-by-feeをデフォルトにしたことでいずれにせよ意味を失いました。ルール2は選択を固定します。TRUCトランザクションの未承認の祖先はすべてTRUCでなければならず、未承認のTRUCトランザクションの子孫もすべてTRUCでなければならないため、通常の子トランザクションを接続して制限をすり抜けることはできません。ただし、承認済みのコインはどちらの方向でも除外されます。ルール3はこの名前の由来となった制限で、未承認の祖先1件と未承認の子孫1件に限られ、CPFP carve outはありません。ルール4はトランザクションを10,000仮想バイトに制限します。これはその他すべてに対する標準性の上限100,000仮想バイトと対比されます。ルール5は子トランザクションを1,000仮想バイトに制限します。taprootのインプットを使用しても、15個のインプットと2個のアウトプットの余地が残ります。ルール6は、周囲のパッケージが十分に支払う限り、トランザクションがノードの最小リレー手数料を下回ること、ゼロであっても許容します。

このすべての理由はピニングです。他人の不要なトランザクションによって自分のトランザクションの手数料引き上げが不可能になることです。置換ルールは、置換が置き換えるすべてのものより高い絶対手数料を支払うことを要求し、100件を超えるトランザクションを追い出す置換は一律に拒否します。BIP 431は、これがどれほど悪用されやすいかを数値で示しています。自分のトランザクション5件を置換したいときに、取引相手がそれぞれに21件の子孫を接続している場合、自分の置換は、いくら支払っても件数だけで拒否されます。未承認のトランザクションに安価な子孫を接続できる者は、そのトランザクションの手数料引き上げの価格を設定していることになります。

子トランザクションの1,000仮想バイトの制限は、これへの直接の答えです。デフォルトの子孫制限の下では、手数料を引き上げる子トランザクション自体が100,000仮想バイトになり得ます。1仮想バイトあたり1サトシであれば、置換が正当に競争する前に100,000サトシ以上を負担しなければなりません。子トランザクションを1,000仮想バイトに制限することで、上限は100分の1になります。

2つのメカニズムがルールに付随します。兄弟排除では、より多く支払う2番目の子トランザクションに遭遇したノードが、新参者を拒否する代わりに置換ルールに従って1番目を追い出します。子トランザクションは1つしか存在できないため、どちらを捨てるかを推測する必要はありません。Bitcoin Core 28.0がサイズ2の接続されたグループに対して有効にしたパッケージreplace-by-feeは、その形が保証されているためTRUCトランザクションで機能します。

ビットコインを購入するときにこれが重要な理由

TRUCが一般のビットコイン保有者に届くのは1つの瞬間です。ライトニングチャネルをオンチェーンで閉じなければならず、トランザクションが署名された後に手数料を引き上げなければならないときです。

購入は影響が出る場面ではありません。当サイトの41件のウォレットレビューのうち、実際のライトニングノードをスマートフォンに置くものが、このポリシーが些事でなくなる場面です。ACINQのPhoenixは当サイトで4.0と評価され、12語のシードフレーズで保護された自己完結型ノードを実行します。ACINQが文書化している緊急時の経路は、強制クローズを行い、約720ブロック、およそ5日待って、Electrumなどのツールでオンチェーンで資金を回復することです。このクローズはコミットメントトランザクションをブロードキャストしますが、BIP 431はこれを、ピニングを避けるためにCPFP carve outに依存するものとして挙げています。タイムアウトが切れる前にブロックに入れられないコミットメントトランザクションは、単にそこに留まるのではありません。保護していた資金は相手側が請求できるようになります。

カストディはエクスポージャーを移し、それが当サイトの記録の違いです。4.6と評価されたStrikeはライトニング経由での出金を可能にし、送金に独自の手数料を加えませんが、アプリ内にある間の残高はカストディ型であるため、チャネルとそのクローズはStrikeに属します。3.8と評価されたMuunはオンチェーンとライトニングを1つの残高として表示し、submarine swapで両者の間を移動します。実際に1つのチャネルのより多くの部分を自分で保有するほど、信頼できる手数料引き上げが自分の問題となり、TRUCは、TRUCを実行するノードの集合の中で信頼できる手数料引き上げを提供するために書かれたポリシーです。

Phoenixの強制クローズ、ピニングされた場合とされない場合

Phoenixの強制クローズは、TRUCが役割を果たすのを見る最も明確な場面です。ブロードキャストされるトランザクションは、誰も手数料市場がどうなるか知るずっと前に署名されているからです。

まず古い構成を考えます。自分のコミットメントはバージョン3を宣言しない通常のトランザクションで、両方の支払いを担う子トランザクションとともにブロードキャストされます。取引相手は2番目のアンカーアウトプットを保有しており、これはどちらの側も手数料を引き上げられるように存在します。相手はそれを使って、100,000仮想バイトで1仮想バイトあたり1サトシを支払う自分の子トランザクションを接続します。相手が行ったことのうち無効なものはありません。CPFP carve outにより子孫制限を超えて追加の子トランザクションを1つ通せましたが、置換ルールは気にしません。相手の子トランザクションを追い出すには、それがすでに負担している100,000サトシの手数料を支払ってからでなければ自分の手数料は意味を持ちません。carve outが追加で認めたのは子トランザクション1つだけなので、第三者がトランザクションを共有した時点で失敗しました。自分のクローズは、作成者にほとんど費用がかからなかった不要なトランザクションによってピニングされます。

次に両方のトランザクションをバージョン3に設定します。コミットメントはまったく支払わなくても許容されます。ルール6は、パッケージが基準を満たす限りリレーの下限を下回っても受け入れるからです。これは数か月前に署名されたトランザクションに必要なことです。子トランザクションは1つしか存在できず、1,000仮想バイトを超えられないため、誰かが課せる最悪の請求額は以前の100分の1です。取引相手が先に自分の子トランザクションを入れても、自分のものがより多く支払って追い出します。そしてペアは1つの単位として伝わります。Bitcoin Core 28.0が同じリリースで親1件と子1件のパッケージリレーを搭載し、TRUCの親は最小リレー手数料率を下回っても許容されるからです。

正直な注意点は採用状況です。BIP 431は、ピニング対策の利点は個々のノードのmempoolに限られると述べており、自分のトランザクションがどれだけ安全かは、ネットワークのどれだけがこのポリシーを実行しているかに依存します。バージョン3はBitcoin Core 28.0より前は標準外だったため、古いリリースのノードはまったくリレーしません。またリリースノートは、この新しいパッケージリレーは限定的であり、敵対的な条件下ではまだ信頼できないと述べています。

TRUCトランザクションvsトランザクションバージョン番号

トランザクションバージョン番号はすべてのビットコイントランザクションが持つフィールドであり、TRUCはそのフィールドの1つの値が今もたらすルールの束です。

バージョンを3に設定することが送信者のオプトイン方法ですが、ルールはフィールドにあるのではありません。それはフラグであり、重要なことはすべてノードのポリシーコードで起こります。だからこそアップグレードされたノードは古いノードが拒否するトランザクションをリレーします。コンセンサスはどちらの方向にも見解を示しませんでした。BIP 431は、バージョン3が以前は標準外であり、以前の使用法との既知の競合はなかったと記録しています。したがってBitcoin Core 28.0で変わったのは有効性ではなくリレー可能性でした。

TRUCトランザクションvs cluster mempool

cluster mempoolはノードのmempool内のすべてのトランザクションにトポロジーの制限を適用しますが、TRUCはそれを要求するトランザクションにのみ、はるかに厳しい制限を適用します。

両者は競合するものではなく関連する取り組みであり、BIP 431はそれを直接述べています。cluster mempoolはオプトインのものだけでなくすべてのトランザクションにクラスタサイズを制限し、TRUCの制限よりはるかに制約が少ないです。またBIP 431が挙げる隙間も残します。cluster mempoolは絶対手数料や競合の数を通じたピニングを解決せず、古いライトニングチャネル設計が依存していたCPFP carve outと互換性がありません。TRUC、兄弟排除、パッケージ置換は、それに依存していたプロトコルに提供される道です。

混同しやすい用語

よくある質問

TRUCトランザクションを利用するために何かする必要はありますか?

いいえ、ウォレットが判断します。バージョンフィールドはソフトウェアが設定するものであり、BIP 431はトランザクションにあらかじめ署名し、ブロードキャスト時に手数料を加えるコントラクトプロトコル、とりわけライトニングネットワークのために書かれているため、取引所やハードウェアウォレットからの通常のオンチェーン決済はオプトインしません。

バージョン3のトランザクションはTRUCトランザクションと同じものですか?

はい、同じものに対する2つの名称です。バージョンフィールドを3に設定することが、BIP 431がTRUCのルールへのオプトインとして定義する唯一の方法であり、そのためこの主題に関する古い文献ではv3トランザクションポリシーと呼ばれています。

TRUCトランザクションは本当に手数料をまったく支払わなくてもよいのですか?

はい、ただしパッケージ内に限ります。BIP 431では、両方の手数料を賄う子トランザクションと合わせて評価されることを条件に、TRUCトランザクションがノードの最小リレー手数料を下回ることが認められており、その理由からBitcoin Core 28.0は最小リレー手数料率を下回るTRUCの親トランザクションを許可しています。

次に読む

関連用語

トランザクションと手数料のその他の用語

このページを英語で読む