← 모든 콜 보기
ARBORIST#36

zcash_script zcashd 이전

zcash_script 크레이트를 zcashd 저장소로 옮기는 안과 동기화 메모리 급증 원인이 논의됐다

안건별 요약 5

  1. Zebra beta.15 릴리스

    Zcash Foundation · Teor

    • beta.15는 동기화와 RPC 성능 개선에 집중했다. 캐시 상태를 읽을 때 블록하던 것을 병렬로 바꿔 lightwalletd 백엔드로 쓰는 사용자와 일부 동기화 상황에 도움이 된다.
    • 릴리스 후보를 준비하며 릴리스용 Docker 바이너리 이미지를 만들기 시작했다. 네트워크 API가 피어 메타데이터를 더 반환하도록 바뀌었고, ECC가 DNS seeder에 쓰는 데 관심을 보였다.
    • lightwalletd 백엔드 사용자에게는 호환성이 깨지는 변경이 있다. 멀티스레드 RPC는 설정으로 직접 켜야 하며, 켜면 포트 충돌 검사가 꺼져 같은 포트에 인스턴스를 중복 실행할 수 있어 기본값으로 두지 않았다.
    • release candidate는 lightwalletd 지원과 NU5 합의 규칙이 최종 테스트와 감사를 받을 준비가 됐다는 뜻이다. 아직 감사를 받지는 않았기에 안정 릴리스가 아니다.
  2. Zcashd 업데이트 - 모바일 SDK와 메모리 최적화

    Electric Coin Company · Steven

    • 최우선 과제는 Edge, Unstoppable, Nighthawk가 쓰는 모바일 SDK의 빠른 동기화다. 동기화 개선은 SDK 업데이트 두 번 이상으로 나눠 낸다.
    • 첫 업데이트는 unified address 지원과 점진적 동기화 개선을 담는다. NU5 지원을 위해 이미 UA 작업을 해둔 위에 동기화 작업을 얹는 편이 쉬웠기 때문이다.
    • 동기화 중 메모리가 급증해 OOM이 나는 현상을 내부에서 재현했고, 메모리 절감 최적화 세 가지를 찾았다. 세 번째를 최종 테스트 중이며 나머지 성능 개선은 5.3.0 이후 릴리스로 묶어 낸다.
  3. 수수료 변경 - ZIP 317 원칙과 다음 단계

    Electric Coin Company · Steven, Nate, Daira

    • Steven은 수수료 설계의 원칙 세 가지를 제시했다. 거래 수나 입출력 구성과 무관하게 공정하고 일관되며, 일반 소액 결제에 불필요한 영향을 주지 않고, UX까지 함께 고려해야 한다는 것이다.
    • 입력 노트는 사용자가 통제하기 어려워, 같은 10 ZEC를 노트 하나로 갖거나 0.1 ZEC짜리 1000개로 갖는 경우 입력 수가 예상 밖으로 늘 수 있다는 UX 문제를 짚었다.
    • Greg의 온체인 분석에서는 ZIP 317 수수료를 적용했을 때 상당수 투명 트랜잭션이 임계치 아래로 나왔다. 하드코딩된 파라미터라 너무 낮으면 효과가 없고 너무 높으면 채택을 해칠 수 있다.
    • 다음 단계로 지갑 벤더에게 변경 채택 가능성을 묻고, Bitcoin식 수수료 상향을 하는 지갑이 몇 개인지 파악하기로 했다. 시행 전 단계별 배포로 피드백을 모으자는 제안도 나왔다.
    • Daira는 수요일 ZIP sync에서 문서 문제와 수식 정리에 큰 진전이 있었고, 이를 반영한 PR이 Aditya의 브랜치에 올라갔다고 했다.
  4. zcashd 지갑 동기화 메모리 이슈 원인 분석

    Electric Coin Company · Str4d, Daira, Steven

    • 5.2.0에서 배치 병렬 시도 복호화를 넣었는데, 지갑 업데이트 스레드가 정수 초 경계로 갱신을 가져와 지갑 스캔이 체인 스캔보다 느리면 지갑 tip이 노드 tip보다 계속 뒤처졌다.
    • 배치 스캔이 모든 데이터를 한꺼번에 배치에 넣어 메모리 부하가 커졌고 시간이 지나며 OOM이 났다. 메모리 임계치까지만 넣고 나머지를 교차 처리하는 수동 백프레셔를 구현했다.
    • 더 큰 원인은 복호화에 실패한 출력마다 Option으로 600~700바이트를 돌려보내는 방식이었다. 메모리가 온체인 출력 수에 비례했다.
    • 성공했을 때만 값을 보내고 실패는 채널의 sender를 닫아 암묵적으로 알리도록 고쳐, 메모리 급증이 복호화 동안만 생기고 이후 사라진다.
    • 부수 효과로 배치 스캐너 처리량과 메모리, 체인 tip 동기화 지점, 지갑 스캔 높이 메트릭이 zcashd에 추가됐다. Steven은 Str4d와 Daira가 heap 추적 파일로 원인을 찾아낸 것을 칭찬했다.
  5. zcash_script 크레이트 유지보수 논의

    Zcash Foundation · Conrado, Daira, Str4d, Teor, Nate

    • Conrado는 Zebra가 투명 서명 검증에 쓰는 zcash_script가 zcashd의 C++ 코드를 감싸고 소스를 복사해야 해서, zcashd 의존성 갱신마다 맞춰야 한다고 설명했다.
    • 대안은 크레이트를 zcashd 저장소로 옮기는 것이다. 기존 build.rs와 cc::Build를 유지하거나 zcashd 빌드 시스템에 통합하는 방법이 있고, 후자는 빌드 의존성이 늘어나는 점이 걱정이다.
    • Str4d는 libzcash_script를 정적 라이브러리로 배포하면 모든 타깃 빌드가 필요해 어렵다고 했다. 소스를 복사하고 build.rs 변경만 가져오는 하이브리드를 택하자고 했다.
    • Daira는 합의 호환을 위해 의존성 버전을 고정해야 한다고 했다. 또 Bitcoin식 script를 제거할 장기 계획이 필요하다고 했고, Str4d는 투명 풀을 없애면 수월해진다고 했다.
    • Nate의 script 분리 질문에 Str4d는 매우 얽혀 있어 어렵다고 답했다. Teor는 zcashd 저장소로 옮기면 CI로 업데이트를 확인할 수 있다고 했다.
    • Conrado는 Str4d의 제안대로 빌드 시스템을 유지한 채 zcashd 저장소로 옮기는 작업 중인 PR을 만들자고 했다. Str4d는 Rust 1.64의 워크스페이스 공통 의존성 기능이 도움이 될 것이라고 했다.

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