プログラミングのゴミ箱

日々の学習の中で知らなかったことについて、調べたことを解説します。

Ethereum入門を読んでみた①

https://book.ethereum-jp.net/what_is_ethereum/blockchainrev_md

UTXO(Unspent Transaction Output)とは?

まだ他の誰かに送るために使用されていないトランザクションのこと。
あるユーザーの保有BTC量は、そのユーザーに向けられたUTXOの総和によって求められる。
例えば太郎さんに、次郎さんから20BTC、三郎さんから10BTCをもらうというUTXOが向けられているとする。
そうすると、太郎さんの持っているBTCは合計で30BTCである。

さらに、太郎さんは25BTCを花子さんに渡したとする。
しかし、UTXOは単なるトランザクションの履歴であるため分割できず、10BTCと20BTCでは25BTCを表現できない。
そこで太郎さんは、25BTCを花子さんに送金し、5BTCを自分に送金するというUTXOを作成する。
こうすることで太郎さんはUTXOを分割することなく正しく送金ができる。


マイニング

ブロックチェーンにブロックを追加することをマイニングという。
マイナーはブロックを追加するときに

  • UTXOの所有者意外がそのUTXOを使って送金していないか
  • 同じUTXOを複数回使用するようなトランザクションは無いか

などを確認する。

二重支払い問題の対応

例えば、以下のようなケースを考える。

  1. 攻撃者が、あるEC業者から商品を購入し100BTCを送金する。
  2. EC業者は100BTCが送金されたことをブロックチェーンの記録を見て確認する。送金されたことが確認できたら商品を発送する。
  3. 攻撃者が商品を受け取る。
  4. 攻撃者が業者に支払った100BTCをなかったことにするために、同じ100BTCを自分自身に送金したというように、ブロックチェーンを書き換える。

仮に、1の送金が2000番のブロックに記録されていたとする。
2000番ブロックを書き換えると、その後の2001番以降のブロックの値も書き換わるため後ろに続くすべてのブロックのnonceを探さなければならない。
書き換えが行われるとチェーンは2000番の場所でforkする。
チェーンは長いほうが正しいと認識されるため、悪意のあるユーザーの計算力が51%を超えない限りはブロックの書き換えは成立しない。