Quando o Market encontra uma oferta compatível para uma ordem, o pagamento não é assinado pelo backend. O Transactions Service monta uma transação EuroToken.transfer sem assinatura e o device comprador assina localmente com sua carteira Besu. EuroToken é um ERC-20 privado com nome Euro Token, símbolo EURT e 18 decimais. O nome amount_eurc aparece nos payloads internos por compatibilidade com o fluxo de bridge.

Fluxo de pagamento

Preparação da transação

O Market envia para o Transactions Service: O Transactions Service cria um registro BlockchainTransaction com: A transação sem assinatura inclui from, to, data, nonce, gas, gasPrice, chainId e value.

Fila local do device

O Gateway devolve pending_payments junto com a resposta de medição. O simulador grava esses itens em MariaDB local e o payment_worker processa a fila. Comportamento do worker:
  • ignora pagamentos cujo comprador não seja a carteira local;
  • assina a transação com SIM_WALLET_PRIVATE_KEY;
  • transmite pela RPC Besu configurada;
  • salva o tx_hash localmente;
  • envia o recibo para POST /transactions/receipts;
  • remove o item da fila apenas após sucesso;
  • mantém na fila em caso de saldo insuficiente, erro temporário ou falha no recibo.
Se a transação já foi transmitida, mas o recibo falhou, o worker reenvia apenas o recibo usando o tx_hash salvo.

Validação do recibo

Ao receber payment_id e tx_hash, o Transactions Service valida:
  1. existe preparação em PREPARED para aquele payment_id;
  2. a transação foi confirmada com status on-chain 1;
  3. o emissor da transação é a carteira do comprador esperado;
  4. o recibo contém evento Transfer no contrato EuroToken;
  5. from, to e value batem com comprador, vendedor e valor preparados.
Se tudo estiver correto:
  • o registro muda para CONFIRMED;
  • tx_hash e confirmed_at são gravados;
  • o Market recebe confirmação e marca o trade como PAID.
Se a validação falhar:
  • o registro fica FAILED;
  • o Market pode marcar o trade como ERROR;
  • o erro é devolvido ao device.

Status de transação

Códigos comuns

Bridge

Como o usuário credita valor na rede privada