Cardano のスマートコントラクトの”事前に処理結果や料金が予測できる”という点がセキュリティ観点から重要である理由と技術的ポイント🔥
・Cardano:eUTxOベース→トランザクション処理が決定論的⇨ユーザーは実行前にその影響と結果を予測可能
→例えば、失敗するトランザクションを事前に拒否するため失敗して手数料だけ払うことになる可能性がない。
→結果、金銭的損失、予想外に高い料金、および敵対行為、予期しないスクリプト検証の結果または失敗、予期しない元帳またはスクリプトの状態の更新が引き起こされる可能性が軽減される
・イーサリアム:アカウントベース→非決定論的→⇨ユーザーは実行前にその影響と結果を予測困難(Txを送信する瞬間と、受け入れられる瞬間で、ガス料金などの前提が変わるなどで失敗したり攻撃を受けたりする可能性)
→例えば、失敗するトランザクションかわからないので事前に拒否できず、失敗して手数料だけ払う事になる可能性がある。
→結果、金銭的損失、予想外に高い料金、および敵対行為、予期しないスクリプト検証の結果または失敗、予期しない元帳またはスクリプトの状態の更新が引き起こされる可能性がある
※もちろん、非決定論的なブロックチェーンも2次的な解決策を用意していますがCardanoでは全てにおいてこれが解決される。
※利点:アカウントベースでは、同じアカウントの処理について前か後かで拒否されるということが少なくなる利点がありますが、これは不確実性をもたらします。
ーーー技術的にどうやって達成するか概要ーーー
トランザクションの作成者:スクリプト、リディーマー、署名などの関連データを提供
プール:それをスクリプトで実行可能か検証
・レジャーについて、①PlutusスクリプトはUTXOをロック可能②datumというスクリプトの状態の解釈と考えることができるデータの一部を追加可能③スクリプトが消費可能な計算リソースの上限を含む追加の検証要件のプロトコルパラメータ
・トランザクションについて、①そのアクションごとに、リディーマーと呼ばれるユーザー指定の引数を運ぶ。(たとえば、他の多くの機能の中でも、ユーザーがオークションにかける入札、または推測ゲームでのユーザーの推測として機能)②各スクリプトの計算実行バジェットを指定③実行料金を支払うことができるようにするために、Alonzoは追加のデータを紹介(後日解説)④バージョン間違いがないように整合性ハッシュを含む
・検証について、datum、 redeemer、budget、Tx-summaryの引数を取ります。
→datumとredeemer(スプリクトの状態)ーUTXOがスクリプトにロックされている=そのアドレスに関連づけられる。そのスクリプトの状態アナログがUTXOに格納されるDatamである。使用されたら、Datamを含むレジャーから削除される。または他の特定のDatamのところへ運ばれ、スプリクトの状態の更新とみなせる。
→budget ーリソースへの 予算自体と、その予算をカバーできる手数料を要求することで、手数料が決定論的になる。
仕様: