BTCPay Server — свободное программное обеспечение для приёма биткоин-платежей под лицензией MIT. Его можно запустить на своём сервере или пользоваться чужой установкой. Программа создаёт платёжные запросы, сопоставляет их с оплатой и помогает вести учёт. Сам проект не является счётом, которому нужно доверить деньги, или посредником, разрешающим споры о товарах.
Представьте книжный интернет-магазин. Покупатель выбирает биткоин, и BTCPay Server создаёт invoice — запрос на оплату определённой суммы. Страница показывает адрес или запрос Lightning в зависимости от настроек магазина. Программа отслеживает поступление и сообщает подключённому магазину об изменениях состояния. Не приходится вручную выяснять, к какому заказу относится каждый платёж. Так же можно обслуживать кассу или собирать пожертвования. Открытый код позволяет проверять и изменять программу, но сам по себе не доказывает безопасность конкретной установки. [1]
Для существующего кошелька сервер может получить расширенный публичный ключ — данные, из которых выводятся адреса получения. Закрытые ключи, разрешающие расходование средств, могут оставаться вне сервера, например в аппаратном кошельке. Горячий кошелёк устроен иначе: его секреты находятся на устройстве, подключённом к интернету. Доступ к узлу Lightning для быстрых платежей тоже может позволять тратить деньги. Управление сервером и контроль средств — отдельные вопросы. Обозначение self-hosted, то есть самостоятельное размещение, само по себе на них не отвечает. [2] [3]
Чужой сервер может избавить вас от установки и обслуживания. Но даже при получении в собственный кошелёк вы полагаетесь на его администратора. Изменённый или взломанный сервер может показывать адреса злоумышленника вместо ваших. Сам публичный ключ не позволяет ему потратить ранее полученные монеты, однако подменённая касса способна перенаправить будущие платежи. Проверяйте поступления также в независимом кошельке. Такая же угроза существует для взломанного собственного сервера. Внешний оператор дополнительно влияет на доступность и приватность платежей. [4]
Цена книги может быть указана в чешских кронах, хотя покупатель платит биткоином. Invoice фиксирует курс и сумму на ограниченное время. Processing означает, что вся запрошенная сумма оплачена, но условия завершения, например подтверждения в блоках, ещё не выполнены. Settled означает их выполнение; Lightning обычно не ждёт блока. Магазину также нужно обрабатывать недоплаты, переплаты и запоздалые платежи. Ручное изменение состояния не создаёт подтверждение сети. Пересчёт цены на экране тоже не отправляет кроны на банковский счёт: обмен через плагин или провайдера — другая услуга со своими условиями и расходами. [5] [6] [3]
Программы соединяются через Greenfield API — интерфейс для обмена данными. Магазин сохраняет идентификатор invoice вместе с заказом. Webhook, автоматическое сообщение сервера, сообщает об изменениях; его подлинность проверяют по документации. Ключ доступа API должен иметь лишь необходимые этому магазину разрешения. Если сообщение приходит повторно, нельзя отправлять вторую книгу. Возвращение покупателя на страницу благодарности тоже не доказывает оплату. После сбоя местные записи нужно сверить со счетами и фактическими платежами. [7]
Lightning Network использует платёжные каналы, чтобы не записывать каждый платёж отдельно в блок. Собственный узел должен быть доступен и иметь входящую ликвидность — пространство в каналах, через которое средства могут поступать к вам. Это требует постоянного управления. Можно воспользоваться помощью с ликвидностью, обменом между платёжными сетями или кастодиальным сервисом, контролирующим деньги клиента. Эти варианты отличаются разрешениями, комиссиями и рисками. Название BTCPay Server на странице не показывает, что выбрал магазин, и не гарантирует успех каждого платежа. [8]
Данные восстановления кошелька — не резервная копия всего магазина. Кроме ключей, нужны счета, настройки и другие данные в зависимости от установки. В Lightning особенно опасно запускать узел со старым состоянием каналов: неправильное восстановление может поставить средства под угрозу. Плановый переезд отличается от восстановления после аварии. При миграции исходный узел не должен продолжать меняться или работать одновременно с восстановленной копией. Следуйте процедуре для конкретной реализации. Проверяйте восстановление Lightning изолированно от сети и других узлов, чтобы тест не затронул действующие каналы. Руководство для Docker — среды, запускающей части приложения в отдельных контейнерах, — относится именно к такому способу установки. [9]
Преимущество — возможность самостоятельно решать, как работает ваша платёжная инфраструктура. Но кто-то должен заниматься обновлениями, доступом администратора, доступными из интернета службами и пригодными для восстановления копиями. Программа не берёт процент с каждого платежа, однако хостинг, оборудование, сетевые комиссии и помощь с Lightning могут стоить денег. Не храните ненужные персональные данные покупателей. Если книга потерялась или её вернули, жалобой и возвратом денег занимается продавец; разработчики BTCPay Server не выступают арбитрами продажи. Записи счетов помогают учёту, но не заменяют все бухгалтерские обязанности. [10] [3] [7]
Касса отключилась, кошелёк остался
Магазин использует только публичные данные внешнего кошелька, когда сервер перестаёт отвечать. Ранее полученные биткоины под контролем его ключей не исчезают. Но покупатели могут не открыть новую платёжную страницу, а магазин не видит актуальные состояния заказов. После восстановления он проверяет настройки приёма и сверяет счета с кошельком. Пример нельзя так же применять к секретным ключам, потерянным вместе с горячим кошельком сервера, или к восстановлению каналов Lightning из старых данных.
Для полной картины прочитайте эту статью вместе с Bitcoin Payment Processor, Bitcoin Point of Sale, Самостоятельное хранение, Lightning Network, Merchant Adoption, Bitcoin. На эту статью также ссылаются Bitcoin Coffee, Transaction Labeling, Bitcoin Payment Processor, Bitcoin Point of Sale.
01Означает ли BTCPay Server автоматически самостоятельное хранение?+
Нет. Выясните, кто контролирует ключи подключённого кошелька и какие права имеет сервер или сервис Lightning. Одни публичные данные внешнего кошелька не разрешают тратить средства. Горячий кошелёк или кастодиальный сервис могут работать иначе. Даже без закрытых ключей взломанная касса способна показывать неверные адреса.
02Хватит ли слов резервной копии для восстановления всего?+
Они могут восстановить соответствующий Bitcoin-кошелёк, но не список счетов, настройки магазина или автоматически состояние каналов Lightning. Этим частям нужны собственные копии и процедуры. Проверяйте безопасно: старая тестовая копия Lightning не должна общаться с сетью так, будто она является действующим узлом.