上級者用語を調べる
アップグレード可能なコントラクト(プロキシ)とは
- 執筆
- CRYPTO PORT 編集部
- 公開日
- 更新日
- 読了目安
- 6 分
結論
プロキシ方式は、窓口となるコントラクトと処理を書いたコントラクトを分け、後者を差し替えられるようにする設計です。不具合の修正ができる代わりに、差し替え権限を持つ管理者が挙動を変えられるという信頼の前提が生まれます。利用者はその権限が誰にあるかを確認する必要があります。
要点
- 窓口と処理を分け、処理側を差し替えられる設計
- 不具合の修正や機能追加ができる
- 権限者が挙動を変更できるという前提が伴う
- アドレスは変わらないため、差し替えに気付きにくい
定義
利用者が呼び出す窓口コントラクトが、処理内容を持つ別コントラクトへ転送する構成。転送先を変更することで、同じアドレスのまま動作を更新できる。
デプロイしたコントラクトのコードは書き換えられません。しかし現実には、不具合が見つかることも、仕様を追加したくなることもあります。プロキシ方式では、状態と窓口を持つコントラクトと、処理を書いたコントラクトを分け、後者を指し示すアドレスだけを差し替えます。
利用者や他のコントラクトから見ると、呼び出すアドレスは変わりません。残高や設定も窓口側に残ったままです。これは移行の手間がないという利点であると同時に、差し替えが行われても外形的には何も変わらないということでもあります。
対比として、差し替え機能を持たない設計もあります(immutable-contract)。どちらが優れているというものではなく、前提が違います。プロキシは修正できる代わりに管理者を信頼する必要があり、差し替え不可の設計は信頼が要らない代わりに不具合を直せません。用途に応じて選ばれます。
注意点
- · アップグレード権限を持つ主体は、利用者の同意なくコントラクトの挙動を変更できる
- · 権限が単独の鍵に握られている場合、その鍵の流出は仕様の書き換えにつながる
- · 過去に監査を受けていても、差し替え後のコードが同じ品質とは限らない