B2BinPay — это криптовалютная платежная система со множеством связанных серверных приложений, аналитикой, узлами, очередями, но только с одной страницей пользовательского интерфейса, которую видит конечный пользователь.
К нему предъявляются высокие требования в отношении удобства использования.
Несмотря на кажущуюся простоту страницы, команде разработчиков было бы интересно рассказать, как она работает изнутри.
Чтобы понять бизнес-процессы, вам необходимо погрузиться в предметную область.
Для читателей, которые еще не знают, что такое криптовалюта, блокчейн и адрес, мы под катом собрали короткие и понятные определения.
Чтобы понять термины, приведем аналогии с миром бумажных платежей: Блокчейн — децентрализованная (в идеале) база данных, хранящая информацию об адресах, транзакциях и балансах.
Он состоит из блоков, каждый из которых содержит ограниченное количество информации.
Блоки генерируются майнерами посредством расчетов на основе мощности (PoW) или доказательства доли (PoS).
Каждый последующий блок содержит список новых транзакций и ссылку на предыдущую.
Каждая криптовалюта имеет свой блокчейн.
Торговец - то же самое, что владелец магазина арендует платежную систему для приема платежей от конечных пользователей.
Кошелек - то же самое, что счет в традиционном финансовом мире.
Сделка — запись в блокчейне о том, что средства были отправлены с одного кошелька на другой.
Баланс кошелька формируется из суммы транзакций.
Адрес - то же, что и реквизиты счета.
Разница в том, что большинство блокчейнов позволяют генерировать бесконечное количество адресов для одного кошелька.
Подтвержденная транзакция — транзакция, после которой было сгенерировано безопасное количество блоков.
Один блок равен одному подтверждению.
Если транзакция не получила 4-8 подтверждений, то она не считается завершенной.
Платежная система — Программное обеспечение, обеспечивающее прием и обработку платежей в криптовалюте.
Связывает и агрегирует заказы, платежи, транзакции, возвраты, пополнения, снятия средств и другую информацию.
Он также информирует торговую систему об изменениях в контексте заказов и платежей, а не блокчейнов и транзакций.
Ээксплорер — сервис или сайт-браузер для данных, поступающих в блокчейн.
С помощью такого сервиса вы сможете получить информацию об адресах, транзакциях и блоках в удобной форме.
Но да — компьютер, на котором хранится копия всей базы данных (блокчейна).
Общая схема работы и требования к содержанию платежной страницы
Цикл оплаты происходит следующим образом: на сайте магазина покупатель выбирает товар и валюту оплаты.Система перенаправляет пользователя на страницу оплаты.
Содержит следующую информацию: валюта, адрес, информационные комментарии.
Пользователь отправляет необходимую сумму на указанный адрес и ждет достаточного количества подтверждений сети, чтобы признать платеж успешным.
Во время ожидания покупатель может следить за статусом платежа, не покидая страницу эксплорера сайта.
Как только платеж принят, пользователь перенаправляется на страницу успешной оплаты на веб-сайте продавца.
Процесс оплаты разделен на несколько этапов.
Каждый из них не требует от пользователя никаких действий, кроме прямого перевода денег.
Стандартный успешный сценарий:
- На сайте продавца пользователь выбирает способ оплаты B2BinPay и валюту.
- ИС продавца отправляет запрос на создание нового платежного поручения, получая в ответ ссылку на страницу оплаты
- Пользователь перенаправляется на страницу оплаты, где содержится информация: валюта, сумма, адрес и дополнительные поля при необходимости.
- Пользователь платит за покупку
- Система обнаруживает, что на адрес поступила новая транзакция и страница переходит в состояние отслеживания.
- Статус транзакции отслеживается, а информация на странице обновляется до тех пор, пока не будет достигнуто безопасное количество подтверждений.
- Пользователь перенаправляется на страницу успешной оплаты на сайте продавца.
При просмотре реквизитов вы можете ввести адрес двумя способами: отсканировать QR-код или скопировать адрес в текстовом виде.
Помимо основной информации мы добавим мини-инструкцию в текстовом виде, которая расскажет, как оплатить, где скачать приложение-кошелек и как купить валюту.
Помимо этих полей есть еще одно, наличие которого зависит от выбранной валюты.
Иногда для правильного сопоставления транзакции, платежного поручения и покупателя необходимо знать не только адрес, но и дополнительную информацию.
Например, для валюты Ripple при отправке необходимо указать тег назначения (комментарий к транзакции).
Для тех, кто копирует адрес в текстовом виде, а не сканирует QR-код, добавлена кнопка копирования.
Логотип монеты также должен присутствовать на странице, поскольку многие люди идентифицируют валюту визуально, по форме и цветовому решению логотипа, а не по буквенному обозначению.
Изменение состояния происходит в момент обнаружения входящей транзакции на платежный адрес.
На этом этапе детали исчезают, поскольку они больше не нужны; пользователь переходит в режим ожидания, а страница нуждается в постоянном притоке информации о статусе транзакции.
Теперь на странице можно найти: время ожидания завершения транзакции, текущее количество подтверждений, небольшой комментарий, поясняющий дальнейшие действия.
Страница должна быть простой для понимания, интуитивно понятной и в то же время достаточно информативной.
Опытным покупателям необходимо ориентироваться на адрес и сумму.
Из перечисленных требований был создан макет будущей страницы.
Бэкэнд
Первый вариант реализация бэкенда - обойдемся без него совсем! При создании платежной страницы вы заранее знаете, на какой адрес будут отправлены деньги.Вы можете получать новые транзакции по этому адресу из проводника с помощью JS. Таким образом, задача сводится к написанию коннекторов в проводники и периодическому опросу нужного.
Статическая диаграмма классов может выглядеть так:
Плюсы: отсутствие нагрузки на наши мощности, простота реализации, отсутствие потенциальных угроз безопасности.
Минусы: ненадежность источников и несвоевременное получение новой информации, трудности с доставкой обновлений кодовой базы конечным клиентам (неконтролируемое кеширование).
Решающим минусом является то, что многие валюты не имеют стабильных проводников с развитым API. Второй вариант (worker) — собственный микросервис, который получает информацию напрямую от пула нод, фильтрует и распределяет ее по платежным страницам.
Использование событий на стороне сервера на клиенте уменьшит избыточность и сэкономит трафик.
SSE подходят для данного варианта использования, поскольку страница пассивна в своем поведении — она принимает только новую информацию.
Минусы: большие затраты на внедрение, дополнительная нагрузка на оборудование.
Плюсы: высокий уровень надежности и независимости от сторонних сервисов; контекст заказа, а не контекст транзакции.
Принципиальная схема:
Когда страница оплаты открывается в браузере покупателя, в асинхронный бэкэнд микросервиса отправляется запрос на создание SSE-соединения.
В запросе указывается адрес, который нужно отслеживать, сумма платежа, срок действия и другие второстепенные параметры.
На серверной стороне это хранится в хранилище noSQL в памяти.
Каждый раз, когда на любом из узлов блокчейна появляется новый блок, приложение получает и извлекает из него полезную информацию об адресах и транзакциях, хранящихся в базе данных.
Если следующий блок полезен, то обновления рассылаются клиентам.
Соединения закрываются сервером, когда получено достаточно подтверждений или истек срок TTL. Таким образом, бэкенд выполняет ресурсоемкие операции и направляет трафик только тогда, когда на узел поступает новая информация, и периодический «опрос» на наличие новой информации отсутствует. Благодаря асинхронности мы получаем высокую скорость работы с тысячами одновременных подключений.
Зная, что для монет PoW задержка получения новой информации в течение секунды незначительна, минимальное горизонтальное масштабирование такой системы даст большой прирост пропускной способности.
В особенно загруженные дни, например, в «Черную пятницу», нагрузка увеличивается.
В случае, если система не справляется или технически неисправна, у клиента есть резервное состояние, при котором страница навсегда остается в режиме детального просмотра.
Для PoS-монет этап мониторинга количества подтверждений можно пропустить, так как скорость транзакции зачастую составляет от 2 до 5 секунд. Третий вариант Реализация бэкенда является гибридной, когда в зависимости от скорости транзакции блокчейна и информации о текущей доступности сторонних сервисов используется либо SSE, либо HTTP-взаимодействие с проводниками.
Он является самым эффективным и в то же время трудоемким.
Подходящая для этой задачи фронтенд-технология — vue.js с декларативным рендерингом и возможностью создания нескольких состояний компонента.
Это легкая библиотека с элегантной структурой и реактивной модификацией DOM. Источником данных является соединение SSE, которое открывается при инициализации компонента.
Дизайн
Мы развиваем продукт и делаем его качественным и надежным, чтобы платежи в блокчейне были удобными, распространенными и доступными.
Мы любим не только деньги, но и самые передовые технологии, сложные проблемы и элегантные решения.
В разработке платежной системы B2BinPay Мы регулярно решаем задачи, которые, несмотря на кажущуюся простоту, требуют нестандартного подхода или свежего взгляда.
Будем признательны за ваши отзывы, комментарии и предложения.
Если вы хотите привнести новые и смелые идеи в платежный сервис, который используется во всем мире, взгляните Текущие вакансии .
Теги: #платежные системы #блокчейн #python #Финансы в ИТ #блокчейн #Ethereum #Процессинг #обработка платежей #b2binpay #криптовалютные кошельки #процессинговые системы
-
Сколько Стоит Создание Приложения?
19 Oct, 24