トークンのスマートコントラクトには、トークン保有者に代わって別のアドレスがトークンを使用できるようにするapprove()関数が含まれています。これは現在のスマートコントラクトエコシステムの中核をなすものであり、これがなければ多くのDeFiアプリケーションは実現不可能です。たとえば、Uniswapのような分散型取引所でトークンを取引するには、スワップが実行される前にトークンの承認が必要です。
しかし、トークンの承認には重大なリスクが伴います。スマートコントラクトにトークンの使用許可を付与すると、そのコントラクトはいつでもトークンを使用できるようになります。コントラクトがハッキングされたり、悪意のあるコードが含まれていたりする場合、攻撃者はこれらの承認を悪用してトークンを盗む可能性があります。
Revoke.cashのような既存のソリューションはウォレットの承認を追跡し、オンデマンドでの取り消しを可能にします。しかし、これらは手動のプロセスに依存しており、エクスプロイトの前または最中に実行する必要があるため、常に実用的とは言えません。EthGlobal '24で開発されたハッカソンプロジェクトであるRevoke.delegateは、エクスプロイト発生時に承認を自動的に取り消すことで、常時監視や手動操作の必要性をなくす、より効率的なソリューションを提供します。チームがどのようにこれを実現したかをご紹介します。
課題:プライバシーと所有権を維持しながらウォレット権限を委任する
ユーザーは、エクスプロイト発生時にトークン承認の自動取り消しを有効にするため、特定のウォレット権限をRevoke.delegateに委任する必要があります。この文脈における委任とは、スマートコントラクトアカウント(委任者)が、明確に定められたルールと条件のもとで特定のアクションを実行するための特定の権限を、別のスマートコントラクトまたは外部所有アカウント(被委任者)に付与することを意味します。
このプロセスにより、Revoke.delegateは影響を受けたトークンアドレスを安全に特定し、事前定義された条件を検証し、approve()またはsetApprovalForAll()関数を呼び出してアローワンスをゼロに設定することで承認を取り消すことができます。
主な課題は、プライバシーと自己所有の原則を維持することです。具体的には、ユーザーが秘密鍵を共有したり、曖昧な権限を付与することでウォレットの管理を手放したりしないようにすることが求められます。チームはまた、シームレスな導入を促進するため、既存のウォレットエコシステムとの互換性を優先しました。
ソリューション:Delegation Toolkit(DTK)でウォレット権限を安全に委任・管理する
Delegation Toolkit(DTK)との統合により、Revoke.delegateはユーザーが完全な自己所有権を維持しながらウォレット権限を委任できるようになりました。エクスプロイトが報告されると、Revoke.delegateはDTKが管理するDelegation Storageからユーザーの委任情報を安全に取得し、影響を受けたウォレットのトークン承認を取り消します。プロセスの概要は以下の通りです:
ユーザーがウォレットを接続し、既存のすべてのトークン承認を確認します。
ウォレット権限の委任を選択すると、バックグラウンドでcreateRootDelegation()関数が呼び出され、Revoke.delegateスマートコントラクトが被委任者として指定されます。
必要な権限はaddCaveats()関数を使用して定義され、approve()メソッドが指定されます(例:.addCaveat("allowedMethods", ["approve(address,uint256)"]).build())。
ユーザーが新しい委任に署名すると、DKTが管理するDelegation Storageに安全に保存されます。
エクスプロイトが発生した場合、Revoke.delegateは保存されているすべての委任を取得し、条件を検証した上で、approve()またはsetApprovalForAll()関数を呼び出してアローワンスをゼロに設定することで、影響を受けたウォレットのトークン承認を取り消します。これらはすべてユーザーの操作なしに実行されます。
Delegation Toolkitがこれらのプロセスをどのように効率化するかについて詳しくは、ドキュメントをご覧ください。
「Delegation Toolkitのおかげで、ユーザーが所有権を手放すことなくウォレット権限を委任できる仕組みを実現できました。」 – Ayush & Aashish、Revoke.delegateの開発者およびEthGlobal '24ハッカソン優勝者
DTKを活用することで、Revoke.delegateチームはトークン承認の取り消しを自動化することに成功しました。これはユーザーがオフラインの場合や、進行中のエクスプロイトを認識していない場合でも機能します。さらに、このツールキットがERC-7579をネイティブにサポートしているため、チームはSafe、Kernel、Biconomy Nexusなど、エコシステムの主要なウォレットと互換性のあるソリューションを開発することができました。