昨夜、@DuskFoundation から DuskVM のコントラクトを開き、同じソースからビルドされた2つの WASM ファイルがあることに気づきました。1つはオンチェーンで動き、もう1つはオフチェーンで動きます。そこで一度立ち止まりました。コントラクトには本当に2つの WASM が必要なのか、それとも単に複雑さを増やしているだけなのか?

インターフェースを掘ってみると、argbuf が 64 KB だと分かりました。インターフェースはかなり簡素で、バイトがバッファに入ってきて、u32 が契約に「いくつ読み取るか」を伝え、出力は同じ経路で返ってきます。

すると、2つの WASM の意味が見えてきました。コントラクト WASM はロジックを実行します。データドライバー WASM はデータを変換します。ウォレット、エクスプローラー、フロントエンドからの JSON を、コントラクトが理解できる形式にエンコードし、その結果をまたデコードして返すのです。

トレードオフもはっきりしています。開発者は「オンチェーンで動くもの」と「外側に残るもの」の境界を1つ余分に理解する必要があります。翻訳を扱うためです。私は 64 KB という数字に引っかかってドキュメントを開きましたが、結局はその2つのファイルを覚えることになりました。1つは実行する。1つは翻訳する。同じソースで、役割が違う。

@Dusk_Foundation $CYS $ACE $DUSK #dusk
1つのソースから2つの WASM。スマートな設計か、それとも余計な複雑さか?
Smart separation
75%
Extra complexity
0%
Depends on the use case
25%
Need to dig deeper
0%
4 投票 • 投票は終了しました