SOL embrulhado
Wrapped SOL (wSOL) é o SOL nativo mantido dentro de uma conta de token SPL. Os programas DeFi esperam CPIs de token SPL, então o SOL é temporariamente empacotado, usado e depois desembrulhado de volta para lamports nativos.
Receita
spl-token wrap 1.5
spl-token unwrap <WSOL_TOKEN_ACCOUNT>
use anchor_lang::system_program;
use anchor_spl::token::{self, sync_native, TokenAccount};
// Deposit lamports into WSOL ATA, then sync_native
Quando fazer isso:
- Pagar ou trocar em AMMs que aceitam apenas tokens SPL
- Depósitos pool onde um lado é SOL
- Programas que unificam SOL e SPL em um caminho de código de transferência
- Fechando WSOL ATA para recuperar SOL após interação DeFi
Exemplo de trabalho
solana balance
spl-token address --token So11111111111111111111111111111111111111112
spl-token wrap 0.5
spl-token balance So11111111111111111111111111111111111111112
spl-token unwrap <WSOL_ATA_ADDRESS>
solana balance
use anchor_lang::prelude::*;
use anchor_spl::token::{self, Token, TokenAccount, SyncNative};
pub const WSOL_MINT: Pubkey = anchor_spl::token::spl_token::native_mint::ID;
#[derive(Accounts)]
pub struct WrapSol<'info> {
#[account(mut)]
pub payer: Signer<'info>,
#[account(
mut,
constraint = wsol_ata.mint == WSOL_MINT @ ErrorCode::NotWsol,
)]
pub wsol_ata: Account<'info, TokenAccount>,
pub token_program: Program<'info, Token>,
pub system_program: Program<'info, System>,
}
pub fn wrap_sol(ctx: Context<WrapSol>, lamports: u64) -> Result<()> {
system_program::transfer(
CpiContext::new(
ctx.accounts.system_program.to_account_info(),
system_program::Transfer {
from: ctx.accounts.payer.to_account_info(),
to: ctx.accounts.wsol_ata.to_account_info(),
},
),
lamports,
)?;
token::sync_native(CpiContext::new(
ctx.accounts.token_program.to_account_info(),
SyncNative {
account: ctx.accounts.wsol_ata.to_account_info(),
},
))?;
Ok(())
}
#[error_code]
pub enum ErrorCode {
NotWsol,
}
import { createSolanaRpc, address } from "@solana/kit";
const WSOL_MINT = address("So11111111111111111111111111111111111111112");
const rpc = createSolanaRpc("https://api.devnet.solana.com");
// Many DEX SDKs auto-wrap SOL; manual flows use syncNative instruction after lamport transfer
O que isso demonstra:
- WSOL mint é o conhecido pubkey nativo da moeda
- Transferência de Lamports para conta token +
sync_nativeatualiza o saldo SPL - Desembrulhar fecha ou drena o WSOL ATA de volta para a carteira SOL nativa
Aprofundamento
Como funciona
- Endereço da casa da moeda nativo:
So11111111111111111111111111111111111111112 - A conta Token pode conter lamports diretamente;
sync_nativereconcilia campo de valor SPL - 9 casas decimais - corresponde à precisão do SOL lamport
- AMMs geralmente criam WSOL ATA, agrupam, trocam e desembrulham em uma transação
Wrap vs SOL nativo
| Formulário | Tipo de conta | Usado por |
|---|---|---|
| SOL nativo | Carteira de propriedade do sistema | Transferências, taxas, apostas |
| wSOL | Conta de token SPL (mesma casa da moeda) | AMMs, cofres de tokens unificados |
Notas em Rust
// Close WSOL account to unwrap - returns lamports to destination
use anchor_spl::token::CloseAccount;
// Ensure amount is 0 or use withdraw pattern per your SDK
Pegadinhas
- Esquecendo sync_native - lamports ficam na conta, mas o valor SPL é 0. Correção: sempre
sync_nativeapós o depósito de lamport. - Usando o mint errado - apenas o mint nativo é WSOL. Correção: compare com
native_mint::ID. - Deixando poeira no WSOL ATA - lamports trancados até serem desembrulhados. Correção: desembrulhe ou feche após o fluxo DeFi.
- Pagando aluguel duas vezes - WSOL ATA precisa de financiamento isento de aluguel. Correção: reutilizar WSOL ATA persistente por carteira.
- Supondo que os programas aceitem SOL nativo - muitos apenas transferem CPI SPL. Correção: envolva ou use a instrução de depósito nativa do programa.
Alternativas
| Alternativa | Usar quando | Não use quando |
|---|---|---|
| Transferência SOL nativa | Pagamentos simples | AMM exige SPL CPI |
Programa auxiliar deposit_sol | Envoltório de resumos de protocolo | Conjunto de instruções personalizado |
| wSOL ATA persistente | Comerciante frequente | Pagamento único |
Perguntas frequentes
O que é SOL empacotado?
SOL depositado em uma conta de token SPL para o mint nativo, fazendo com que ele se comporte como qualquer token SPL em programas.
Qual é o endereço da casa da moeda WSOL?
So11111111111111111111111111111111111111112 em todos os clusters.
Por que envolver o SOL?
Os CPIs do programa SPL Token não podem mover lamports nativos de carteiras sem padrão de encapsulamento.
Quantas casas decimais o WSOL usa?
9, lamports correspondentes por SOL.
O empacotamento reduz o saldo SOL da carteira?
Sim. Lamports passam para uma conta de token WSOL (mais taxas).
O que o sync_native faz?
Atualiza o campo de valor da conta de token para corresponder aos lamports mantidos pela conta.
Posso enviar WSOL como qualquer token SPL?
Sim. Transferência padrão entre contas de token WSOL.
Como faço para desembrulhar?
spl-token unwrap ou fechar/drenar WSOL ATA de acordo com os padrões do SDK.
As trocas de Jupiter são encapsuladas automaticamente?
Sim para a maioria das trocas de entrada SOL - o SDK lida com o empacotamento/desempacotamento na transação.
A autoridade mint do WSOL é revogável?
O Native Mint é definido por protocolo - não um lançamento típico.
Os programas podem conter WSOL?
Sim, em WSOL ATAs de propriedade de PDAs com sementes de signatário adequadas na transferência.
WSOL no Token-2022?
WSOL usa mint nativo clássico no programa Token, não Token-2022.
Relacionado
- Contas de token associadas (ATAs) - WSOL ATA
- Decimais e Quantidades - 9 decimais
- Token SPL em programas - CPI sincronizado_nativo
Versões Stack: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 e LiteSVM 0.6.x.