B2BinPay es un sistema de pago de criptomonedas con muchos backends relacionados para aplicaciones, análisis, nodos, colas, pero solo una página de IU que ve el usuario final. Tiene altos requisitos en cuanto a facilidad de uso. A pesar de la aparente simplicidad de la página, el equipo de desarrollo estaría interesado en compartir cómo se organiza desde el interior.
Para comprender los procesos comerciales, deberá sumergirse en el área temática. Para los lectores que aún no saben qué son las criptomonedas, blockchain y direcciones, hicimos definiciones cortas y comprensibles debajo del corte.

Para entender los términos, aquí hay algunas analogías con el mundo fiduciario de pagos:Blockchain es una base de datos descentralizada (en el caso ideal) que almacena información sobre direcciones, transacciones y saldos. Consiste en bloques; cada uno de ellos contiene una cantidad limitada de información. Los bloques se generan gracias a los mineros a través de cálculos intensivos en energía (PoW) o prueba de participación (PoS). Cada bloque siguiente contiene una lista de nuevas transacciones y un enlace a la anterior. Cada criptomoneda tiene su propia cadena de bloques.
Comerciante : lo mismo que el propietario de la tienda, que alquila un sistema de pago para recibir pagos de los usuarios finales.
Una billetera es lo mismo que una cuenta en el mundo financiero tradicional.
Transacción : un registro en la cadena de bloques en el que los fondos se enviaron de una billetera a otra. El saldo de la billetera se forma a partir del monto de las transacciones.
La dirección es la misma que los detalles de la cuenta. La diferencia es que la mayoría de las cadenas de bloques le permiten generar un número infinito de direcciones para una billetera.
Una transacción confirmada es una transacción después de la cual se ha generado un número seguro de bloques. Un bloque es igual a una confirmación. Si la transacción no ha recibido 4-8 confirmaciones, no se considera completada.
Sistema de pago : software que proporciona la aceptación y el procesamiento de pagos en criptomonedas. Enlaces y pedidos agregados, pagos, transacciones, devoluciones, reabastecimiento, retiros y otra información. También informa al sistema comercial sobre cambios en el contexto de pedidos y pagos, y no sobre cadenas de bloques y transacciones.
Explorer : un servicio o un sitio de navegador para los datos que ingresan a la cadena de bloques. Con este servicio, puede obtener información convenientemente sobre direcciones, transacciones y bloques.
Un nodo es una computadora en la que se almacena una copia de toda la base de datos (blockchain).
Esquema general de trabajo y requisitos para el contenido de la página de pago.
El ciclo de pago se realiza de la siguiente manera: en el sitio web de la tienda, el comprador selecciona el producto y la moneda de pago. El sistema redirige al usuario a la página de pago. Contiene la siguiente información: moneda, dirección, comentarios informativos. El usuario envía la cantidad requerida a la dirección especificada y espera un número suficiente de confirmaciones de red para reconocer el pago como exitoso. Mientras espera, el comprador puede controlar el estado del pago sin abandonar la página en el sitio web del explorador. Una vez que se acepta el pago, el usuario es redirigido a la página de pago exitosa en el sitio web del vendedor.

El proceso de pago se divide en varias etapas. Cada uno de ellos no requiere la acción del usuario, excepto la transferencia directa de dinero. Script exitoso estándar:
- En el sitio web del vendedor, el usuario selecciona el método de pago B2BinPay y la moneda.
- La IP del vendedor envía una solicitud para crear una nueva orden de pago, en respuesta recibe un enlace a la página de pago
- El usuario redirige a la página de pago, que contiene información: moneda, cantidad, dirección y campos adicionales, si es necesario
- El usuario paga por la compra
- El sistema detecta que una nueva transacción ha llegado a la dirección y la página entra en estado de seguimiento
- El estado de la transacción se supervisa y la información se actualiza en la página hasta que se alcanza un número seguro de confirmaciones.
- El usuario es redirigido a la página de pago exitosa en el sitio web del vendedor
En consecuencia, la página de pago puede estar en dos estados: ver detalles y esperar confirmación. Al ver los detalles, puede ingresar la dirección de dos maneras: escanee el código QR o copie la dirección en forma de texto. Además de la información básica, agregaremos una mini instrucción en forma de texto que le indicará cómo pagar, dónde descargar la aplicación de billetera y cómo comprar moneda. Además de estos campos, hay uno más, cuya presencia depende de la moneda elegida. A veces, para comparar correctamente la transacción, la orden de pago y el comprador, es necesario conocer no solo la dirección, sino también información adicional. Por ejemplo, para la moneda Ripple, al enviar, debe especificar la etiqueta de destino (comentario sobre la transacción).
Para aquellos que copian la dirección en forma de texto y no escanean el código QR, se ha agregado un botón de copia. Además, el logotipo de la moneda debe estar presente en la página, ya que muchas personas identifican la moneda visualmente, por la forma y el esquema de colores del logotipo, y no por la designación de la letra.
El cambio de estado ocurre en el momento en que se detecta una transacción entrante en la dirección de facturación. En este momento, los detalles desaparecen, ya que ya no son necesarios; el usuario entra en modo de espera y la página necesita un flujo constante de información sobre el estado de la transacción. Ahora en la página puede encontrar: el tiempo de espera hasta que se complete la transacción, el número actual de confirmaciones, un breve comentario que explica las acciones adicionales.
La página debe ser fácil de entender, intuitiva y al mismo tiempo suficientemente informativa. Para compradores experimentados, se debe hacer hincapié en la dirección y la cantidad.
De los requisitos anteriores, se obtuvo un diseño para la página futura.

Backend
¡La primera opción para implementar el backend es prescindir de él! Al generar la página de pago, se sabe de antemano a qué dirección se enviará el dinero. Puede recibir nuevas transacciones en esta dirección del explorador utilizando las herramientas JS. Por lo tanto, la tarea es escribir conectores en el explorador e interrogar periódicamente al necesario. Un diagrama de clase estático podría verse así:
Pros: no hay carga en nuestras capacidades, es fácil de implementar, no hay amenazas de seguridad potenciales.
Contras: fuentes poco confiables y recepción prematura de nueva información, dificultades para entregar actualizaciones de código base a clientes finales (almacenamiento en caché no controlado). Menos decisivo: muchas monedas no tienen un explorador estable con una API desarrollada.
La segunda opción (en funcionamiento) es su propio microservicio, que recibe información directamente del grupo de nodos, la filtra y la distribuye entre las páginas de pago. El uso de Eventos del lado del servidor en el cliente reducirá la redundancia y ahorrará tráfico. Los SSE encajan en el caso de uso, ya que la página es pasiva en su comportamiento: solo acepta nueva información.
Contras: muchos costos de implementación, carga adicional en el equipo.
Pros: alto nivel de confiabilidad e independencia de los servicios de terceros; El contexto del pedido, no la transacción.
Diagrama del circuito:

Cuando se abre la página de pago en el navegador del cliente, se envía una solicitud para crear una conexión SSE al backend asíncrono del microservicio. La solicitud indica la dirección que se debe rastrear, el monto del pago, la vida útil y otros parámetros menores. En el backend, esto se almacena en el almacenamiento noSQL en memoria. Cada vez que aparece un nuevo bloque en cualquier nodo blockchain, la aplicación recibe y extrae información útil de este en las direcciones y transacciones almacenadas en la base de datos. Si el siguiente bloque es útil, se envían actualizaciones a los clientes. Las conexiones se cierran por iniciativa del servidor cuando se reciben suficientes confirmaciones o el TTL ha expirado.
Por lo tanto, el backend realiza operaciones intensivas en recursos y dirige el tráfico solo cuando llega nueva información al nodo, y no hay una "interrogación" periódica para nueva información. Gracias a la asincronía, obtenemos alta velocidad con miles de conexiones simultáneas.
Sabiendo que para las monedas con PoW, la demora en recibir nueva información en un segundo es insignificante, la escala horizontal mínima de dicho sistema dará un gran aumento en el rendimiento. En días especialmente activos, como el Black Friday, la carga aumenta. En caso de que el sistema falle o esté fallando técnicamente, el cliente tiene un estado de reserva en el que la página permanece en el modo de visualización de detalles para siempre. Para las monedas PoS, se puede omitir el paso de controlar el número de confirmaciones, ya que la velocidad de la transacción suele ser de 2 a 5 segundos.
La tercera opción para la implementación del backend es híbrida, cuando depende de la velocidad de la transacción blockchain y de la información sobre la disponibilidad actual de servicios de terceros, se utiliza la interacción SSE o HTTP con los exploradores. Es el más efectivo y lento al mismo tiempo.
La tecnología front-end adecuada para la tarea es vue.js con representación declarativa y la capacidad de crear varios estados de componentes. Es una biblioteca ligera con una estructura elegante y modificación DOM reactiva. La fuente de datos es la conexión SSE que se abre cuando se inicializa el componente.
Diseño

Desarrollamos el producto y lo hacemos de alta calidad y confiable para que los pagos de blockchain sean convenientes, masivos y asequibles. No solo amamos el dinero, sino también las tecnologías más avanzadas, tareas complejas y soluciones elegantes.
Al desarrollar el sistema de pago
B2BinPay, regularmente resolvemos problemas que, a pesar de su aparente simplicidad, requieren un enfoque no estándar o una nueva apariencia. Agradeceríamos sus comentarios, comentarios y sugerencias. Si desea aportar ideas nuevas y audaces al servicio de pago que se utiliza en todo el mundo, consulte
las vacantes actuales .