블록체인 트랜잭션의 불변성은 축복이자 저주입니다.
BAYC 피싱 네트워크 공격. 폴리네트워크 해킹. 하모니브릿지 해킹. 로닌 도난 사건. 2021년에만 140억 달러 의 암호화폐가 도난당할 것입니다. 이것들과 더 많은 것들이 모두 확인된 절도이지만 "실행 취소 버튼"(예: 신용 카드 결제 취소)이 없으며 모든 사람이 필요할 때 저장할 Jump Crypto가 있는 것은 아닙니다.
하지만 뒤집을 수 있는 유형의 토큰이 있다면 어떨까요?
이것은 Stanford의 여러 연구자(Dan Boneh, Qinchen Wang 및 저)가 지난 몇 달 동안 답하려고 노력한 질문입니다. 우리는 ERC-20 및 ERC-721과 유사한 옵트인 토큰 표준을 설계하고 역방향 트랜잭션을 지원하고(증빙할 충분한 증거가 있는 경우) 이에 대한 논문을 작성하고 몇 가지 프로토타입을 구현했습니다. 이러한 토큰 표준을 각각 ERC-20R 및 ERC-721R이라고 합니다.
이제 다음과 같이 생각할 수 있습니다. 가역 토큰? 이것은 블록체인의 목적에 위배되지 않습니까? 아니오. ERC-20 토큰을 대체하거나 이더리움을 되돌릴 수 있도록 하기 위한 것이 아닙니다. 단지 거래 후 짧은 시간 동안 절도에 도전하고 복구할 수 있도록 허용할 뿐입니다.
트랜잭션은 돌이킬 수 없게 되기 전에 단기간(예: 3일) 동안만 동결될 수 있습니다. ERC-20R 자금은 대부분 되돌릴 수 없습니다.
트랜잭션의 가역성
트랜잭션에서 두 개의 가역 토큰 간의 교환은 즉각적이며, 한쪽이 동결을 요청하면 가역 기간이 경과했는지 여부에 관계없이 상대방으로부터 자금을 회수할 수 있습니다. 그러나 되돌릴 수 있는 토큰을 되돌릴 수 없는 토큰으로 교환하는 것은 가능합니다. 즉, 가역→불가역 스왑은 자금이 되돌릴 수 없을 때까지 지연됩니다. 따라서 두 개의 주요 토큰이 가역적이 되면 다른 토큰도 가역적이 되도록 해야 한다는 많은 압력이 있습니다.
구현에 따라 가역 기간이 경과한 자산을 즉시 청산할 수 있습니다(예: 3일 전에 받은 자산 청산). 이 경우 되돌릴 수 있는 토큰과 되돌릴 수 없는 토큰 사이에 지연이 필요하지 않습니다.
작동 원리
거래를 되돌리는 과정
공격자가 피해자로부터 자금을 훔친다고 가정합니다. 자금은 아래 그림 1과 같이 다른 주소로 추가 이체될 수 있습니다. 다음과 같은 일이 발생합니다.
1. 피해자는 도난당한 자금을 동결할 것을 요청합니다. 피해자는 관련 증거 및 일부 자금과 함께 거버넌스 계약에 동결 요청을 제출합니다. 문제의 거래는 최근의 것이어야 합니다(고정된 되돌릴 수 있는 기간 포함).
2. 판사가 동결 요청을 수락하거나 거부합니다. 분산된 판사 그룹이 자산 동결 여부에 대해 투표합니다. 심의 시간은 기껏해야 하루나 이틀이다. 요청을 거부하면 프로세스가 중지되고 피해자는 자금을 잃게 됩니다. 요청을 수락하면 거버넌스 계약이 ERC-20R/ERC-721R 계약을 동결합니다.
3. 동결을 수행합니다. NFT의 경우 NFT가 전송되는 것을 방지할 뿐입니다. ERC-20R의 경우 도난 자금을 추적하고 이러한 자금의 이체를 금지합니다. 계정 소유자의 잔액이 동결된 금액보다 많으면 여전히 다른 사람과 거래를 할 수 있습니다.
4. 판단. 그런 다음 양 당사자는 분산된 판사 그룹에 증거를 제출할 수 있습니다. 궁극적으로 판사는 결정을 내린 다음 거버넌스 계약에 영향을 받는 ERC-20R 또는 ERC-721R 계약에 대해 리버스 또는 rejectReverse 함수를 호출하도록 지시합니다. rejectReverse가 호출되면 분쟁 대상 자산에 대한 동결이 해제됩니다. 재판은 길어질 수 있으며 몇 주 동안 지속될 수 있습니다.
5. 반전(해당되는 경우). 리버스 기능은 동결된 자산을 피해자에게 다시 보냅니다.
그림 1: 트랜잭션 예제 다이어그램
도난 자금 추적
자산을 도난당했을 때 한 곳에만 있는 경우는 드뭅니다. 공격자는 종종 한 계정에서 다른 계정으로 전송합니다. 이 경우 공격자는 mempool을 모니터링하고 동결 요청이 들어오는 것을 볼 때 선행 실행 트랜잭션에서 자산을 이동할 수도 있습니다. 이를 방지하기 위한 우리의 솔루션은 단일 트랜잭션에서 전체 온체인 동결(및 해당 계산)을 수행하여 공격자가 동결을 "지나지 못하게" 하는 것입니다.
하지만 이러한 자산과 관련된 모든 계정을 비활성화할 수는 없습니다. 그렇다면 어떤 계정을 동결할지 어떻게 결정해야 할까요? 다행스럽게도 NFT의 경우 동결은 매우 간단합니다. 현재 NFT를 소유한 사람을 찾아 해당 계정을 동결하면 됩니다. 그러나 통화의 분할 가능성으로 인해 ERC-20 동결이 더 복잡해집니다. 이러한 자금은 수십 개의 계정으로 분할되거나 Tornado와 같은 익명 믹서로 전송되거나 다른 디지털 통화로 교환될 수 있습니다. 많은 계정을 거치는 경우 적어도 일부는 해커와 관련이 있습니다. 그러나 일부 계정은 결백하거나 지불을 대가로 합법적인 서비스를 제공하는 상인일 가능성이 높습니다. 각 계정의 책임을 정확하게 식별하는 것이 항상 가능한 것은 아닙니다. 따라서 도난 자금을 추적하고 잠그는 기본 동결 절차를 제공합니다. 당사의 알고리즘은 다음을 보장합니다.
1. 파괴가 없다고 가정하면 도난당한 금액을 만회하기에 충분한 자산이 동결됩니다. (파기된 자산은 반환 금액에서 차감됩니다)
2. 계좌의 자금은 도둑과 직접 거래가 있는 경우에만 동결됩니다.
3. 트랜잭션 그래프에 관한 한 알고리즘의 실행 시간 복잡성은 합리적입니다.
논문 에서 더 많은 알고리즘 세부 사항에 대해 논의합니다.
분권화된 사법 제도
퍼즐의 더 모호한 부분은 "분산된 심사 위원 풀"에 관한 것입니다. 이 판사들은 누구입니까? 그들은 어떻게 투표합니까? 그들은 어떻게 보상을 받습니까?
이는 궁극적으로 ERC-20R/ERC-721R 인스턴스를 생성하는 거버넌스에 달려 있습니다. 이 문서에서는 부정직과 뇌물 수수, 보상 메커니즘 등으로부터 판사를 저지하는 방법을 탐구합니다. 우리는 판사가 거래를 추가하거나 자신의 잔액 가치를 임의로 수정할 수 없음을 강조합니다.