Tachyon 증명 트리와 공유 증거
Tachyon은 에포크별로 널리파이어 보관 부담을 줄입니다. 월렛이 에포크마다 한 번 만든 공유 증거를 재사용해 노트가 쓰이지 않았음을 증명하는 방식을 설명합니다.
Project Tachyon이 Tachyon의 증명 트리를 공유 증거(shared evidence)로 구성하는 방법을 설명하는 기술 글을 냈다. 쉴디드 지출은 노트가 생성됐고 아직 쓰이지 않았음을 노트를 드러내지 않고 증명해야 한다. Ironwood에서는 지출이 노트 커밋먼트 트리의 소속을 증명하고 영구 nullifier를 공개하는데, 커밋먼트 트리는 간결한 상태로 갱신할 수 있지만 nullifier 집합은 계속 커진다. 검증자는 같은 노트의 두 번째 지출을 거부하려고 온체인에 공개된 모든 nullifier를 영구히 보관해야 한다.
Tachyon은 에포크를 도입해 검증자가 유지할 nullifier 집합을 줄인다. 노트의 nullifier는 에포크마다 바뀌고, 검증자는 최근 이력의 작은 롤링 윈도만 책임진다. 그 이전 구간에 대해서는 지갑이 과거 에포크에 자기 노트의 이전 nullifier가 나타나지 않았음을 증명한다. 이를 위해 풀 상태라는 긴 이력의 증명과 노트 상태라는 세부 이력의 증명을 분리해, 에포크당 한 번 만든 공유 증거를 많은 지갑이 재사용한다. 이 검사는 oblivious syncing service(OSS)에 위임할 수 있다.
기술적으로 Tachyon은 Pasta 체 위의 루트 다항식 누산기를 쓴다. 열기 결과가 영이면 소속을, 아니면 비소속을 증명하므로 노트 커밋먼트와 nullifier가 하나의 구조를 공유하며, 역할 라벨 없는 32바이트 체 원소인 tachygram으로 공개된다. stamp 커밋먼트를 해시 체인에 흡수해 anchor를 전진시키고, 증명 트리는 증명 수행 데이터(PCD)로 주장을 이어 붙인다. spendable은 노트 생성과 nullifier 부재를 특정 anchor까지 보증하는 지갑 보관 증명 상태다.
쿼리 비용을 줄이기 위해 이차잉여(QR) 라우팅으로 tachygram을 경계가 있는 버킷에 나눈다. 빌더는 에포크가 진행되는 동안 기준값을 비공개로 유지하다 에포크가 닫히면 공개하고 봉인된 버킷을 게시한다. 각 분할은 자식 다항식의 곱이 부모와 같음과 형제가 반대 클래스만 담음을 회로가 확인해 정확한 분할을 보장한다. OSS는 후보값에 맞는 버킷을 골라 한 번의 제한된 다항식 열기로 비소속을 증명하고, 지갑은 비입방수를 이용한 인코딩과 나눗셈 관계로 그 결과가 자기 노트의 nullifier임을 묶는다.
지출 시에는 통상의 가치 및 지출 권한 검사에 더해 지출 anchor의 에포크와 다음 에포크의 nullifier를 공개한다. 두 번째 값은 포함되기 전에 에포크가 바뀌는 경우를 위한 것이다. 검증자는 증명을 확인하고 anchor가 수락된 이력에 속하는지, 공개된 값이 보관 중인 최근 윈도와 충돌하지 않는지 확인한다. 이 라이브 검사가 지갑이 인증한 anchor부터 트랜잭션 포함 시점까지의 구간을 다룬다. 증명 트리 구현 노트에 각 단계가 정리돼 있다.
한국어 요약은 원문을 바탕으로 정리한 것으로, 정확한 내용은 원문을 확인하세요.