Holo Fuelの開発と困難を耐え抜いたテストで得た知見
概要
私たちは、HoloFuelを公開アルファテスト用にリリースするための現在進行中の旅の舞台裏を皆さんに共有する価値があると思います。このデバッグのプロセスを垣間見ることで、独自のホロチェーンアプリ(hApp)を設計およびテストするときに考慮する必要があるかもしれないことについての洞察が得られるでしょう。この特別なデベロッパーパルスにはパート2があります。
Holo Fuelの開発と困難を耐え抜いたテストで得た知見
Holo Hostニュースを見ている方は、機能する管理者ダッシュボードとHoloFuelのテストバージョンを備えたHoloPortOSの更新が約1か月前から約束されていたことがわかると思います。なぜこんなに時間がかかるかと皆さんも思っていることでしょう。私たちは毎週、アップデートに緊張し、リリースのアナウンスを緊迫した雰囲気の中用意するのですが、残念なことにそこで新たなバグを発見してしまっています。
組織の多くのチームメンバーはソフトウェア開発のベテランです。私たちの開発者とプロジェクトリーダーは、大なり小なりのソフトウェアプロジェクトを通して長年培った経験から得られた豊富な知恵を理由に選ばれました。これまで経験してきたプロジェクトの多くは非常に難解なものでした。このすべての経験があっても、Holochainの構築は、以前に直面したものよりも複雑であり、単純に今まで開発してきたものと全く異なることがわかりました。そして、これはもちろん私たちが新しい方法で既存の問題に取り組む物を構築しているからなのです。私たちは初心者ではありませんが、このプロジェクトに関しては度々そのように感じるときもあります。
HoloFuelのリリースを阻んでいるしているものの詳細を共有する際に、私たちの経験から学び、独自のhAppテストプロセスのガイドとなるればと思います。Holochainをアプリの技術スタックの1つとして選択することは、非常にユニークな技術をしようすることになり、それにはリスクも伴います。私たちは読者がそのような行動をとっていることを理解し、その果敢な挑戦に我々は感謝します。結果整合性、分散型システム、および暗号データ構造に関する豊富な文献があっても、他の誰も直面していない設計上の問題に読者はホロチェーンアプリを作る上で直面する可能性があります。そのため、我々がhAppの開発とテストのベストプラクティスを学んでいく上で、その知恵が我々のチームを超えて皆さんにも使えるよう実を結ばせたいと思っています。
最近の内部でのテストでは、HoloFuelは最初の日はうまく機能し、その後パフォーマンスが低下していました。既存のテストへの参加者は、取引の生成者に通信して取引の内容を確認しようとすると、タイムアウトしてしまい保留パターンに陥ることが多々ありました。調査の結果、アップグレード後のHoloPortOSの動作が原因であることが判明しました。アップデート後にHoloPort所有者のソースチェーンはクリアされますが、公開鍵/秘密鍵は同じままであることが判明しました。多くの場合、アップグレードではUIの修正のみであるため、HoloFuelのDNAのハッシュ(およびDHT)がアップデートの間、保持されていたのです。これにより、ユーザーは同じIDで新しいソースチェーンを作成してしまっていたのです。
Holochainのデータの整合性について知っていれば、これはあるユーザーのソースチェーンが分岐してはならないというルールに違反していることが理解できます。しかし、HoloPortは単に古いソースチェーンのみをクリアしたため、次のような厄介な状況が発生してしまいました。
データ認証者:「昨日、あなたはアリスとのトランザクションをコミットしていますね。トランザクションを検証できるように、残りのソースチェーンをください」
HoloPort:「え?アリスとのトランザクションについては何も知りません。今朝、ネットワークに参加したばかりです。」
データ認証者:「いやただ、このトランザクションにはあなたの署名があるので…」
HoloPort:「…」 (しばらくして) データ認証者:「昨日、アリスとのトランザクションをコミットしていますね…」
これらの解決できないやりとりは、最終的にネットワークの活動を停止させます。我々は生成者であるノードがバリデーション用のパッケージを作成できない場合に検証が失敗するように、Holochainを修正しました。しかし、突然、Holochainは想定どおりの動作を行い、ほぼ全員のトランザクションを無効としてしまいました。
したがって、各テストサイクルを履歴のない新しいDHTで開始することにしました。これを行う最も簡単な方法は、ハッシュが異なるようにDNAパッケージを変更することです。そして、これを行う最も簡単な方法は、プロジェクトのapp.jsonファイルまたはコンダクターコンフィグレーションでUUIDフィールドを変更することです。現在は、白紙の状態のDHTを生成することを自動化してテストサイクルを高速化する方法に取り組んでいます。
また、アップデート間でソースチェーンの内容を維持するHoloPortOSの修正にも取り組んでいます。これにより、ソースチェーンの競合が最初から防止されます。もちろん、これはプロダクション用のホロチェーンアプリには必要なものです。
これは、HolochainまたはHoloPortOSのバグを修正する作業に関係していますが、白紙の状態のDHTを常に生成することはhApp開発者に役立つ可能性があると考えています。テストサイクルごとに新しいDNAハッシュを作成する必要性は次のとおりです。
- テストでは、再現可能な状態(空のDHTなど)が重要です。
- hAppで予期しない動作が発生しており、それがDNAのバグが原因か、DHTの問題(またはHolochain自体のバグ)が原因なのかわからない場合に、問題を特定するために、問題を明確に理解するために、履歴の無い新しいDHTを常に使用することをお勧めします。
- 未解決のバグを修正するHolochainアップデートを我々がリリースする場合があります。その場合、テスト環境とリリース環境の両方でDNAハッシュを変更して、無効なデータをクリーンアップしたいと思う場合もあります。。
hAppの問題の原因がDNA(開発者自身のコード)のバグである場合は、新しいDNAをリリースするときに、バグ修正の結果としてハッシュが自然に変化するため、空の状態のDHTは自動的に作られます。
より現実的な環境でより多くのhAppをテストするにつれて、より多くの知識を共有していきたいと思います。私たちは、私たちの成功があなたの成功になることを望んでいます!
最後に、私たちが共有できることとして、このすべての開発を通して、HolochainチームがHolochain v0.0.46をリリースすることです。これは新しいデベロッパーリリースとなります。詳細については、Holochain デベロッパーパルス No.68 パート2をご覧ください。
開発ステータス
最新版
Holochain Coreリリース: 0.0.45-alpha1 | 変更ログ
Holonixリリース:v0.0.72
Try-o-rama(エンドツーエンドテストツール)リリース:v0.3.3
Holoscapeリリース:v0.0.8-alpha (Holochain Core 0.0.45-alpha1を使用中)|ダウンロード
https://holochain.loveにて使用可能なバージョン
- Holonix: 0.0.72
- Holochain Core: 0.0.46-alpha1
出典:Challenges endured and wisdom gained building and testing HoloFuel