PagamentosPagamentos avançados

Permissões de gasto

Os programas de tokens da Solana suportam delegação—conceder a outra conta permissão para transferir tokens da sua conta de tokens até um limite especificado. Isso permite casos de uso como pagamentos automatizados, serviços de custódia e processamento de pagamentos por terceiros sem abrir mão da custódia dos seus fundos.

Como funciona a delegação

Quando você aprova um delegado, está a autorizar uma conta específica a transferir tokens em seu nome:

  • O proprietário mantém a custódia: Você ainda é dono dos tokens e pode transferir ou revogar a qualquer momento
  • Gasto limitado: O delegado só pode transferir até o valor aprovado
  • Um único delegado por conta: Cada conta de tokens só pode ter um delegado ativo
  • Nova aprovação substitui a antiga: Aprovar um novo delegado revoga automaticamente o anterior

A delegação é não custodial. O delegado pode gastar tokens até o limite, mas não pode aceder ou drenar a conta além do valor aprovado. O proprietário pode revogar a qualquer momento.

Casos de uso empresariais

Caso de usoComo a delegação ajuda
Processadores de pagamentoO comerciante concede permissão ao processador para liquidar transações
Folha de pagamento automáticaA tesouraria aprova o serviço de folha de pagamento para desembolsar salários
Serviços de custódiaO comprador delega ao agente de custódia para liberação condicional
Plataformas de negociaçãoO utilizador aprova a exchange para executar negociações em seu nome
Emissão de cartõesO utilizador aprova o emissor do cartão para debitar compras na sua conta de tokens

Aprovar um delegado

Conceder permissão a outra conta para gastar tokens da sua conta:

import { getApproveCheckedInstruction } from "@solana-program/token";
// Approve delegate to spend up to 1,000 USDC (6 decimals)
const approveInstruction = getApproveCheckedInstruction({
source: tokenAccountAddress, // Your token account
mint: usdcMintAddress, // USDC mint
delegate: delegateAddress, // Account receiving permission
owner: ownerKeypair, // You (must sign)
amount: 1_000_000_000n, // 1,000 USDC in base units
decimals: 6
});

Parâmetros:

  • source: A token account que concede a permissão
  • delegate: A conta que terá permissão de gasto
  • owner: Proprietário atual da token account (deve assinar a transação)
  • amount: Quantidade máxima de tokens que o delegado pode transferir
  • decimals: Decimais do token para validação (previne erros de casas decimais)

Revogar um delegado

Remover todas as permissões de gasto do delegado atual:

import { getRevokeInstruction } from "@solana-program/token";
const revokeInstruction = getRevokeInstruction({
source: tokenAccountAddress, // Your token account
owner: ownerKeypair // You (must sign)
});

Revogar remove todas as permissões do delegado—não há revogação parcial. Se precisar reduzir o limite, aprove o mesmo delegado com uma quantidade menor.

Verificar o estado da delegação

Consultar uma token account para ver o seu delegado atual e o limite restante:

import { fetchToken } from "@solana-program/token";
const tokenAccount = await fetchToken(rpc, tokenAccountAddress);
if (tokenAccount.data.delegate) {
console.log("Delegate:", tokenAccount.data.delegate);
console.log("Remaining allowance:", tokenAccount.data.delegatedAmount);
} else {
console.log("No delegate set");
}

Transferir como delegado

Ao atuar como delegado, use uma transferência padrão mas assine com o keypair do delegado em vez do proprietário:

Transfer as Delegate
import { getTransferCheckedInstruction } from "@solana-program/token";
const transferInstruction = getTransferCheckedInstruction({
source: ownerTokenAccount, // The account you have permission to spend from
mint: usdcMintAddress,
destination: recipientTokenAccount,
authority: delegateKeypair, // You (the delegate) sign, not the owner
amount: 100_000_000n, // 100 USDC
decimals: 6
});

A transferência será bem-sucedida se:

  • A conta de origem tiver saldo suficiente
  • O delegado assinar a transação

Cada transferência reduz a permissão restante. Quando a permissão chega a zero, o delegado não pode mais transferir tokens.

Considerações de segurança

Para proprietários de contas:

  • Aprove apenas delegados confiáveis
  • Defina o limite de gastos mínimo necessário
  • Revogue delegações quando não forem mais necessárias
  • Monitorize as suas contas para transferências inesperadas

Para fornecedores de serviços (delegados):

  • Comunique claramente o limite de gastos solicitado aos utilizadores
  • Implemente uma gestão adequada de chaves para a sua conta de delegado
  • Acompanhe o consumo de permissões para solicitar nova aprovação antes que os limites se esgotem

Delegação vs. custódia

AspetoDelegaçãoCustódia completa
Propriedade dos tokensO utilizador mantémO utilizador transfere para o custodiante
Controlo de gastosLimitado ao valor aprovadoAcesso total aos fundos transferidos
RevogaçãoInstantânea, pelo proprietárioRequer cooperação do custodiante
Exposição ao riscoLimitada ao valor aprovadoSaldo total
Confiança necessáriaLimitadaElevada

A delegação oferece um meio-termo — permitindo pagamentos automatizados enquanto limita a exposição ao risco ao valor aprovado.

Recursos relacionados

Is this page helpful?

Índice

Editar Página

Gerenciado por

© 2026 Fundação Solana.
Todos os direitos reservados.
Conecte-se
  • Blog