Bitcoin のトランザクションは、誰かに支払うときや自分のウォレット間でビットコインを移すときに、ウォレットがネットワークへ送るメッセージです。以前受け取ったどの金額を使うか、そして新しい金額を次に使うための条件を指定します。ネットワークは送金の権限と、利用できる額を超えて送っていないことを確認します。「送信」を押しただけでは、支払いはまだ承認されていません。
未使用の100 000 satが1つあり、60 000 satを送りたいとします。satはビットコインの最小単位で、1 BTCは100 000 000 satです。ウォレットは、受取人に60 000 sat、自分へのお釣りに39 000 sat、残りの1 000 satをマイナーへの手数料とするトランザクションを作れます。大きな紙幣で払い、お釣りを受け取るのに似ています。元の100 000 satは丸ごと使われ、2つの新しい金額が生まれます。お釣りは通常、自分のウォレットの新しいアドレスへ戻り、知らない人への別の支払いではありません。手数料は使用した合計額と新たに作る合計額の差であり、独立した出力ではありません。お釣りを入れ忘れると、意図せず手数料が非常に高くなることがあります。 [2]
Bitcoin は以前のトランザクションの未使用出力、略してUTXOを記録しています。ウォレットが使える個々の金額と考えると分かりやすいでしょう。新しいトランザクションの入力は、そうした過去の出力を指します。新しい出力は金額と、その次に使う条件を決めます。ウォレットは複数の金額をまとめたり、複数の受取人に分けたりできます。入力には単なる送信元アドレスではなく、前のトランザクションの識別子txidと、その出力の番号が入っています。この組はoutpointと呼ばれます。参照先の出力は存在し、使用可能でなければなりません。同じ出力を二度使ったり、同じトランザクションの2つの入力に重複して数えたりすることはできません。 [1] [2]
通常の支払いでは、ウォレットが秘密鍵を使ってデジタル署名を作ります。送金の権限を証明するもので、鍵を明かさずに検証できます。条件によっては、複数の署名や特定の時点まで待つことが必要です。技術的には、必要なデータをscriptSigと、該当する場合は別のwitness部分に入れ、ノードが使用される出力の条件を確認します。SIGHASH の設定は、署名がトランザクションのどの部分を変更から保護するかを決めます。ただし、有効な署名でも、存在しない資金を使ったり、合計額を増やしたり、まだ満たしていない時間制限を回避したりはできません。 [2]
署名が終わると、ウォレットはトランザクションを配信します。ノードは検証し、未承認の取引の待合室である自分のmempoolに入れることがあります。そこに入っただけでは、まだブロックへの記録ではありません。有効なブロックに含まれて初めて1承認となり、その後のブロックごとに承認数が増えます。待機中の取引を中継・保持するルールはノードによって異なる場合があり、ブロックの有効性を決めるルールとは別です。待機中のトランザクションが、同じ資金を使う別のものに置き換わることもあります。ネットワークが別の有効なチェーンを採用する再編成では、得られた承認が失われることもあります。受け取りは他人のスクリーンショットではなく、自分のウォレットで正しいネットワーク、金額、宛先、承認を確認してください。 [4]
ウォレットには通常、取引を検索するための識別子txidが表示されます。技術的にはwitnessデータを除いた取引の符号化データにSHA-256を2回適用して求めます。もう1つの識別子wtxidはwitnessも含み、witnessがない取引では両者が一致します。これらは記録を特定しますが、それだけでは支払いの承認を証明しません。手数料は主にデータサイズと選んだ料率に依存し、送ったビットコインが法定通貨でいくらに相当するかでは決まりません。料率には仮想サイズvsizeを使います。これは取引の「重み」を4で割り、端数を切り上げたものです。そのため、小さな入力を多数まとめる方が、大きな金額1つを移すより高くつくことがあります。 [3]
入力から出力を引いた額が手数料
通常のトランザクションで合計250 000 satを使い、お釣りを含む受取先に248 200 satを割り当てれば、残りの1 800 satがマイナーへの手数料です。手数料用アドレスに別途送るわけではありません。
理解を深めるには、この項目とあわせて次もお読みください UTXO, Private Key, Mempool, Transaction Fees, SegWit. 次の項目からも参照されています Bitcoin Whitepaper, Timechain / Blockchain, Full Node, UTXO.
01確認済みの Bitcoin トランザクションは取り消せますか?+
Bitcoin には取消ボタンも、依頼に応じて承認済みの送金を取り消せる管理者もいません。返金には通常、受取人が新しいトランザクションで送り返す必要があります。これは、支払いが一時的に承認を失うことのあるチェーンの再編成とは別の話です。ブロックが増えるほど、履歴を置き換えるために必要なマイナーの作業、つまり Proof of Work が増えます。そのため承認が多いほど確かさは高まりますが、絶対的な保証にはなりません。