Change Address は、支払いのお釣りを受け取るためにウォレットが使うアドレスです。ビットコインは選んだ資金を丸ごと使います。支払額と手数料を引いた残りは、通常、自分が管理する新しい出力に入ります。お金は引き続き自分のものですが、別の出力に、多くの場合は新しいアドレスで記録されます。
アリスは以前 120 000 sat を受け取り、100 000 sat を支払おうとしています。sat はビットコインの最小単位です。この例では、資金は一つの UTXO、つまり以前のトランザクションの未使用の出力です。支払いではこれが入力となり、丸ごと使われます。手数料が 2 000 sat なら、受取人に 100 000 sat が渡り、残りの 18 000 sat はアリスのウォレットの新しい出力に入ります。大きな紙幣で払い、お釣りを受け取るのに似ていますが、二つの金額は一つのトランザクション内で分配されます。相手が後で返金するのを待つ必要はありません。お釣りのアドレスは通常ウォレットが自動で選びます。そのため、一人に払っただけでもエクスプローラーに二つの送金先アドレスが見えることがあります。承認後のお釣りは固有の出力識別子 outpoint を持つ新しい UTXO で、古い出力の使い残しではありません。outpoint は、トランザクションの識別子 txid と、その中の出力の位置を組み合わせたものです。次の支払いでは、ほかの自分の資金と同じように使えます。 [1]
scriptPubKey というスクリプトは、出力を使う際に満たす条件を定めます。送金の目的を説明するものではありません。ブロックに記録されるのは金額と scriptPubKey スクリプトであり、支払人、受取人、お釣りといったラベルではありません。ウォレットは派生の記録から自分のお釣りの出力を見分けますが、ブロックチェーンのエクスプローラーや分析者は用途を推測します。出力の順序や、二番目の出力がお釣りだという考え方は信頼できません。取引にはお釣りがない場合も、一つのお釣りの出力がある場合も、送信者が管理する複数の出力や複数の参加者の出力がある場合もあります。したがって change という呼び方は、出力とウォレットとの関係を示します。プロトコルに記録された独立の属性ではありません。 [1]
経験則による推定は、間接的な手がかりからの推測です。Payjoin や CoinJoin では複数の参加者が共同でトランザクションを作るため、単純な推測が外れることがあります。BIP は技術提案や標準の文書です。よく使われる経験則は、入力と同じ種類のスクリプトを持つ出力、端数のある金額、新しいアドレス、残額の計算に合う金額などをお釣りと推定します。通常の二出力の支払いでは、このような推測が当たり、後の支出を結び付けることもありますが、どの方法にも反例があります。BIP78 Payjoin は、入力には共通の所有者がいるという前提や、スクリプトの種類・切りのよい金額でお釣りを見分ける方法を意図的に崩します。CoinJoin、まとめ払い、自分のアドレス間の送金は、さらに曖昧さを加えます。推測には不確実さの程度と裏付けを示す必要があります。経験則だけでは、プロトコル上の証明にも法的な所有権の証明にもなりません。 [4] [14]
PSBT はトランザクション案と補足情報をまとめたもので、ウォレットと署名機器の間で受け渡せます。Multisig は複数の鍵を使う規則に従った承認を必要とします。PSBT の出力に含まれる BIP32 の鍵派生情報により、ハードウェアやオフラインの署名機器は、提案されたお釣りを確認できます。機器は対象の出力を自分で派生させ、それが同じウォレットの規則に合うかを確かめる必要があります。BIP174 は単一鍵と Multisig の確認方法を説明しています。複数署名の場合、出力に自分の鍵が一つ含まれているだけでは不十分です。取引を組み立てる悪意あるコーディネーターは、お釣りを自分の出力に差し替えたり、残額を過大な手数料に隠したりできます。そのため署名前に、受取人への出力、手数料の合計、そしてお釣りだとされるすべての出力を信頼できる画面で確認してください。 [5]
計算では、選んだ資金を I、受取人への支払いを R、手数料を F、お釣りを C として C = I − R − F と表せます。RPC はノードへ命令を送るプログラム用の窓口です。Coin Selection、つまり UTXO の選択では、入力、手数料、必要ならお釣りをまとめて決めます。入力の組み合わせが必要額にぴったり合えば、お釣りの出力は不要です。そうでなければ、ウォレットは残額と、その出力を作って後で使うための費用を比較します。Bitcoin Core の RPC fundrawtransaction は、お釣りの出力を最大一つ追加し、その位置を返すことができます。選んだ資金をすべて受取人に送る場合は、意図的にお釣りを作りません。Coin Control による手動選択は、使う入力とお釣りの額を変えますが、選んだ入力はどれも丸ごと使われます。そのため、支払額だけでなく、最終的な入力、受取人の金額、手数料、お釣りを確認してください。 [9] [10] [13]
HD Wallet は一つの初期秘密値から多数の鍵やアドレスを導出します。導出パスはどのアドレスを計算するかを指定し、BIP は技術提案や標準の文書を示します。HD Wallet は通常、受取アドレスを外部ブランチから、お釣りのアドレスを内部ブランチから派生させます。BIP44 では change=0 を外部、change=1 を内部のブランチと定めています。ネイティブ SegWit のアカウントでは、たとえば m/84'/0'/0'/0/i と m/84'/0'/0'/1/i というパスに対応します。これはウォレットの慣例であり、コンセンサスの規則ではありません。ディスクリプターを使うウォレットは別の規則も表せます。新しい内部アドレスを使えば、アドレスの再利用を減らせます。元のアドレスに残額を戻すことも有効ですが、支払いの履歴が結び付き、その履歴を特定の人物に関連付けやすくなる場合があります。 [2] [3]
以下の xpub は拡張公開鍵を表します。子孫の公開データを導出できますが、それ自体で支払いに署名することはできません。seed は鍵を導出するための秘密の初期値です。出力ディスクリプターは、スクリプトの種類、鍵、その由来の情報、以後のアドレスを派生させる規則を記述します。wpkh([fingerprint/84h/0h/0h]xpub…/0/*) と …/1/* の組で受取用とお釣り用のブランチを表せます。BIP389 では複数のブランチを一つの表記にまとめられます。internal フラグはお釣りにどのディスクリプターを使うかをウォレットに伝えますが、生成されるスクリプト自体は変えません。復元時には、seed だけで全資金を発見できるとは限りません。アカウント、スクリプトの種類、派生方法の情報がなければ、必要な鍵が残っていても、有効なお釣りの出力をウォレットが見落とす場合があります。 [6] [7] [8]
Dust は、ノードの取引中継ルールに基づいて判定される、ごく小さな出力を指します。そのしきい値は、出力の種類、後で使うために必要なデータ量の見積もり、設定可能な dust relay feerate から計算します。どの出力にも共通する一つの satoshi 数ではなく、コンセンサスによる禁止でもありません。このしきい値を超えていても、出力を作って後で使う費用が返す金額より高くなると見込まれれば、ウォレットはお釣りを作らないことがあります。この経済的なしきい値は、現在の手数料率、将来の手数料率の見積もり、スクリプトの大きさに左右されます。お釣りを作らなければ今払う手数料が増え、細かすぎる出力を作れば、後で使う費用が高すぎることがあります。 [12]
Replace-by-fee (RBF) は、未承認の取引をより高い手数料の別の取引で置き換えます。Bitcoin Core の RPC bumpfee は、お釣りを減らす、入力を増やす、新たなお釣りの出力を作るなどして差額を賄えます。お釣りがノードの規則や経済性のしきい値を下回れば、なくなる場合もあります。未承認のお釣りを使うと、元の取引に依存する後続取引が生まれます。元の取引の置き換えにより、そのつながりが無効になることがあります。ただし、ウォレットかノードの mempool(未承認取引の集合)に、元の支払いの出力を使う取引がすでにあれば、bumpfee は置き換えを拒否します。CPFP(Child Pays for Parent)は元の取引を置き換えず、後続取引を作ります。元の支払いにあるウォレット管理下の出力を使い、その後続取引で高い手数料を支払います。二つの取引を合わせた手数料率を上げることで、マイナーが両方をまとめて承認する動機を作ります。置き換えが解決するまでは、未承認の txid や出力参照 outpoint を確定したものと考えないでください。 [11] [15]
復元では受取用とお釣り用、両方のアドレスを見つける必要があります。通常の単一署名ウォレットなら、正しい Seed Phrase(復元用の単語)、使っていた場合の passphrase、互換性のあるウォレット設定で、多くの場合は復元できます。seed は鍵を導出するための秘密の初期値で、passphrase は任意で設定した追加のパスワードです。誰もがディスクリプターを手書きで保存する必要があるわけではありません。ただし独自設定や、複数の鍵で承認を決める Multisig では、単語だけでは足りない場合があります。ネットワーク、アカウント、スクリプトの種類、導出規則といったウォレットの記述も保存してください。Multisig では全参加者の拡張公開鍵 xpub、その順序、必要署名数も含まれます。/1/* のブランチが欠けると、お釣りを見落として残高が少なく表示されることがあります。両ブランチの既知のアドレスと出力、導出範囲、履歴を調べる開始点を確かめましょう。復元テストでは、支払いを準備して正しく署名できることも確認します。 [2] [6] [7]
理解を深めるには、この項目とあわせて次もお読みください ビットコインアドレス, UTXO, Coin Control, ウォレット, Coin Selection, HD Wallet. 次の項目からも参照されています ビットコインアドレス, Coin Control, Bitcoin のプライバシー, 仮名性.