見出し画像

PlayToEarnの死にゆく運命をシミュレータを使って理解する

こんにちは。垂水ケイです。

前回の記事では、「ゲームデザインシミュレータでブロックチェーンゲームのエコシステムを理解する」というタイトルで、Machinationsというシミュレータを使ってBCGエコシステムのシンプルなモデルを作ってみました。

最終的に作ったゲームフローがこれですね。稼いだトークンはどんどん利確されていき、プレイヤーはお金を稼ぐことができるわけです。上図ではトークン10枚に対して外貨(USDやETHをイメージしてください)1枚のレートでずっと利確できていますが、実際には価格変動があります。特に下落方向に。

そこで今回は、トークンの価格変動を盛り込んでモデルを作ってみたいと思います。BCGの死にゆく運命をシミュレーションを通じて理解してみましょう。

イメージとしては前回作ったゲームフローに、トークンを取引するDEX要素と付け足すのと、ユーザー個人ではなく全体のエコシステムを表現するためにユーザー数という概念を付け足します。

イメージはこんな感じです!それではやっていきましょう。

DEX的なものを作る

BCGのトークン取引は主にuniswapやPancakeSwapなどのDEXで行われます。そこでまずは、疑似DEXのモデルを作ります。

MachinationsではTraderという三角形が2つ並んだアイコンを使って取引を表現することができます。Traderを使うときは、リソースに色をつけてあげる必要があります。上図ではトークンが青、外貨がグリーンですね。

DEXでの取引は、流動性プール(LP)を相手に行います。トークンを売却して外貨を得るという取引は、言い換えると、トークンをLPに入れて外貨を引き出すということです。トークンはウォレットからLPに、外貨はLPからウォレットに入ってきていますね。

ここで、取引のレートはLPのトークン枚数の比率で自動的に決まります。Registerという関数を組み込める黒い四角のアイコンを使って計算していきましょう。

  • トークン価格=LPの外貨枚数 / LPのトークン枚数

  • トークン売却時の外貨獲得枚数=トークン売却枚数 × トークン価格

これらの式をモデルに組み込み、外貨獲得枚数の計算結果を外貨@LPからTraderへの枚数に返します。

これは初期のトークンと外貨の流動性が10k枚ずつ、1STEPあたり100枚のトークンを売却していくシミュレーションです。トークン@LPの枚数がどんどん増えて、トークン価格が下がっていくことを確認できますね。

さて、これではトークンを売却するだけのDEXになってしまいますから、購入用のTraderも盛り込んであげます。

できあがったDEXモデルがコチラ。実際には流動性提供されたりしますが、理解のための簡単なモデルとしては十分だと思います。上図ではトークン売却枚数が100、購入枚数が150なので買い圧の方が大きく、トークン価格が上昇していってます。

次はここに前回作ったBCGのゲームフローや新規ユーザーの流入マネーなどを組み込んでいきます。どうですか、なんとなくエコシステムモデルが作れそうな気がしてきましたよね。

新規ユーザー流入モデル

実際のゲームではここはなかなかコントロールが難しいところですが、NFTの販売量や招待コードの生成ロジックなどで上限値にはある程度調整が効きます。

今回はとりあえずユーザー数がSTEP(= day)の0.5乗に比例するモデルにしてみます。グラフにするとこんな感じです。

式で表すと、users = 100 * SQRT(day)です。新規ユーザーは前日との差になるのでnewbie = 100 * (SQRT(day) - SQRT(day - 1))となります。

Machinationsのちょっとしたテクなんですが、負の値をとってエラーを出したり、想定外の計算結果を出力してしまうときにはMAX関数とか使うと便利です。MAX ( day - 1 , 0)みたいに入れておくと、day - 1と0の大きい方を返してくれるので、day - 1 が0より小さいときには、0を返してくれます。

あとはNFTのmintコストを適当に定義し、新規ユーザーがNFTをmintしてエコシステム内に参入していくようにすればOKです。実際には二次流通のマーケットがありますが、ややこしくなるので今回は割愛!目的に沿ってモデルをシンプルにしていくのは大事なことです。

エコシステムモデル

それでは、前回作ったシングルトークンモデルをちょっと改造したやつに、DEXと新規マネーの流入を合体させてみます。前回はNFTをレベルアップさせていくモデルでしたが、今回はNFTをmintして増やしていくモデルにしてみました。

制作過程は省略して、完成品がコチラ!

計算用のRegisterが入り組んでいるんですが、非常に見にくくなるため非表示にしています。グループ化して最小化すると非表示になるので、計算系を隠したいときにオススメの小技です。

ポイントを解説していきます。

  • 左上のnewbies' money inflowからTraderの「buy & invest」に外貨としてUSDが入る。

  • token liquidityのトークンとswapして得たトークンはinvest poolに入り、NFTがmintされる。

  • 買われるトークンは、新規ユーザー数×mintコストで計算されている。

  • NFTsのpoolは、エコシステム内でmintされたNFTの総数。

  • NFTの総数をユーザー数で割ってユーザー当たりのNFT数を計算し、NFT earning parameterをかけて全ユーザーが1STEPで稼ぐトークンの枚数を算出。

  • Playでmintされたトークンは、invest poolとtoken selling poolとburnに分配される。

  • token selling poolに入ったトークンはDEXで売却され、user's usdに貯められていく。

シミュレーションを走らせてみます。

STEP8の結果がコチラ。NFTの総数とユーザー数が右軸、トークン価格が左軸です。

いいぞ!ユーザー数も増えてトークン価格も右肩上がりや!
MOOOOOON!!!!!

トークン価格が上がり、更なる上昇期待からトークンが買われ、ユーザーはゲームに参加したいものの流入数がコントロールされていてもどかしい。NFTの数が足りないからセカンダリの価格も高騰。今度こそ崩壊しないBCGができた。そんな時期です。

STEP21がコチラ。

NFT増えすぎや!崩壊するんちゃうか!?絆!絆!
トークン価格耐えてるしまだ大丈夫や!さすが本物のBCGは違う!そんな時期です。

新規ユーザーの流入も頭打ち感がでてくるSTEP60。

NFTが増えすぎて有識者たちがNFTバーンの必要性を唱え始めます。トークン価格は下落の一途を辿るので絆が試されます。トークン価格は既に0.02とスタート時の0.1の5分の1になっています。

この時点でのDEXのLPを見てみると、初期はusd:10k、トークン:100kから大きくトークン側に傾いています。

このLPの大きさが結構ポイントで、流動性が乏しいと価格変動も大きくなります。トークンの売り圧が強くなってトークン価格下落すると、流動性を引き上げる人も増えてきます。そうなってくると、毎日同じ枚数ずつトークンを売却したとしても価格の下落は大きくなっていきます。価格下落が加速していきます。

そしてSTEP100。

トークン価格は表示できる小数点以下の数字の都合上ゼロに。100日後に死ぬBCG。ショート爆益民がワイワイし、サステイナブルなBCGを求めるようになります。

価格自体ではなく、その価格を決定するLPのバランスを見てみると理解が深まります。上のグラフは、青のトークンが左軸、緑のUSDが右軸です。単位は枚数です。

PlayToEarnでガンガンmintされたトークンがLPに入れられていくので、枚数がどんどん増えていきます。LPに入ってくるトークンの影響が大きくなるほど価格が動いていきます。

実際に、初期の流動性を変えてシミュレーションをしてみるとわかりやすいです。一番上のRun#39がusd:5k・トークン50k、Run#40が10k・100k、Run#41が20k・200kとなっています。流動性が大きいほど、トークン価格の値動きが緩やかになっていますよね。

ただ、値動きの幅は変わりこそしますが、初期の流動性を変えたくらいでは結局は緩やかに死んでいきます。BCGの死にゆく運命を実感します。

まとめ

BCGのゲームフローにユーザーの流入や疑似DEXを付け足して、エコシステムのシミュレーションをしてみました。

NFTが増えすぎて売り圧が増え、価格を決定づけるDEXの流動性がトークン側に傾くことでどんどん値段が下がっていく様子が伝わったかと思います。

このほかにも、mintされたトークンの分配比率を変えたり、NFTのmintコストを変えたり、ユーザーの流入モデルを変えたりとできるシミュレーションは色々ありますが大体死にます。

ただ、一概に死ぬと言っても何をいじるとどう死にやすくなるのかがわかってくるのがシミュレーションのいいところです。興味の湧いたBCGerは是非触ってみてはいかがでしょうか。

twitterの方でも時々Machinationsを使ったシミュレーションについて呟いているので、是非フォローお願いします!

Machinationsはコチラ

いいなと思ったら応援しよう!