ビットコインダンジョン

Bitcoin (ビットコイン)やブロックチェーンを技術に詳しくない人たちのために、面白おかしく、そして真面目に語ります。独自暗号通貨を使った、日本初の読者参加報酬型ブログ。

0承認トランザクションとRBF、Programmable Moneyとしてのビットコイン

まず一番最初にビットコインについて調べ始めた時、ビットコインの送金は早い、1時間もかからずに世界中どこでもお金を送れる、といったたぐいの話を聞いたことがあると思います。自分も最初はスピードはビットコインの大きな利点だと考えていました。

 

ただし、しばらくビットコインやその他の暗号通貨に触れると、段々むしろ180度逆の考えを持つことになる人が多いです。つまり、ビットコインの10分待たないと1個も承認がつかないというのが、店舗での支払い時や、数秒や数十秒での承認を可能にするとされるその他のアルトコインなどと比べても絶望的に遅い、ということです。

 

今日は、ビットコイン送金と0承認トランザクション、ブロックサイズの話の中でも物議をかもすこともあるRBF(Replace by Fee)と、Programmable Money(プログラム可能なお金)として今後どのようにビットコインが改善、変化していき、スピードの問題などが改善んされ、ユーザー体験なども向上していくのか、について考察してみます。

 

0承認トランザクションとは?

英語では、0 confirmation transactionとか言われるのですが、簡単に言えば、「まだネットワーク上の承認が終わってないのに、ビットコインの送金が完了したとみなすこと(もしくはそのトランザクション自体)」とでもこの記事内では広く定義しておきます。

 

ご存知の通り、ビットコインのブロックが生成される平均時間(承認時間)は通常およそ10分ほどです。基本的には送金してから10分後に、マイナーから1承認のお墨付きをもらえればほとんどのケースで送金完了とみなしても大丈夫ですし(金額や個人のリスク許容量にもよりますが)、大体のウォレットでは1承認ついた時点でビットコインの送金(再利用)が可能になります。

 

逆に言えば、最低でも10分経たないとビットコインの送金は完了しません。

 

よく初心者にビットコイン送金のデモを見せる時に、大体の人はウォレット内に通知がピコっと来た時点で「すごい、早い!」という感じのリアクションをしてくれます。自分もそうでしょーとか言って流してしまうことがあるのですが、正確に言えばウォレットに通知が来た時点では送金のリクエストがネットワークにブロードキャストされただけなので、まだ送金完了ではないのです。

 

では、このビットコインが送金されているようでいて、実はまだ完了していない状態、0承認トランザクションは何の役に立つのでしょうか?

なぜ0承認トランザクションが必要なのか?

端的に言えば、ビットコイン送金の利便性、ユーザー体験を向上させるためです。

 

1承認がつくまで、支払い完了とみなせないとしたら、店舗支払い手段としてビットコインを捉えた時に致命的な欠陥になります。お客さんにレジで10分待ってくださいと言うのは無茶な話でしょう。

 

そこで、BitpayやCoinbase、国内ではcoincheckなどのビットコインペイメントの会社は店舗支払いなどの時に、まだ承認がついていない0承認トランザクションの状態でも、ビットコインネットワーク上で支払いリクエストがブロードキャストされた時点で支払い完了とみなし、店舗でのビットコイン支払いがストレスなく行く工夫をしているのです。

 

先日coincheckのビットコインペイメントがDMM.comに採用されたという記事を書きましたが、ここでも0承認トランザクションが使われているため、10分待たずともすぐにDMMポイントで買い物が出来るようになってるわけです。スマホをちゃかっと出してQRコードをウォレットから読み込むだけで支払い完了なので、いちいち番号を入力しなくてはいけないクレジットカードだったり、コンビニ支払いよりも楽ですし、支払いのスピード感というのは思っている以上にユーザー体験的には重要だと思います。

 

じゃあ0承認トランザクションで問題ないじゃん、と思うかもしれないですが、もちろん未承認の状態で決済完了とみなしてしまうことにはリスクもあります。

 

0承認トランザクションのリスクとは?

 

もともとビットコインの大きな特徴として、ダブルスペンドが出来ない、というものがあります。つまり誰かが後で支払いを取り消したり、改ざんしたりすることが出来ないということです。

これを、Proof of Workマイニングとブロックチェーン(ブロックをつないでいく構造)などを利用することで、オープンな分散ネットワーク上で実現してしまったというのがすごいところなのですが、同時にすぐにブロックチェーン上の記録が確定して支払いが完了するわけではありません。ネットワーク上で承認する時間が必要です。

 

 

ブロックが積み重なって承認が重なっていけばいくほど、ダブルスペンドなどのリスクが減少していき、最終的に確率論的にトランザクションがひっくり返る可能性がほぼゼロになるわけです。逆に言えば、0承認トランザクションのリスクは、ダブルスペンドなどのリスクが高く、技術に精通した悪意のあるハッカーなら、比較的容易にトランザクションをひっくり返すことが出来ます。

実際に0承認トランザクションの弱点をついて、ダブルスペンドで詐欺るケースもすでに実は少なからずあるようで、今年の1月にビットコインコアデベロッパーのPeter Toddが、0承認トランザクションの危険性を証明するため、Coinbaseのペイメントを意図的にダブルスペンドし、4ドルのRedditのポイントをタダで手に入れる、という公開攻撃をしたこともあります。

  

 

RBF(Replace by Fee)と0承認トランザクション

0承認トランザクションにリスクがあるのは明らかですが、現状では0承認トランザクションはビットコイン業界では一般的に使われています。

 

0承認トランザクションをビジネスモデルの中核にしているShapeShiftのCEO、Erik Voorheesも、0承認トランザクションのリスクは理解しており、実際にダブルスベンドなどにより損失を被ったことも少なからずあるが、ユーザー体験の向上によるベネフィットの方が大きいと主張しています。

 

それに対してセキュリティーの観点からも、0承認トランザクションは絶対にやるべきではないとする人もおり、その最右翼が前述のPeter Toddです。で、このPeterが去年末ビットコインコアにマージさせたRBF(Replace by Fee)というのが、0承認トランザクションを事実上不可能にしてしまうとして、今も物議をかもすことが多いです。

 

これはどういうものかというと、まだ未承認でmempoolにたまっているトランザクションを、より大きな手数料のトランザクションを後だしでアナウンスし直すことで、置き換えることが出来る、というものです。

 

かなり平たく言ってしまえば、手数料を変えるだけで、0承認トランザクションを簡単にダブルスペンドが出来るようになり、ペイメントプロセッサーなどのリスクが高まり、事実上0承認取引が出来なくなることを意味します。

(より正確にいえば、Full RBFとOpt-in RBFがあるのですが細かい部分は割愛。もし興味がある人はこちらの記事などを読んでみてください)

 

RBFの利点ですが

  1. 0承認トランザクションはセキュリティーの観点などから考えるとリスクが高い。それを構造上させないようにしてしまう。
  2. ネットワーク混雑時など、トランザクションが中々承認されない時に、手数料を高くすることで詰まったトランザクションを救出することが出来る

などが考えられます。特に二番目に関しては、ネットワークへのスパム攻撃時などに、1承認されるのに10時間以上かかってしまうといった状況も最近もありましたし、便利な機能です。

ただし、RBFは0承認トランザクションを完全に殺してしまう可能性があるということで、コミュニティー内では圧倒的に反対意見が多いようです。前述のPeter  ToddがかなりRBFを推していますが、彼に賛同する人はかなり少なく、大部分は反対です。

 

なお、ブロックサイズ、Core vs Classicの文脈でもRBFが槍玉にあがることがあり、ClassicはRBFを採用しない方向であるとの話も聞きます。これは、Classic支持派はCoinbase、Bitpay、Xapoなど0承認トランザクション活用によるユーザー体験の向上が重要な業者が多いことを考えれば納得でしょう。

 

0承認トランザクションの未来とProgrammable Money

0承認トランザクションにはリスクとメリット両方存在しますが、自分自身としてはそれを利用するかどうかは事業者の判断に任せるべきだと思いますし、RBFには反対です。

 

ただし、同時に0承認トランザクションを使い続けるというのも根本的な解決ではないですし、今後悪用ツールが発達すれば、誰でも簡単にダブルスペンド出来るようになり、BitpayやCoinbaseなどのビジネスモデルが破壊されます。もしかしたらDMM.comでビットコインをダブルスベンドしまくって、ポイント買い放題状態になってしまうかもしれないです。

 

重要なのはただし、問題が解決出来ないわけではないということです。そこがビットコインなどの暗号通貨が大きな強みを持っている場所だと自分は思っており、Programmable Money(プログラム可能なお金)として、何か不便な部分があれば新しい技術、付加サービスなどを世界中の開発者が競い合って作ることで、ビットコインは改善、拡張可能だということです。

0承認トランザクションに関しても、Lightning Networkなどの新たな技術がすでに考案されており、将来的に0承認トランザクションの問題は、技術革新で完全に解決されるのではないかと自分は予想します。Lightningの詳細はこの記事では説明はしませんが、Lightningが実用的になれば、ビットコインのトランザクションを利用して、1円以下のマイクロペイメントをいくらでもセキュアにほぼノーコストで即時に相手に送ることが出来るようになる(かつスケーラビリティの問題も大きく前進させる)と期待されています。

 

まだまだ技術的なハードルも残っているようですが、Lightningはビットコインの業界で最も期待かつ注目されている技術の一つで、近くベーシックな実装も登場すると予想されていますし、ビットコインの将来を左右する重要な技術になると思います。

 

ビットコイン vs アルトコイン&プライベートチェーン

 

冒頭でも触れた通り、ビットコインは遅い、高い、スケールしない、というのは業界内でもよく聞く批判です。

 

なので、ビットコインは技術的に劣っているので、Ethereum、BitShares、NEMなどの全く新しいブロックチェーンを開発するというのはアプローチの一つだとは思います。また、そもそもパブリックチェーンはエンタープライズ用には使いづらいといってプライベートチェーン(もしくはコンソーシアムチェーン)を開発しようとする人たちもいます。

別にどちらの方法も間違っているとは言いませんし、それぞれが成功して共存するというケースもあるかもしれないですが、短期的な視点でビットコインは制約があるから使わない、もしくは用途などにあわせて企業、業界単位で一からプラットフォームごと作り直す、という意見は短絡的と言えると思います。ビットコインはProgrammable Moneyですから、日々成長、進歩しているからです。それらの批判が1年後、2年後に全く的外れになっている可能性もあります。

このあたりが今のビットコインへの批判を理解する一方、自分がビットコイン(及びその他のパブリックチェーンの将来)に関して基本的に楽観的でいる理由です。自分で直で技術開発したりは出来ないので、まあ世界の頭いい誰かが解決策を考えてくれるだろうという他力本願ではありますが笑

 

ビットコインの強みは、ハッシュレート、最も活発な開発者のエコシステム、ネットワーク効果だというビットコイナーも多いですが、すでに実績のあるこのネットワークを最大限活用してそれを改善しようとするアプローチが正しいのか、それともよりよいネットワークを1から作り直そうとするのが正しいのか、それとも企業のリードに沿って、独自のプライベートプロトコルを開発しようとしている人たちが正しいのか。1年後くらいには答えが見えてきてるかもしれないです。

 

ま、その前にブロックサイズとガバナンス・コンセンサスの問題という直近の大きな壁を越えなくてはいけないんですけどね。ま~、これも何とかなるかなと、最悪の状況を想定しつつも楽観視しています。

 

それでは。

 

【お知らせ】


先日、ビットコイナー反省会のエピソード3を放送しました。
3月のニュースを振り返るだけでなく、ゲストにビットコインの技術にスーパー詳しいジョナサン木下アンダーウッドさんを招いて色々解説してますので、是非見てください。Lightning Networkの話なども途中出てきますよ。

 

www.youtube.com

 


Donate with IndieSquare

 

***

このブログではトークンを使った実験として、寄付+トークンという切り口で実験をしています。この記事が役にたった、もしくは面白かった場合は、上記の寄付ボタンをクリックして、IndieSquare Walletからビットコインで是非寄付をお願いします!このブログの独自コインCNPCOINをお返しします。

 

CNPCOINを集めると、一部の人に限定公開している自分のメルマガや英語のカスタマーサポート連絡補助+αなどに使えます!CNPCOINについて詳しくはこちらのページを参考にしてください。(もしくはサイドバーのCNPCOINについてという部分)

 

また、寄付金額により、お返しのCNPCOINのレートは変わっていきます。(初期に応援してくれる人ほどインセンティブが)最新のレートについてはこちらのスプレッドシートで確認できます。