Zcash 턴스타일: 풀을 건널 때 무엇이 공개되는가
Zcash는 금액을 숨기지만, 실드 풀을 넘는 이동은 순액을 온체인에 공개합니다. 그 숫자가 필요한 이유와 2026년 Orchard 중단·Ironwood 전환 이후 달라진 점을 정리합니다.
Zcash 거래는 거의 모든 것을 숨깁니다. 누가 보냈는지, 누가 받았는지, 얼마가 움직였는지. 거의, 입니다. 암호화를 뚫고 남는 숫자가 하나 있습니다. value balance, 즉 그 거래가 각 실드 풀에 순으로 얼마를 넣고 얼마를 뺐는지입니다. Zcash는 풀 경계를 넘어 가치를 옮기는 거래를 pool-crossing transfer라 부르고, 그것을 의도적으로 하는 관행을 turnstile(턴스타일)이라 부릅니다. 비유는 문자 그대로입니다. 한 명씩 개찰구를 지나고, 개찰구가 인원을 셉니다. 이 글은 그 카운터가 무엇을 보여주는지, 설계자가 왜 일부러 공개했는지, 그리고 2026년에 Orchard가 멈추고 Ironwood가 그 자리를 대신하면서 무엇이 달라졌는지를 다룹니다. (Zcash vs 모네로 2026 비교)
왜 카운터가 필요한가. 실드 풀은 개별 기록을 숨기는 암호학적 장부이지만 잔액은 가지고 있습니다. 그 잔액을 강제하는 수학이 깨지면, 예컨대 증명 시스템의 건전성 버그가 생기면, 누군가 풀 안에서 가치를 위조해도 외부 관측자는 알 수 없습니다. 모든 기록이 암호문이기 때문입니다. 이를 잡으려면 풀의 장부와 공개 체인이 맞닿는 지점이 필요합니다. ZIP-209의 규칙은 이렇습니다. 각 풀의 체인상 가치 잔액은 절대 음수가 될 수 없고, 모든 풀의 합계는 MAX_MONEY(2,100만 ZEC)를 넘을 수 없습니다. 턴스타일이 이 규칙을 실제로 작동시킵니다. 위조된 가치를 풀 밖에서 쓰려면 경계를 넘어야 하고, 넘는 순간 그 금액은 공개 숫자가 됩니다. (Zcash vs 모네로 2026 비교)
2026년에 이론은 사고 보고서가 되었습니다. 2026-05-29, 보안 연구자 Taylor Hornby가 Orchard 프로토콜의 AI 지원 감사 과정에서 Orchard Action 회로 구현의 건전성 취약점을 보고했습니다(GHSA-ww9q-8r59-xv46). ZIP-257에 따르면 잔액 위반과 자금 탈취를 허용할 수 있는 문제였습니다. 대응은 Orchard의 즉시 중단이었습니다. 2026-06-02 03:30:07 UTC에 채굴된 블록 3,364,326부터 버전 5 이상 거래는 Orchard 액션을 하나도 포함할 수 없게 되었습니다. 긴급 수정은 zcashd v6.12.5와 zebra v4.5.3으로 배포되었고, 60블록 앞선 첫 시도는 일부 채굴 풀이 제때 업그레이드하지 못해 폐기되었습니다. Orchard는 2026-06-03 04:03:08 UTC, 높이 3,364,600에서 NU6.2로 복귀했습니다. 274블록, 24시간 33분 만입니다. 결함이 있던 가변 기저 스칼라 곱셈 gadget은 halo2_gadgets 0.5.0과 orchard 0.14.0에서 고쳐졌고, 검증 키가 새로 만들어졌으며, 증명 길이 정규화 규칙도 추가되었습니다.
그다음 풀 자체가 교체되었습니다. NU6.3은 2026-07-28 14:07:23 UTC, 높이 3,428,143(합의 브랜치 0x37A5165B)에서 활성화되어 Ironwood 풀을 도입했습니다. Orchard 프로토콜의 후속이며, note는 설계상 양자 복구가 가능하고(ZIP-2005) 공급 무결성은 출시 전에 형식 검증을 거쳤습니다. 그 블록부터 Orchard 풀은 나가는 것만 가능합니다. 코인베이스 거래는 Orchard 액션을 담을 수 없고, 모든 Orchard 액션은 교차 주소 전송을 비활성화해 만들어야 하며, valueBalanceOrchard는 음수가 될 수 없습니다. 새로운 가치는 들어올 수 없다는 것을 합의 언어로 쓴 것입니다. 가치는 여전히 자유롭게 빠져나갈 수 있고, Ironwood로 턴스타일을 건너는 경로도 포함됩니다. ZIP-326은 지갑 쪽 규칙을 더합니다. 활성화 후에는 어떤 Orchard receiver로도 자금을 보내면 안 됩니다. Orchard 전용 주소는 '쓸 수는 있지만 받을 수는 없는' 주소가 된 것입니다.
교차는 원시 바이트에서 어떻게 보이는가. 2026-10-26 13:57 UTC에 채굴된 블록 3,531,339의 버전 6 거래를 디코딩해 개찰구의 작동을 확인했습니다. 거래 73909deb는 15,512바이트에 Ironwood 액션 4개를 담고, valueBalanceIronwood로 +2,546,022,971 zats를 선언합니다. 25.45999971 ZEC가 풀을 떠나 단일 투명 t1 출력으로 들어가고, 그중 25,000 zats가 수수료로 남습니다. 거래 512a113d는 9,166바이트, Ironwood 액션 2개, 가치 잔액은 정확히 +10,000 zats로, 눈에 보이는 움직임이 수수료뿐인 전송입니다. 그 바이트 안에서 수취인, 메모, note 금액은 암호문으로 남습니다. 공개되는 것은 잔액뿐입니다. 교차는 '얼마가 움직였는지'를 알리지 '누가 움직였는지'를 알리지 않습니다. (Zcash vs 모네로 2026 비교)
수수료, 그리고 블록 탐색기의 함정. ZIP-317은 논리 액션당 5,000 zats를 받되 최소 2개 액션을 인정합니다. 관례 수수료 = 5,000 × max(2, 논리 액션 수). NU6.3에서 발효된 Revision 1에 따라 Ironwood 액션은 각각 1개로 세고, 투명 입출력은 150바이트와 34바이트 단위로 환산됩니다. 그래서 2액션 실드 전송은 10,000 zats(0.0001 ZEC, ZEC 1,217.56달러 기준 약 12센트), 4액션에 투명 출력 1개면 25,000 zats(약 31센트)를 냅니다. 검증 중 실제로 밟은 함정이 하나 있습니다. 우리가 조회한 탐색기는 바로 그 거래들의 수수료를 0으로 표시했습니다. value balance라는 개념이 없기 때문입니다. 실드 거래를 감사할 때는 원시 바이트에서 valueBalanceOrchard와 valueBalanceIronwood를 읽으세요. 라벨은 거짓말을 합니다. (Zcash vs 모네로 2026 비교)
마이그레이션이 왜 그렇게 기계적인가. ZIP-318(Orchard에서 Ironwood로의 마이그레이션 설계)은 프라이버시의 대가를 명시적으로 가격 매기는 문서라 가장 시사적입니다. 교차의 순액은 공개되므로 순진하게 옮기면 잔액을 한 번에 공표하는 셈입니다. 초안은 대신 마이그레이션 거래를 '앵커 경계'로 코호트로 묶습니다. 144블록마다, 75초 목표에서 약 3시간마다 경계를 공유하게 해서 당신의 거래가 모두의 거래 속에 섞이게 합니다. 사용하는 금액은 n × 10^k(n은 1·2·5)의 규범적 액면뿐이고, 거래 하나가 Orchard note 하나만 쓰고 Ironwood 출력 하나만 만듭니다. 임계값 미만의 잔돈은 의도적으로 옮기지 않고 남겨, 이상한 나머지가 지문이 되지 않게 합니다. 각 부분이 독립적이므로 일정 전체를 미리 서명해 두고 앞 거래의 잔돈 확인을 기다리지 않고 한꺼번에 방송할 수 있습니다. (모네로 확인 대기)
네트워크는 제약이 아닙니다. 연속 600블록(높이 3,530,741~3,531,340, 12.45시간)을 가져왔습니다. 블록 크기 중앙값은 14,133바이트(상한 2 MB), 최대 889,107바이트, 600블록 중 181블록(30.2%)은 거래가 1건 이하였습니다. 평균 블록 간격은 74.8초. NU6.3 이후 체인은 89일 23시간 53분에 103,197블록을 추가했고 평균 75.35초로 75초 목표에 거의 맞습니다. 마이그레이션 트래픽은 무엇과도 경쟁하지 않습니다. 교차 한 번에 몇 센트이고 대기열은 비어 있습니다.
실제로 스왑할 때의 의미. 첫째, ZEC는 NU6.3 이후 지갑이 만든 주소로 받으세요. 가능하면 현재 지갑의 통합 주소입니다. Orchard 전용 문자열에는 더 이상 입금할 수 없습니다. 둘째, 금액이 공개되는 방식은 주소와 다릅니다. 투명 t1 주소에서 보내면 입금이 체인에서 완전히 보이고, Ironwood에서 보내면 주소는 지켜지지만 교차 금액은 value balance로 공개됩니다. 실드 출처가 '보이지 않는 숫자'를 뜻하지는 않습니다. 셋째, 확정 전에 가격을 받으세요. 2026-10-26 14:02~14:06 UTC 기준 우리 ZEC 견적은 최소 26.797546 USDT, 100 USDT는 0.06616125 ZEC, 5,000은 4.00967624, 20,000은 16.08030112 ZEC였습니다. 100 USDT 구간은 1 ZEC당 1,511.46 USDT, 20,000 USDT 구간은 1,243.76 USDT로 현물 1,217.56달러와 차이가 납니다. 소액 쪽 격차는 주문당 약 15~18달러의 고정 과금이며 네트워크 수수료가 아닙니다. ZEC→XMR은 2.0254, XMR→ZEC는 0.47483으로 왕복 3.8% 손실입니다. 환율은 움직입니다. 견적 페이지가 유일한 근거입니다. (XMR→USDT 출구 루트)
무엇을 신뢰하는가, 솔직하게. 회로가 감사가 말한 대로 작동한다는 것 — 2026년 5월 보고서와 수정된 검증 키가 어떤 마케팅 문구보다 중요한 이유입니다. ZIP-209의 잔액 불변식이 대시보드에 붙어 있어서가 아니라 모든 노드에 의해 강제된다는 것. 그리고 Ironwood 풀이 가치를 받아들이기 전에 공급 무결성이 검증되었다는 것. 여기에 하나 더, 키를 가진 사람이 유능하다는 것. 위의 어느 것도 침해된 지갑이 흘리는 note를 보호하지 않습니다. 턴스타일이 하지 않는 일은 교차 금액을 숨기고, 투명 구간을 사적으로 만들고, 마이그레이션을 생략시키는 것입니다. 하는 일은 하나입니다. 재무상태표를 한 장도 공개하지 않고 실드 풀의 장부를 정직하게 유지하는 것. 2026년, 그 성질은 12주 동안 두 번 시험받았습니다.