Nesta semana, passei a codificar meu primeiro aplicativo público para animais de estimação baseado no bot de bate-papo do Telegram, que funciona como uma carteira Bitcoin e permite enviar e receber dicas entre usuários do Telegram e outros chamados "aplicativos de iluminação". Presumo que você esteja familiarizado com o Bitcoin & Telegram em geral, tentarei postar breves e sem detalhes sobre os detalhes. Mais recursos sobre Bitcoin podem ser encontrados aqui e o Telegram é simplesmente um mensageiro instantâneo que permite criar aplicativos personalizados (chat-bots) usando a plataforma deles.
Quais são os pontos principais desse aplicativo?
- Permite classificar idéias e respostas de outros usuários com valor real, em vez de
'curtidas virtuais'. Isso leva a conversa online a um nível completamente novo - Exemplo real de um aplicativo de micro-pagamento funcional que pode atuar com outras entidades
pela internet usando protocolo aberto - Todos os módulos são projetos de código aberto e podem ser facilmente reutilizados e ajustados
para o seu próprio projeto. O aplicativo não transmite serviços comerciais de terceiros.
Mesmo se enquadra no campo de comércio eletrônico, que está quase fechado no momento, o aplicativo
é baseado em soluções abertas.
Quais são os casos de uso?
algo assim ...
ou assim ..
O que significam números? Estas são unidades de bitcoin - satoshis . Em meados de 2019, 1000 satoshis têm um valor de US $ 0,06. Você pode gastá-lo online ou trocar para sua moeda local usando muitos serviços disponíveis. Portanto, este não é apenas outro "número em um banco de dados" ou "cupons que você pode gastar em nossa loja parceira" , mas um dinheiro real na Internet .
Você pode perguntar o que fazer, se você não tiver nenhum bitcoin para usar no aplicativo. Você simplesmente pode receber uma dica do usuário do aplicativo existente ou comprar uma pequena quantidade de bitcoin em várias trocas ou carteiras de bitcoin para celular ou PC.



Quando você adquiriu bitcoin, pode iniciar o @atomic_tipbot e fazer um / deposit.
Você verá uma fatura, poderá selecionar o método de pagamento preferido e enviar dinheiro apenas digitalizando o código QR ou pressionando o botão ( "abrir na carteira" ) na fatura.



Confirme o pagamento na sua carteira móvel e você verá uma tela de confirmação quase instantaneamente no Telegram.
Até agora, tocamos em duas partes separadas do aplicativo: back-end de bot de telegrama e sistema de processamento de pagamentos (na verdade, mais parecido com o front-end).
Para criar este bot de Telegram, usei o Python Telegram Bot . E, claro, o bot é de código aberto .
Como sistema de processamento de pagamentos para gerar faturas, verificar status, enviar notificações e cuidar do UX é utilizado o BTCPayServer, cuja documentação pode ser encontrada aqui .
Se você estiver pensando em como processar eventos de pagamento diretamente, consulte as páginas de manual da Electrum CLI para pagamentos na cadeia e confira soluções para pagamentos fora da cadeia (Lightning), como Lightning-charge ou Sparko .
Você disse 'sem terceiros' e 'sem serviços em nuvem'!?
Sim, é verdade. No meu aplicativo, estou usando hospedagem compartilhada gratuita da instância BTCPayServer - BTCPayJungle , mas é possível rodar até mesmo em seu próprio servidor dedicado. Lembre-se de que você precisa de aproximadamente 500 GB de espaço para armazenar as blockchain Bitcoin e Litecoin. O BTCPayServer não possui chaves privadas ou informações confidenciais que possam permitir que hackers controlem os fundos da sua carteira. Para pagamentos on-chain (padrão), é necessário fornecer a chave xpub da sua carteira ao BTCPayServer para que ele possa gerar endereços públicos. Dessa forma, a arquitetura BTCPay possibilita processar pagamentos de maneira confiável, mesmo em ambiente compartilhado. É muito simples de configurar se você usar carteiras comprovadas, como a Electrum .
O que é a Lightning Network?
É algo como um complemento para o Bitcoin que adiciona camada de abstração adicional e permite fazer transações instantâneas e quase gratuitas de bitcoin. Tudo isso é possível graças à magia criptográfica com várias assinaturas, que é frequentemente chamada de contrato inteligente . Existem várias implementações do protocolo LN. Estou usando a implementação c-lightning C.
A principal diferença entre pagamentos on-chain e off-chain (Lightning) está na maneira como as transações são armazenadas. Todas as transações on-chain são transmitidas para toda a rede, de modo que cada nó de bitcoin em execução registre essa transação no blockchain, se o bloco que contém essa transação for extraído . Ei, BitFury , estou certo? ;) É por isso que chamamos essas transações na cadeia . Tais transações serão armazenadas em blockchain até o final de sua existência. É possível rastrear publicamente, analisar e monitorar qualquer transação na rede.
No caso de transações fora da cadeia (Lightning), as coisas acontecem de outra maneira. Cada nó relâmpago tem (pode haver muitos) endereços na cadeia, a partir dos quais todos começam. Quando os fundos são recebidos em tal endereço, o uso das técnicas de criptografia pode abrir o chamado canal de raio para outro nó, o que significa que esses dois nós concordaram sobre a disponibilidade de fundos entre eles. Posteriormente, todas as transações feitas através do canal (transações próprias ou transações roteadas a partir de outro nó) são armazenadas apenas nesses dois nós (e no nó intermediário, se houver). As únicas transações armazenadas nas redes blockchain são as transações de abertura e fechamento de canais. É por isso que as transações do Lightning chamamos de fora da cadeia . Principalmente eles existem apenas no arquivo de banco de dados do nó.
A coisa toda é visualizada no diagrama

História curta:
1) O usuário envia uma mensagem e solicita um depósito ao bot no Telegram
2) Telegrama aciona o aplicativo python do bot
3) o aplicativo python envia uma solicitação ao BTCPayServer
4) O BTCPayServer gera endereços de entrada para BTC e LTC, além de entrar em contato com a taxa de descargas atmosféricas, que está obtendo dados do daemon c-lightning . Em resultado, obtemos um quadro HTML bem tratado para processamento de pagamentos
5) O usuário paga a fatura e verá a confirmação
6) O BTCPayServer envia a notificação de pagamento da fatura (IPN) para o URL de retorno de chamada especificado; no nosso caso,
irá para callbacks.py (outro aplicativo python para ouvir retornos de chamada)
7) De acordo com os detalhes completos do pagamento, o saldo do usuário é alterado e o usuário recebe uma notificação
... se o usuário decidir sacar fundos (dicas que ele recebeu) ...
8) O aplicativo python de Bot escuta texto ou imagem do QR, quando obtém dados da fatura (longa cadeia de caracteres) e envia uma solicitação para pagar essa fatura para outro aplicativo python paylightning.py * , que inicializa pagamentos usando o c-lightning RPC

* Para ser justo, preciso mencionar que meu paylightning.py do invólucro de pagamento está incompleto e pode retornar falso-negativo em alguns casos específicos. Você deve usar o invólucro de pagamento bem testado para o c-lightning em caso de uso semelhante à produção.
Os usuários podem enviar dicas uns aos outros em bate-papos em grupo e enviar / receber valor sem limites. Mas isso não é tudo. Graças ao protocolo Lightning Network, que está em algum tipo de rede de pagamento unificada e simplificada, você pode enviar as mesmas moedas de saldo para aplicativos completamente diferentes. Há outra dica de bot de bitcoin no telegrama - @lntxbot. O usuário pode solicitar um depósito para este bot


Basta encaminhar dados de @lntxbot para @atomic_tipbot e voul'a!
Isso não é mais 'troca de número no banco de dados', mas pagamento entre dois 'bancos de dados' separados e não relacionados. O Bot já possui poucos 'LApps' integrados: sat2.io e lnsms.world .
Você pode perguntar: o que exatamente significa integração com o LApp ?
Cada nó da Lightning Network atua como uma carteira de bitcoin. Possui equilíbrio dentro e fora da cadeia. O saldo na cadeia geralmente é usado para abrir canais e armazenar fundos de canais fechados, em tarefas de manutenção de nós curtos. O saldo fora da cadeia é exatamente o que é usado para trocar fundos entre os nós. As principais funções de cada nó são a capacidade de enviar ou receber fundos; portanto, o nó como software fornece métodos de pagamento e fatura . Vou mostrar resumidamente como isso acontece:
user@ln-node:/ % lightning-cli invoice 1000000000 internal_description external_description { "payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0", "expires_at" : 1558709834, "bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6" }
A fatura BOLT11 é gerada neste caso, que é um formato unificado para solicitações de pagamento na rede Bitcoin (e Litecoin). Essa sequência inclui dados sobre o destinatário da fatura, valor, carimbo de data e hora, vencimento etc. Para decodificar essa sequência, o c-lightning fornece o método 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" }
relâmpago-cli decodepay lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6 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" }
No caso de precisarmos pagar uma fatura, devemos usar o método de pagamento do 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" }
relâmpago-cli lnbc2u1pwdana3pp5c0nyfgq974hr8huflt9uutyalj4maaw3q5594xp89jkvw74jme3sdql2pshjgr5dus8q6r0dejjqampd3kx2aqcqzpgwjgn45gy80jwjhgm3tpsxg33j6h6pehdus0mnjerrad943cz3vs83g30lyhlhfjxtqvtl76vttkuhs5jekuxpsqmf98l8265pwmm76gp4e7z6j pagamento 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" }
Todos os status dos pagamentos são tratados por toda a rede e seu próprio nó. Você não precisa (mas tem a possibilidade de fazê-lo) de se comunicar com os desenvolvedores de aplicativos do lado do destinatário ou sua API, algum provedor de processamento de cartões ou qualquer banco para obter confirmação sobre seu pagamento ou liberar fundos por conta própria conta. Não há cobranças ou qualquer outro tipo de influência externa no saldo da sua conta. Tudo o que você precisa é de um software que atenda a regras de rede descentralizadas. Esta é uma solução para trocar valor pela Internet, sem a necessidade de qualquer tipo de árbitro intermediário que decida sobre sua compatibilidade de pagamento com algumas regras, às vezes até desconhecidas anteriormente por todas as partes. Não há regras "internas" no bitcoin, todas as regras com as quais seu aplicativo precisa ser concluído são abertas e conhecidas.
Isso possibilita a troca direta , quase gratuita e instantânea de valores pela Internet entre as pessoas ou até o próprio software, de maneira verdadeiramente autônoma.
Se houver uma maneira de obter dados de pagamento de outro aplicativo, você poderá agir com eles em termos financeiros. Como no nosso exemplo, o lnsms.world é um aplicativo da web que permite enviar sms para qualquer número e pagar com bitcoin. Para integrar essa opção em nosso aplicativo, basta passar os dados necessários do formulário da web para o lnsms.world:
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)
Não sei por que motivo, mas o lnsms responde com o código de status HTTP 201 e retorna a fatura BOLT11. Bem, basta pagar esta fatura e nossos usuários enviarão sms logo após o recebimento do pagamento. Podemos cobrar uma taxa em cima ou não, essa é a nossa livre escolha.
Agora, imagine que seu bot é realmente um aplicativo mais útil e não paga outro bot, mas alguma outra entidade, conectada à Internet. Ou podem ser pagamentos entre software, máquinas, lojas, prestadores de serviços regularmente, repetidos a cada poucos segundos? Você sente o poder dos micropagamentos? É assim que a Internet das Coisas se parecerá. Já existem projetos como https://althea.org/ e, em um futuro próximo, enfrentaremos grandes mudanças no campo que chamamos de comércio eletrônico.
Se você gostou deste post e tentaria pagamentos por bitcoin, pode me deixar uma dica na minha página de gorjetas .