TON (The Open Network)は、テレグラム・チームによって独自に設計された分散型ブロックチェーン・プラットフォームです。TONの目標は、分散型アプリケーション(DApps)とスマートコントラクトを大規模にサポートする、高性能でスケーラブルなブロックチェーンプラットフォームを提供することです。
TONは、一般人がトークンに簡単にアクセスできるようにするTelegramとの深い統合によって使いやすく、他のブロックチェーンとは全く異なるアーキテクチャと非主流のFunCスマートコントラクト言語の使用によって複雑であるという点で非常に特別です。今日は、アカウント、トークン、トランザクションの観点から、TONの特徴とユーザー資産のセキュリティについて説明します。
.align: left;">TON アカウントアドレスは、ほとんどのブロックチェーンとは異なる方法で生成されます。まず、秘密鍵が開設され、TONは主にEd25519アルゴリズムを使用して公開鍵を生成し、以下のような生成過程を経る。
ここで公開鍵には2つの形式があり、1つは秘密鍵から計算されたオリジナルの公開鍵で、以下のような形をしています。E39ECDA0A7B0C60A7107EC43967829DBE8BC356A49B9DFC6186B3EAC74B5477Dもうひとつは「美化された」公開鍵で、公開鍵を運ぶものです。もう1つは「美化された」公開鍵で、公開鍵の情報とチェックデジットの一部を次のように伝えます: Pubjns2gp7DGCnEH7EOWeCnb6Lw1akm538YYaz6sdLVHfRB2
EtherChannelでそうであるように、公開鍵を取得すればアカウントのアドレスがわかると考えるのはナイーブでしょう。単にユーザーの公開鍵を持っているだけでは、ユーザーのアカウントアドレスを計算するのに十分ではありません。ユーザーのアカウントアドレスがスマートコントラクトのアドレスになると言いましたが、アカウントもないのにどうやってスマートコントラクトをデプロイできるのでしょうか?正しい順序は、まずアドレスを計算し、トークンを少し受け取ってから、コントラクトをデプロイすることができます。
ユーザー(User)
アカウントのアドレスを計算するプロセスを以下に示します。
0:b4c1b2ede12aa76f4a44353944258bcc8f99e9c7c474711a152c78b43218e296
0:b4c1b2ede12aa76f4a44353944258bcc8f99e9c7c474711a152c78b43218e296
これらのアドレスをよく見てみると、最初と最後の文字だけが異なり、真ん中の`account_id`は同じであることがわかります。このデータにはユーザーの公開鍵が含まれており、この鍵を通じてユーザーはウォレット契約の所有権を管理することができる。workchainId`は理解しやすく、TONは単一のチェーンではなく、非常に多くのスライスから構成されており、それぞれがネットワーク全体の一部であり、特定のアカウントとトランザクションのセットを処理する。スマートコントラクトを見つけ管理するためには、どのスライスにあるのかを指定する必要があります。バウンス可能」と「バウンス不可能」の違いは何ですか?これはスマートコントラクトの仕組みに関係しているので、話を続けよう。
ウォレットコントラクト
以下はユーザーのウォレットコントラクトのソースコードの一部です。style="font-size: 16px; background-color: rgb(248, 248, 248);">.
その通り、このユーザーのウォレットコントラクトは、256ビットのpublic_keyメッセージを含むいくつかの初期パラメータを渡してデプロイする必要があります。このメッセージには256ビットのpublic_keyメッセージが含まれており、同じコントラクトコードを使用する場合、各ユーザーが別々のコントラクトアドレスを持つことが保証される。ユーザーによって開始されるすべてのトランザクションは`in_msg`で署名される必要があり、その後、ウォレットコントラクトによって検証される(check_signature)。このことから、ユーザーの公開鍵は実際には無数のウォレットアドレスに対応することができ、完全に異なるコントラクトアドレスを得るためには、異なるソースコードまたは異なる初期化データを持つウォレットをデプロイする必要があるだけであることも推測できます。
Jettonトークン
トークンは資産のオンチェーン表現であるため、理解する必要がある基本要素です。JettonはTONトークンの標準形であり、JettonはJetton-minterとJetton-walletの2つのコントラクトで構成されています。
トークンが発行されると、Jetton-minterコントラクトが作成され、トークンの総数、管理者、ウォレットコード、その他の情報を記録するために初期化されます。
トークンがユーザーに配布されると、ミンターコントラクトはユーザー用のウォレットコントラクトを展開し、コントラクトが初期化されたときにユーザーの残高、所有権、トークンのミンターコントラクトアドレス、ユーザーのウォレットコードを記録し、各ユーザーは個別のコントラクトを展開する。ここで作成されるコントラクトは、特定のJettonトークンを管理するためのウォレットコントラクトであり、owner_addressがユーザーのアカウントのウォレットアドレスとして記録される、ユーザーのアカウントのウォレットコントラクトとは異なることに注意してください。
ユーザーAliceがユーザーBobに送金する場合、呼び出し関係は次のようになります:
アリスはAPPをチェーンダウンして署名し、彼女のウォレットコントラクトを呼び出して操作する指示を与えます。これらの指示はさらに、彼女のトークンウォレットを呼び出して送金します。Bobのトークンウォレットがトークンを受け取ると、Bobのウォレットコントラクト(つまりBob Jetton-walletのオーナーアドレス)に通知します。もし取引でガスが残っていれば、それもレスポンスアドレス(通常はアリスのアカウント契約)に返されます。
以下は、Tonviewerブラウザによって解析されたJettonトークン転送です:
ERC20の送金には最低1つのコントラクトが必要ですが、Jettonトークンの送金には最低4つのコントラクトが必要で、これはチェーン上で同時に送金ができるようにし、トランザクションの効率を高めるように設計されています。
トランザクション
トランザクションは、TONのアカウントに何かが起こったときにトリガーされます。
トランザクションでは、以下のいくつかの機能を認識する必要があります。特徴:
1.非同期:TONトランザクションは1回の呼び出しでは完了しませんが、複数の異なるスマートコントラクトへのメッセージングによる一連の呼び出しが必要になる場合があります。チェーン内のルートが異なるため、TONは複数のスマートコントラクト間でメッセージが配信される順序を保証しません。
2.手数料: TONの非同期的な性質は、予測不可能な手数料の問題も生み出します。そのため、トランザクションを開始する際、ウォレットは通常、手数料としてさらに数トークンを送ります。呼び出し元コントラクトが優れた手数料処理メカニズムを持っている場合、残りの手数料は最終的にユーザーのウォレットに戻される。これが、ユーザーがウォレットトークンの急激な減少を観察し、数分後に増加する理由です。
3.バウンス:バウンスはコントラクトのエラー処理メカニズムであるため、呼び出し元のコントラクトが存在しないか、エラーをスローした場合、トランザクションがバウンス可能に設定されている場合、バウンスされたメッセージは呼び出し元のコントラクトにバウンスされます。例えば、ユーザーが送金を開始し、呼び出しプロセスがエラーをスローした場合、ユーザーのウォレットコントラクトが残高を回復できるように、バウンスメッセージが必要となる。スマートコントラクト間で送信されるほとんど全ての内部メッセージはバウンス可能であるべきです。
資産のセキュリティ
TONにはセキュリティ問題を引き起こす可能性のある機能が多数あるため、ユーザーはいくつかのよくある落とし穴に注意する必要があります。
手数料の横取り攻撃
ウォレットが取引実行の失敗を防ぐために余分な手数料を送金する必要があることが多いことは前述しましたが、これによって攻撃者はいたずらの機会を見つけることができます。TONウォレットのユーザーであれば、このような状況に遭遇したことがあるかもしれません。ウォレットは常に様々なNFTやトークンを受け取りますが、それは単なるジャンクトークンのエアドロップだと思っていましたが、トランザクション情報を確認すると、それは大金で売ることができるのでしょうか?しかし、取引を開始すると、超高額な手数料(1トン)が必要なことがわかり、手数料詐欺かもしれないので注意が必要です。
攻撃者は慎重に構築されたトークンコントラクトを使って、ウォレットの推定送金手数料を実際の実行は単に手数料を傍受し、送金メッセージを送信しません。
最初と最後の数字フィッシング
最初と最後の数字フィッシングはTONに特有のものではなく、すべての主要なパブリックチェーンに存在します。攻撃者は、ネットワーク全体の各ユーザーアドレスに対して、同じ最初と最後の番号を持つハイファッションアカウントを生成します。 ユーザーが送金を行う際、攻撃者は、ユーザーのコレクション記録に記録を残すために、ハイファッションアカウントを使用して少額の送金を行います。受信側のユーザーがトークンを送金し返したい場合、履歴からアドレスをコピーする可能性があり、そのアドレスは攻撃者のアドレスにコピーされる可能性が高く、その結果、間違ったアドレスに送金されてしまうため、攻撃者はユーザーの行動を正確に突き止めることができます。
コメントフィッシング
TONは送金時にコメントを追加し、取引情報を記録することができます。この機能は、リロード時にユーザーIDをメモすることをユーザーに要求する取引所で頻繁に使用されていますが、ユーザーから資産を得るためにコメントに不正な情報を書き込む攻撃者に悪用されることがよくあります。
ユーザーは特に以下の点に注意する必要があります。ユーザーがAnonymous Telegram NumberでTG番号を開いたものの、2段階認証を開かなかった場合、このNFTが荒らされると、ハッカーはターゲットのTG番号に直接ログインし、その後の資産窃盗やなりすまし行為を行うことができます。
スマートコントラクトの脆弱性
スマートコントラクトの脆弱性は、ユーザーがスマートコントラクトに入れた資金に損害を与える可能性があり、ユーザーはプロジェクトを選択する際に、よく監査されたプロジェクトを選ぶ必要があります。TONのスマートコントラクトは、主にFunC言語を使ってプログラムされているが、より高度なTactや、より基本的なFiftなども使われており、いずれも独自性の高い言語である。新しいプログラミング言語は新たなセキュリティリスクをもたらすが、特に開発者にとっては、安全なプログラミングの良い習慣を持ち、ベストセキュリティプラクティスをマスターし、厳格なセキュリティ監査の前に本番環境にデプロイする必要があり、スペースが限られているため、この記事ではコントラクトのセキュリティについては説明しない。スローフォグセキュリティチームは、TONスマートコントラクトのセキュリティ監査サービスを開始しました、一緒に議論する監査のニーズを持つ友人を歓迎します。
偽トップアップ攻撃
ウォレットや取引所のユーザーは、偽トップアップ攻撃に注意する必要があります。list-paddingleft-2">
攻撃者がターゲットトークンと同じメタデータを持つトークンを発行する偽トークンで、自動アカウンティングプロセスがこれが正しいマイナー契約であることをチェックしない場合、不正なアカウンティングにつながる可能性があります。
概要
この記事では、TONの公開鍵と秘密鍵の作成、ウォレット契約、トークンの形式、取引の特徴という観点から、TONの基本的な技術原則のいくつかを紹介します。本記事では、TONの公開鍵・秘密鍵の作成、ウォレット契約、トークンの形態、トランザクションの特徴などの観点から、TONの基本的な技術原則を紹介するとともに、TONを利用する過程で存在する可能性のあるセキュリティ上の問題を探り、皆さんの学習のヒントになればと思います。