Gunosy Blockchain Blog

Gunosyの開発メンバーが知見を共有するブログです。

今さら聞けないビットコインの仕組み(トランザクション編)

はじめに

f:id:ikutyy:20180314155532p:plain

新規事業開発室の生田です。先日、大学の卒業が確定しました。

卒業旅行は高校時代からの友人と長崎に行ってカピバラと戯れていました。カピバラって世界最大のげっ歯類らしくでかいんですね。カピバラさんみたいなこじんまりした可愛らしい感じを期待してたら面食らいました。イラストはふわふわ感ありますが、実際にはそんなこと全くないです。

久しぶりにマスタリングビットコインを読み返していて、ビットコインって面白いなと改めて思ったので、ビットコインの仕組みについて自分なりのまとめも兼ねて紹介したいと思います。今回はその中でもトランザクションについてまとめていきます。

トランザクションの概要

トランザクションとは

f:id:ikutyy:20180306034955p:plain

トランザクションとは1回あたりの取引(送金)を指します。

送金元は自分の持っているビットコインを使用する権利を消費するかわりに、新たに送金先がビットコインを使用する権利を発行します。この権利のことをUTXO(Unspent Transaction Outputs)と呼びます。

コインや通貨といわれると紙幣や硬貨をなんとなくイメージしがちですが、トランザクションはあくまでデータでしかありません。

残高の計算

f:id:ikutyy:20180306034327p:plain

自分のアドレスの中身を見てもビットコインは増えていないのならば、ビットコインの残高はどのように計算するのでしょうか。

トランザクションデータはあくまでも取引に関するデータなので、残高は記載されていません。残高は先ほど紹介した自身が消費する権利を持つUTXOの合計を調べることによって、計算することが出来ます。

コインベーストランザクション

先ほど紹介したトランザクションとは異なる「コインベーストランザクション」と呼ばれるものがあります。

コインベーストランザクションは、マイナーがマイニングに成功した際に自分たちが報酬を受け取れるように、受け取り先をマイナー自身のアドレスに向けたトランザクションのことです。

他のアドレスから入金されたものではないので、UTXOは消費されず、新たにUTXOが発行されるだけになります。

マイニングについてはこちらの記事で詳しく紹介されているのでぜひご覧ください。

tech.gunosy.io

トランザクション手数料

銀行の口座間で送金をする際に振込手数料がかかるように、ビットコインのトランザクションも手数料がかかります。金額はトランザクションの中に明示されていませんが、消費するUTXOと発行するUTXOの差額が手数料となります。

例えば1BTC分のUTXOを消費して、0.995BTC分のUTXOを新たに発行したとすると、残りの0.005BTCがトランザクション手数料になります。

手数料はトランザクションが含まれるブロックのマイニングに成功したマイナーが受け取ることが出来ます。

トランザクション手数料は送金額や送金先に関係なく決まるため、海外に多額の送金をする際には円やドルなどの法定通貨の銀行を経由した海外送金と比較して手数料が安く済むことはビットコインを利用する1つのメリットです。

トランザクションに関わるトピック

マルチシグ

f:id:ikutyy:20180314145124p:plain

コインチェックのNEM流出事件で話題になったマルチシグはトランザクションに関連するトピックです。

通常、UTXOを消費する際には、アドレスの所有者だけが知っている秘密鍵とよばれる暗証番号の代わりになるものが必要となります。しかし、万が一秘密鍵を無くしてしまったり、所有者が亡くなってしまって秘密鍵が分からなくなると、そのビットコインを使用することは永久に出来ません。また、大量のUTXOが紐づくアドレスの所有者を脅して秘密鍵をビットコインを盗むなんてことも出来ます。

実際に日本でビットコインを脅し取ろうとした事件がニュースになっていました。そんなリスクを防げるのがマルチシグです。

マルチシグとは数名の人で秘密鍵(暗証番号)を持ち、1人ではなく複数人が承認することによって初めて送金(UTXOの消費)が出来るというものです。例えば2of3のマルチシグであれば、3人中2人の人が承認すれば送金が出来ます。

スケーラビリティ問題

トランザクションはそれぞれのノードによって検証され、ブロックと呼ばれる単位でひとまとまりにして処理がされていきます。

ブロックに含められる容量は上限が決まっているので、1ブロックに含めることの出来るトランザクションの数には上限があります。また、ブロックの生成時間は約10分に1つとなるように調整されています。

ビットコインの送金はブロックにトランザクションが入り、マイニングによって正しいことを検証されてはじめて完了するものなので、トランザクション数の増加はブロックに含むことのできないトランザクションを生み出し、送金の遅延を生み出します。

この問題をスケーラビリティ問題と呼びます。

こうなってしまうと、どうしても送金を素早く行いたい人はトランザクション手数料を増やすことになります。ほとんどのマイナーは利益の最大化のためにトランザクション手数料が高いトランザクションからブロックに取り込んでマイニングを行っています。そのため、高い手数料を支払えば、数あるトランザクションのなかでも素早く処理される可能性が高まります。

スケーラビリティ問題の解決策はいくつかの提案や既に実装がされているので紹介します。

スケーラビリティ問題の解決策

Segwit

Segwitは1トランザクションあたりのサイズを削減することによって、ブロックに含めることの出来るトランザクション数を増やすという方法です。

他にもトランザクション展性と呼ばれる攻撃をSegwitによって防ぐことができます。

既に実装がされており、一部のウォレット(アドレスを管理しているところ)ではSegwit対応のトランザクションを作ることが出来ます。

より詳しく知りたい方はこちらのスライドにまとまっておりますので、ぜひごらんください。

ペイメントチャネル(ライトニングネットワーク)

ペイメントチャネルとはメインチェーン(ブロックチェーン)ではない別のところ(オフチェーン)で送金を行うことによって、マイナーの検証作業(マイニング)を経由せずに取引が出来るようにする仕組みのことです。

既にテストネットではライトニングネットワークは実装され、そう遠くないうちに本番環境でも利用できるようになりそうです。

ペイメントチャネルについての紹介についてはこちらのスライドで詳しく紹介されています。

ビッグブロック

ブロックの容量には上限があると紹介しましたが、その上限を引き上げようというのがビッグブロックです。実際にLitecoinやBitcoinCashはビットコインをベースにブロックサイズが引き上げられた通貨です。

上限を引き上げると、1ブロックに含めることのできるトランザクション数が増加します。

まとめ

長くなってしまいましたが、これまでざっとトランザクションの概要についてご紹介してきました。

技術的な中身の部分に触れませんでしたが、冒頭で紹介したマスタリングビットコインでは分かりやすく紹介されているので興味のある方はぜひご覧ください。

また、今回はビットコインにおけるトランザクションを紹介しましたが、他の仮想通貨のトランザクションは別の仕組みだったりします。例えば匿名トランザクションと呼ばれる、誰から送金されたか分からないようなトランザクションを用いた通貨もあったりとトランザクションは奥が深いテーマです。

宣伝

blockchain.tokyo

3/16(金)にサイバーエージェントさんでblockchain.tokyo#6を開催します。

blockchain-tokyo.connpass.com

今回はもう応募を締め切ってしまったのですが、4月の開催は海外からゲストをお呼びして開催する予定となっています。

エンジニア募集

www.wantedly.com

新規事業開発室では仮想通貨関連の研究開発をしていきたいエンジニアを募集しています!!!

興味ある方は上のリンクからぜひご応募をお願いします。