TON Virtual Machine (TVM,時にはTON VM) ブロックチェーンでスマート・コントラクトを実行する仮想マシン TONこれはネットワークの実行層です. スマート契約書 TVMのプログラムとして保存され,動作します. 機械は入ってくるメッセージを処理し,契約の常態を変更し,他の契約のための出力メッセージを形成します.
TVMアーキテクチャは3つの要件に従います. 完全なる実行決定性 (同じ入力で任意のノードで同じ結果が得られる),高いコード密度 (ブロックチェーンの最小スペース) と指示集を拡張する際に逆互換性.
歴史#
TVMは,TONプロトコルの最初のバージョンと共に2018年にTelegramチームによって開発されました. 開発は段階的に行われました.:
- 2018 TONテストネットワークでリリースされたTVMの最初のバージョン.主な焦点は,スマートコントラクトの機能とプロトコルとの統合である.
- 2020年3月 詳細な技術文書を公開し,データタイプ,最適化,契約説明を記述します.
- 2020年 (mainnet開始) TVMは,完全な一連の操作をサポートし,生産ネットワークで決定的な実行を保証します.
プロジェクトがコミュニティに転送された後,TVMの開発はTEPプロセスを通じて継続されます. 更新は改善提案によって導入され,検証者のコンセンサスによって活性化されます.
基礎#
TVMは,ビット行を基本的なデータ表示として使用する.それらは2つのノテーションで表現される:
- 十六桁の表記 文字列の長さは4ビットの倍数で,4ビットのグループに分かれ,それぞれが1つの16桁の数字 (0F) で記述される.長さが4倍でない場合は,修飾を表示するために特別な終了タグが追加される.
- オクテットでシリアル化 文字列は 8 ビットごとにグループに分けられ,バイトの連続として書き込まれ,必要に応じて 8 まで並べられる.
スタックモデル#
TVMは,スタック型仮想マシンである.これは,データが名前付変数やレジスタではなく, Last-in-first-out の構造で保存されていることを意味する.ほとんどの操作 (算数,比較,パラメータ転送) は,スタックの引数を取り,結果をそこに置く. スタックモデルは,レジストアアプローチよりもシンプルで,指示のより密度の高いコーディングを可能にします. は,オンチェーンストレージを減らすために重要です.
値の種類
TVM ステックは,固定されたプリミティブ タイプで動作します:
- Integer 257ビットの符号整数 (分解度を選択すると,256ビットのハッシュプラス符号を紛失なく収納できる).
- Cell 1023 ビットまでのデータと他のセルへの 4 つのリンクを含むオブジェクト. TVM メモリーの基礎.
- Tuple 様々なタイプの規則的な集合です
- Slice セル間: 読み取りの際に残ったデータとリンクを表示します.
- Builder 新しいセルを連続的に組み立てるためのバッファー.
- Continuation 実行の継続点を提示する;下記を参照してください.
- Null 初期化されていないフィールドのマーカー.
ガイドラインのカテゴリ
TVMの指示は,次の用途でグループ化される.
- ステークやコルテージ スタック再配置,タプル操作
- 常数 スタックに既定値を挿入する
- 算数学的 自動で過填をチェックする標準算術操作
- セル操作 Slice を読み込み,Builder を書き込み,リンクでアクセスする
- 流れ管理 条件分岐,サイクル,継続の呼び出し
- 実用的な原始語 TONの専門業務:住所,署名,メッセージアクチュエーター
セルとその種類#
セル (Cell) は,TVMおよびTONブロックチェーンの原子的な貯蔵単位である.各セルには1023ビットまでのデータと他のセルへの4つのリンクが含まれている.リンクを通じて形成されるセルグラフ,指向アサイクリックグラフ (DAG):サイクルは許されない.ブロックチェーン上の任意のデータ (スマート・コントラクト,状態,メッセージ,ブロック) はそのようなグラフとして保存される.
セルタイプ
- 普通の (タイプ1) 標準的なデータ・リンク・メディアです
- エキゾチック (exotic cells) 2255型は,デシリアライゼーションとハッシングの特徴を有する.切断された枝 (truncated branches),ライブラリへのリンク,Merkle証明のために使用される.
エキゾチックなセルは,例えば,暗号的証拠を持つブロックチェーンの部分的なスナップショットを転送することができます. TONの軽いクライアントベース.
続き (Continuations)#
Continuationは,ストリーム管理のためのTVMの中央構造である.本質的には,実行コード,現在のスタック,および制御レジスタの保存状態を含むマーカーである.Continuationはスタックに置き,パラメータとして転送し,を有効にし,固定された地点から実行を続けることができます.
continuationにはサブプログラム呼び出し,条件操作,サイクル,例外処理が構築されている.より慣れた言語の類似は first-class functions;TVMでは,continuationはより強力で,プログラムの不完全な継続もカバーしている.
続編の種類
- 普通の にはコード,スタック,保存されたレジスタリスト,コードページが含まれています (下記を参照).
- シンプル スタックに保存されたデータがないコードとコードページだけです
- 現在 (cc, current continuation) は実行中のコードを表し 機械の状態の重要な部分です
制御はJMP (制御の転送) とRET (帰還) の指示で継続の間を切り替える.例外は,エラーで活性化される特殊な継続:彼らはエラーのパラメータを取得し,さらなる行動を決定する.条件と繰り返しの構造 (IF, WHILE, REPEAT) は継続の上に実装されている.
コードページ#
各通常の継続は,その指示をどのように解読するかを決定する16ビットコードページ (cp) のフィールドを運びます.これは逆互換性メカニズムです.ネットワークでは,TVM指示セットの異なるバージョンにコンパイルされた契約が同時に存在する可能性があります.
命令は二進法前記コードでコード化される.これは単一の解読と密集した表示を可能にします.前記が現在のコードページの許容される指示に一致しない場合は,許容されないオプコードを除外が生成されます.
コードページの間では,実行された操作に応じて自動的に切り替えることができます. これはページを頻繁な操作 (スタック操作,データ処理) に専用し,コードの容量を短縮することができます.
TVM vs Ethereum Virtual Machine#
TVMとEVMは2つのスマートコントラクト用のスタック仮想マシンですが,重要な違いがあります.
| 属性 | TVM | EVM |
|---|---|---|
| 基本データモデル | セルグラフ (Cell, 1023ビットまで + 4のリンク) | 256ビットの単語 + メークル パトリシア・トリ |
| Integer サイズ | 257ビット | 256ビット |
| 過剰チェック | オートマティック | 手作業 (Solidity ≥0.8) |
| 暗号学 | Curve25519, Weil pairings (zk-SNARKs), sha256 | secp256k1, keccak256 |
| 契約の基本言語 | FunC (静的型化,ADT) | Solidity |
| 状態保存 | 契約のセルに分布 | グローバル状態MPT |
セルグラフは複雑な構造 (ツリー,DAG) と作業を簡素化し,MPTよりもメモリとコンピューティングリソースが少なくなります.自動充填チェックは典型的な脆弱性のクラスを下げます. Curve25519とWeil pairingsのサポートは,EVMで入手できない暗号能力を提供します.