Nós processamos bitcoin. Como é organizada a página de pagamento B2BinPay?

O B2BinPay é um sistema de pagamento de criptomoedas com muitos back-end relacionados a aplicativos, análises, nós, filas, mas apenas uma página da interface do usuário que o usuário final vê. Possui altos requisitos em relação à facilidade de uso. Apesar da aparente simplicidade da página, a equipe de desenvolvimento estaria interessada em compartilhar como ela é organizada por dentro.

Para entender os processos de negócios, você precisará mergulhar na área de assunto. Para os leitores que ainda não sabem o que são criptomoedas, blockchain e endereço, fizemos definições breves e compreensíveis.



Para entender os termos, aqui estão algumas analogias com o mundo fiduciário dos pagamentos:
O Blockchain é um banco de dados descentralizado (no caso ideal) que armazena informações sobre endereços, transações e saldos. Consiste em blocos, cada um deles contém uma quantidade limitada de informações. Os blocos são gerados graças aos mineradores por meio de cálculos intensivos em energia (PoW) ou prova de participação (PoS). Cada próximo bloco contém uma lista de novas transações e um link para a anterior. Cada criptomoeda tem seu próprio blockchain.

Comerciante - o mesmo que o proprietário da loja, alugando um sistema de pagamento para receber pagamentos dos usuários finais.

Uma carteira é igual a uma conta no mundo financeiro tradicional.

Transação - um registro no blockchain em que os fundos foram enviados de uma carteira para outra. O saldo da carteira é formado a partir do valor das transações.

O endereço é o mesmo que os detalhes da conta. A diferença é que a maioria das blockchains permite gerar um número infinito de endereços para uma carteira.

Uma transação confirmada é uma transação após a qual um número seguro de blocos foi gerado. Um bloco é igual a uma confirmação. Se a transação não tiver recebido 4-8 confirmações, ela não será considerada concluída.

Sistema de pagamento - software que fornece a aceitação e o processamento de pagamentos em criptomoeda. Vincula e agrega pedidos, pagamentos, transações, devoluções, reabastecimentos, retiradas e outras informações. Ele também informa o sistema do comerciante sobre mudanças no contexto de pedidos e pagamentos, e não sobre cadeias e transações.

Explorer - um serviço ou um site de navegador para dados que entram no blockchain. Usando este serviço, você pode obter informações sobre endereços, transações e blocos de forma conveniente.

Um nó é um computador no qual uma cópia de todo o banco de dados (blockchain) é armazenada.

Esquema geral de trabalho e requisitos para o conteúdo da página de pagamento


O ciclo de pagamento ocorre da seguinte forma: no site da loja, o comprador seleciona o produto e a moeda de pagamento. O sistema redireciona o usuário para a página de pagamento. Ele contém as seguintes informações: moeda, endereço, comentários informativos. O usuário envia a quantidade necessária para o endereço especificado e espera um número suficiente de confirmações de rede para reconhecer o pagamento como bem-sucedido. Enquanto aguarda, o comprador pode monitorar o status do pagamento sem sair da página no site do explorer. Depois que o pagamento é aceito, o usuário é redirecionado para a página de pagamento com êxito no site do vendedor.



O processo de pagamento é dividido em várias etapas. Cada um deles não requer ação do usuário, exceto a transferência direta de dinheiro. Script padrão de sucesso:

  1. No site do vendedor, o usuário seleciona o método de pagamento B2BinPay e a moeda
  2. O IP do vendedor envia uma solicitação para criar uma nova ordem de pagamento, recebendo um link para a página de pagamento em resposta
  3. O usuário redireciona para a página de pagamento, que contém informações: moeda, valor, endereço e campos adicionais, se necessário
  4. Usuário paga pela compra
  5. O sistema detecta que uma nova transação chegou ao endereço e a página entra no estado de rastreamento
  6. O status da transação é monitorado e as informações são atualizadas na página até que um número seguro de confirmações seja alcançado.
  7. O usuário é redirecionado para a página de pagamento bem-sucedida no site do vendedor

Consequentemente, a página de pagamento pode estar em dois estados: exibindo detalhes e aguardando confirmação. Ao visualizar os detalhes, você pode inserir o endereço de duas maneiras: digitalize o código QR ou copie o endereço em formato de texto. Além das informações básicas, adicionaremos uma mini-instrução em forma de texto, que lhe dirá como pagar, onde baixar o aplicativo da carteira e como comprar moeda. Além desses campos, há mais um, cuja presença depende da moeda escolhida. Às vezes, para correlacionar corretamente uma transação, uma ordem de pagamento e um comprador, é necessário conhecer não apenas o endereço, mas também informações adicionais. Por exemplo, para a moeda Ripple, ao enviar, você deve especificar a etiqueta de destino (comentar sobre a transação).

Para aqueles que copiam o endereço em forma de texto e não digitalizam o código QR, um botão de cópia foi adicionado. Além disso, o logotipo da moeda deve estar presente na página, pois muitas pessoas identificam a moeda visualmente, pelo formato e esquema de cores do logotipo, e não pela designação da letra.

A mudança de estado ocorre no momento em que uma transação recebida no endereço de cobrança é detectada. Nesse momento, os detalhes desaparecem, pois não são mais necessários; o usuário entra no modo de espera e a página precisa de um fluxo constante de informações sobre o status da transação. Agora, na página, você pode encontrar: o tempo limite até a transação ser concluída, o número atual de confirmações, um breve comentário que explica outras ações.

A página deve ser fácil de entender, intuitiva e ao mesmo tempo suficientemente informativa. Para compradores experientes, a ênfase deve ser colocada no endereço e no valor.

A partir dos requisitos acima, foi obtido um layout para a página futura.



Backend


A primeira opção para implementar o back-end é ficar sem ele! Ao gerar a página de pagamento, é sabido antecipadamente para qual endereço o dinheiro será enviado. Você pode receber novas transações neste endereço do explorer usando ferramentas JS. Assim, a tarefa é escrever conectores para o explorador e interrogar periodicamente o necessário. Um diagrama de classe estático pode ser assim:



Prós: não há carga sobre nossas capacidades, é fácil de implementar, não há ameaças potenciais à segurança.

Contras: fontes não confiáveis ​​e recebimento prematuro de novas informações, dificuldades em fornecer atualizações da base de código aos clientes finais (cache não controlado). Menos decisivo - muitas moedas não possuem um explorador estável com uma API desenvolvida.

A segunda opção (em funcionamento) é o seu próprio microsserviço, que recebe informações diretamente do pool de nós, filtra e as distribui pelas páginas de pagamento. O uso de Eventos do lado do servidor no cliente reduzirá a redundância e economizará tráfego. SSEs se encaixam no caso de uso, uma vez que a página é passiva em seu comportamento - ela aceita apenas novas informações.

Contras: muitos custos de implementação, carga adicional no equipamento.

Prós: alto nível de confiabilidade e independência em relação a serviços de terceiros; O contexto do pedido, não a transação.
Diagrama do circuito:



Quando a página de pagamento é aberta no navegador do cliente, uma solicitação para criar uma conexão SSE é enviada para o back-end assíncrono do microsserviço. A solicitação indica o endereço a ser rastreado, o valor do pagamento, a vida útil e outros parâmetros menores. No back-end, isso é armazenado no armazenamento noSQL na memória. Cada vez que um novo bloco aparece em qualquer nó da blockchain, o aplicativo recebe e extrai dele informações úteis nos endereços e transações armazenados no banco de dados. Se o próximo bloco for útil, as atualizações serão enviadas aos clientes. As conexões são fechadas por iniciativa do servidor quando são recebidas confirmações suficientes ou o TTL expirou.

Portanto, o back-end realiza operações com muitos recursos e direciona o tráfego somente quando novas informações chegam ao nó, e não há "interrogatório" periódico para novas informações. Graças à assincronia, obtemos alta velocidade com milhares de conexões simultâneas.

Sabendo que para moedas com PoW, o atraso no recebimento de novas informações em um segundo é insignificante, a escala horizontal mínima de um sistema desse tipo proporcionará um grande aumento na taxa de transferência. Em dias especialmente ativos, como Black Friday, a carga aumenta. Caso o sistema falhe ou esteja tecnicamente com mau funcionamento, o cliente terá um estado de fallback no qual a página permanecerá no modo de visualização de detalhes para sempre. Para moedas PoS, a etapa de monitoramento do número de confirmações pode ser ignorada, pois a velocidade da transação geralmente é de 2 a 5 segundos.

A terceira opção para a implementação do back-end é híbrida, quando, dependendo da velocidade da transação blockchain e informações sobre a disponibilidade atual de serviços de terceiros, é usada a interação SSE ou HTTP com os exploradores. É o mais eficaz e demorado ao mesmo tempo.

A tecnologia front-end adequada para a tarefa é vue.js com renderização declarativa e a capacidade de criar vários estados de componentes. É uma biblioteca leve, com uma estrutura elegante e modificação reativa do DOM. A fonte de dados é a conexão SSE que é aberta quando o componente é inicializado.

Desenho




Desenvolvemos o produto e o tornamos de alta qualidade e confiável, a fim de tornar os pagamentos em blockchain convenientes, massivos e acessíveis. Adoramos não apenas dinheiro, mas também as tecnologias mais avançadas, tarefas complexas e soluções elegantes.

Ao desenvolver o sistema de pagamento B2BinPay, resolvemos regularmente problemas que, apesar de sua aparente simplicidade, exigem uma abordagem fora do padrão ou uma nova aparência. Ficaríamos gratos por comentários, comentários e sugestões. Se você deseja trazer idéias novas e ousadas para o serviço de pagamento usado em todo o mundo, consulte as vagas atuais .

Source: https://habr.com/ru/post/pt447418/


All Articles