Skip to main content
  1. 인출은 토큰을 개인 잔액에서 공개 Solana 잔액으로 이동합니다.
  2. 인출은 단일 Solana 트랜잭션으로 Solana 지갑 주소에 전송됩니다.

인출: 비공개란 무엇인가

허가 없는 Ring은 암호화된 금액과 자산이 비공개입니다. 맞춤형 Ring은 비공개 또는 익명으로 (암호화된 발신자, 수신자, 자산 및 금액) 구성할 수 있습니다.

인출 방식

인출은 공개 Solana 전송과 유사하게 작동합니다:
  1. 사용자의 SOL 또는 SPL 잔액이 온체인에서 암호화됩니다.
  2. 사용자가 개인 상태를 해독하고, 지갑이 인출을 구축하며, 소유자가 서명합니다.
    • 전용 RPC 메서드로 암호화된 상태를 가져옵니다. 사용자만이 로컬에서 잔액을 해독할 수 있습니다.
    • 지갑이 금액과 수신자를 설정한 후 ZK 증명을 요청합니다. RPC 제공자가 기본적으로 ZK 증명을 생성하여 반환합니다.
  3. Solana 런타임은 서명을 확인하고, Solana Privacy Program을 호출하여 암호화된 상태를 공개하지 않고 ZK 증명을 검증합니다.
  4. 앱은 Solana 트랜잭션 해시를 통해 상태를 추적합니다.
  1. 사용자의 SOL 또는 SPL 잔액이 온체인에서 공개됩니다.
  2. 지갑이 공개 상태를 읽고, 전송을 구축하며, 소유자가 서명합니다.
  3. Solana 런타임은 서명을 확인하고 System Program 또는 Token Program을 호출하여 공개 잔액을 업데이트합니다.
  4. 앱은 Solana 트랜잭션 해시를 통해 상태를 추적합니다.
이것은 허가 없는 비공개 Ring에 대한 상위 수준의 트랜잭션 흐름입니다. 개념에서 맞춤형 링과 비교해보세요.

시작하기

1

사전 조건

The TypeScript examples require Node.js 24 or later, pnpm 11.18.0, and the Solana CLI.
Source: sdk-libs/ts
Add a Helius API key:
.env
The examples use the Solana CLI wallet as the payer by default. The payer must hold devnet SOL. See How to Get Devnet SOL.
2

공공 잔액으로 인출

  • SDK는 지시문을 반환합니다. 앱이 이를 서명하고 보냅니다.
  • sendAndConfirmFactory는 Kit 트랜잭션을 생성하고 제출하며 서명과 상륙한 슬롯을 반환합니다.
  • 이전 전송 후 남은 Private Solana Token Account를 지출합니다. 인출은 여러 UTXO를 지출할 수 있습니다.
  • withdrawalUtxo는 해당 잔액에서 하나의 Private Solana Token Account를 선택합니다.
  • ProofInputUtxo.fromKeypair는 발신자의 개인 지갑 키쌍으로 선택된 UTXO를 증명 입력으로 준비합니다.
  • 키쌍은 입력 UTXO를 지출로 표시하는 무효 값을 도출하지만 입력 자산과 금액은 암호화 상태로 남습니다.
  • senderAddress는 발신자의 입니다. 인출은 이 지갑에서 지출됩니다.
  • [withdrawalInput]는 발신자의 선택된 UTXO를 나열합니다. 인출은 여러 UTXO를 지출할 수 있습니다.
  • senderSigner.address는 수수료 지불자의 Solana 주소입니다. 가스 후원자는 비공개 인출을 위해 이 역할을 수행할 수 있습니다.
  • WithdrawalTarget.sol는 공개 Solana 수신자입니다. 수신자는 소유자 또는 제3자가 될 수 있습니다.
  • SOL_MINT는 SOL을 선택합니다. SPL 또는 Token 2022 인출은 토큰 민트를 통과시킵니다.
  • WITHDRAW_AMOUNT는 자산의 기본 단위로 표시됩니다. SOL은 lamports를 사용합니다. SPL 및 Token 2022 자산은 토큰의 기본 단위를 사용합니다.
  • withdrawal.sign는 상태 전환을 승인하고 남은 비공개 변경사항을 암호화하며, 영지식 증명자를 위한 입력을 생성합니다.
  • assets는 지원되는 개인 자산을 해결하는 데 사용되는 자산 레지스트리입니다.
  • client.proveTransact는 서명된 인출에서 영지식 증명을 생성하고 직렬화된 지시 데이터로 반환합니다.
  • 증명은 발신자가 입력을 소유하고 지출할 수 있음을 보여줍니다. 인출된 자산과 금액은 공개됩니다. 입력 금액과 변경사항은 암호화 상태로 유지됩니다.
  • payer는 Solana 트랜잭션에 서명하고 지불합니다. 가스 후원자는 비공개 인출을 위해 이 역할을 할 수 있습니다.
  • inputTreeoutputTreeclient.tree입니다. 사용된 UTXO를 포함하고 발신자의 비공개 변경사항을 받는 상태 머클 트리입니다.
  • withdrawalTransactWithdrawal.sol입니다. 공개 Solana 수신 계정입니다.
  • data는 이전 단계에서 생성된 영지식 증명과 암호화된 변경사항을 포함합니다.
  • 인출은 자산을 개인 잔액에서 공개 Solana 계정으로 이동합니다. 공개 수신 계정이 통과됩니다.
  • sendAndConfirmwithdrawalInstruction를 Solana 트랜잭션으로 서명하고 제출합니다.
  • 확인을 통해 색인기 페치를 기준으로 하는 상륙한 슬롯을 제공합니다.

전체 코드 예제

예제를 클론하고 실행하세요:
예제는 로컬/devnet에서 비공개 Ring을 사용합니다. 여기를 참조하세요.
deposit_transfer_withdraw.ts

관련 가이드

Deposit

Transfer

Read a Private Balance

Read Private History

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact