💻

Telegram上で遊べるWeb3アプリを開発するために、TONとTelegram Mini Appsの全体像を理解する

2024/08/09に公開

はじめに

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にも存在している。

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

実際に開発してみたい場合は、以下のチュートリアルから始めるのがおすすめ。
https://tonhelloworld.com/01-wallet/

お知らせ

Xではより高頻度にWeb3関連の情報を発信しています🔊
是非フォローをよろしくお願いします!
https://x.com/ryoheikomy

Discussion