Pular para o conteúdo principal

Referência de contratos inteligentes

Esta referência reúne os endereços dos contratos, os dados dos tokens e as definições das funções dos pagamentos não custodiais da Volet.com no Ethereum, na BNB Smart Chain e na TRON.

Para instruções passo a passo, veja Integração com Ethereum e BNB Smart Chain ou Integração com TRON.

Endereços dos processadores de pagamento​

Cada ativo suportado usa um contrato inteligente processador de pagamentos.

RedeAtivoContrato processador
Ethereum Mainnet (1)ETH0x2fceE245109Cf3c535489a6F52fe11b3BBd644FF
Ethereum Mainnet (1)USDT ERC-200xe4083ED0A1101615b9092E8cD2164e2f42B4571E
BNB Smart Chain (56)BNB0x2fceE245109Cf3c535489a6F52fe11b3BBd644FF
BNB Smart Chain (56)USDT BEP-200xe4083ED0A1101615b9092E8cD2164e2f42B4571E
TRON MainnetTRXTSK9sgBTjvZa6x2yW1bXNWqvQ57WsVUQ3W
TRON MainnetUSDT TRC-20TDuE6VueULx5oivQd4MsYr9DEhNMgXNfTm

Antes de processar pagamentos, confirme com a Volet.com os endereços dos contratos implantados e a ABI. Contratos de outras redes, ativos ou fluxos de pagamento personalizados podem usar endereços e interfaces diferentes.

Endereços e decimais dos tokens​

RedeAtivoContrato do tokenDecimais
EthereumETH (nativo)N/A18
EthereumUSDT ERC-200xdAC17F958D2ee523a2206206994597C13D831ec76
BNB Smart ChainBNB (nativo)N/A18
BNB Smart ChainUSDT BEP-200x55d398326f99059fF775485246999027B319795518
TRONTRX (nativo)N/A6 (SUN)
TRONUSDT TRC-20TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t6

Todos os valores do contrato inteligente devem ser expressos nas menores unidades do ativo.

  • ETH e BNB: use ethers.parseEther() para converter os valores em wei.
  • USDT em EVM: use ethers.parseUnits(amount, tokenDecimals) com a precisão do token correspondente.
  • TRX: use SUN, sendo 1 TRX = 1.000.000 SUN.
  • USDT na TRON: use unidades base inteiras do token, sendo 1 USDT = 1.000.000 unidades.

Não use aritmética de ponto flutuante para calcular os valores dos pagamentos.

Interface do contrato de pagamento​

O processador de pagamentos padrão oferece duas funções principais: previewPayment() e transfer().

interface IVoletPaymentProcessor {
function previewPayment(
uint256 amount,
bool buyerPaysCommission
) external view returns (
uint256 commission,
uint256 totalPay
);

function transfer(
address seller,
uint256 amount,
bool buyerPaysCommission,
address optionalCommissionWallet
) external payable;
}

Esta interface descreve as funções de pagamento usadas nos guias de integração. Use a ABI verificada completa do contrato implantado para decodificar eventos ou tratar erros específicos do contrato.

previewPayment()​

Calcula a taxa de processamento e o valor total que o cliente deve pagar.

Parâmetros

ParâmetroTipoDescrição
amountuint256Valor de pagamento solicitado nas menores unidades do ativo
buyerPaysCommissionboolDefine se a taxa de processamento é somada ao pagamento do cliente ou descontada da receita do lojista

Valores retornados

ParâmetroTipoDescrição
commissionuint256Taxa de processamento nas menores unidades do ativo
totalPayuint256Valor total que o cliente deve pagar, nas menores unidades do ativo

Em pagamentos com o ativo nativo, passe totalPay como value da transação em EVM ou como callValue na TRON.

Em pagamentos em USDT, o saldo de tokens do cliente e a permissão de gasto (allowance) do processador devem ser de pelo menos totalPay.

Sempre use os valores retornados por previewPayment(). Não calcule a taxa de processamento manualmente.

transfer()​

Executa o pagamento e distribui os fundos de acordo com a configuração de taxas do contrato.

Parâmetros

ParâmetroTipoDescrição
selleraddressCarteira de recebimento do lojista
amountuint256Valor de pagamento solicitado nas menores unidades do ativo
buyerPaysCommissionboolDefine quem paga a taxa de processamento
optionalCommissionWalletaddressCarteira de comissão do parceiro, ou o endereço zero da rede se não se aplicar

Endereços zero

RedeEndereço zero
Ethereum / BNB Smart Chain0x0000000000000000000000000000000000000000
TRON (Base58)T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb

A função transfer() não aceita o parâmetro orderId. Seu backend deve associar o hash de cada transação de pagamento (txid) ao pedido correspondente.

Veja Verificação de pagamentos e acompanhamento de pedidos para associar transações e evitar pagamentos duplicados.

Evento de pagamento​

Os processadores de pagamento emitem o evento PaymentProcessed depois de distribuir o pagamento ao lojista.

event PaymentProcessed(
address indexed buyer,
address indexed seller,
uint256 commission,
uint256 totalPay
);
ParâmetroTipoDescrição
buyeraddressCarteira que iniciou o pagamento
selleraddressCarteira de recebimento do lojista
commissionuint256Taxa de processamento nas menores unidades do ativo
totalPayuint256Valor total pago pelo comprador nas menores unidades do ativo

O valor recebido pelo lojista é:

receivedAmount = totalPay - commission

Esta fórmula vale para qualquer valor de buyerPaysCommission.

Em pagamentos com ETH, BNB e TRX nativos, uma transação bem-sucedida e finalizada com um evento PaymentProcessed autêntico e correspondente confirma o pagamento ao lojista conforme a implementação documentada do processador.

Em pagamentos em USDT, verifique também o evento Transfer do token do processador de pagamentos para o lojista no valor esperado.

Sempre confira se o endereço do contrato que emitiu o evento corresponde ao endereço aprovado do processador.

Veja Verificação de pagamentos e acompanhamento de pedidos para exemplos de implementação.

Taxas de processamento​

O parâmetro buyerPaysCommission define como a taxa de processamento é aplicada.

ValorO cliente pagaO lojista recebe
trueValor solicitado + taxa de processamentoValor solicitado
falseValor solicitadoValor solicitado − taxa de processamento

A taxa de processamento real e o valor total do pagamento são calculados por previewPayment() de acordo com o contrato implantado.

As taxas de rede da blockchain são cobradas à parte da taxa de processamento:

  • Ethereum / BNB Smart Chain: taxas de gas pagas em ETH ou BNB.
  • TRON: custos de Energy e Bandwidth, que podem ser pagos em TRX.

Liquidação​

Com pagamentos não custodiais, o contrato inteligente transfere os fundos diretamente para a carteira de recebimento do lojista.

Os fundos não são creditados em uma conta Volet.com, e a conversão automática para fiat não faz parte deste fluxo de pagamento.

Erros do contrato​

O processador de pagamentos pode retornar os seguintes erros:

ErroDescrição
SellerZeroAddressO endereço de recebimento do lojista é zero
SellerIsBuyerOs endereços das carteiras do comprador e do lojista são iguais
AmountIsZeroO valor do pagamento é zero
InvalidTotalAmountValidationO value ou callValue do ativo nativo não corresponde ao total esperado
CommissionExceedsAmountA taxa de processamento é maior que o valor disponível para desconto
SellerNotWhitelistedO contrato implantado pode não autorizar a carteira do lojista
EnforcedPauseO processamento de pagamentos está pausado

Os erros disponíveis e o comportamento exato deles dependem do contrato implantado. Use a ABI verificada do contrato para decodificar erros personalizados.

Para causas e ações recomendadas, veja Solução de problemas de pagamentos com contratos inteligentes.