Telegram上で遊べるWeb3アプリを開発するために、TONとTelegram Mini Appsの全体像を理解する
はじめに
Cointelegraphによると、Telegram上でプレイできるWeb3ゲーム「ハムスターコンバット」の獲得ユーザー数が、2024年のリリースから5ヶ月余りで3億人を突破したらしい。
こういったゲームについて、「TONというブロックチェーンを使っている」「9億人のユーザー基盤があるTelegram上に展開できる」というメリットは分かっても、どうやって開発すればいいかイメージがついている人は少ないのではないだろうか。
この記事は、「Telegram上のアプリ(Telegram Mini Apps)の開発って意外と簡単そうだな」と考えられるようになるための、システム全体像の理解に重きを置いて書く。
Telegram Mini Appsの全体像
基本的にはこの図を理解していれば問題ない。
ポイントは、「Telegram上で動いているアプリはただのWebView」だということ。
ブラウザで動くWeb3アプリケーションを作成できれば、数行コードを追加するだけでそれをTelegram Mini Appとして動作させることができる。
構成要素の特徴をピックアップ
1. ブロックチェーンとしてのTONの特徴
3つのチェーンでTONを構成
TONは3つのチェーンで構成されている。
① マスターチェーン ⇔ consensus
② ワークチェーン ⇔ execution
③ シャードチェーン ⇔ rollup
右側にEthereumにおける対応要素を書いた。
TONは後発なのでシャーディングがnativeに実装されているものの、全体構成は非常に似ている。
開発のために必要なテックスタックが似ている
開発のためのテックスタックも非常に似ていて、例えば以下のようなものがTONにも存在している。
- Wallet -> TON Keeper
- Explorer -> tonscan
- Faucet -> Testgiver TON Bot
- RPC -> TON Access
- etc.
2. プログラミング言語「FunC」の特徴
FunCは、TONのスマコン開発用に作られたC-likeな言語。
コードは3つのsectionに分類される。
① storage
② messages ⇔ write
③ getters ⇔ read
構成はEthereumのSolidityと似ている。
ただ、よりlow-levelな部分を意識する必要があって、シンプルに書きづらい。
例を挙げる。
storage
TONのintは257bitで固定されている。これだとgas代が多くかかってしまうので、例えば自分で64bitを切り出して使ったりする。
messages ⇔ write
TONでは他のコントラクトから呼ばれる場合、internal message。ウォレットもコントラクトなので、基本的にはinternal messageだけ。
recv_internal関数が、この全てのinternal messageをハンドリングする。関数内部で、in_msg_bodyの最初の32bitから関数のidを判別してif文で処理を書き分ける。
このような感じで、storageのsizeを意識しながらコードを書いたり、関数名を自由に付けられなかったりと、何かと書きづらい部分が多い。
3. その他、TONの興味深いところ
contractは常にストレージのレンタル料を払い続ける
スマコン上のデータはネットワークを構成するnodeのストレージに保存されるが、TONではそのstorageの利用料がスマコンのbalanceから常に引かれていく仕組みになっている。
具体例としては、1MBのデータを1年スマコンが保持すると、4TONがかかる。
この金額がスマコンの残高から引かれていくので、スマコンには常にTONを持たせておく必要がある。
ネイティブにAccount Abstractionを実現
TONのウォレットはデフォルトでスマートコントラクトウォレット。
また、スマコンがデプロイされるのは1つ目のトランザクションが実行されるときなので、直近Ethereumエコシステムで流行っているUXの良いAAウォレットと同じ仕組み。デプロイ前にアドレスだけ分かるところも同じ。
1つのアドレスを表す、複数の文字列パターンが存在する
TONではencode方式によってアドレスの文字列が変わるため、あるアドレスをexplorerに入れたときに、別のアドレス(文字列)として表示されることがある。これらは違う文字列で表示されているが、同じアドレスを示している。
1つのmnemonicに対して、複数のバージョンのウォレットが存在する
TONではウォレットに「バージョン」という概念がある。そのため、同じmnemonicからウォレットのアドレスを取得しても、以前と異なる場合がある。急にbalanceが0になってしまったときはバージョンを確認する。
まとめ
Telegram上でアプリを動かすのは、ブラウザアプリの開発とほとんど変わらない。
一方で、TONというブロックチェーンには独自の特徴がいくつかある。ただこちらも、個々の要素を比べると違いがあるものの、全体的な構成に関してはEthereumでの開発とそこまで変わらない。
そのため、あまり身構えることなく、気軽にTONを使ったTelegram Mini Appを開発してみるのが良い。
Next Step
実際に開発してみたい場合は、以下のチュートリアルから始めるのがおすすめ。
お知らせ
Xではより高頻度にWeb3関連の情報を発信しています🔊
是非フォローをよろしくお願いします!
Discussion