はじめに
他のデータベースとは異なり、ブロックチェーンへの書き込み(トランザクション)には、ガス代という形で費用がかかります。ブロックチェーンやWeb3ゲームを開発する際は、ガス代について考慮する必要があります。Sequenceのガススポンサーシップを利用すれば、エンドユーザー向けの複雑な処理の多くを自動化できますが、開発者としてもガス代についていくつか注意すべき点があります。ゲーム開発時には、ブロックチェーンへトランザクションを送信する頻度を考慮し、ランタイムコストを最小限に抑えるようにしましょう。
トランザクションは、インターネット接続の不具合や残高不足など、様々な理由で失敗することがあります。
Unityでこれを実装するには?
まず、ユーザーがオンチェーンで保有しているものをローカルでキャッシュする仕組みを作ります。これは簡単で、ブロックチェーンからデータを読み取り、ユーザーのトークン残高を都合の良い形式でローカル保存するだけです。既存のゲームやプロトタイプでPlayerPrefsなどのローカルストレージや、RDBMSのようなリモートストレージを使っている場合は、すでにローカルキャッシュの仕組みがあるはずなので、アダプターを作成するだけで十分です。 次に、Unity SDKが提供するTransactionQueuer
およびその継承クラスを活用するのがおすすめです。TransactionQueuer
は高い柔軟性があり、プレイヤーが頻繁に状態を変更するゲームの開発をサポートするために設計されています。例えば、ゲーム内でコインなどの低額取引を大量に集める場合、PermissionedMinterTransactionQueuer
(mint
関数に権限が必要な場合、デフォルトでサーバーからミントする場合)や、SequenceWalletTransactionQueuer
(誰でもミントできる場合)を利用できます。これらを使えば、複数の取引をキューに追加するだけで、可能であれば自動的にまとめてくれます(例:‘mint(amount: 5, tokenId: 11)‘と’mint(amount: 3, tokenId: 11)‘が’mint(amount: 8, tokenId: 11)‘にまとめられる)。取引はx秒ごと、または関数呼び出し時に送信できます。また、最短でもy秒ごと(高額取引の場合は上書き可能)といった設定も可能です。TransactionQueuer
の詳細はこちらのドキュメントをご覧ください。
最後に、取引の失敗を検知し、適切にエラー処理を行う必要があります。