Прошлую неделю я потратил на разработку своей первой публичной программы — Telegram-бота, который работает как биткойн-кошелек и позволяет «кидать монеты» другим участникам групповых чатов, а также совершать внешние биткойн-платежи себе или так называемым другим людям.
«Молниеносные приложения».
Я предполагаю, что читатель в целом знаком с Bitcoin и Telegram, потому постараюсь писать кратко, не вдаваясь в подробности.
Подборка ресурсов о Биткойне доступна по этой ссылке.
Ну а Telegram — это средство обмена мгновенными сообщениями на мобильных устройствах и ПК, позволяющее создавать на их платформе свои небольшие приложения (чат-боты).
Каковы ключевые особенности этого приложения?
- Позволяет отблагодарить или поощрить собеседника реальной материальной ценностью, а не просто "виртуальный лайк" , это выводит электронное общение на совершенно новый уровень
- Реальный пример приложения, которое может финансово взаимодействовать с другими приложениями, используя открытый протокол платежей.
- Все компоненты приложения являются проектами с открытым исходным кодом и могут быть модифицированы и использованы для собственных задач.
Приложение не использует закрытые и/или коммерческие решения, несмотря на то, что оно вписывается в сферу электронной коммерции, которую сегодня довольно сложно назвать открытой.
И как это применить на практике?
что-то вроде этого…или так.
Что означают эти цифры? Этот биткойн-единицы - сатоши .
В биржевых ценах на середину 2019 года 1000 сатоши составляют примерно $0,06. Сатоши можно потратить онлайн или легко обменять на национальную валюту.
Именно по этой причине (ликвидность) это не просто еще один "запись в базе данных" или «баллы, которые вы можете потратить в магазинах наших партнеров» , А реальные деньги в интернете .
*Сразу хочу отметить, что я явно не пытаюсь писать некоторые слова или фразы на русском языке - либо я не знаю контекстного перевода в некоторых случаях, либо такой перевод, на мой взгляд, звучит более вводящим в заблуждение, чем правильный Может возникнуть вопрос, как пользоваться таким приложением, если нет биткойнов.
Их легко можно приобрести в небольшом количестве на одной из многочисленных бирж или обменников, а можно у биткойн-друга или даже получить монеты от текущих пользователей бота.
Многие телефонные кошельки предлагают возможность покупать биткойны напрямую, «не отходя от кассы».
Когда у вас в руках оказались биткойны (или, скорее, сатоши) -ами (?)) - запуск @atomic_tipbot и сделайте /депозит.
Бот в ответ спросит, сколько сатоши добавить на ваш баланс, и отправит вам счет на оплату, который можно оплатить с помощью мобильного кошелька, отсканировав QR-код или нажав кнопку ( "открыть в кошельке" ) на странице счета.
Подтвердив оплату в вашем кошельке, бот практически сразу отправит подтверждение оплаты и это будет визуально отображено в рамке счета.
До этого момента мы затронули две составляющие приложения — бэк-энд бота Telegram и систему обработки платежей в криптовалюте (вернее, ее фронтенд).
Для создания Telegram-бота я использовал Python Telegram-бот .
И конечно же сам бот Открытый исходный код .
В качестве системы обработки платежей и решения UX-задач выбор пал (фактически выбора почти нет) на BTCPayServer , на которой документация по этой ссылке .
Если вы ищете решения для обработки платежных событий напрямую, то вам следует обратить внимание на Страницы руководства по интерфейсу командной строки Electrum для так называемых онлайн-платежей и для решений мгновенных микроплатежей (Lightning), таких как Молниеносный заряд или Спарко .
Так это самостоятельный хостинг или нет!?
Да, это.В своем приложении я использую бесплатный хостинг BTCPayServer — BTCPayДжунгли , но запуск собственного процессингового центра абсолютно возможен и не требует много времени.
Однако стоит помнить, что вам понадобится около 500 ГБ свободного места на жестком диске для хранения цепочек биткойнов (и лайткойнов).
Также вам потребуются вычислительные и сетевые ресурсы на время синхронизации и, в зависимости от ваших потребностей, необходимые «обертки» для блокчейнов, чтобы было удобно с ними взаимодействовать.
BTCPayServer не содержит по дизайну приватные ключи или любая другая информация, позволяющая вам управлять своим кошельком.
Для ончейн (обычных) платежей нужно добавить т.н.
Ключ кошелька xpub в BTCPayServer для генерации адресов получения (открытых ключей).
Это делает возможным и безопасным использование BTCPayServer даже в «совместном» виде.
Все эти ключи и адреса xpub можно легко получить в хороших кошельках, таких как Электрум , для дальнейшей настройки обработки.
Каждый, кто сталкивался с Биткойном, слышал, что Биткойн медленный, а транзакции дорогие, особенно когда есть ажиотаж, поэтому для мгновенных микроплатежей стоит использовать (оффчейн) транзакции Lightning Network.
Что это за сеть Lightning?
Это что-то вроде плагина для Биткойн, который добавляет дополнительный уровень абстракции и позволяет совершать мгновенные и практически бесплатные транзакции в сети Биткойн.Все это возможно благодаря криптографической магии мультиподписей, которую чаще называют смарт-контракт .
Существует несколько реализаций протокола Lightning Network, я использую c-молния реализация в С.
Основное различие между платежами внутри сети и вне сети (Lightning) заключается в том, как они хранятся.
Все ончейн транзакции передаются по всем узлам сети до тех пор, пока один из узлов Биткойн не объявит новый добытый блок с включенными в него сделками.
(На хабе есть даже BitFury , они просто производят железо для майнинга).
Именно по этой причине мы называем такие транзакции ончейн .
Такие транзакции будут записаны в общем блокчейне и останутся там до конца его существования.
Кроме того, такие транзакции общедоступны и их можно отслеживать, отслеживать и анализировать.
Когда вне сети В (молниеносных) транзакциях все происходит по-другому.
Каждый узел сети Lightning имеет один (или больше) Адреса в цепочке — это те же самые обычные адреса биткойнов, с которых все начинается.
При появлении биткойнов по такому адресу можно открыть т.н.
молниеотвод на другой узел, а это означает, что с помощью криптографических методов эти два узла договорились между собой о наличии средств.
В дальнейшем все транзакции (как свои, так и сторонних узлов), проходящие через такой канал, сохраняются только на узлах участников транзакции (и узлах-посредниках).
Единственные транзакции, которые записываются в блокчейне, — это транзакции, которые открывают или закрывают канал.
В более полном масштабе результатом является сеть взаимосвязанных узлов, выстраивающая между участниками тысячи различных путей для «перевода» средств с одного узла на другой по определенным строгим правилам.
Практически все подобные транзакции хранятся только в файле базы данных самих узлов.
Вот почему мы называем их вне сети .
На схеме представлена визуализация всех компонентов приложения.
Кратко:
1) Пользователь отправляет команду боту в Телеграмма
2) Telegram отправляет сообщение о событии приложение на Python бот
3) приложение на Python отправляет запрос на BTCPayServer
4) BTCPayServer генерирует входящие адреса BTC и LTC, а также отправляет запрос на выставление счета на заряд молнии , который в свою очередь общается с демоном c-молния .
В результате мы получаем красивую HTML-форму обработки платежа.
5) Пользователь оплачивает счет и видит подтверждение.
6) BTCPayServer отправляет уведомление об оплате счета (IPN) на указанный callback_url, в нашем случае обратные вызовы.
py (еще одно приложение на Python для получения уведомлений) 7) Согласно полученным данным меняется баланс пользователя.
.
а если пользователь захотел вывести средства (монеты, которые он получил от других).
8) Приложение на Python Бот ждет текст или изображение QR-кода, и при получении достоверных данных оплата производится утилитой.
paylightning.py* , который инициирует транзакцию через RPC c-lightning.
*Справедливости ради стоит отметить, что моя оболочка paylightning.py не полностью завершена и в определенных сценариях может возвращать ложноотрицательный результат. Я рекомендую использовать хорошо отлаженную обертку в случаях, близких к производству
Что мы имеем? Пользователи нашего бота могут отправлять сообщения в групповом чате или напрямую.
материальная ценность без ограничений.
И это еще не все — благодаря протоколу Lightning Network, который в каком-то смысле представляет собой единую и упрощенную платежную сеть, появляется возможность отправлять те же деньги, полученные в чате, в совершенно сторонние приложения.
Например, в Telegram уже был первый бот для платежей в биткойнах — @lntxbot. «Единый баланс» позволяет использовать любого из ботов в зависимости от предпочтений конкретного группового чата (да, проблема совершенно надуманная и решение весьма бесполезное, но в том-то и дело).
Перенос баланса от одного бота к другому ничего не стоит и занимает секунды! Важно отметить, что создатели этих ботов вообще никогда не общались друг с другом.
Все, что вам нужно сделать, это переслать сообщение с запросом на депозит от @lntxbot на @atomic_tipbot и вуул!
Это уже не просто «забрасывание цифр в базу данных», а оплата между двумя разными, несвязанными между собой базами данных.
Таким образом, в бот уже интегрировано несколько «LAApps», среди них: sat2.io И lnsms.world .
Что значит Интеграция с LApp ? Каждый Молниеносная сеть Узел — это, по сути, биткойн-кошелек.
Он имеет два баланса: ончейн и оффчейн.
Внутрисетевой баланс необходим для открытия новых каналов и хранения средств из закрытых каналов.
Но баланс вне сети — это именно то, что происходит между узлами.
Основными требованиями к ноде являются прием и отправка платежей, поэтому каждая нода выполняет функции программного обеспечения.
платить И счет .
Я продемонстрирую, как это происходит:
Получаем «счет» спецификации БОЛТ11 в данном случае это формат оплаты в сети Bitcoin (и Litecoin, кстати, тоже).user@ln-node:/ % lightning-cli invoice 1000000000 internal_description external_description { "payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0", "expires_at" : 1558709834, "bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6" }
Это строка, содержащая информацию о получателе, сумме транзакции, сроке действия запроса и т. д., подробную информацию можно получить, запустив decodepay относительно этой строки: user@ln-node:/ % lightning-cli decodepay lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6
{
"currency" : "bc",
"created_at" : 1558105034,
"expiry" : 604800,
"payee" : "025a14b8ed40583d67aec92da19453e0b2d1fbbf75f96f85d3dd0ff61a51ee0490",
"msatoshi" : 1000000000,
"amount_msat" : "1000000000msat",
"description" : "external_description",
"min_final_cltv_expiry" : 10,
"routes" : [
[
{
"pubkey" : "03a20c0c2ae4508b669a70e5f82f08f69a3da5da3bf0c973673c3fe977db0f61e3",
"short_channel_id" : "574012x1255x1",
"fee_base_msat" : 1000,
"fee_proportional_millionths" : 1,
"cltv_expiry_delta" : 144
}
]
],
"payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0",
"signature" : "304502210099f31dffd18b6db8296637db3e3a1ffbaf7b7db087a2ad1eedb7639f25e78b25022079038370073681aa1e1a7a05de6588e98ead078896d0a37a15b755c212dc3d37"
}
Но для оплаты такого «счета» нам понадобится функция оплаты из c-lightning: user@ln-node:/ % lightning-cli pay lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j
{
"id" : 163,
"payment_hash" : "c3e644a005f56e33df89facbce2c9dfcabbef5d105285a98272cacc77ab2de63",
"destination" : "03021c5f5f57322740e4ee6936452add19dc7ea7ccf90635f95119ab82a62ae268",
"msatoshi" : 200000,
"amount_msat" : "200000msat",
"msatoshi_sent" : 200003,
"amount_sent_msat" : "200003msat",
"created_at" : 1558106072,
"status" : "complete",
"payment_preimage" : "1a9552b9f4e9199e26839353f870b12cc85b7674a2fb134e78aa370032611019",
"bolt11" : "lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j"
}
Все состояния транзакций обрабатываются всей сетью и вашим собственным узлом в частности.
Нет необходимости (но можно) взаимодействовать с авторами приложения-получателя платежа или любого из их API для получения информации о статусе платежа.
Нет необходимости проверять статус платежа в системе посреднического процессинга.
Вам не нужно ждать, пока ваша транзакция будет одобрена банком или государственным органом.
Ведь нет никаких возвратных платежей или других внешних факторов, которые могут повлиять на баланс вашего счета.
Это решение для перемещения стоимости через Интернет, без необходимости в стороннем арбитре, который решает, соответствует ли сделка правилам (иногда даже внутренним правилам, о которых не все участники проинформированы заранее) или нет. В Биткойне нет «домашних правил».
Единственные правила, которые необходимо соблюдать, — это правила сети — открытые и известные всем.
Это делает это реальным прямой , практически бесплатно И мгновенный денежные операции между людьми или программами в полностью автономном режиме.
Если у вас есть возможность получать платежные данные из стороннего приложения, то появляется возможность финансового взаимодействия с этим приложением.
В качестве примера рассмотрим сервис Lnsms.world, который позволяет отправить SMS-сообщение на произвольный номер, заплатив за это биткойнами.
Для интеграции этого приложения нам нужно всего лишь передать данные из веб-формы непосредственно в скрипт отправки СМС — эмулировать действия пользователя на сайте: payload = {
'number': phone_number,
'text': text,
'force_unicode': 0
}
send_req = requests.post(' https://lnsms.world/invoice ', data=payload)
if send_req.status_code == 201:
plain_invoice = str(send_req.text)
Не знаю по какой причине, но Lnsms отвечает кодом статуса HTTP 201 и возвращает счет в формате BOLT11. Что ж, этого достаточно, чтобы пользователи ботов могли оплатить отправку СМС со своего баланса, полученного в чатах.
Пользователь даже не знает, что там происходит, он просто заплатил пару центов за отправку СМС.
И я, как разработчик, не вдаюсь в подробности работы смс-сервисов.
Я просто перевел платеж и получил услугу.
Можно сделать разметку сверху, а можно и не обязательно – это мой свободный выбор.
Никаких аккаунтов, соглашений или другого API для тривиальных задач вроде отправки СМС.
Теперь давайте на минутку представим, что наше приложение является чем-то более полезным, чем чат-бот, и производит оплату не другому боту, а другому приложению или устройству, подключенному к Интернету.
Либо это десятки, а то и сотни незначительных платежей каждую секунду между устройствами, сервисами, магазинами или какими-то поставщиками услуг.
В этом сила микроплатежей, именно так должен выглядеть Интернет вещей.
Уже есть такие проекты Алтея которые воплощают эти идеи в жизнь и в ближайшем будущем мы увидим большие, на мой взгляд, изменения в той области, которую мы сейчас называем электронной коммерцией.
Если вам понравился пост и вы хотите попробовать биткойны в действии - пришли мне стакан пива и мягкие французские булочки .
В опросе могут участвовать только зарегистрированные пользователи.
Войти , Пожалуйста.
Вас интересуют чисто технические статьи о Биткойне и связанном с ним программном обеспечении? 85,29% Да 29 11,76% Нет 4 2,94% Меня больше интересуют рыночные аспекты криптовалют 1 Проголосовали 34 пользователя.
7 пользователей воздержались.
Теги: #платежные системы #электронная коммерция #Децентрализованные сети #Криптовалюты #программирование #открытый исходный код #биткоин #Распределенные системы #платежи #открытый исходный код #мгновенные сообщения
-
Психолингвистика
19 Oct, 24 -
Mikrotik Qos – Развенчание Мифов
19 Oct, 24 -
Шаблоны В Xtralayoutcontrol 14.1.5
19 Oct, 24