Zcash 지갑 동기화
TL;DR
- 차폐된 Zcash 트랜잭션은 세부 정보를 숨기므로, 서버는 Bitcoin이나 Ethereum 같은 투명한 코인에서처럼 단순히 지갑 잔액을 조회할 수 없습니다.
- 라이트 지갑은 특수 서버(lightwalletd)에서 작은 “컴팩트 블록”을 다운로드하고, 개인 키로 관련 데이터를 직접 복호화합니다.
- 이러한 블록을 복호화하고 처리하는 데 시간이 걸리므로, 지갑은 자금을 더 빨리 사용할 수 있도록 더 빠른 동기화 방식을 사용합니다.
- 주목할 만한 접근 방식으로는 Warp Sync (YWallet), Spend-before-sync (Zcash Mobile Wallet SDK V2), Blaze Sync (Zecwallet), 그리고 제안된 DAGSync가 있습니다.
- 이러한 방식은 일반적으로 더 빠른 동기화를 위해 추가 메모리 또는 처리 능력을 사용합니다.
핵심 설명
Zcash 동기화 작동 방식
Zcash는 영지식 증명을 사용하여 권한 없는 당사자로부터 트랜잭션 세부 정보를 차폐합니다. 이러한 프라이버시 때문에 라이트 지갑의 동기화는 더 어려워집니다. 라이트 지갑은 전체 블록체인을 로컬에 저장하지 않고 필요한 정보를 서버에 의존하기 때문입니다. Bitcoin이나 Ethereum에서는 서버가 블록체인을 인덱싱하여 계정 데이터를 빠르게 반환할 수 있습니다. 그러나 Zcash에서는 서버가 트랜잭션 세부 정보를 볼 수 없습니다. 그렇다면 라이트 지갑은 전체 블록체인을 직접 다운로드하고 복호화하지 않고도 어떻게 잔액과 거래 내역을 동기화할 수 있을까요?
Zcash는 여러 접근 방식을 결합하여 이 문제를 해결합니다. 전체 노드에서 데이터를 필터링하고 트랜잭션 식별에 필요한 정보만 보관하는 특수 서버인 lightwalletd를 사용합니다. 이 데이터를 컴팩트 블록이라고 하며, 원래 블록보다 훨씬 작습니다. 라이트 지갑은 먼저 lightwalletd 서버에서 이러한 컴팩트 블록을 다운로드한 다음 개인 키로 복호화합니다.
이러한 컴팩트 블록을 복호화하고 처리하는 것조차 상당한 시간이 걸릴 수 있으며, 특히 블록당 트랜잭션 수가 많을 때 그렇습니다. 따라서 지갑은 동기화 속도를 높이고 가능한 한 빨리 자금을 사용할 수 있게 하는 여러 방법을 사용합니다.
시각화 / 비유
블록체인을 잠긴 상자로 가득 찬 거대한 우편물 처리실이라고 생각해 보세요. 투명한 코인에서는 우편물 처리 직원이 라벨을 읽고 어떤 상자가 당신 것인지 즉시 알려줄 수 있습니다. Zcash에서는 라벨이 숨겨져 있으므로, 지갑이 열쇠를 가지고 직접 조용히 상자를 확인하여 열 수 있는 상자를 찾아야 합니다. 아래의 동기화 방식은 이러한 상자를 더 빠르게 확인하기 위한 서로 다른 전략입니다.
심층 분석
Warp Sync
Warp sync는 각 컴팩트 블록을 복호화하고 처리하는 중간 단계를 건너뛰어, 최종 결과로 바로 이동하는 YWallet 기능입니다.
이를 위해 각 단계를 거치지 않고 최종 결과를 계산하는 수학과 암호화를 사용합니다.
Warp sync는 초당 수천 개의 블록을 처리할 수 있으며, 일반적인 동기화 방식보다 훨씬 빠릅니다. 이는 YWallet 사용자가 계정에 수십만 건의 트랜잭션과 수신 노트가 있더라도 빠르고 매끄러운 성능을 누릴 수 있음을 의미합니다.
이 단계 건너뛰기 기법 외에도 YWallet은 여러 블록을 동시에 처리하여 사용 가능한 하드웨어 전반에 부하를 분산하므로 과정을 더욱 빠르게 만듭니다.
Warp Sync에서 더 읽기
Warp sync는 여기에서 동기화 기법으로 설명됩니다. Ywallet 자체는 더 이상 유지 관리되지 않으며 Ironwood용으로 업데이트되지 않을 예정이므로, 현재 설치할 지갑은 아닙니다.
Spend-before-sync
Spend-before-sync는 Zcash Mobile Wallet SDK V2의 새로운 기능으로, 사용자가 전체 지갑 동기화를 기다리지 않고 지갑을 열자마자 즉시 자금을 사용할 수 있도록 합니다. 이 기능은 지갑의 사용 가능한 잔액을 더 빠르게 발견하게 하며 사용자 경험을 개선합니다.
Spend-before-sync는 lightwalletd 서버의 블록을 비선형 순서로 처리하는 컴팩트 블록 동기화 알고리즘을 사용하여 작동합니다. 이는 한 블록이 완전히 처리된 후 다음 블록으로 넘어가는 대신, 지갑이 조금 더 많은 메모리와 처리 능력을 사용하여 블록체인의 서로 다른 구간을 스캔할 수 있음을 의미합니다. 일반적으로 이전 블록을 다운로드하고 처리하는 동안 더 새로운 트랜잭션을 찾기 위해 서로 다른 범위를 스캔합니다. 최근의 미사용 노트가 발견되면 즉시 사용할 수 있게 됩니다.
Blaze Sync
Zecwallet 팀이 개발한 Blaze sync는 가장 높고 최근의 블록에서 시작하여 거꾸로 스캔하는 라이트 지갑용 동기화 알고리즘입니다.
이를 통해 지갑은 수신 노트보다 사용된 노트를 먼저 찾을 수 있으며, 전체 동기화 과정이 완료되기를 기다리지 않고 이전에 미사용이었던 노트를 사용할 수 있게 합니다.
또한 동기화 구성 요소인 블록 다운로드, 시험 복호화 수행, 증인 업데이트를 서로 분리하고 병렬로 처리하는 Out-of-Order Sync를 사용합니다. 이는 더 많은 메모리와 CPU 리소스를 사용하지만 동기화 속도를 5배 높입니다.
DAGSync
DAGSync는 동기화 속도를 높여 Zcash 차폐 지갑의 사용자 경험을 개선하는 것을 목표로 하는 제안된 동기화 알고리즘입니다.
이는 Zcash 지갑의 노트, 증인 및 널리파이어 간 종속성을 나타내기 위해 방향성 비순환 그래프(DAG)를 사용합니다.
DAG는 노드와 간선으로 이루어진 데이터 구조이며, 각 간선에는 두 노드 간 관계를 나타내는 방향이 있습니다. DAG에는 순환이 없으므로, 한 노드에서 시작해 간선을 따라 다시 같은 노드로 돌아오는 방법이 없습니다.
실질적 영향
흥미롭게도, 이러한 모든 메커니즘은 Zcash Security가 확장 가능한 비공개 메시징 게시물에서 제기한 질문과 비공개 결제 시스템과의 관계를 다루는 것을 목표로 합니다. 일부는 주소에만 해당하는 데이터를 제외한 모든 메모 데이터를 서버에서 다운로드하는 추가 단계까지 수행하여, 약간의 추가 리소스를 대가로 프라이버시를 높입니다.
또한 Zcash Foundation은 라이트 지갑의 성능을 개선할 다른 대안도 살펴보고 있습니다. 그 예로 재단이 “최근 Zcash 지갑 사용자에게 영향을 미친 성능 문제에 대한 잠재적 해결책을 제공하는지 판단하기 위해” 연구해 온 구성 방식인 Oblivious Message Retrieval (OMR)이 있습니다.
흔한 실수
lightwalletd 서버가 잔액을 알고 있다고 가정하는 것. 서버는 컴팩트 블록만 전달하며, 지갑이 자신의 키로 이를 로컬에서 복호화하고 해석합니다.
동기화를 너무 일찍 중단하는 것. 일부 방식은 전체 동기화가 완료되기 전에 최근 사용 가능 자금을 이용할 수 있게 하지만, 이전 거래 내역과 노트는 아직 처리 중일 수 있습니다.
Zcash 동기화를 투명 체인 동기화와 직접 비교하는 것. 더 느린 과정은 결함이 아니라 프라이버시 보존의 비용일 수 있습니다. 지갑이 공개 코인 서버라면 계정을 공개적으로 읽어 수행했을 작업을 직접 하고 있기 때문입니다.
관련 페이지