- UTXO는 Solana 계정이 아니므로 임대료 면제가 필요하지 않습니다.
- 잔액은 온체인에서 암호화됩니다.
- 소유자 – Solana 키 쌍, PDA 또는 P-256 키입니다.
- 자산 – 민트(SOL, SPL 또는 Token-2022)입니다.
- 금액 – 최소 단위로 표시한
asset의 단위 수입니다. - 데이터 – UTXO는 에스크로된 토큰의 소유자와 같은 임의의 데이터를 저장할 수 있습니다.
- 프로그램 및 정책 데이터 – 선택적으로 구성하는 Ring 규정 준수 데이터입니다.
- Diagram
- Code
소스 코드 보기: 사양 · sdk-libs/transaction/src/utxo/note.rs
View Solana token account
View Solana token account
- Diagram
- Code
비공개 잔액
비공개 잔액은 비공개 지갑이 소유한 한 자산의 모든 UTXO를 합한 값입니다. 비공개 잔액이 하나 또는 여러 UTXO로 구성되어 있는지와 관계없이 지갑에는 하나의 잔액이 표시됩니다. 비공개 전송에서는 여러 UTXO를 한 번에 사용할 수 있습니다.비공개 전송
UTXO를 사용하는 비공개 전송은 SPL 토큰 계정을 사용하는 공개 전송과 다르게 작동합니다.- SPL 토큰 계정에서 전송하면
amount이 업데이트됩니다. - UTXO를 사용하는 비공개 전송은 UTXO의
amount을 업데이트하지 않습니다. 대신 비공개 전송은 기존 UTXO를 사용하고 수신자와 발신자의 남은 잔액을 위한 새 UTXO를 생성합니다.
- SPL 토큰 계정을 사용하면 Alice의
amount은 50에서 15로 감소하고 Bob의 잔액은 35만큼 증가합니다. - UTXO를 사용하면 Alice는 50 USDC가 든 UTXO 하나를 보유합니다. 트랜잭션은 기존 UTXO를 사용하고 새로운 UTXO 두 개를 생성합니다. 하나에는 Bob의 35 USDC가, 다른 하나에는 Alice의 15 USDC가 들어갑니다.
- Transfer with one UTXO
- Transfer with multiple UTXOs
UTXO 선택
비공개 전송 시 SDK는 전송하려는 금액을 충당하는 미사용 UTXO를 선택합니다. UTXO 선택 알고리즘은 전송당 가능한 한 적은 수의 UTXO를 사용합니다.- SDK가 전송할 자산을 기준으로 UTXO를 필터링하고 금액순으로 정렬합니다.
- SDK가 전송 금액을 충당하는 데 필요한 만큼 UTXO를 선택합니다. 전송 금액이 충당될 때까지 가장 큰 UTXO부터 선택합니다.
트랜잭션 변형
모든 비공개 전송은 트랜잭션 변형을 사용합니다. 트랜잭션 변형에는 사용할 UTXO와 생성할 새 UTXO를 위한 고정된 수의 슬롯이 있습니다. 변형은 사용되는 UTXO가 1개에서 36개인 범위이며, 각 변형에는 자체 ZK 회로가 있습니다. 이 회로는 사용된 UTXO가 유효하고 새 UTXO가 동일한 총액을 보유한다는 것을 증명합니다. 전송에 36개가 넘는 UTXO가 필요하면 먼저 병합하세요. SDK는 전송에 맞는 변형을 선택하고 사용하지 않는 슬롯을 더미 UTXO로 채웁니다. 더미 UTXO에는 가치가 없으며 온체인에서는 실제 UTXO처럼 보입니다.- 1 spent, 2 new
- 2 spent, 2 new
- 3 spent, 3 new
- 4 spent, 3 new
Alice가 Bob에게 30 USDC를 보냅니다. Alice의 가장 큰 UTXO로 전송 금액을 충당할 수 있습니다.
UTXO 병합
잔액을 사용하지 않고 여러 전송을 받으면 비공개 잔액이 여러 UTXO로 분할될 수 있습니다. 전송에 36개가 넘는 UTXO가 필요하면 먼저 병합하여 사용자가 전체 잔액을 한 번에 전송할 수 있게 하세요. 한 번의 전송에서 최대 36개의 UTXO를 사용할 수 있으므로 대부분의 사용자는 잔액 분할을 거의 경험하지 않습니다.- 병합은 소유자와 자산이 같은 UTXO를 총액이 동일한 UTXO 하나로 결합합니다.
- 병합으로 자금을 사용하거나 소유자를 변경할 수 없습니다.
- 최종 사용자 UX에 영향을 주지 않고 내부적으로 병합할 수 있습니다.
각 병합은 ZK 증명이 포함된 하나의 Solana 트랜잭션이며 최대 36개의 UTXO를 하나로 합칩니다.
병합 결과는 결정적이므로 병합 증명과 전송 증명이 병렬로 생성됩니다.
병합 명령 사용 예시
애플리케이션은 다음 두 시점에 병합할 수 있습니다.- 비공개 잔액을 동기화할 때: 지갑 잠금 해제, 비공개 지갑 열기, 앱 재개, 네트워크 재연결, 스트림 누락 또는 지갑 복원 시입니다.
- 전송 전: 전송에 36개가 넘는 UTXO가 필요할 때입니다.
병합은 사용자 서명 없이 실행됩니다. 사용자 지정 Ring은 자체 병합 권한을 설정합니다.
내장 비공개 지갑을 사용하면 내부적으로 병합이 자동으로 수행됩니다.
Example for Merge
Example for Merge
예를 들어 비공개 지갑이 각각 1 USDC인 비공개 전송을 1,296번 받은 후 1,296개의 UTXO에 1,296 USDC를 보유하고 있다고 가정해 보겠습니다.
한 번의 전송으로 최대 36개의 UTXO를 사용할 수 있으므로 지갑은 다음 두 단계로 잔액을 사용합니다.
- 36개의 병합 트랜잭션을 병렬로 실행하여 각각 36 USDC가 든 UTXO 36개를 생성합니다.
- 입력이 36개인 한 번의 전송으로 1,296 USDC 전체 잔액을 사용합니다.
UTXO 동시성
사용자는 트랜잭션이 최종 확정되는 즉시 비공개 잔액을 사용할 수 있습니다. 비공개 잔액이 여러 UTXO로 분할되어 있으면 동시에 사용할 수 있습니다. 각 UTXO는 별도의 트랜잭션에서 동시에 사용할 수 있습니다. 예를 들어 각각 100 USDC인 UTXO 세 개로 구성된 잔액은 한 번에 최대 100 USDC인 전송 세 건에 자금을 제공할 수 있습니다. 지갑은 사용할 UTXO를 선택합니다.자세히 알아보기
Overview
Ring, 개인정보 보호 보장 및 트랜잭션 흐름을 알아보세요.
Architecture
지갑, RPC 서비스 및 Solana 프로그램이 상호 작용하는 방식을 알아보세요.
Encryption and Privacy Guarantees
자산이 암호화되는 방식과 보호된 키 쌍의 역할을 알아보세요.
Custom Enterprise Rings
사용자 지정 Ring을 구성하는 방법을 알아보세요.