アビトラ民のブログ

Note:https://note.com/qash

8/1-12の損益とブロックチェーンゲームのトランザクション解析(CryptoBlades)

+25万でした。収益源は主にアビトラとCryptoBladesでした。利益を訴求するよりもブロックチェーンまわりの技術を訴求していたらそこまで稼げませんでした。

 

f:id:tit_BTCQASH:20210812200058p:plain

Tx解析の面白さ

 色々と思うところがあってBSCチェーンのTxを解析しています。CryptoBladesでは0.1Skillなどの異常な価格でキャラクターを販売するアホが多い(相場は0.5Skill程度)ので、そのような価格のキャラを買うことに注力していました。

 (例えばこのTx:

bscscan.com)

 

必要な技術要素としては、

i)Txpoolの情報を得る

ii)購入するTxを送る

の二つだけですが、かなり奥が深いです。

イメージとしては、i)の実行時間が0.1-0.5秒、ii)については0.05秒程度なので、i)の寄与がかなり大きいです。

先々週まではリスティングの2Block 後でガス戦争(ガス代を上げて優先的にTxを通す)が起きていましたが、最近は同ブロックで発注がかかるので、純粋なプログラミングスキルの勝負となっています。


以下の画像の通り、全く勝てなくなりました。

f:id:tit_BTCQASH:20210812200936p:plain

少なくとも、BSCSCANなどの監視をしても絶対に負けますし、Binanceが公式に出しているRPC接続でも負けます。

 

先行者(異常に安価なキャラを買っている人)に勝つために必要要素として

a)自前のBSCチェーンのNodeを持つ

b)Gitに上がっているP2P通信モジュールを改良してピア接続を改善する

c)通信環境(10GBpsくらい)を整えつつ、SATAじゃない2TB SSD(m2)でSSDへのアクセス速度を1.5GB/secくらいまで上げる

d)web3を早い言語で書きなおす

e)24コア位のCPUと128GBくらいのメモリに換装する

を考えています。

 

かなり労力と課金がかなり必要な状況ですが、楽しいのでしばらく戦います。

ここまで100キャラちょっとを5SKill程度で買えたので、勝てれば楽しそうです。勝てれば・・・。 

 

ブロックチェーンゲーム(BCG)で戦う場合、人と同じことをしては負けると思っているので、ちょうどいい勉強と思っています。

 

今、CryptoBladesなんかに参入して普通にゲームしている人は負けているのではないでしょうか。

 

こういうゲームで勝つために必要なのは

1)誰よりも早くそのゲームにたどり着き、安いNFTを手に入れたり、レベル上げをする

2)バグ・抜け穴などをつき、利益を得る

のどちらかが王道でしょう。現状はどちらもCryptoBladesにはないので、Tx解析して安いのを取っていくのが良いでしょう・・・。

 

 

BCGにおけるランダム要素

色々とBCGのSolidityコードを見ていて、ランダム値を発生させる部分で思ったことを書きます。

Dungeon Swapというゲームがあるのですが、このゲームでランダム値は以下のようになります。(Contract Address 0x0f8F5fBdcB8548f08F87393912339E535f631695 | BscScanから引用)

uint256(keccak256(abi.encodePacked(blockhash(_yourLastDecisionBlock+1), _yourAddress)

 

簡単に言うと、戦闘時のブロックの次のブロックハッシュと、自身のアドレスをエンコードし、keccak256でハッシュ値を得る感じのコードです。

本コードでは、プレイヤーがTxを発行した時点では、そのブロックのブロックハッシュ値を得ることができても、その次のブロックハッシュは得ることができないので安全です。

 

uint256(keccak256(abi.encodePacked(blockhash(_yourLastDecisionBlock), _yourAddress)

 

の場合はどうでしょう。

もし、攻撃者がいる場合は、_yourLastDecisionBlockのハッシュはTx送信時点ではわかりませんが、例えば、自前のコントラクトアドレスにTxを送り、_yourLastDecisionBlockのハッシュを取得し、ランダム値を計算することが可能です。望ましいランダム値であればTxを成功させ、だめならTxを失敗させれば、ガス代分のリスクで望ましい結果を得ることが可能です。

 

uint256(keccak256(abi.encodePacked(blockhash(_yourLastDecisionBlock-1), _yourAddress)

 

の場合は簡単にブロックハッシュはわかるので省略します。

 

以上から、uint256(keccak256(abi.encodePacked(blockhash(_yourLastDecisionBlock), _yourAddress)

のようなランダム値を採用しているでBCGは攻撃者が想定されるためプレーすべきではないでしょう。

 

ほとんどのBCGはクオリティが低く、いつラグプルされるかわかりません。

せめて、Gitがあってコードがわかるものをプレーするのがいいと思いました。

次の収益源になりうるゲームは何かなー・・・。