프라이버시 프리컴파일

component privacy

0x1000…000b에 위치한 정책 인지 프리컴파일을 통해 OKRW를 프라이버시 풀에서 관리합니다. 예치는 payable로 이뤄지며, 인출은 공개 수신자에게 정산되고, 전송은 풀 내부에서 유지됩니다.

0x100000000000000000000000000000000000000b에 위치한 프라이버시 프리컴파일은 프라이버시 풀 대상 OKRW 연산(deposit, transfer, withdraw, 각 인가 변형, 두 종류의 배치 변형)을 EVM에서 호출할 수 있는 표면으로 제공합니다. 이 표면은 정책 인지 프리컴파일 프레임워크로 감싸져 있습니다. 예치는 payable이며 금액은 네이티브 msg.value(aokrw 단위)에서 취합니다. 요청 struct 자체에는 노트 커밋먼트, 암호화된 노트, ZK 증명만 담깁니다. 상태를 바꾸는 모든 호출은 정확히 하나의 컨트랙트 범위 PolicyOperation을 노출하고, PCL이 실행 전후로 이를 평가하므로 컨트랙트 정책(denylist, 주기 상한 등)이 프라이버시 흐름에도 동일하게 적용됩니다.

아키텍처

flowchart LR
    User[User dApp]:::evm
    Relayer[Relayer / Executor]:::evm
    Privacy[Privacy Precompile<br/>0x1000…000b]:::precompile
    Recipient[Transparent Recipient]:::evm

    User -- deposit / transfer / withdraw --> Privacy
    User -- EIP-712 signed intent --> Relayer
    Relayer -- ...WithAuthorization --> Privacy
    Privacy -- withdraw payout --> Recipient

    classDef evm fill:#0096AA,stroke:#0096AA,color:#fff;
    classDef precompile fill:#FF8C50,stroke:#FF8C50,color:#fff;

직접 호출자는 자신의 지갑에서 Privacy 프리컴파일을 호출합니다. 위임 호출자는 오프체인에서 EIP-712 인증에 서명하고, 릴레이어가 `…WithAuthorization` 변형을 대신 제출합니다. 인출은 투명한 EVM 수신자에게 정산됩니다.

메서드 표면

인터페이스는 상태를 바꾸는 아래 메서드들을 제공하며 view 메서드는 없습니다.

메서드payable용도
deposit네이티브 OKRW를 프라이버시 풀에 예치합니다. 금액은 msg.value에서 취합니다.
transfer아니오풀 내부에서 프라이버시 노트를 이동합니다.
withdraw아니오공개 수신자에게 정산 인출을 수행합니다.
transferWithAuthorization아니오transfer와 동일하며, 서명된 인가에 따라 대행자가 실행합니다.
withdrawWithAuthorization아니오withdraw의 대행 실행입니다.
batchTransfer아니오하나의 배치 id 아래 여러 개의 독립 전송을 처리합니다.
batchTransferWithAuthorization아니오대행 배치 전송입니다.
singleProofBatchTransfer아니오여러 입출력을 하나의 집계 ZK 증명으로 처리합니다.
singleProofBatchTransferWithAuthorization아니오대행 단일 증명 배치 전송입니다.

depositWithAuthorization은 존재하지 않습니다. 예치는 operator(msg.sender)가 실질 발신자와 동일해야 하므로, 예치자 본인의 서명이 곧 해당 연산을 보증합니다.

예치 금액은 msg.value로 전달

deposit에 전달하는 request struct는 { bytes noteCommitment; bytes encryptedNote; bytes proof; }이며 amount 필드가 없습니다. 예치 금액은 런타임 네이티브 denom(aokrw) 기준으로 msg.value에서 도출합니다. PrivacyDeposit 이벤트는 여전히 Cosmos 코인 문자열 형식으로 금액을 기록하므로(예: 1,000만 OKRW의 경우 "10000000000000000000000000aokrw"), 다운스트림 인덱서가 표준 값을 볼 수 있습니다.
// 1,000만 OKRW 예치.
PRIVACY.deposit{value: 10_000_000 ether}(PrivacyDepositRequest({
    noteCommitment: commitment,
    encryptedNote:  encNote,
    proof:          zkProof
}));

정책 인지 래핑

이 프리컴파일은 vm.PrecompiledContract를 직접 구현하지 않습니다. privacy-policy-aware-precompile에서 다루는 정책 인지 래퍼와 원시 executor의 조합으로 구성됩니다. 래퍼는 executor가 각 호출에 대해 준비한 단일 PolicyOperation을 받아 PCL의 평가 전 → 실행 → 평가 후 → 기록 흐름을 진행합니다. 프라이버시 전송의 숨겨진 금액은 해당 operation에서 value = 0으로 모델링되므로, 신원 정책과 denylist 정책은 여전히 실행되면서도 검증 불가능한 주기 거래량은 기록되지 않습니다. 반면 공개 예치는 실제 msg.value를 담고 있어 거래량 상한 산정에도 포함됩니다.
ESC
검색어를 입력하세요