Solidity로 프라이버시 믹서 구축하기: 왜 내 Merkle Proofs가 실패했는가
Source: Dev.to
Web3에서 프라이버시는 종종 복잡한 영지식 증명의 “블랙 박스”로 인식됩니다. 하지만 Tornado Cash와 같은 대부분의 프라이버시 프로토콜의 핵심은 훨씬 오래되고 단순한 구조인 Merkle Tree입니다.
최근 연구 기반 ETH Mixer를 구축하면서, 온‑체인 검증과 오프‑체인 증명 생성 사이의 고전적인 동기화 문제에 직면했습니다. 여기서는 Merkle Tree의 안정성에 대해 배운 점과 “Invalid Proof” 함정을 피하는 방법을 공유합니다.
The Architecture
목표는 간단했습니다:
- Deposit – 사용자가 1 ETH와 해시(커밋먼트)를 전송합니다.
- Mix – 커밋먼트가 Merkle Tree에 추가됩니다.
- Withdraw – 사용자가 Merkle Proof를 제공하여 원래 입금을 밝히지 않은 채 1 ETH를 새로운 주소로 인출합니다.
The Pitfall: Sorted Hashes
처음에는 sorted‑hash Merkle Tree를 사용했습니다. 이 방식에서는 노드들을 해시하기 전에 정렬합니다:
// Vulnerable logic for manual proof generation
computedHash = a

#solidity #blockchain #web3 #security #foundry