로빈 라이너스, BTC 연구
비트브이엠의 초기 버전은 참여자를 두 명으로 제한하도록 설계되었습니다. 후속 작업은 병렬 및 중복 인스턴스를 결합하여 1 대 n 정직성 가정을 기반으로 다자간 참여를 도입했습니다. 이러한 컨트랙트의 가장 큰 한계는 모든 검증자가 컴파일 시점에 정의되어야 한다는 것입니다. 또한, 검증 횟수에 따라 시작 오버헤드가 증가합니다. 이는 계약을 깨기 위해 항상 제한된 수의 참여자에게만 뇌물을 주어야 한다는 것을 의미합니다.
BitVM2는 누구나 검증자가 될 수 있다는 점에서 과감한 변형입니다. 여전히 정직한 참여자가 n명 중 1명이라고 가정하는 일회성 장치가 필요하지만, 런타임에는 누구나 초기화 그룹의 멤버가 아니어도(그리고 n명의 참여자 중 한 명이 아니어도) 잘못된 주장에 이의를 제기할 수 있습니다. 이는 이전 체계의 한계를 극복하고 신뢰 가정을 최적화합니다. 또한, 최대 시도 횟수를 2회로 줄여 전체 설계를 단순화합니다.
브릿지 콘트랙트(브리지)는 여전히 사전 정의된 연산자 집합과 최소 한 명의 연산자가 정직해야 한다는 조건을 추가적으로 요구합니다. 그러나 모든 연산자가 정직하지 않은 경우에도 사용자의 돈을 훔칠 수는 없으며 기껏해야 소각할 수 있습니다.
소개
우리는 주어진 프로그램 f에 대해 어떤 어설정을 검증하고자 합니다: 어떤 x를 입력하면 y가 출력된다, 즉 f(x) = y. 예를 들어, f는 Groth16 증명 시스템과 같은 SNARK 검증자가 될 수 있습니다. 그러면 x는 증명이고, y는 일부 SNARK 유효성 증명의 출력 상태입니다.
SNARK 검증자와 같은 예에서는 차수가 너무 커서 비트코인 스크립트로 표현할 수 없습니다. Groth16 유효성 검사기를 구현하려면 최대 20MB 크기의 스크립트가 필요할 수 있습니다. 그러나 허용되는 스크립트 크기의 상한은 비트코인 블록 크기의 상한인 4MB이며, 이 크기로 압축하더라도 여전히 너무 클 수 있습니다.
네이브 솔루션
"램포트 서명"은 프로시저 f(x)=y를 여러 단계로 분할하는 방법을 제공합니다. 예를 들어, 단계: n=42.
이런 식으로 f의 계산은 여러 블록에서 실행되는 43개의 트랜잭션으로 구성된 순차적인 시퀀스로 쪼갤 수 있습니다. 각 트랜잭션은 이전 트랜잭션의 출력 상태를 입력 상태로 사용합니다. 증명자가 z_i 상태 중 하나라도 모호한 경우, 누구나 상충되는 램포트 서명을 사기의 증거로 사용할 수 있습니다.
이 방법은 실제로 증명자에게 이의를 제기할 수 있는 신뢰 없는 방법입니다. 그러나 이 솔루션의 중요한 한계는 여전히 증명자가 전체 연산을 수행해야 하기 때문에 온체인 풋프린트가 크다는 점입니다. 또한, 램포트 서명으로 인해 상태 전환에 따른 오버헤드가 발생합니다.
균형 잡힌 솔루션
우리는 증명자 측의 무거운 작업 일부를 검증자의 사기 증거로 옮김으로써 온체인 풋프린트를 크게 줄일 수 있습니다. 이제 증명자는 모든 중간 결과 z1, z2 ......, z42와 함께 x와 y를 한 번만 커밋하면 됩니다.
모든 검증자는 잘못된 주장을 반증할 수 있습니다. 시작 단계에서는 연산 f1, f2, f3, f43의 모든 세그먼트를 반증하기 위해 43개의 스크립트를 포함하는 Taptree를 정의합니다. 단 하나의 어설션
보류할 수 없으며, 누구나 해당 스크립트에서 지출할 수 있습니다. 이렇게 하면 최악의 경우의 계산을 검증자가 수행하는 단일 단계로 줄일 수 있습니다. 이 단계에는 여전히 상당한 크기의 스크립트 구현이 필요할 수 있습니다. 이론적으로는 블록에 넣을 수만 있다면 큰 문제가 되지 않으며, 더 나은 경우 400KB의 정규화된 볼륨을 달성할 수 있습니다. 실제로는 일부 특정 구현의 경우 증명자를 위한 약속된 볼륨과 검증자를 위한 스크립트 볼륨 사이에서 최적의 균형을 찾으려고 노력할 것입니다.
본질적으로, 이는 증명자가 잘못된 주장을 하는 한 누구나 증명자의 출력을 파괴할 수 있도록 허용합니다. 그렇지 않으면 아무도 계산의 어떤 부분도 반증할 수 없다면 스크립트가 시간 초과될 때까지 정직한 증명자는 해당 출력을 사용할 수 있습니다. 최대 두 라운드가 소요됩니다.
이 메커니즘은 브리징 컨트랙트의 라이선스 없는 검증을 위한 기본 구성 요소로 사용할 수 있습니다.
낙관적 해결책
다음 프로토콜은 최악의 경우 두 라운드의 추가 상호작용을 감수하면서 위의 설계에서 가장 행복한 경로(그리고 가장 일반적으로 사용되는 경로)를 개선합니다.
1. 증명자는 상태 y를 출력하기로 약속합니다.
2. 이것이 정확하지 않으면 누구나 도전 라운드를 열 수 있습니다.
3. 증명자는 다음에 대해 약속합니다. 중간 결과 z1,z2,......z42
4. 부정확한 경우, 누구나 주장 f를 증명하거나 반증할 수 있습니다. _i
면허 없는 교량 계약 설계
제한 사항: 수수료
위 디자인에서는 증명자가 일부 수수료를 훔칠 수 있습니다. 이 경우, 증명자가 일부 보안 자금을 잃는다는 점을 제외하면 보유 자금은 안전하게 유지됩니다.
공격 시나리오는 다음과 같습니다:
프로버가 악의적입니다
프로버는 자체 KickOff_Tx를 사용합니다(유효한 PegOut_Tx가 없음)
프로버는 다음과 같이 합니다. 증명자는 챌린저가 챌린지_Tx를 실행할 때까지 기다렸다가 챌린지를 실행한 증명자에게 비용을 지불합니다
증명자는 챌린지를 실행하지 않고 단순히 응답을 중단합니다
다음 수정된 다이어그램은 이 문제를 해결합니다. n대 n의 사전 서명된 트랜잭션이 두 개 더 필요합니다.
제한 사항: 정직한 운영자
이 설계에서는 최소한 정직하다고 생각되는 운영자가 필요하며, 그렇지 않으면 결국 자금을 사용할 수 없게 될 것입니다. 실제로 활성 결함은 납치 공격과 결합하여 자금을 훔칠 수 있습니다(예: 몸값의 50%를 지불하지 않으면 자금을 잠금 해제하지 않음).