Pular para o conteúdo

Cotações e arredondamento

Toda intenção de pagamento é denominada em moeda fiduciária (EUR, USD, BRL ou GBP). Antes de o cliente pagar, esse valor precisa virar um valor exato de um criptoativo.

Os pagamentos live são processados pela conta Bitcart da plataforma. Quando o checkout abre a fatura Bitcart (POST /v1/public/checkout-sessions/{id}/processor-invoice), a Bitcart precifica o valor fiduciário da intenção em cada ativo aceito. Cada entrada de processor.methods da sessão traz:

  • amount — o valor decimal exato a enviar naquele ativo;
  • rate — a taxa de câmbio usada pela Bitcart (moeda da fatura por unidade do ativo);
  • address e payment_url — onde pagar, e uma URI de carteira para QR codes;
  • divisibility e, para tokens, contract.

O checkout identifica a taxa como a taxa de câmbio da Bitcart. O FeitPay não a define, não acrescenta spread a ela e não a oferece como referência de preço. A fatura expira junto com a janela de pagamento da intenção.

Cotações no processamento somente de observação

Seção intitulada “Cotações no processamento somente de observação”

No processamento somente de observação (veja Carteiras; esta plataforma não o usa para pagamentos), o próprio gateway emite uma cotação quando o cliente escolhe uma rede e um ativo: uma conversão imutável e versionada do seu valor fiduciário para um valor exato do ativo, travada por tempo limitado.

{
"id": "qt_01J…",
"object": "quote",
"network_id": "bitcoin:mainnet",
"asset_id": "btc",
"asset_symbol": "BTC",
"decimals": 8,
"fiat_amount": "59.90",
"fiat_currency": "EUR",
"asset_amount": "0.00099834",
"asset_amount_base_units": "99834",
"rate": "60000.00",
"spread_bps": 0,
"rounding_policy": "ceil_to_asset_base_unit",
"required_confirmations": 3,
"status": "active",
"network_fee_paid_by": "customer",
"platform_fee_billed_separately": true
}

(Resumido; os valores acima são ilustrativos e não são um preço.)

Política de arredondamento: ceil_to_asset_base_unit

Seção intitulada “Política de arredondamento: ceil_to_asset_base_unit”

O valor do ativo é calculado com aritmética racional exata e arredondado para cima até a próxima unidade base (satoshi, unidade do token), para que o lojista nunca receba menos do que o valor faturado por causa do arredondamento:

units = ceil( fiat_amount / rate × 10^decimals × (1 + spread_bps / 10 000) )
59.90 / 60000 × 10^8 = 99833.33… → 99834 sats

Nenhuma etapa usa ponto flutuante binário. Se a divisão for exata, nada é acrescentado.

O projeto exige uma fonte de mercado primária mais uma fonte secundária de verificação, rejeita preços defasados e preços que se desviem além de um limite, e falha de forma fechada: se não houver uma taxa confiável, nenhuma cotação é emitida. A cotação registra rate_source, secondary_source e deviation_bps como evidência.

Cada cotação tem locked_at e expires_at. Uma transferência vista pela primeira vez antes de expires_at conta como pontual mesmo que confirme depois. Após a expiração, o checkout oferece Atualizar cotação (POST /v1/public/checkout-sessions/{id}/refresh-quote), que substitui a cotação antiga por uma nova na mesma rede e no mesmo endereço. O próprio expires_at da intenção continua limitando por quanto tempo o cliente pode pagar.

  • O valor do ativo é o que o cliente precisa enviar.
  • As taxas de rede são pagas pelo remetente, além desse valor.
  • As taxas da plataforma são cobradas do lojista separadamente — nunca descontadas do pagamento.