토큰 스마트 컨트랙트에는 토큰 보유자를 대신하여 다른 주소가 토큰을 사용할 수 있도록 허용하는 approve() 함수가 포함되어 있습니다. 이는 오늘날 스마트 컨트랙트 생태계의 핵심 요소로, 이 기능이 없다면 많은 DeFi 애플리케이션이 존재할 수 없습니다. 예를 들어, Uniswap과 같은 탈중앙화 거래소에서 토큰을 거래하려면 스왑이 이루어지기 전에 토큰 승인이 필요합니다.
그러나 토큰 승인에는 상당한 위험이 따릅니다. 스마트 컨트랙트에 토큰 사용 권한을 부여하면 해당 컨트랙트는 언제든지 이를 실행할 수 있습니다. 컨트랙트가 해킹되거나 악성 코드가 포함된 경우, 공격자는 이러한 승인을 악용하여 토큰을 탈취할 수 있습니다.
Revoke.cash와 같은 기존 솔루션은 지갑 승인 내역을 추적하고 필요 시 취소할 수 있도록 지원합니다. 그러나 이는 익스플로잇 발생 전이나 도중에 수동으로 처리해야 하는 방식으로, 항상 실용적이지는 않습니다. EthGlobal '24에서 개발된 해커톤 프로젝트인 Revoke.delegate는 익스플로잇 발생 시 승인을 자동으로 취소함으로써 지속적인 모니터링이나 수동 조치의 필요성을 없애는 보다 효율적인 솔루션을 제공합니다. 팀이 이를 구현한 방법을 소개합니다.
과제: 프라이버시와 소유권을 유지하면서 지갑 권한 위임하기
사용자는 익스플로잇 발생 시 토큰 승인이 자동으로 취소될 수 있도록 Revoke.delegate에 특정 지갑 권한을 위임해야 합니다. 이 맥락에서 위임이란 스마트 컨트랙트 계정(위임자)이 명확하게 설정된 규칙과 조건 하에 정의된 작업을 수행할 수 있도록 다른 스마트 컨트랙트 또는 외부 소유 계정(수임자)에게 특정 권한을 부여하는 것을 의미합니다.
이 프로세스를 통해 Revoke.delegate는 영향을 받은 토큰 주소를 안전하게 식별하고, 사전 정의된 조건을 검증하며, approve() 또는 setApprovalForAll() 함수를 호출하여 허용량을 0으로 설정함으로써 승인을 취소할 수 있습니다.
주요 과제는 프라이버시와 자기 소유 원칙을 유지하는 것으로, 사용자가 개인 키를 공유하거나 모호한 권한 부여로 인해 지갑 통제권을 잃지 않도록 보장하는 것입니다. 팀은 또한 원활한 도입을 위해 기존 지갑 생태계와의 호환성을 우선시했습니다.
솔루션: 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() 함수를 호출하여 허용량을 0으로 설정함으로써 영향을 받은 지갑의 토큰 승인을 취소합니다. 이 모든 과정은 사용자의 별도 조치 없이 이루어집니다.
Delegation Toolkit이 이러한 프로세스를 어떻게 간소화하는지 자세히 알아보려면 문서를 참고하세요.
"Delegation Toolkit 덕분에 사용자가 소유권을 포기하지 않고도 지갑 권한을 위임할 수 있게 되었습니다." – Revoke.delegate 개발자이자 EthGlobal '24 해커톤 우승자, Ayush & Aashish
DTK를 활용함으로써 Revoke.delegate 팀은 사용자가 오프라인 상태이거나 진행 중인 익스플로잇을 인지하지 못한 경우에도 토큰 승인 취소를 성공적으로 자동화했습니다. 또한 이 툴킷이 ERC-7579를 기본적으로 지원하기 때문에, 팀은 Safe, Kernel, Biconomy Nexus를 포함한 생태계의 주요 지갑과 호환되는 솔루션을 개발할 수 있었습니다.