アーパボー(ARPABLE)
アープらしいエンジニア、それを称賛する言葉・・・アーパボー(商標登録6601061)
ブロックチェーン

ビットコインは何故遅いのか

ビットコインのパフォーマンス問題

ビットコインのアーキテクチャは2008年サトシ・ナカモトが論文を発表して以来、多くの研究者や技術者が開発した結果、最も注目される仮想通貨になってます。

しかしその一方で、仕様上の制限から、パフォーマンスに関する問題が長らく指摘されてきました。

  • 処理能力に拡張性がない
    集中制御システムではよく使われる複数サーバによるオフロードができない。
  • リアルタイム性がない
    送金などの取引が確定するまでに時間がかる

その為、一般的に送金などの取引が成立するまでのスループット(処理スピード)は最大7tps(※)といわれてます。
(※)tps:transaction per second(1秒当たりの処理件数)

今回はこの値がどのように導かれ、また実際にはどの程度のパフォーマンスが出ているのかを検証してみます。

ビットコインのスループットの計算式

その計算式は以下の通りとなります。

スループット=1ブロックのトランザクション数÷ブロック生成時間

      =(ブロックサイズ÷平均トランザクションサイズ )÷ ブロック生成時間

  • ブロック生成時間
    ビットコインでは約10分に調整されてますので600秒の定数とします。
  • ブロックサイズ
    ビットコインでは1MBの定数となります(SegWitは除く)。
    バイト数に変換すると1MB=1024X1024バイトですね。
  • 平均トランザクションサイズは変動しますので、変数Stxとします。

スループット=(1024X1024÷Stx) ÷ 600 となりますので
=1748÷Stx

となります。

ここでStxを一般的によく使われている250バイトとすると6.992≒7tpsとなり一般的な値に一致します。

実績値から検証してみよう

ここでBlockchain.comのチャートで実際の値を見てみましょう。

尚、これらのチャートは2022年3月の時点ものです。

Transaction Rate Per Second

先ずは過去1年のTPSはで以下の通り平均2.05tpsとなってます。
これは一つの取引が確定するまでに0.5秒もかかっていることになりますね。

最大で7tpsということがよく言われてますが、実際のパフォーマンスはかなり遅いということが分かります。

 

Average Transactions Per Block

次に1ブロック当たりに含まれる平均トランザクション数を見てみましょう。

これまでのブログでは1ブロック当たり2000~4000個ぐらいといってきましたが、実際には平均1726個となってます。
平均トランザクションサイズは

トランザクションサイズ=ブロックサイズ÷平均トランザクション数

ですので、

1024 x 1024 ÷ 1762 ≒ 608バイトとなります。

 

いずれにしてもクレジットカードの数千~数万tpsから比較するととてつもなくパフォーマンスが落ちることがわかりますね。

実際のトランザクション形式

それでは、前項で算出したトランザクションサイズの608バイトというのは実際にはどのような構成になっているのでしょうか?
これらはあくまで平均値であり、実際のトランザクションにはざまざまな形態があると思いますが、直感的に理解するために少し頭の体操をしてみましょう。

このような時に便利なサイトであるBitcoin Optechのトランザクションサイズ算出サービスを使用します。

 

❶最も一般的なトランザクションであるP2PKH(※)の場合、INPUTのUTXOが3個でOUTPUTの送金先が4個ある場合に、590バイトになるようです。

(※)P2PKH(Pay to Public Key Hash)の詳細は以下のブログを参照ください。
  ・ブロックチェーントランザクションとは(2)

❷2-of-3のマルチシグのトランザクションの場合、INPUTのUTXOが2個でOUTPUTの送金先が1個の場合、636バイトとなります。

(アーパボー)