WASM スマートコントラクト
Polkadot におけるスマートコントラクト
Substrate、Polkadot、Kusama について学んだ人からまずよく寄せられる質問の一つが、どのような場合にパラチェーンを開発し、どのような場合にスマートコントラクトを開発すべきかというものです。
ここでの違いは、Polkadot と Kusama の文脈では、パラチェーンは数か月から最長 2 年間スロットをリースするという点にあります。リースの取り決めとして、パラチェーンはビジネスロジック(一般に状態遷移関数と呼ばれます)を実行するための固定スロットを得て、変更された状態をブロックに永続化できます。Substrate の用語では、この状態遷移関数はチェーンのランタイムと呼ばれます。
他のエコシステムとの違いは、Polkadot の文脈では、パラチェーンとスマートコントラクトがスタックの異なるレイヤーに存在するという点です。スマートコントラクトはパラチェーンの上に位置します。パラチェーンは通常レイヤー 1 のブロックチェーンと説明されます ‒ ただし、独自のセキュリティを構築する必要がなく、アップグレード可能で、相互運用可能であるという点が異なります。
注目すべき点として、パラチェーンの状態遷移関数はそれ以上検証されることはありません ‒ スロットの時間をどのように使うかはパラチェーン次第です。パラチェーンは、Polkadot または Kusama のスロットオークションで落札した時点で、すでにスロットの料金を前払いしています。つまり、パラチェーンは独自の(ブロックチェーンの)世界を構築できるのです! たとえば、トランザクション手数料をどのように課金するか ‒ あるいはそもそも課金するかどうかさえも決めることができます。こうした選択肢は、新しいビジネスモデルや、よりユーザーフレンドリーなビジネスモデルを構築するうえで極めて重要です。実際に見られるパラチェーン間のその他の相違点としては、ガバナンスの仕組みやクリプトエコノミクスの違いがあります。ただし、パラチェーンが世界を構築する方法にはいくつかの制約があります。現実世界の物理法則のように、特定の基本ルールに従わなければなりません。Polkadot と Kusama の場合、たとえばリレーチェーンがパラチェーンと通信するためのコンセンサスアルゴリズムがそれにあたります。こうした基本ルールから、Polkadot と Kusama の利点が生まれます。前述の共有セキュリティ、クロスチェーン通信、保証された実行スロット時間などの利点です。
一方、スマートコントラクトの場合、ユーザーがスマートコントラクトをデプロイできるようにするには、既存のパラチェーンに pallet-contracts を組み込む必要があります。デプロイされたスマートコントラクトは、常に信頼されていないコードです。チェーンのトークンを持っていれば、誰でも(どのプログラムでも)許可なくスマートコントラクトをアップロードできます。スマートコントラクトにより、信頼されていないプログラムをパーミッションレスにブロックチェーン上へデプロイできます。pallet-contracts はこれらのプログラムが敵対的であると想定しなければならず、コントラクトがチェーンを停止させたり、他のコントラクトの状態を破損させたりできないよう、多くの安全の柱を設ける必要があります。pallet-contracts の場合、こうした安全の柱には、ガスの計測やオンチェーンにデータを保存するためのデポジットなどの仕組みが含まれます。
この重要な違いを改めて述べると、パラチェーンのランタイムを開発することは、スマートコントラクトを開発することとは異なります ‒ スマートコントラクトはパラチェーンの上に位置するものです。
トレードオフとして、パラチェーンではパラチェーンを構成する(ほぼ)すべてのルールを自由に決めることができます。スマートコントラクトでは、チェーンが許可する範囲と、必然的に設けられる安全の柱によって制約を受けます。スマートコントラクトは、パラチェーンのランタイムに組み込まれたネイティブのパレットほど高速になることはありません ‒ 間に挟まるロジックが多すぎるためです。一方で、スマートコントラクトは開発やデプロイの手間が少なくて済みます。開発者はガバナンスやクリプトエコノミクスなどに対処する必要がありません。少量のトークンさえあれば、気軽にスマートコントラクトをデプロイできます。それだけのシンプルなことです。
pallet-contracts における乱数に関する免責事項
乱数機能を使用するコードはアップロードできず、この非推奨の機能を使用する既存のコードからコントラクトをインスタンス化することもできません。この機能は最終的に削除される予定です。そのため、新たに pallet-contracts をデプロイする場合は、この型に対してダミーの実装を提供しても問題ありません(使用されることがないためです)。
