Skip to main content

링 소개

모든 Solana 거래는 공개적으로 읽을 수 있습니다: 주소, 잔액 및 전송 이력은 누구나 볼 수 있습니다. 링은 온체인 잔액을 암호화하며 기본적으로 비양육권 상태를 유지합니다:
  • 비밀 링에서는 자산과 금액은 비공개이며, 송신자와 수신자는 보이는 상태로 남습니다.
  • 익명 링에서는 자산, 금액, 송신자, 수신자가 모두 비공개입니다.
두 개의 Solana 거래 카드가 나란히 놓여 있습니다. 비밀 카드에는 거래 해시, 송신자 및 수신자가 표시되며 자산과 금액은 가려져 있습니다. 익명 카드는 거래 해시만 표시하고 송신자, 자산, 금액, 수신자는 모두 가려져 있습니다. 거래 해시는 모두에서 공개됩니다. 링의 종류는 다양합니다:
  1. 기본 링(Default Ring)은 권한이 필요 없고 비밀입니다. 자산과 금액을 암호화하며, 누구나 사용할 수 있으며 사용자 정의 정책 제어는 없습니다.
  2. 사용자 정의 링(Custom Rings)은 Solana 프로그램이며, Solana에서의 프라이버시를 프로그램 가능하게 하는 것입니다. 사용자 정의 링은 사용자 정의 정책, 보고 및 가시성 규칙과 함께 비밀 또는 익명일 수 있습니다.
대부분의 응용 프로그램에는 권한이 필요 없는 비밀 기본 링을 권장합니다. 사용자 정의 정책 및 규정 준수 제어를 위해, 여기에서 연락하여 사용자 정의 링을 시작하세요.
두 개의 링을 보유한 대시 온체인 영역으로 표시된 비공개 잔액. 기본 링은 비밀이며, 자가 양육권 및 무허용 상태입니다. 사용자 정의 링은 비밀 또는 익명일 수 있으며, 사용자 정의 정책 및 규정을 추가합니다. 비공개 전송은 링을 연결하고, 각 링은 아래 Solana 공개 밸런스 레이어로 입출합니다.

사용자 정의 링은 프로그래밍 가능합니다

사용자 정의 링은 Solana 프로그램으로 Simple하게 프라이버시를 프로그래밍 가능하게 하며, Token-2022와 유사한 기능을 제공합니다. 사용자 정의 링은 전송 및 가시성/감사를 위한 완전히 사용자 정의된 규칙을 정의할 수 있습니다.
링 당국은 링 생성 시 선언되므로, 사용자는 링을 선택하기 전에 정책을 검토할 수 있습니다. 기본 링은 권한이 없으며 사용자 정의 권한이나 감사자가 없습니다.
자신의 사용자 정의 링을 설정하려면, 여기에서 연락하여 설정을 도와드리겠습니다. 자신의 규정 준수를 가져오거나, Helius의 관리형 KYC 및 제재 스크리닝 솔루션을 사용할 수 있습니다.

사용자 흐름 및 프라이버시 보장

Helius Privacy와의 거래는 기본적으로 온체인에서 실행되며, Solana 프로그램과 결합되어 단일 거래를 이루게 됩니다. 사용자는 링으로 들어가고, 내부에서 비공개로 전송하거나 링을 나갈 수 있습니다: 1. 입금 또는 온램프. 사용자는 공공 Solana 잔액 또는 명목 잔액에서 직접 비공개 잔액으로 토큰을 보냅니다. 2. 비공개 전송. 사용자는 동일한 링에서 비공개 잔액 간에 토큰을 보내거나, 다른 링으로 보냅니다. 3. 출금 또는 오프램프. 사용자는 비공개에서 공공 Solana 잔액으로, 또는 직접 명목 잔액으로 토큰을 보냅니다. 링 수명 주기의 다이어그램. 100 USDC의 공공 잔액이 링에 입금되고 명목 잔액의 USD / EUR / ...가 동일한 링에 온램프되며, 자금이 두 비공개 잔액 간에 비공개 전송을 통해 이동한 다음, 공공 잔액으로 출금되거나 명목 잔액으로 오프램프됩니다. 사용자는 공공 잔액과 마찬가지로 Solana 지갑 주소로 토큰을 보냅니다. Privacy API는 수신자가 Private Wallet을 가지고 있다면 전송을 자동으로 Private Wallet으로 라우팅합니다. 그렇지 않으면 전송은 수신자의 공공 주소로의 출금입니다. 누구든지 수신자의 공개 지갑 주소만 알면 Private Wallet에 입금할 수 있습니다. 발신자의 앱이 프라이버시를 지원하지 않는 경우, 수신자는 공개적으로 자금을 받고 두 번째 단계에서 자신의 비공개 잔액으로 암호화할 수 있습니다.

비공개 잔액으로 입금: 무엇이 비공개인가

사용자는 두 가지 방법으로 비공개 잔액에 입금할 수 있습니다:
  1. 명목 잔액에서 암호화폐 비공개 잔액으로 온램프
  2. 공공 암호화폐에서 비공개 암호화폐 잔액으로 입금

비공개 전송: 무엇이 비공개인가

사용자는 두 가지 방법으로 비공개 전송을 할 수 있습니다:
  1. 동일한 링에서 전송
  2. 다른 링으로 전송
대부분의 응용 프로그램에는 권한이 필요 없는 비밀 기본 링을 권장합니다. 사용자 정의 정책 및 규정 준수 제어를 위해, 여기에서 연락하여 사용자 정의 링을 시작하세요.

비공개 잔액에서 출금: 무엇이 비공개인가

사용자는 두 가지 방법으로 비공개 잔액에서 출금할 수 있습니다:
  1. 비공개 암호화폐에서 명목 잔액으로 오프램프
  2. 비공개 암호화폐에서 공공 암호화폐 잔액으로 출금

고급 거래 흐름

비공개 전송은 공개 전송과 유사하게 작동하며, 단일 Solana 거래에서 실행됩니다.
  1. 사용자의 SOL 또는 SPL 잔액이 온체인에서 암호화됩니다.
  2. 암호화된 상태를 가져와 로컬에서 해독하거나, 위임된 제공자가 해독하여 해독된 상태를 제공합니다.
  3. 지갑은 금액과 수신자를 설정한 후 ZK 증명을 요청합니다.
  4. RPC 제공자가 기본적으로 ZK 증명을 생성하여 반환합니다. 사용자 정의 링은 또한 정책 증명을 요구합니다.
  5. 지갑은 Solana 거래를 구축합니다. ZK 증명은 암호화된 상태를 공개하지 않고 검증됩니다. 호출된 프로그램과 서명 및 제출하는 주체는 링에 따라 다릅니다:
  1. 앱은 Solana 거래 해시를 통해 상태를 추적합니다.

비공개 지갑

사용자는 비공개 지갑에 암호화된 잔액을 보관합니다. 비공개 지갑은 사용자의 공공 Solana 주소로 전송을 수신하여 inbox 역할을 합니다. 이렇게 하면 발신자는 항상 공개 전송처럼 수신자의 Solana 주소를 입력합니다.

비공개 지갑 생성

비공개 지갑이 생성되면 Solana 주소가 온체인 레지스트리에 등록됩니다. 레지스트리는 하나의 Solana 주소를 하나의 에 매핑합니다. 전송은 백그라운드에서 Shielded Address로 암호화됩니다. 여러 Solana 주소는 하나의 Shielded Address를 공유할 수 없습니다. 각 레지스트리 레코드는 누구나 Solana 주소가 비공개 전송을 수신할 수 있는지 확인할 수 있는 PDA로, 에 의해 소유됩니다. 사용자 지갑이 두 개의 공개 Solana 지갑 및 비공개 지갑과 연결되어 있습니다. 받은 편지함 화살표는 Public Wallet A의 공개 키를 비공개 지갑의 Shielded Address에 연결합니다.
지갑 앱에서 사용자가 전용 “비공개 지갑” 공개 키 또는 공개 키에만 사용할 수 있는 비공개 지갑을 생성할 수 있도록 허용할 수 있습니다.

비공개 지갑으로의 전송

모든 전송에서 Privacy API는 수신자가 비공개 지갑을 가지고 있는지 확인하기 위해 온체인 레지스트리에서 지갑 주소를 조회합니다. 일치하는 항목이 있으면 백그라운드에서 Shielded Address를 사용하여 전송을 암호화합니다.
비공개 전송의 수신자가 비공개 지갑을 소유하고 있지 않은 경우, Privacy API는 전송을 비공개에서 공개로의 출금으로 해결합니다.사용자가 실수로 공개 잔액으로 출금하지 않도록 하기 위해 UI에서 별도의 사용자 서명을 요청하는 것을 권장합니다.

키 관리

비공개 지갑은 사용자의 Solana 키페어에서 Solana 지갑에 shielded keypair를 추가합니다. shielded keypair는 서명, nullifier 및 보기 키의 번들로, Solana 키페어가 아닙니다. Shielded Address는 shielded keypair의 공개 키입니다. 전송은 이에 암호화됩니다.

Shielded Keypair 생성하기

지갑은 두 가지 방법으로 shielded keypair를 생성할 수 있습니다.
  1. 시드 구문에서 키 유도하기
    • 시드 기반 지갑의 권장 접근 방법.
    • 비밀 링: 서명 키는 시드에서 Solana 지갑이 유도하는 동일한 Ed25519 키입니다. nullifier 및 보기 키는 동일한 시드에서 추가로 유도된 키입니다.
    • 사용자 정의 익명 링: 서명 키는 지갑 시드에서 추가로 유도된 P-256 키입니다.
    • Solana 지갑을 재생성하는 것과 동일한 방식으로 shielded keypair를 항상 재생성할 수 있습니다.
  2. 기존 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 노트에 연결된 점선으로 연결된 비공개 지갑. 각 노트에는 하나의 자산이 들어 있습니다. 지갑 잔액은 노트의 합계입니다.
사용자 경험 측면에서는 잔액이 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 노트는 이제 사용되었습니다.
Alice가 50 USDC 중 Bob에게 35를 보냅니다. Solana 토큰 계정에서는 금액 필드가 50에서 15로 제자리에 변경됩니다. UTXO에서는 Alice의 단일 50 USDC 노트가 사용되며 두 개의 새로운 노트가 생성됩니다: Bob에게 35 USDC 노트와 Alice에게 15 USDC 잔여 노트.
SOL 및 SPL 자산의 비공개 잔액에 대한 입금 시, Solana 프라이버시 프로그램이 소유하는 인터페이스 PDA는 토큰을 에스크로로 보관하고 사용자가 소유자로 설정된 UTXO를 생성합니다.공개 잔액으로의 출금 시, 기존 UTXO는 사용된 것으로 표시되고, 토큰은 Solana 토큰 계정에 릴리스됩니다.
하나의 비공개 지갑은 동시에 여러 링의 잔액을 보유할 수 있으며, 링의 수에는 제한이 없습니다. 어떤 링에 잔액이 속하는지는 지갑의 속성이 아닙니다. 이는 각 UTXO에 저장된 policy_program_id 필드의 속성입니다.

비공개 Solana 토큰 계정

비공개 Solana 토큰 계정은 Solana 토큰 계정과 유사하게 동작하는 UTXO로 두 가지 핵심 차이점이 있습니다:
  • 비공개 Solana 토큰 계정은 생성 시 임대 면제를 필요로 하지 않으며,
  • 그 잔액은 온체인 암호화됩니다.
여전히 비공개 Solana 토큰 계정에는 다음과 같은 데이터를 저장합니다:
  • 자산: UTXO가 보유한 단위의 소유주. SOL은 기본 소유주 주소입니다. 자산은 SOL 또는 임의의 SPL 또는 Token-2022 자산이 될 수 있습니다.
  • 금액: 노트가 보유한 asset 개수, 자산의 가장 작은 단위로 표시.
  • 프로그램 및 정책 데이터: 구성된 링 정책에서 Token-2022와 유사한 기능을 추가하기 위한 선택적 데이터
비공개 Solana 토큰 계정. Solana 프라이버시 프로그램이 비공개 토큰 계정을 소유하고 있으며, 이는 PrivateAccount 필드: 소유자, 자산, 금액, 정책 데이터 및 정책 프로그램 id로 확장됩니다.
Solana 토큰 계정. 토큰 프로그램이 토큰 계정을 소유하고 있으며, 이는 AccountInfo 필드 (데이터, 실행 가능, Lamports, 소유자) 및 데이터 필드가 계정 데이터 (소유주, 양, 금액)로 확장된 것으로 확장됩니다.

동시성에 관하여

사용자는 거래가 완료되면 즉시 비공개 잔액을 사용할 수 있습니다. 즉, 키페어의 잔액은 여러 UTXO로 나뉘어져 있을 때 동시적으로 사용할 수 있습니다. 지갑은 어떤 UTXO를 사용할지 선택합니다. 하나의 머클 트리가 비권한 기본 링 및 모든 사용자 정의 링에 대한 비공개 상태를 저장합니다. 트리는 하나의 기록 가능한 Solana 계정에 저장됩니다. 이 계정에 쓰여지는 비공개 전송은 블록당 Solana의 1,200만 CU의 계정 쓰기 잠금 제한을 공유합니다. 비공개 전송은 약 220,000 CU를 소비합니다. 따라서 하나의 트리는 블록당 약 54개의 비공개 전송을 지원하며, 현재 Solana 블록 시간이 약 400밀리초인 경우 초당 약 130건의 거래를 지원할 수 있습니다. 이 프로토콜은 처리량을 증가시키기 위해 더 많은 트리를 추가할 수 있습니다. 각 트리는 자체의 계정당 컴퓨팅 예산을 가진 별도의 기록 가능한 계정으로, 서로 다른 트리에서의 거래는 동일한 쓰기 잠금 예산을 경쟁하지 않습니다.

증명 생성 시간에 관하여

제로 지식 증명은 현재 프로버 서버에 의해 생성됩니다. 일반적인 비밀 전송은 수십 밀리초 내에 증명이 완료되며, 비밀 링에 대한 로컬 증명이 계획되어 있습니다. 증명 시간은 사용자 경험을 원활히 하기 위해 적극적으로 최적화되고 있습니다.

용어

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact