마지막 업데이트:
Nullmask는 사용자가 자산을 풀(pool)에 보호하고 입금과 출금 사이의 온체인 연결을 남기지 않고 그 내부에서 거래함으로써 Ethereum Virtual Machine (EVM) blockchains에서의 거래를 비공개로 만들 수 있게 해주는 영지식(ZK) 프라이버시 프로토콜입니다.[1][2] 2026년 3월 17일 암호학자 Tomas Krnak이 설계하고 저술한 프로토콜로 도입되었으며, 그 암호화 아키텍처와 기술 문서는 법인명이 아닌 그의 이름으로 발표되었습니다.[8] 이 프로토콜은 별도의 애플리케이션, 전용 지갑 또는 새로운 seed phrase를 요구하는 대신 사용자의 기존 지갑 내부에 "가상 네트워크"로 설치된다는 점이 특징입니다.[1] 핵심 설계 주장은 보호된 작업이 표준 Ethereum 트랜잭션으로 승인되기 때문에 지출 권한이 사용자의 지갑을 절대 떠나지 않는다는 것입니다.[3] 이 프로젝트는 자신의 목적을 "클릭 한 번으로 모든 지갑과 모든 거래를 비공개로 만드세요"라는 문구로 요약합니다.[4]
Nullmask는 EVM 호환 blockchains을 위한 프라이버시 레이어입니다. 사용자는 자산을 영지식(zero-knowledge) 풀에 예치하거나 "차폐(shield)"하고, 그 안에서 비공개로 전송 및 스왑을 수행한 후, 나중에 임의의 주소로 자금을 "해제(unshield)"할 수 있습니다. 이 프로토콜은 원래의 예치와 최종 출금 사이에 관찰 가능한 온체인 관계가 존재하지 않도록 설계되었습니다.[1][2] 이 프로토콜은 네 가지 비공개 작업을 지원합니다: 차폐 예치(shielded deposits), 차폐 전송(shielded transfers), 차폐 출금(shielded withdrawals), 그리고 차폐 스왑(shielded swaps)입니다.[6]
이 프로토콜은 자체 blockchain을 운영하지 않습니다. 대신 기존의 layer 2 (L2) 인프라를 기반으로 구축되어 사용자의 지갑에 차폐 계정을 연결하며, 자체 네트워크에서의 작업을 궁극적으로 기본 EVM 체인에서 실행되는 "차폐 작업을 위한 의도(intents for shielded actions)"로 처리합니다.[3] 이 프로젝트는 제3자 트래커에 의해 "zk" 및 "Privacy" 카테고리로 분류되어 있습니다.[1][5]
Nullmask로 보호된(shielded) 자금은 UTXO 기반 프라이버시 풀에 보관됩니다. 이는 잔액이 단일 가변 계정 잔액이 아닌 개별적인 미사용 출력값(unspent outputs)으로 표시되는 모델입니다. 이 풀은 Poseidon2 커밋먼트와 머클 멤버십 증명(Merkle membership proofs)을 사용하여 보안을 유지합니다. 이러한 암호화 구조를 통해 프로토콜은 특정 예치금이 무엇인지 밝히지 않고도 해당 예치금이 풀에 속해 있음을 확인할 수 있습니다.[6] 사용자가 작업을 시작하면 프로토콜은 트랜잭션을 가로채 클라이언트 측에서 영지식 증명(zero-knowledge proof)을 생성하고, 이를 릴레이어(relayer)를 통해 제출합니다. 릴레이어는 트랜잭션을 브로드캐스트하여 원래 발신자의 신원이 온체인에 노출되지 않도록 하는 중개자 역할을 합니다.[6]
보호된 전송(Shielded Transfers)을 통해 발신자, 수신자 또는 금액을 온체인에 공개하지 않고 토큰을 보낼 수 있습니다. 보호된 스왑(Shielded Swaps)은 사용자의 신원을 노출하지 않고 Uniswap V2 거래를 실행하며, 비공개 예치 및 출금은 각각 영지식 증명에 의해 검증됩니다.[6] 비공개 전송 금액은 설계상 숨겨져 있으며, 프로젝트의 분석 방법론에 따르면 이는 보고된 거래량 수치에 포함되지 않음을 의미합니다.[2]
Nullmask는 독립형 애플리케이션으로 작동하는 대신 사용자의 지갑에 가상 네트워크로 설치됩니다. 프로젝트 측은 이 일회성 설정에 약 20초가 소요된다고 설명합니다.[3] 가상 네트워크는 Nullmask RPC 미들웨어를 사용하여 보호된 잔액을 복호화하고 나가는 트랜잭션을 그에 상응하는 보호된 형태로 변환합니다. 이 미들웨어는 빠른 온보딩을 위해 원격으로 실행하거나, 프로젝트가 설명하는 최대의 프라이버시를 위해 로컬에서 실행할 수 있습니다.[3] 일단 설치되면, 사용자는 별도의 앱 없이 기존 web3 지갑에서 직접 전송, 출금 및 탈중앙화 애플리케이션과의 상호작용을 수행할 수 있다고 프로토콜은 명시하고 있습니다.[3]
이 프로토콜은 MetaMask 및 Ethereum 트랜잭션 수수료 표준인 EIP-1559와 호환되는 모든 지갑과 작동하도록 설계되었으며, 표준 지갑 사용자 경험을 유지합니다.[6] Nullmask는 별도의 보호된 주소 체계 대신 표준 0x 주소와 Ethereum Name Service (ENS) 이름을 사용하며, 지갑의 기존 시드를 기반으로 하기 때문에 추가적인 시드 구문(seed phrase)을 저장할 필요가 없다고 프로젝트 측은 밝히고 있습니다.[3] 또한 하드웨어 지갑(hardware wallets)을 지원하며, 장치에서 지출 권한을 추출하지 않고도 완전한 보안을 제공한다고 명시합니다.[6]
Nullmask가 자체 발행한 설계 문서에서 반복되는 주제는 지출 권한(spending authority)의 처리 방식입니다. 이 프로젝트는 Railgun, 0xbow, Hinkal, zERC20, Zcash 등 실명을 거론한 다른 프라이버시 솔루션들이 지갑에서 지출 권한을 추출하는 방식에 의존한다고 주장하며 자사의 방식과 대조합니다.[3] 문서에 따르면, 지출 권한을 추출하는 것은 해당 방식들을 피싱 공격에 취약하게 만들며, 지출 권한이 장치를 절대 떠나지 않아야 한다는 하드웨어 지갑의 근본적인 원칙을 위반하는 것이라고 설명합니다.[3]
문서에 따르면 Railgun과 Zcash는 실드 트랜잭션(shielded transaction)에 추가 서명을 요구함으로써 이 문제를 해결했지만, 두 방식 모두 커스텀 해시 함수(Zcash Orchard의 Sinsemilla 및 Railgun의 "various-rate Poseidon")에 의존한다고 명시되어 있습니다. 이러한 함수들은 하드웨어 지갑의 제한된 환경에서는 비실용적인 대규모 사전 계산 룩업 테이블을 필요로 한다고 주장합니다.[3] 반면 Nullmask는 모든 하드웨어 지갑에 이미 구현되어 있는 표준 EIP-1559 트랜잭션으로 실드 트랜잭션을 승인하므로, 지갑 코드의 변경 없이도 하드웨어 지갑에서 실드 트랜잭션을 수행할 수 있게 합니다. 이 프로젝트는 "프라이버시가 더 이상 절충안처럼 느껴지지 않을 때 승리한다"라는 문장으로 자신의 입장을 요약합니다.[3]
Nullmask에는 프라이버시 풀의 남용을 제한하기 위한 내장형 규제 준수 도구가 포함되어 있습니다. 프로토콜은 예치금 스크리닝을 수행하고 취소 키(revocation keys)를 통한 소급적 오염 회복(retrospective taint recovery) 기능을 제공합니다. 문서는 이 메커니즘을 통해 이전에 수락된 예치금이 나중에 불법으로 판명될 경우 추적할 수 있게 해준다고 설명합니다.[6] 프로젝트의 분석 방법론에 따르면, 스크리닝 대기 중인 자금은 보고된 총 예치 자산(TVL)에서 제외됩니다.[2]
Nullmask의 풀 컨트랙트는 UUPS 프록시 패턴을 사용하는 ERC1967 래퍼 뒤에 배포되므로, 사용자는 프록시 주소와 상호작용하는 반면 컨트랙트 로직은 승인된 업그레이드 컨트롤러를 통해 업그레이드될 수 있습니다.[9] 출시 시점에 업그레이드 권한은 단일 업그레이드 관리자 역할을 하는 AdminUpgradeController 컨트랙트가 보유하며, 이는 초기 배포자에 의해 제어됩니다.[9] 업그레이드 권한 자체는 setUpgradeController() 함수를 통해 업그레이드 가능하며, 이를 통해 upgradeController 역할을 타임락 컨트랙트, 멀티시그 지갑 또는 DAO 거버넌스 컨트랙트와 같은 대체 구조로 이전할 수 있습니다. 오직 현재의 upgradeController만이 이러한 마이그레이션을 수행할 권한을 가집니다.[9]
규제 준수 관련 매개변수 또한 이 업그레이드 컨트롤러와 연결되어 있습니다. 특권 컨트랙트 상태 변수인 가드(guard) 주소는 기존 가드 또는 업그레이드 컨트롤러가 setGuard()를 통해 변경할 수 있으며, 검증자(verifier) 컨트랙트와 화이트리스트 관리자는 업그레이드 컨트롤러의 승인이 필요한 함수를 통해 업데이트됩니다.[9][10] 가드는 프라이버시 풀로의 예치금을 모니터링하는 백엔드 서비스로 작동하며, approveDeposit() 및 rejectDeposit()을 호출할 수 있는 유일한 주소입니다. 승인된 각 예치금에 대해 가드는 취소 키 쌍을 발행하며, 이 키의 공개 구성 요소와 해시는 예치 이벤트 및 커밋먼트(commitment)에 포함됩니다.[10][11] 이러한 취소 키는 참여자가 자신의 노트(note)가 나중에 플래그가 지정된 예치금으로부터 자금이 조달되었는지 감지하고, 오염된 자금과의 비연관성을 증명하거나, 영향을 받은 잔액을 선택적으로 정화할 수 있게 함으로써 소급적 오염 회복을 가능하게 합니다. 취소 메커니즘에 대한 제어는 가드 서비스와 스마트 컨트랙트 사양에 기술된 업그레이드 컨트롤러를 통해 조정됩니다.[11][9]
Nullmask의 문서에 따르면 Ethereum, Arbitrum, MegaETH, Base, 그리고 BSC (BNB Smart Chain)에 배포되어 있으며, 이 프로토콜은 네이티브 ETH와 함께 모든 지원되는 ERC-20 토큰을 지원합니다.[6] 실시간 운영 현황을 반영하는 프로젝트의 분석 대시보드에 따르면, privacy pools는 현재 두 개의 체인에서 활성화되어 있습니다: 2026년 10월 1일부터 운영 중이며 ETH와 USDT를 지원하는 Ethereum, 그리고 2026년 10월 7일부터 운영 중이며 ETH와 USDC를 지원하는 Base입니다.[2] 풀 컨트랙트는 두 체인 모두 동일한 주소에 배포되어 있으며, 활동 내역은 Etherscan 및 Basescan block explorers를 통해 확인할 수 있습니다.[2]
MASK 토큰은 Solana blockchain에서 발행되며, 솔라나 생태계 내의 데이터 애그리게이터들에 의해 추적됩니다.[5][2] 데이터 제공업체들이 보고한 공급량 수치는 약간의 차이가 있습니다. CoinMarketCap은 총 공급량 및 최대 공급량을 990,994,347 MASK로 기재하고 있으며, 프로젝트 측은 이를 전량 circulating supply(유통 공급량)라고 자체 보고하고 있습니다. 반면 CoinGecko는 최대 공급량 10억 개 대비 총 공급량을 약 9억 8,630만 개로 기재하고 있습니다.[7][5] 이 토큰은 Meteora, Raydium, Manifest를 포함한 decentralized exchanges(탈중앙화 거래소)와 LBank, MEXC, KCEX와 같은 centralized exchanges(중앙화 거래소)에서 거래되며, SOL, USDC, USDT를 페어로 하는 liquidity pools(유동성 풀)이 형성되어 있습니다.[5][7]
이 토큰은 Zcash (ZEC)와 연계된 보상 및 바이백 시스템을 통해 프로토콜의 경제 구조와 연결됩니다. 프로젝트 대시보드에 따르면, StonkFun에 의해 MASK 홀더들에게 ZEC가 배분되며, 2026년 10월 초 기준으로 기록된 누적 홀더 보상은 약 101만 달러에 달합니다.[2] 이와 별도로, 개발 지갑에서 확보한 ZEC(일일 ZEC 가격 기준 총 약 514,000달러 가치)는 MASK를 바이백하는 데 사용됩니다. 대시보드 보고에 따르면 온체인에서 소각된 MASK는 초기 공급량 10억 개의 약 1.22%에 해당합니다.[2]
2026년 10월 현재, 공개된 프로토콜 문서 및 스마트 컨트랙트 참조 자료에는 Nullmask 풀 컨트랙트에 대한 MASK의 온체인 거버넌스 권한이 명시되어 있지 않습니다. 대신 업그레이드 권한은 EVM 측의 업그레이드 컨트롤러 컨트랙트에 귀속되어 있습니다.[9] 공개 자료들은 MASK의 경제적 역할을 수수료 공유 메커니즘이나 프로토콜 파라미터에 대한 staking 기반 거버넌스가 아닌, 주로 홀더를 위한 ZEC 표시 보상 및 토큰을 영구적으로 소각하는 ZEC 기반 바이백과의 연계성을 통해 규정하고 있습니다.[2]
이 프로젝트는 Dune에서 공개 분석 대시보드를 운영하며, 출시 이후 각 체인의 풀 컨트랙트 온체인 이벤트를 디코딩하여 수치를 도출합니다. 이 대시보드는 두 체인의 합계와 체인별 세부 내역을 모두 보여줍니다. 대시보드 데이터는 실시간이 아니며, 위젯은 30분에서 6시간 간격으로 업데이트됩니다.[2] 방법론에 따르면, 거래량(Volume)은 각 트랜잭션 시점의 분 단위 가격으로 산정된 모든 실드(shield) 및 언실드(unshield)의 미국 달러 가치로 정의됩니다. 총 예치 자산(TVL)은 현재 풀에 실딩된 자금으로, 아직 청구되지 않은 프로토콜 수수료와 심사 대기 중인 예치금은 제외됩니다. 총 전송 횟수(Total transfers)는 예치, 출금, 프라이빗 전송 및 스왑을 포함한 모든 풀 운영 횟수를 집계합니다.[2]
프로토콜은 각 예치 및 출금 시 0.5%의 수수료를 부과하며, 릴레이어 gas 보상은 프로토콜 수수료에 포함되지 않는다고 명시하고 있습니다.[2] 2026년 10월 1일 Ethereum 출시부터 2026년 10월 8일까지 대시보드에 기록된 누적 거래량은 첫날 약 107만 달러에서 약 1,597만 달러로 증가했으며, 약 79,800달러의 누적 수수료를 창출했습니다.[2] 일일 활동은 2026년 10월 4일에 약 364만 달러의 거래량과 1,000건의 총 전송 횟수로 정점을 찍은 후 주 후반에 감소했습니다. Base 활동은 2026년 10월 7일 수치에 처음 등장하여 당일 약 256,000달러의 거래량을 기록했습니다.[2] 두 체인을 합산하여 대시보드는 약 1,603만 달러의 총 플랫폼 거래량과 약 80,100달러의 총 플랫폼 수수료를 보고했습니다.[2]
Nullmask는 여러 구성 요소를 아우르는 모노레포(monorepo)로 구축되었습니다. 이 프로토콜의 영지식 회로는 ZK 프로그램 작성을 위한 언어인 Noir를 Barretenberg 증명 백엔드와 함께 사용합니다.[6] 스마트 컨트랙트는 Solidity 0.8.28로 작성되었으며 Hardhat v3 프레임워크와 OpenZeppelin v5 라이브러리를 사용하여 개발되었습니다.[6] 프론트엔드는 Next.js 15, React 19, TailwindCSS 4를 사용하며, 백엔드 서비스는 Fastify 5와 Node.js 24에서 실행됩니다. web3 통합 레이어는 Viem 및 Wagmi 라이브러리를 사용하고, 영구 저장소는 LMDB를 사용합니다. 모노레포 관리는 Turborepo와 pnpm 패키지 매니저를 통해 이루어지며, Biome, TypeScript 5.9, knip 등의 코드 품질 도구가 함께 사용됩니다.[6]
프로토콜의 문서는 GitBook을 통해 게시되며 프로토콜 소개, 작동 원리, 암호화 알고리즘 및 증명을 상세히 설명하는 프로토콜 사양, 예치, 이체 및 스왑을 위한 Solidity API를 제공하는 Smart Contract 참조서, 프록시에서 노출하는 JSON-RPC 메서드를 설명하는 RPC API 참조서, 프로토콜을 로컬에서 빌드하고 실행하기 위한 개발자 가이드, 그리고 단계별 지침이 포함된 사용자 가이드 섹션으로 구성되어 있습니다.[6] 각 페이지는 마크다운 형식으로 제공되며, 문서는 GitBook API를 통해 프로그래밍 방식으로 쿼리할 수 있어 문서에서 추출한 발췌문 및 출처와 함께 직접적인 답변을 반환받을 수 있습니다.[6]