オン ザ・ブロックチェーン

【ビットコイン】トランザクションと残高計算の仕組み

calendar

 ブロックチェーンを理解するにあたって、重要なポイントと言えるトランザクションについてちょっと掘り下げてみたいと思います。

スポンサーリンク

トランザクションとは

 ビットコインの送信を行うには、トランザクションと呼ばれる送金データを作って送信する必要があります。

 具体的にはトランザクションというのは、

アドレスAからアドレスBに1BTC

みたいな感じの内容になっています。

 そのトランザクションがブロックチェーンに記録されることで送金が完了したと見なされます。仮想通貨における送金とは、コインが実際に移動するわけではなく、「移動した」とブロックチェーンに記録するだけです。その辺が仮想と呼ばれる所以です。

 「コインが移動した」という記録のことをトランザクションと呼んでいます。

送金はアドレス丸ごと

 ビットコインの送金処理の特徴としてまず理解するべきなのが、送金する時はアドレスの中身を丸ごと放り投げるという仕組みです。

 アドレス(ビットコインアドレス)とは、ビットコインを送金する際の宛先として使われるものです。「ここに送ってくださいねー。」と相手に見せるQRコード(実際は30文字前後の文字列)です。

 イメージとしては、ビットコインを入れておく袋みたいな感じでいいと思います。送ってもらったビットコインはその袋の中に入ります。

 で、その袋の中のビットコインを誰かに送金しようと思ったら、その袋は空っぽにする必要があります。中途半端に残すことはできません。

 「いや中途半端な額を送金したい場合はどうすんだよ!」と思うかも知れませんが、もしおつりがあれば返って来るので過払いになる心配ありません。

 この辺がよく分からない人は先にウォレットの仕組みを徹底解説を読んでもらったらすぐ分かると思います。

 ビットコインを送金する際はアドレスの中身を丸ごと放り投げる必要があることをまず理解しましょう。

トランザクションから読み取れること

 アドレスAに存在する1BTCを全てアドレスBへ送るというトランザクションを模式的に書くと、以下のような感じになります。

 インプットとアウトプットが言葉として逆に感じる人もいるかも知れませんが、これはプールにコインを投げ込むようなイメージで捉えたらいいと思います。支払う時はプールに投げ込んで、そこから出てきたものがアドレスに入金されている感じです。

 このトランザクション1を見ることで、以下の情報が読み取れます。

  • アドレスAは空っぽだということ
  • アドレスBに1BTC存在するということ

 続いて、アドレスBに存在するビットコインを0.7BTCだけアドレスCに送るとトランザクション2が作られます。

 アドレスBのビットコインを一旦全て放り出して、そこからアドレスCに0.7BTC、アドレスDに0.3BTC(おつり)が入金されています。

 アドレスCが送金相手で、アドレスDは自分(アドレスBの所有者)が持つ別のアドレスです。
※この辺がよく分からない人は先にウォレットの仕組みを徹底解説を読んで下さい。

 ここで重要なのは、過去のトランザクションのアウトプットに残っていたビットコインが丸ごと新しいトランザクションのインプットとして使われているところです。

 インプットとして使われたアドレスは常に空っぽになり、アウトプットに記載されているのがそのコインを受け取ったアドレスを表しているということです。

 トランザクション2を見ることで、以下の情報が読み取れます。

  • アドレスBは空っぽだということ
  • アドレスCに0.7BTC存在するということ
  • アドレスDに0.3BTC存在するということ

 このように送金する際はそのアドレスを空っぽにするというルールのおかげで、トランザクションを無駄に遡らずとも最新の状態(どこにどれだけのビットコインが存在するか)が一目瞭然になります。

トランザクションはコインの移動履歴

 さらに、例を続けましょう。

 アドレスCからアドレスEに0.5BTC送金したとすると、トランザクション3が作られることになります。

※アドレスFは、アドレスC所有者により作られた別アドレス

 インプットにアドレスCの0.7BTCが、アウトプットにアドレスEに0.5BTCと、アドレスFに0.2BTCが記載されたトランザクションです。

 トランザクション2トランザクション3を見ることで、以下の情報が読み取れます。

  • アドレスCは空っぽだということ
  • アドレスEに0.5BTC存在するということ
  • アドレスFに0.2BTC存在するということ
  • アドレスDに0.3BTC存在するということ

 トランザクション2のアドレスDにはまだ0.3BTC残っていることに注意して下さい。

 もしそのアドレスDからアドレスFに0.3BTC送金したとすると、今度はトランザクション4が作られます。

 アドレスFには既にトランザクション3にて0.2BTCが入っています。そのアドレスFにさらに追加で0.3BTCを送金している状態なのですが、この場合、同じアドレスだからと言って合計されたりすることはありません
※普通は一度コインを受け取ったアドレスは二度と使われないようになっています(使うこともできますが)。

 それぞれのトランザクションはあくまでコインの移動を表すものです。各アドレスの残高がブロックチェーン上で合算されたりはしません

 続いて、トランザクション3のアウトプットにあるアドレスFからアドレスGに0.1BTC移動した場合、トランザクション5が作られます。

※アドレスHは、アドレスF所有者により作られた別アドレス

 別トランザクション内にあるアドレスFはこの場合、何の影響も受けません。

 アドレスが空っぽになると表現してきましたが、空っぽになるのはアドレス単位ではなく、トランザクションのアウトプット単位だということです。

 これまでの処理(トランザクション)を全て並べると以下のようになります。

 過去のアウトプットがそのまま新しいインプットとして使われることによって、全てのトランザクションはまるで鎖で繋がっているような構造になります。

 面白いことに、あるコインがそれまでどのアドレスを経由してきたのかをどんどん辿っていくことができるようになっています。このトランザクションの繋がりはトランザクションチェーンと呼ばれています。
※トランザクションチェーンとブロックチェーンはまた別物です。

インプットは複数でもOK

 先の例の、おつり分が別アドレスに返ってきたように、普通は1人で複数のアドレスを所持しています。1人というか1つのウォレットによって複数のアドレスが管理されます。
※この辺がよく分からない人は先にウォレットの仕組みを徹底解説を読んで下さい。

 アドレスAアドレスBに2BTCずつ持っている人は、合計4BTC持っていることになるので、それらをくっつけて送金することができます。

 言い方を変えると、トランザクションを作る際、2つ以上のアドレスを同時にインプットに入れることも可能だということです。

 そのアドレスの秘密鍵を知ってさえいれば、いくつでもインプットすることができます。

 結局、トランザクションのインプットとアウトプットとは、どのアドレスから放出するか指定するのがインプットで、そこから放出されたビットコインをどのアドレスに入金するかを指定するのがアウトプットであり、それぞれ複数であっても全く問題ありません。

 それらのビットコインの移動を1つにまとめたのが1つのトランザクションです。

UTXOと残高計算の仕組み

 この方式で行くと、トランザクションのアウトプットに残っているビットコインが、それぞれのアドレスの残高ということになります。

 この、使われずに残ったままトランザクションのアウトプットのことを、UTXO(Unspent Transaction Output)と言います。実はトランザクションのインプットに使われるのは、アドレスというよりもUTXOだと言った方が正しいです。

 それぞれのUTXOは誰かの所有物ということになります。

 ブロックチェーン上に残っているUTXOが自分のものだと証明するのが秘密鍵です。秘密鍵は各アドレスに紐づいているもので、そのアドレスを作った本人しか知り得ないようになっています。

 自分だけが秘密鍵を知っているアドレスにビットコインを入金してもらうということは、自分だけがそのビットコインを自由に送金する権利を手に入れたことを意味します。

 「ビットコインを所有している」というのは、「自分で動かすことができるUTXOがブロックチェーン上に存在している」ということと同義です。

 言い換えると、UTXOとはコインの存在証明です。

 ブロックチェーンには過去のコインの移動履歴が全て書かれているわけですが、UXTOだけに注目して見ると「今どこにどれだけのコインが存在しているか」というコインの現在地が分かることになります。

 なので、ウォレット(複数のアドレス)の残高を知る為に、いちいち過去の全取り引きを足したり引いたりする必要はなく、ブロックチェーン上に残っているUTXOを足し合わせるだけで、そのウォレットの残高を計算することができるようになっています。

 上記の例で言うと、アドレスFアドレスHは同じウォレットに属しています(持ち主が同じ)。その人をAさんだとすると、Aさんのウォレットの残高は0.4BTCだと言うことです。

送金手数料について

 勘の良い人は分かっていると思いますが、1つのトランザクションにおいてそのインプットの合計額とアウトプットの合計額は必ず等しくなるようになっています。

 が、これは実は正しくありません。

 1つのトランザクションにおいてインプット額はアウトプット額よりも多くないといけません。

 このインプットとアウトプットの差額は、いわゆる送金手数料になります。

 ビットコインを送金したことのある人なら知っていると思いますが、送金の際には手数料を自分で設定することができます。逆に言えば、設定した手数料額を差し引いた額をアウトプットするわけです。

 送金手数料は、そのトランザクションをブロックチェーンに書き入れてくれたマイナーのものになります。

 トランザクションをブロックチェーンに書き入れることをマイニングと呼んでいます。マイニングの仕組みについては、ビットコインのマイニングって実際何をするの?を読んでみて下さい。

この記事をシェアする

コメント

コメントはありません。

down コメントを残す




管理人

Nobuo

Nobuo

仮想通貨に興味があるただの人です。モナコインが好きなのでMonazon.jpを作りました。よろしくです。