私の見解では、正規化(canonicalization)とは、ニュートンがあいまいなIntentを、ポリシーが一貫して評価できるほど入力を精密にするステップです。

生のIntentは、さまざまな形で届き得ます。同じスワップ依頼であっても、あるユーザーは1 ETHを入力し、別のユーザーは10¹⁸ weiを使い、さらに別の人は、コントラクトアドレスではなくトークンシンボルで資産を指すかもしれません。ユーザーがシステムがそれを推論してくれると考えるため、期限が提示される場合もあれば、省略される場合もあります。

人間から見ると、これらの表現は同等に見えるでしょう。

しかし、ポリシーエンジンにとっては同じ入力ではありません。

評価の前に、ニュートンはIntentを定義済みの構成要素へと解析する必要があります。誰がアクションを要求しているのか、どのアクションが要求されているのか、どの資産とターゲットが関与しているのか、そして実行を支配する制約は何か、を特定します。

それから初めて、正規化を開始できます。

資産識別子、金額、チェーン、受取人、期限、スリッページ、その他の制約は、標準化された参照、単位、型、形式が必要です。フィールドの並び順がIntentの意味を変えてしまわないようにするためです。

デフォルト値にも共通のルールが必要です。必須フィールドが欠落している場合、またはパラメータが複数の解釈を許す場合、システムは各オペレーターに独自の前提を任せるべきではありません。ポリシーが実行される前に、Intentは無効、または十分に指定されていないものとして扱うべきです。

フィールドが検証され正規化されたら、ニュートンは正規表現(canonical representation)を構築できます。これは、元のIntentを表す単一の意味的オブジェクトです。その後、同じルールの下でシリアライズすれば、すべてのオペレーターが同じ構造、値、意味を受け取れます。

これが私にとって不可欠な部分です。

ポリシーは、ユーザーが入力した言葉を評価すべきではありません。形式、単位、表現の違いが取り除かれた後の正規化されたIntentを評価すべきです。

このステップが失敗するなら、決定論的なポリシーであってもシステムを救えません。

ニュートンが認可の一貫性を保てるのは、ポリシー評価の前に、すべてのオペレーターが同じ正規化されたIntentを受け取る場合に限られます。
@NewtonProtocol $NEWT #Newt $LAB $BTW