링 소개
모든 Solana 거래는 공개적으로 읽을 수 있습니다: 주소, 잔액 및 전송 이력은 누구나 볼 수 있습니다. 링은 온체인 잔액을 암호화하며 기본적으로 비양육권 상태를 유지합니다:- 비밀 링에서는 자산과 금액은 비공개이며, 송신자와 수신자는 보이는 상태로 남습니다.
- 익명 링에서는 자산, 금액, 송신자, 수신자가 모두 비공개입니다.
- 기본 링(Default Ring)은 권한이 필요 없고 비밀입니다. 자산과 금액을 암호화하며, 누구나 사용할 수 있으며 사용자 정의 정책 제어는 없습니다.
- 사용자 정의 링(Custom Rings)은 Solana 프로그램이며, Solana에서의 프라이버시를 프로그램 가능하게 하는 것입니다. 사용자 정의 링은 사용자 정의 정책, 보고 및 가시성 규칙과 함께 비밀 또는 익명일 수 있습니다.
대부분의 응용 프로그램에는 권한이 필요 없는 비밀 기본 링을 권장합니다.
사용자 정의 정책 및 규정 준수 제어를 위해, 여기에서 연락하여 사용자 정의 링을 시작하세요.
사용자 정의 링은 프로그래밍 가능합니다
사용자 정의 링은 Solana 프로그램으로 Simple하게 프라이버시를 프로그래밍 가능하게 하며, Token-2022와 유사한 기능을 제공합니다. 사용자 정의 링은 전송 및 가시성/감사를 위한 완전히 사용자 정의된 규칙을 정의할 수 있습니다.사용자 정의 링 정책 예시
사용자 정의 링 정책 예시
사용자 흐름 및 프라이버시 보장
Helius Privacy와의 거래는 기본적으로 온체인에서 실행되며, Solana 프로그램과 결합되어 단일 거래를 이루게 됩니다. 사용자는 링으로 들어가고, 내부에서 비공개로 전송하거나 링을 나갈 수 있습니다: 1. 입금 또는 온램프. 사용자는 공공 Solana 잔액 또는 명목 잔액에서 직접 비공개 잔액으로 토큰을 보냅니다. 2. 비공개 전송. 사용자는 동일한 링에서 비공개 잔액 간에 토큰을 보내거나, 다른 링으로 보냅니다. 3. 출금 또는 오프램프. 사용자는 비공개에서 공공 Solana 잔액으로, 또는 직접 명목 잔액으로 토큰을 보냅니다.비공개 잔액으로 입금: 무엇이 비공개인가
사용자는 두 가지 방법으로 비공개 잔액에 입금할 수 있습니다:- 명목 잔액에서 암호화폐 비공개 잔액으로 온램프
- 공공 암호화폐에서 비공개 암호화폐 잔액으로 입금
- On-ramp from fiat balance
- Deposit from public crypto balance
비공개 전송: 무엇이 비공개인가
사용자는 두 가지 방법으로 비공개 전송을 할 수 있습니다:- 동일한 링에서 전송
- 다른 링으로 전송
대부분의 응용 프로그램에는 권한이 필요 없는 비밀 기본 링을 권장합니다.
사용자 정의 정책 및 규정 준수 제어를 위해, 여기에서 연락하여 사용자 정의 링을 시작하세요.
- Permissionless Confidential Ring
- Custom Rings
비공개 잔액에서 출금: 무엇이 비공개인가
사용자는 두 가지 방법으로 비공개 잔액에서 출금할 수 있습니다:- 비공개 암호화폐에서 명목 잔액으로 오프램프
- 비공개 암호화폐에서 공공 암호화폐 잔액으로 출금
- Off-ramp to fiat balance
- Withdraw to public crypto balance
고급 거래 흐름
비공개 전송은 공개 전송과 유사하게 작동하며, 단일 Solana 거래에서 실행됩니다.- 비공개 전송
- Solana 전송
- 사용자의 SOL 또는 SPL 잔액이 온체인에서 암호화됩니다.
- 암호화된 상태를 가져와 로컬에서 해독하거나, 위임된 제공자가 해독하여 해독된 상태를 제공합니다.
- 지갑은 금액과 수신자를 설정한 후 ZK 증명을 요청합니다.
- RPC 제공자가 기본적으로 ZK 증명을 생성하여 반환합니다. 사용자 정의 링은 또한 정책 증명을 요구합니다.
- 지갑은 Solana 거래를 구축합니다. ZK 증명은 암호화된 상태를 공개하지 않고 검증됩니다. 호출된 프로그램과 서명 및 제출하는 주체는 링에 따라 다릅니다:
- 앱은 Solana 거래 해시를 통해 상태를 추적합니다.
- 권한 없는 비밀 링
- 사용자 정의 비밀 링
- 사용자 정의 익명 링
비공개 지갑
사용자는 비공개 지갑에 암호화된 잔액을 보관합니다. 비공개 지갑은 사용자의 공공 Solana 주소로 전송을 수신하여inbox 역할을 합니다.
이렇게 하면 발신자는 항상 공개 전송처럼 수신자의 Solana 주소를 입력합니다.
비공개 지갑 생성
비공개 지갑이 생성되면 Solana 주소가 온체인 레지스트리에 등록됩니다. 레지스트리는 하나의 Solana 주소를 하나의 에 매핑합니다. 전송은 백그라운드에서 Shielded Address로 암호화됩니다. 여러 Solana 주소는 하나의 Shielded Address를 공유할 수 없습니다. 각 레지스트리 레코드는 누구나 Solana 주소가 비공개 전송을 수신할 수 있는지 확인할 수 있는 PDA로, 에 의해 소유됩니다.지갑 앱에서 사용자가 전용 “비공개 지갑” 공개 키 또는 공개 키에만 사용할 수 있는 비공개 지갑을 생성할 수 있도록 허용할 수 있습니다.
비공개 지갑으로의 전송
모든 전송에서 Privacy API는 수신자가 비공개 지갑을 가지고 있는지 확인하기 위해 온체인 레지스트리에서 지갑 주소를 조회합니다. 일치하는 항목이 있으면 백그라운드에서 Shielded Address를 사용하여 전송을 암호화합니다.비공개 전송의 수신자가 비공개 지갑을 소유하고 있지 않은 경우, Privacy API는 전송을 비공개에서 공개로의 출금으로 해결합니다.사용자가 실수로 공개 잔액으로 출금하지 않도록 하기 위해 UI에서 별도의 사용자 서명을 요청하는 것을 권장합니다.
키 관리
비공개 지갑은 사용자의 Solana 키페어에서 Solana 지갑에 shielded keypair를 추가합니다.
shielded keypair는 서명, nullifier 및 보기 키의 번들로, Solana 키페어가 아닙니다.
Shielded Address는 shielded keypair의 공개 키입니다. 전송은 이에 암호화됩니다.
Shielded Keypair 생성하기
지갑은 두 가지 방법으로 shielded keypair를 생성할 수 있습니다.-
시드 구문에서 키 유도하기
- 시드 기반 지갑의 권장 접근 방법.
- 비밀 링: 서명 키는 시드에서 Solana 지갑이 유도하는 동일한 Ed25519 키입니다. nullifier 및 보기 키는 동일한 시드에서 추가로 유도된 키입니다.
- 사용자 정의 익명 링: 서명 키는 지갑 시드에서 추가로 유도된 P-256 키입니다.
- Solana 지갑을 재생성하는 것과 동일한 방식으로 shielded keypair를 항상 재생성할 수 있습니다.
-
기존 Solana 키로 고정 메시지에서 키 유도하기
- Solana 서명은 결정적이므로 동일한 Solana 키페어는 항상 동일한 shielded keypair를 생성합니다. 앱은 비공개 키를 받지 않습니다.
- 시드 구문을 사용하지 않는 테스트 및 지갑에 대한 권장 접근 방법. 통합되는 지갑은 서명이 제3자에게 노출되지 않도록 보장해야 합니다.
Shielded Keypair 통합하기
지갑은 네이티브 지갑 통합을 통해 shielded keypair를 보관할 수 있습니다. 임베디드 프라이버시 지갑을 사용하면 지갑 제공자가 shielded keypair를 보관하고 키 작업을 대신 수행합니다.복호화 모드와 지갑 동기화
소유자만 보기 키를 사용하여 비공개 지갑 잔액을 복호화할 수 있습니다. 선택적 공개를 위해 소유자는 보기 키를 감사자와 공유할 수 있으며, 감사자는 자산을 사용할 수 없는 상태에서 활동을 읽을 수 있습니다. 사용자 정의 링에서는 정책이 해당 사용자 정의 링의 모든 잔액을 복호화할 수 있는 감사자를 선언할 수 있습니다. 비밀 링(기본 링 및 비밀 사용자 정의 링)은 로컬 및 위임된 복호화를 지원합니다. 익명 링(사용자 정의 링만 해당)은 위임된 복호화만 지원합니다.지갑은 지갑 잠금 해제 시, 비공개 지갑 열기, 앱 다시 시작, 네트워크 재연결, 스트림 간극 또는 지갑 복원 시 백필을 실행되는 곳에서 잔액을 해독하고 업데이트해야 합니다.
로컬 복호화
로컬 복호화 모드에서는 지갑이 잔액 및 기록을 로컬에서 복호화하고 동기화합니다. Helius 서버는 니모닉, 시드, 서명 비공개 키, 보기 비공개 키 또는 nullifier 비밀을 받지 않습니다.위임된 복호화
위임된 복호화 모드에서는 지갑과 선택된 제공자가 보기 키를 공유합니다. 이로 인해 제공자가 잔액 및 이력을 복호화할 수 있지만, 자산을 사용할 수 있는 권한은 부여되지 않습니다. 지갑은 또한 제공자가 기록된 활동을 동기화하도록 승인할 때 이전 보기 키를 공유할 수 있습니다. 감사자 액세스는 위임된 복호화와 별개입니다. 감사자는 정책 정의된 링 가시성을 받으며, 위임된 제공자는 지갑 범위의 동기화 액세스를 받습니다.인덱서가 암호화된 상태 제공
공개 지갑이 Solana RPC에 의존하듯이, 비공개 지갑은 인덱서에 의존합니다. 인덱서는 잔액을 읽고 비공개 거래를 구축하는 데 필요한 암호화된 상태를 제공합니다. 기본적으로, 인덱서는 을 통해 접근할 수 있습니다. 누구든지 무허가로 자신만의 인덱서를 백업으로 실행할 수 있습니다.비공개 지갑 잔액
비공개 지갑 잔액은 Solana 토큰 계정이 아닌 UTXO(사용되지 않은 거래 출력)로서 비공개 Solana 토큰 계정에 온체인에 보관됩니다. 기본 링 및 모든 사용자 정의 링은 하나의 상태 머클 트리에 비공개 잔액을 저장합니다. 비공개 지갑 잔액은 비공개 지갑이 소유한 모든 UTXO의 합입니다. Solana 프로그램은 일반 Solana 계정과 유사하게 UTXO를 소유할 수 있습니다. 이 문서에서는 비공개 Solana 토큰 계정과 UTXO를 상호 교환적으로 사용합니다.UTXO와 Solana 계정에서의 잔액
UTXO와 Solana 계정에서의 잔액
사용자 경험 측면에서는 잔액이 UTXO 또는 Solana 토큰 계정에 보관되는지는 중요하지 않습니다.기술적 관점에서는, 공개 잔액을 사용하는 것은 Solana 토큰 계정에서 
amount을 감소시킵니다.
비공개 잔액을 사용하는 것은 UTXO의 amount 필드를 덮어쓰지 않습니다.
대신, 비공개 거래는 기존 UTXO를 입력으로 자동으로 선택하여
입력을 소비하고 수신자 및 송신자의 남는 잔액을 위한 새로운 출력을 생성합니다.예를 들어, Alice는 50 USDC를 가지고 있으며 Bob에게 35를 보냅니다.- Solana 토큰 계정에서는 그녀의
amount필드가 50에서 15로 변경되며, Bob의 필드는 35로 증가합니다. 값이 제자리에 변경됩니다. - UTXO에서는 Alice는 하나의 50 USDC 노트를 보유합니다. 거래는 그것을 사용하고 두 개의 새로운 노트를 생성합니다: Bob을 위한 35 USDC 노트와 Alice를 위한 15 USDC 잔여 노트. 그녀의 오래된 50 노트는 이제 사용되었습니다.
- 하나의 입력 노트
- 여러 입력 노트
SOL 및 SPL 자산의 비공개 잔액에 대한 입금 시, Solana 프라이버시 프로그램이 소유하는 인터페이스 PDA는 토큰을 에스크로로 보관하고 사용자가 소유자로 설정된 UTXO를 생성합니다.공개 잔액으로의 출금 시, 기존 UTXO는 사용된 것으로 표시되고, 토큰은 Solana 토큰 계정에 릴리스됩니다.
policy_program_id 필드의 속성입니다.
비공개 Solana 토큰 계정
비공개 Solana 토큰 계정은 Solana 토큰 계정과 유사하게 동작하는 UTXO로 두 가지 핵심 차이점이 있습니다:- 비공개 Solana 토큰 계정은 생성 시 임대 면제를 필요로 하지 않으며,
- 그 잔액은 온체인 암호화됩니다.
- 자산: UTXO가 보유한 단위의 소유주. SOL은 기본 소유주 주소입니다. 자산은 SOL 또는 임의의 SPL 또는 Token-2022 자산이 될 수 있습니다.
- 금액: 노트가 보유한
asset개수, 자산의 가장 작은 단위로 표시. - 프로그램 및 정책 데이터: 구성된 링 정책에서 Token-2022와 유사한 기능을 추가하기 위한 선택적 데이터
- 다이어그램
- 코드
Solana 토큰 계정 보기
Solana 토큰 계정 보기
- 다이어그램
- 코드