はじめに
Arweaveプロジェクトは2017年にICOを行い(その際は「Archain」という名称でした)、以来継続的にコラムやリリースなど情報発信を続けてきています。
それらの情報の大部分が英語で発信されたものであるため、日本人に向け、少しずつ翻訳して紹介していきます(都合上、意訳を多く含みます。必ずリンクを張りますので可能なら原文も確認してみてください)。
NO-VLNS: 巨大なArchainネットワークを1台のマシンでシミュレートする
2017年10月5日
Archainプロジェクトの斬新なコンポーネントは、我々の提供する大規模ネットワークシミュレーションフレームワークです。これを使えば1台のマシン内で、Archainネットワークの挙動をアットスケール(タイムストレッチを含む)でテストすることができます。
私たちはこのシステムをNO-VLNS (The Never Off-Very Large Network Simulator)と呼んでいます。
Erlangの使用によって可能になったこのシステムは、私たちの知る限り、ブロックチェーン技術のスタートアップがこのスケールで完全なシミュレーションを1台のマシン内で実行するツールを提供した初めてのものです。
NO-VLNSは、様々な条件で何百もの同時実行を可能にし、プライベートネットワークの段階が始まる前に、100万分の1の確率で発生する挙動バグを明らかにすることができるのです。
このフレームワークのアーキテクチャは次のとおりです。
一連のテストは、あらかじめ定義されたテストを起動し、並行して実行するスーパーバイザによって管理されます。各テストには、ステータスの更新を提供し、シミュレーションされたイベントのロギングを実行する関連するモニタがあります。テストが失敗した場合、モニターはその理由を記録し、スーパーバイザーは失敗したテストを再実行します。テスト自体は、相互に作用するシミュレートされたArchainユーザー(クライアント)とマイナー(ノード)の起動で構成されています。
テストは、ネットワークプロパティと環境変数の定義を含むレコードによって定義されます。このようにして、クライアントとマイナーとその接続という観点からネットワークを定義し、ネットワーク上の遅延、転送速度、パケットロスの確率などの要因を定義することによって、現実的なネットワークをシミュレートすることができます。
このようなネットワークテストの記録をいくつか定義することで、様々な種類のネットワークを、バグが発見されたときに停止して重要な情報を記録するまで、連続的かつ並行してシミュレートすることができます。私たちは、毎晩、その日の開発作業を本番コードに統合した後、一連のテストを実行しています。
加えて、特定の動作(フォークリカバリ、二重支出攻撃など)をテストする小規模な静的テストも多数定義しています。このようにして、一般的な方法でネットワークが正しく機能することと、細かいエッジケースの挙動を包括的に検証することができます。
ArchainのGithubリポジトリをチェックアウトして make test_networks を実行することで、自分自身でテストを実行することができます。ネットワーク定義は src/ar_network_tests.hrl で定義されています。