ほとんどのシステムは仮定に基づいて動作します。
あなたはユーザーが適格であると仮定します、なぜならあなたのデータベースがそう言っているからです。あなたはトランザクションがルールに従ったと仮定します、なぜならあなたのバックエンドがそれを実行したからです。あなたは資格情報が本物であると仮定します、なぜならそれが「正しい」ソースから来たからです。そしてほとんどの場合、その仮定は成立しますが、成立しなくなることもあります。
それが不快になる瞬間です。
何かがうまくいかないとき、あなたはログを掘り返し、イベントを再構築し、最初から証明できるはずだったことを証明しようとします。それは反応的で、混沌としており、しばしば決定的ではありません。システムは機能しました…しかし、それが機能したことを示すことはできません。
これが証明が埋めようとしているギャップだ。
Signでは、証明は単なる記録ではなく、定義された構造に結びついた署名された主張だ。誰か(または何か)が明示的に「これは真実だ」と言っており、独立して検証可能な署名で裏付けられている。それは基本的なことのように聞こえるが、システムの動作を変える。
もはや内部状態を真実の源として頼ることはない。独立して立つことができるポータブルで検証可能な声明を作成している。
それがダイナミクスをかなり変える。
一つには、中央集権的な制御への依存を減少させる。もし請求がデータベースを照会することなく検証できるなら、他の人がそれを検証するためにオンラインである必要はないし、信頼される必要もない。証明はあなたのシステムの外に存在する。それは微妙だが重要なデカップリングだ。
それはまた、システムをよりコンポーザブルにする。
ある文脈で発行された証明は、再解釈なしに別の文脈で再利用できる。もしユーザーがどこかで既に適格性を証明しているなら、なぜそのプロセスを繰り返させるのか?証明が移動できるように、証明は生データとしてではなく、すでに検証され署名された何かとして。
もちろん、これは異なる種類の責任をもたらす。
誰が証明を発行しているのか?どの基準に従っているのか?彼らは信頼できるのか?証明は信頼を排除するのではなく、明示的にする。システムの背後に隠れるのではなく、信頼は特定可能な発行者と可視の記録に結びついている。
正直なところ、それはもっと良い取引だ。
隠れた信頼はほとんどの問題の始まりだ。何を信じるべきかわからないとき、すべてを信じるか、何も信じないかのどちらかであり、どちらもスケールが悪い。証明はその決定を公開する。ソースを検査し、署名を検証し、自分で決めることができる。
これがシステム設計に与える影響についても言うべきことがある。
すべての重要なアクションが後で証明される必要があると知ると、異なる方法で構築し始める。何を記録するべきか、どのように構造化するか、誰が署名するかを考える。それは、現在のほとんどのシステムには欠けている規律の層を追加する。
彼らが気にしないからではなく、検証を念頭に置いて構築されていなかったからだ。
Signは完璧を強制するわけではないが、システムをその方向に促す。開発者に仮定を具体的なものに変える方法を提供する—チェックされ、共有され、曖昧さなしに再利用できるものに。
「信じてくれ」という言葉が無意味になるほど使われている空間で、それは注目に値するシフトだ。