Amadeus Protocolノードの内部を探る
最近、amadeusprotocolチームの興味深いノードリポジトリを見つけました。このプロジェクトは研究用ブロックチェーンのノードとして位置づけられており、その技術構成の多彩さで注目を集めています。メインコードベースはRustとBEAMエコシステム(Erlang/Elixir)に基づいており、スマートコントラクトはAssemblyScriptから直接WebAssemblyにコンパイルされます。
ここではHardhatやFoundryのようなおなじみのEVM開発ツールは使用されていません。その代わりに、開発者はインタラクティブなElixirコンソールを通じてローカルネットワークを直接管理し、最適化されたUDPスタックでトランザクションを実行する方法を提供しています。この構成の詳細とテスト環境のセットアップ方法を説明します。
プロジェクトの中身
ビルドスクリプトとコードに基づくと、著者は2つの主要な焦点を持っています:高ネットワークレイヤースループットとWASMを介したシンプルなスマートコントラクト実行モデルです。
リポジトリにはいくつかの興味深い詳細があります:
- ネットワークスタックは、アグレッシブなシステムソケットバッファ設定でギガビットUDPトラフィック用に最適化されています。
- スマートコントラクトはAssemblyScript(TypeScriptサブセット)からWASMファイルにコンパイルされ、Web開発者にとって馴染みやすい形式です。
- 組み込みのインタラクティブREPLにより、1行のElixirコードでコントラクトメソッドを呼び出し、トークンを転送できます。
- ノードロールはcomputorsとvalidators(trainers)に分かれています。
ローカルテストネットのビルドと実行
ビルドにはDockerまたはPodmanが必要です。このプロジェクトはErlangとRust環境を持つ分離されたコンテナでコンパイルされます:
ビルドが完了すると、実行可能なバイナリが生成されます。ローカルでテストするために、著者はローカルエンドポイントを起動してシステムホストに向けることを提案しています:
コンソールを通じたスマートコントラクトの操作
最も興味深い部分は、REPLを通じてノードと対話することです。テストネットを開始すると、すぐに組み込みのアカウントキーを取得し、テスト用カウンターコントラクトをデプロイできます。
コントラクトのデプロイとメソッド呼び出しの例:
コントラクトはAssemblyScriptで記述され、WASMにコンパイルされてからノードに渡されて実行されます。これはMoveやSolidityのような特定のDSLを学ぶことに比べて、参入障壁を大幅に下げるものです。
高ネットワーク負荷のためのシステムチューニング
ドキュメントでは、Linuxネットワーク設定に大きな注意が払われています。集中的なUDPトラフィックを処理するために、設定ファイルでソケットバッファとファイルディスクリプタの上限を引き上げるよう提案されています:
バックグラウンドモードでは、ノードはコンテナ内でプロセスを起動するsystemdサービスとしてパッケージ化されています。これにより、いつでもアクティブなセッションに接続して状態をデバッグできます。
このプロジェクトが興味深い人
プロジェクトドキュメントはまだ非常に限定的で、免責事項ではこれが実験的な研究プロトタイプであることが正直に述べられています。それでも、ソースコードは次のような人々に役立つでしょう:
- BEAMで暗号プリミティブや分散コンセンサスの実装を見たいErlangおよびElixir開発者。
- サーバーアプリケーションへのWASMランタイム統合を学研究している人。
- 高負荷ネットワークプロトコル向けのUDPスタック調整に興味があるシステムエンジニア。
コードはオープンソースで、10〜15分でローカルテストネットを構築し、独自のWASMコントラクトで実験を始めることができます。
関連プロジェクト