連載
それって,ブロックチェーン使わなくてもいいんじゃないですか? 第2回:サトシとアイテムDUPE
こんにちは! しおにくです。ブロックチェーンゲームの未来を見据える連載の,第2回です。前回の最後で「サトシ」という名前を出しました。ポケモンのサトシでないとしたら,一体誰のことなのか。
ブロックチェーンのサトシって誰だ?
ブロックチェーンの歴史……といっても,2008年10月31日に最初の論文が発表された比較的新しい技術なので,まだ15年ほどしか経っておりません。そしてその15年を語る上で避けて通れない人物が,「サトシ・ナカモト」なのです。
そしてこのサトシさん,2023年現在でもいまだ正体不明です。この名前さえも偽名ではないかと言われています。
彼は「Bitcoin:A Peer-to-Peer Electronic Cash System」(ビットコイン:ピアツーピア電子通貨システム)という論文を2008年に世に送り出し,2010年末頃までネット上で活動をした後,すべてを他の技術者に引き継いでネット上から姿を消します。まるで映画「シン・ゴジラ」で,「私は好きにした,君らも好きにしろ」と書き残して,牧教授が消息を絶ったかのように……。
その真偽は分かりませんが,近々「Winny事件」を題材とした映画が上映されるということで,そちらの中身がどのような内容なのか,興味津々です。
では本題に戻って,このサトシが発表した論文に注目していきたいと思います。
パッと見ていただくとわかるのですが,とても簡潔で読みやすいものです。イントロダクションに「We propose a solution to the double-spending problem」と書かれていることから,「二重支払い問題の解決策」として,今につながるブロックチェーン技術が提唱されていることが分かります。
「Bitcoin:A Peer-to-Peer Electronic Cash System」
(当初発表された論文をbitcoin.orgに移したものです)
問題というからには,この「二重支払い」がインターネットの様々なところで厄介ごとを起こしていたと考えるのが自然でしょう。ここで語られている「二重」とは何でしょうか? 例えば通販サイトの支払いボタンを何度もクリックすることでシステムが不具合を起こし,代金が何度も引き落とされてしまうようなことでしょうか?
二重支払い問題と中央集権的な対策
一般的なWebサービスにおける取引データベースシステムを考える上で,「二重支払い問題」とは次のようなものになります。
例えば,ポイントを貯めたり送ったりするブラウザ上で動作するサービスがあったとします。ここに,利用者Aさんのポイント残高が100ポイントあります。AさんからBさんへ100ポイントを送るとして,ブラウザの別ウィンドウでもこのサービスを開いておき,AさんからCさんへ100ポイントを送ろうとします。
このとき,残高が100ポイントだったにも関わらず,BさんにもCさんにも100ポイントが送られてしまい,都合200ポイントがAさんから送られることを「二重支払い問題」と呼びます。
こういった決済処理のひと続きの処理,その流れを「トランザクション」と呼びます。トランザクションはブロックチェーンを論じるときに何度も出てくる言葉で,この連載でも使っていきますので覚えておいてください。
現代においては,前述のような二重支払いは概ね,中央集権的な管理サーバーによって対策されています。代表的な回避策は,下記のようなものです。
A)アカウントを承認し,排他制御をする
トランザクションの処理に入る前に取引するアカウントを承認し,承認されていない取引は行わない。
例:AさんとBさんが取引状態になり,それらを承認する。同時にAさんがCさんとの取引を発生させても承認されていないため排他制御がはたらき,ポイント操作を進行させない。
B)サービス全体の残高管理をする
サービス全体のポイント増減を監視することにより,残高が明らかに増えたり減ったりしていないかを把握する。
例:新規発行がないのに全体のポイントが100ポイント増加していたらエラー処理を行う。
C)処理順序の概念を実装する
ユーザーが取引を終了しない限り次の取引が始まらないなどのキュー(queue:待ち行列,処理順序)の概念を実装する。
例:AさんとBさんの取引が終了した後にCさんとの取引を開始する。先程の例だとBさんとの取引でAさんのポイントは0になっているので,Cさんへ100ポイント送ることはできなくなる。
また,別種のトラブルへの対策ですが,「AさんからBさんへ100ポイント送る」ことそのものが,処理異常や不正操作で複数回実行されるなどで何度も送られる事態を防ぐには,次のような対策が考えられます。
D)トランザクションにハッシュ値を設定する
トランザクションに対してハッシュ値を発行する。ハッシュ値とは,数字やアルファベットで構成された「復号できない暗号」のようなもので,元のデータをハッシュ関数(一定のアルゴリズム)に従って計算して生成される不可逆な固定長の値のこと。同一の取引には同一のハッシュ値が生成されるため,比較をすることで重複を防ぐことができる。
例:常にトランザクションにハッシュ値を設定するようにしておき,「AさんからBさんへ日本時間の19:05:32に100ポイント送る」というトランザクションに対して
「7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069」
というハッシュ値を生成し,それと同一のハッシュ値が他にも見つかったら異常な取引と見なす。
お気づきかもしれませんが,これらはそれぞれが,違う観点での回避策です。Aはアカウントに対するもの,Bは運営管理,Cは取引処理,Dはトランザクションの識別という観点です。
しかしいずれも,中央集権的な管理サーバーがあることを前提としています。これらを仕込んだうえで必要な検証手順を追加することで,行われている取引が「正しいかどうか」を判定するものとします。
正しくない場合,強制的に取引を中断して元の状態に戻して(ロールバック)エラーを返したり,管理者にアラートを出したりするなどの仕組みが実装されます。
アイテムだって二重に増やせる
一般的な「二重支払い」とその対策が分かりましたので,今度はこれを応用してオンラインゲームにおけるアイテムのやり取りについて考えたいと思います。
ここでは,オンラインゲームで,AさんからBさんへアイテムを渡すことを考えましょう。
コンピュータのデータの移動は一般的に,現実の物体が移動するのとは違って「相手先へデータをコピーしてから元データを消す」ことで疑似的に実現されています。
例えばPCで,ファイルアイコンをドラッグ&ドロップしてCドライブからDドライブへ移動すると,その様子が分かると思います。
これに沿って考えると,オンラインゲームにおいてAさんからBさんへアイテムを渡すときも,考え方としては,アイテムのコピーがまずBさんのインベントリ(アイテムをしまっておくところ)に作られ,そのあとAさんのインベントリから削除されるわけです。
ということは,中央で厳密に管理されていない場合,アイテムのコピーがBさんに作られた瞬間に速攻で回線を切ってゲームアプリを終了してしまえば,アイテムがAさんに残ったままになり,そのアイテムはAさんにもBさんにも二重に存在することになります。
こういったシステムの処理のタイミング差を突いてアイテムを増やしてしまえ,というチートがDUPEです。
DUPEが社会的な事件となった例が,2012年にオークションサイトに多数出品されたソーシャルゲームのカード型アイテムです。もう10年も前のことですから,この事件のことを知らない読者もいるかと思います。
簡単に言うと,一定の手順で増殖させたアイテムを,オークションサイトで数万円で販売し,ゲーム内の取引機能で受け渡す,ということが横行したのです。
そしてオークションサイトでなぜそんなに高値がついているのかというと,そのカード型アイテムが大変に希少であること,その希少性の根源として,ガチャで購入するアイテムに「コンプリート」の仕組みがあることが判明し,それがいわゆる「コンプガチャ問題」へと繋がっていきます。
ソーシャルゲーム業界は一律で,「ゲーム内取引機能の禁止」をゲーム会社へ強制することで事態の沈静化を図りましたが,本筋はそこではなく,コンプ方式のガチャが「絵合わせ」「カード合わせ」を禁じた景品表示法違反でしたので,ソーシャルゲームブームも相まって,その後,世間の耳目を集める事件へと発展しました。
システムの隙間を突くが如くのDUPEですが,もちろん今どきそんな粗い処理のゲームアプリはないと思いますし,オンラインゲームであっても前述したWebサービスでのポイント取引例のように中央で厳格に管理され,そういった間違いが起こらないようになっています。
ブロックチェーンがDUPEを解決……?
さてここまで「二重支払い問題」について説明してきましたが,排他制御やトランザクションの工夫は中央集権的なシステムの場合にのみ有効であって,「サトシ・ナカモト」の論文タイトルにあったPeer to Peer,すなわち1対1の電子取引では防ぐのが難しいと考えられていました。
確かに中央で管理する誰かがいなければ,先ほど挙げたアイテム取引例のように,相手の残高が増えてこちらの残高が減るというタイミングの差を突いてDUPEできてしまいそうです。自分も取引相手も善人であれば互いに信用(トラスト)が持てるのでシステムがしっかりしていなくても良さそうですが,万人に安心して使えるものにはなり得ません。
1対1の電子取引において,もしデータやデータが通過するネットワークそのものにDUPEを防止する機能が組み込まれ,息をするように自然に,それでいて堅牢な取引をすることができたら……。
はい,それを叶えたのがブロックチェーンというわけです。
今回は「サトシ・ナカモト」とその論文,そして論文で取り扱われた「二重支払い問題」とは何か,オンラインゲームにおけるDUPEの話を交えて説明しました。
次回は,実際のブロックチェーンネットワークがどんなデータをどう用いているかを解説しながら,その秘密に迫ってみたいと思います!
20年前にMMOのゲームマスターからオンラインゲーム業界でのキャリアをスタートし,RMT対策やコンプガチャ問題など,ゲームと社会の課題に取り組み続けている。近著は「NFTゲーム・ブロックチェーンゲームの法制」。最近の推しは #ババババンビ
「それって,ブロックチェーン使わなくてもいいんじゃないですか?」連載一覧
- この記事のURL: