← 모든 콜 보기
ARBORIST#32

zcashd 5.1.0 성능·ZSA 설계

zcashd 5.1.0이 블록 검증 시간을 약 80% 줄였고 ZSA 설계와 FROST ZIP 작업이 공유됐다

안건별 요약 7

  1. Zebra 업데이트 - 성능 문제와 FROST ZIP

    Zcash Foundation · Conrado

    • 차폐 트랜잭션 증가로 생긴 성능 문제를 다루고 있다. Orchard 트랜잭션당 Halo 2 증명은 하나인데 검증을 루프의 잘못된 위치에 둬 action마다 검증하던 버그를 고쳤다.
    • Sapling 증명과 서명에 배치 검증기가 있었지만 한 번에 하나만 돌아 멀티코어를 못 썼다. 여러 배치 검증기를 동시에 돌리도록 바꿨고, 블록과 배치 항목을 병렬 처리하도록 구조도 손봤다.
    • 이전에는 동기화가 멈췄으나 이제 성공한다. 다만 마지막 수치로 전체 동기화가 6시간에서 10시간으로 늘었고 추가 이슈를 조사 중이다. GitHub Actions의 6시간 제한 때문에 CI는 구간별 잡으로 나눴다.
    • 스레숄드 서명 프로토콜 FROST를 Zcash에서 쓰기 위한 ZIP을 작성 중이다. FROST는 일반 Schnorr 서명 기반이라 Zcash에 필요한 재랜덤화 서명을 지원하도록 조정해야 한다.
    • ZIP의 첫 버전은 필요한 내용을 모두 담았고, 참조 수정과 배경 설명 보강이 남았다. Zcon 전에 마무리하는 것이 목표다.
  2. Zcashd 5.1.0 릴리스 내용

    Electric Coin Company · Steven, Str4d

    • 5.1.0에서 Sapling과 Orchard 블록 검증 속도를 높여 검증 시간을 약 80% 줄였고, 과거 블록의 최악 검증 시간도 약 80% 줄었다.
    • Orchard 구성요소가 없는 트랜잭션은 V4 트랜잭션을 기본으로 쓰는 옵션이 추가됐다. V5를 아직 지원하지 않는 레거시 지갑을 위한 것이다.
    • getblocktemplate는 이미 검증된 트랜잭션만 담으므로 증명과 서명 검사를 생략해 빨라졌다. getrawtransaction과 decoderawtransaction에는 Orchard action 정보가 추가됐다.
    • z_gettreestate 성능과 NU5 이후 블록의 지갑 rescan 성능이 개선됐고, RPC 처리량을 위해 지갑이 블록을 잡고 있는 시간을 줄였다.
    • RPC 등 기능을 단계적으로 폐지하는 deprecation 방식이 도입됐다. Str4d는 5.0.0에서 구현됐고 RPC만이 아니라 Sprout 비활성화 같은 모든 zcashd 기능에 적용된다고 보충했다.
  3. Zcashd 추가 성능 개선 PR - 증인 추적과 검증 캐시

    Electric Coin Company · Steven, Str4d

    • 병목은 블록 동기화와 IBD 비용, 지갑 스캔 등이다. Orchard 크레이트에는 배치 검증기가 있어 멀티스레딩을 내부에서 처리하는데, Zebra는 단일 스레드 배치를 멀티코어에 얹는 반대 구조다.
    • PR 6069는 노트 증인(witness) 추적 문제를 다룬다. 롤백을 위해 모든 노트를 계속 갱신하던 방식은 쓴 노트가 많은 큰 지갑에서 심각한 병목이었다.
    • 네트워크가 100블록 넘게 롤백하지 않는다는 합의 전제를 이용해, 충분히 지난 뒤에는 증인 추적을 멈춘다. 지갑 스캔의 시도 복호화를 멀티스레드로 바꾸는 작업도 가능하다고 봤다.
    • PR 6073은 멤풀에서 이미 검증한 Sapling과 Orchard 번들은 블록에서 다시 증명 검사를 하지 않는 캐시다. 5.1.0의 80% 개선에 더해 80%를 더 줄여 정상 상태의 블록 검증이 기대 수준으로 돌아간다.
    • IBD처럼 처음 보는 트랜잭션만 가득한 최악의 경우는 개선되지 않는다. 대신 검증 시간이 줄어 블록 전파가 빨라지고 고아 블록 비율이 낮아질 것으로 기대한다.
  4. 0xPARC Halo 2 학습 그룹

    0xPARC · Ying Tong

    • 뉴욕에서 4주간 진행된 Halo 2 학습 그룹이 지난주 끝났다. Ying Tong, Daira, Str4d가 Discord와 세션에서 PLONKish와 Halo 2 개념, 라이브러리 온보딩을 도왔다.
    • Halo 2 기반 프로젝트로 Cardano zk 롤업 Orbis의 tiny RAM, 프라이빗 DAO와 PoS를 만드는 Darkfi의 VM과 DSL, Ethereum Foundation의 zkEVM이 소개됐다.
    • 참가자 20여 명 이상이 10개 프로젝트를 만들었다. zkWordle, 브라우저에서 동작하는 Halo 2 Wasm, Halo 2의 MiMC 해시 등이 있었다.
    • 후속으로 PLONKish DSL 협업과 동적 룩업 테이블 같은 Halo 2 라이브러리 기능 개발 논의가 이어지고 있다.
  5. ZSA 개발 현황

    QEDIT · Daniel Benarroch, Aurélien Nicolas

    • ZSA의 두 이슈(발행 등)에 대한 PR이 전날 올라왔고, 발행 쪽은 작업이 조금 남아 이슈에 의견을 달아달라고 요청했다.
    • ZEC 노트와 ZSA 노트를 함께 지원하는 노트 커밋먼트와 밸류 커밋먼트의 고전 계산, 테스트 벡터, zcashd 통합이 진행됐다.
    • ZEC 노드와 완전한 하위 호환을 유지해 turnstile 없이 Orchard 번들을 ZSA 번들로 대체하는 것이 목표이며, 이것이 가장 큰 과제다.
    • ZSA에서는 노트를 분할해 출력을 둘로 낼 때도 유효한 입력이 필요해, 기존의 더미 노트가 will-not-spend 노트로 바뀌고 클라이언트 로직도 달라진다.
    • 회로 성능을 위해 Sinsemilla 가젯의 고정 초기화에 입력 워드를 추가해야 한다. Str4d는 고정 도메인 방식 API도 계속 유지하길 요청했고 Aurélien이 따르기로 했다.
    • 밸류 커밋먼트는 64비트 스칼라의 고정 기저 곱셈에서 가변 기저로 바뀌며, 이는 이미 Halo 2에 구현돼 있다. 2주 뒤 또는 Zcon3에서 ZSA 보안을 다시 점검하는 자리를 갖자고 제안했다.
  6. ZSA 이후 로드맵 - 프로그래밍 가능한 프로토콜

    QEDIT · Aurélien Nicolas, Daira, Str4d

    • Aurélien은 ZSA 이후의 신뢰 없는 자산 교환, 브리지, 멀티시그 같은 기능을 코어 프로토콜이 아니라 프로그래밍 가능한 프로토콜 위에 구현하는 편이 낫다고 보았다.
    • Daira는 재귀 증명이 이후의 프로그래밍 가능성을 열어준다는 점이 Halo 전환의 동기 중 하나였다고 답했다.
    • Str4d는 브리지는 어차피 Orchard 풀을 떠나므로 별도 회로로 처리할 수 있다고 했고, Daira는 트랜잭션 집계를 지원하면 구분 불가능성이 자연히 확보된다고 보았다.
  7. 월렛 성능과 라이트월렛 논의

    Dodger, Str4d, Steven

    • Str4d는 라이트월렛에는 이를 뒷받침하는 풀노드가 필요해 zcashd 성능 문제 해결을 최우선으로 했고, 진행 중인 PR 두 개와 대형 사용자(채굴풀, 거래소)를 위한 지갑 개선 하나가 남았다고 밝혔다.
    • 다음 우선순위는 Rust zcash_client_backend 크레이트 기반 라이트 클라이언트와 모바일 SDK의 동기화 성능이며, 아키텍처 변경이 필요해 시간이 더 걸린다.
    • Daira는 수수료 정책 변경으로 비용을 높이는 방안도 있다고 언급했고, Steven은 5.1.0이 라이트월렛 서버에 준 효과가 미미했다고 평가했다.
    • 포럼의 지갑 선호 질문에서 RJ Ricasata는 지갑 시장이 하나로 수렴할지 물었고, Deirdre, Adi, Daira는 다양한 지갑이 보안과 탈중앙화에 이롭다고 답했다.
    • Steven은 Nighthawk와 ECC 내부 데모 지갑을 쓰며 둘 다 결국 동기화된다고 했고, Zecwallet Lite는 Aditya가 대응 중이라고 했다.

한국어 요약은 원문을 바탕으로 정리한 것으로, 정확한 내용은 원문을 확인하세요.