Ho passato la settimana scorsa a sviluppare il mio primo programma pubblico: un bot di Telegram che funziona come un portafoglio Bitcoin e ti consente di "lanciare monete" ad altri partecipanti alle chat di gruppo, nonché di effettuare pagamenti Bitcoin esterni a te stesso o ad altri cosiddetti. "App Fulmine". Presumo che il lettore abbia generalmente familiarità con Bitcoin e Telegram, perché Proverò a scrivere brevemente, senza entrare nei dettagli. beh, Telegram è un mezzo di messaggistica istantanea su dispositivi mobili e PC, che ti consente di creare le tue piccole applicazioni (chat bot) sulla loro piattaforma.
Quali sono le caratteristiche principali di questa applicazione?
- Permette di ringraziare o incoraggiare il proprio interlocutore con reale valore materiale, e non solo "mi piace virtuale", questo porta la comunicazione elettronica a un livello completamente nuovo
- Un esempio reale di un'applicazione che può interagire finanziariamente con altre applicazioni utilizzando un protocollo di pagamento aperto
- Tutti i componenti dell'applicazione sono progetti open source e possono essere modificati e utilizzati per le proprie attività. L'applicazione non utilizza soluzioni chiuse o commerciali, nonostante si inserisca nel campo dell'e-commerce, che oggi è abbastanza difficile definire aperto.
E come applicarlo nella pratica?
qualcosa come questo…

o così...

Cosa significano questi numeri? Questo unità bitcoin - satoshi. Ai prezzi di cambio di metà 2019, 1000 satoshi equivalgono a circa 0.06 dollari. I Satoshi possono essere spesi online o facilmente convertiti in valuta nazionale. È per questo motivo (la liquidità) che non è solo un altro "voce nel database" o “punti che puoi spendere nei nostri negozi partner”E soldi veri su Internet.
*Vorrei subito sottolineare che ovviamente non cerco di scrivere alcune parole o frasi in russo - o in alcuni casi non conosco la traduzione contestuale, oppure una traduzione del genere, secondo me, suona più fuorviante di corretto
Potrebbe sorgere la domanda: come utilizzare un'applicazione del genere se non ci sono bitcoin. Possono essere facilmente acquistati in piccole quantità su uno dei tanti scambi o scambiatori, oppure puoi farlo da un amico Bitcoin, o anche ricevere monete dagli attuali utenti del bot. Molti portafogli telefonici offrono la possibilità di acquistare bitcoin direttamente “senza lasciare il registratore di cassa”.



Quando hai messo le mani sui bitcoin (o meglio su satosh-ami(?)) - lancio e fai /deposito.
Il bot risponderà chiedendoti quanti satoshi aggiungere al tuo saldo e inviandoti una fattura per il pagamento, che potrà essere pagato con un portafoglio mobile scansionando il codice QR o premendo il pulsante ("aperto nel portafoglio") nella pagina della fattura.



Dopo aver confermato il pagamento nel tuo portafoglio, il bot invierà quasi immediatamente la conferma del pagamento e questa verrà visualizzata visivamente nel riquadro della fattura.
Fino a questo punto abbiamo toccato due componenti dell'applicazione: il back-end del bot di Telegram e il sistema di elaborazione dei pagamenti in criptovaluta (piuttosto il suo front-end).
Per creare un bot di Telegram ho usato . E, naturalmente, il bot stesso .
Come sistema per elaborare i pagamenti e risolvere i problemi di UX, la scelta è caduta (in effetti, non c'è quasi scelta). , in cui .
Se stai cercando soluzioni per l'elaborazione diretta degli eventi di pagamento, dovresti prestare attenzione per i cosiddetti pagamenti on-chain e per soluzioni di micropagamenti istantanei (Lightning) come o .
Quindi è self-hosted o no!?
Sì. Nella mia applicazione utilizzo l'hosting gratuito BTCPayServer - , ma è assolutamente possibile e non richiede molto tempo per avviare il proprio centro di elaborazione. Tuttavia, vale la pena ricordare che avrai bisogno di circa 500 GB disponibili sul disco rigido per archiviare i blockchain Bitcoin (e Litecoin). Avrai bisogno anche di risorse informatiche e di rete per la durata della sincronizzazione e, a seconda delle tue esigenze, dei necessari "wrapper" per le blockchain per rendere conveniente l'interazione con esse. BTCPayServer non contiene su disegno chiavi private o qualsiasi altra informazione che ti consenta di controllare il tuo portafoglio.
Per i pagamenti on-chain (regolari), è necessario aggiungere il cosiddetto. Chiave del portafoglio xpub in BTCPayServer per generare indirizzi di ricezione (chiavi pubbliche). Ciò rende possibile e sicuro l'utilizzo di BTCPayServer anche in forma “condivisa”. Tutte queste chiavi e indirizzi xpub possono essere facilmente ottenuti in buoni portafogli come , per ulteriori impostazioni di elaborazione.
Tutti coloro che hanno incontrato Bitcoin hanno sentito dire che Bitcoin è lento e che le transazioni sono costose, soprattutto quando c'è clamore, quindi per i micropagamenti istantanei vale la pena utilizzare le transazioni Lightning Network (fuori catena).
Cos'è questa rete Lightning?
Si tratta di qualcosa di simile a un plugin per Bitcoin, che aggiunge un ulteriore livello di astrazione e consente di effettuare transazioni istantanee e praticamente gratuite sulla rete Bitcoin. Tutto questo è possibile grazie alla magia crittografica delle multifirme, più comunemente chiamate contratto intelligente. Esistono diverse implementazioni del protocollo Lightning Network che utilizzo implementazione in C.
La differenza principale tra i pagamenti on-chain e off-chain (Lightning) è il modo in cui vengono archiviati. Tutto on-catena le transazioni vengono inoltrate su tutti i nodi della rete finché uno dei nodi Bitcoin non annuncia con le operazioni in esso contenute. (Sull'hub c'è anche , producono solo ferro per l'estrazione mineraria). È per questo motivo che chiamiamo tali transazioni on-catena. Tali transazioni verranno registrate in una blockchain comune e vi rimarranno fino alla fine della sua esistenza. Inoltre, tali transazioni sono disponibili al pubblico e possono essere monitorate, tracciate e analizzate.
Nel caso di off-chain Nelle transazioni (fulminee) tutto avviene in modo diverso. Ogni nodo della rete Lightning ne ha uno (o più) Gli indirizzi on-chain sono gli stessi normali indirizzi Bitcoin da cui tutto ha inizio. Quando i bitcoin compaiono a tale indirizzo, è possibile aprire il cosiddetto. canale del fulmine ad un altro nodo, il che significa che utilizzando tecniche crittografiche, questi due nodi hanno concordato tra loro la disponibilità di fondi. Successivamente, tutte le transazioni (sia le nostre che quelle dei nodi di terze parti) che passano attraverso tale canale vengono salvate solo sui nodi dei partecipanti alla transazione (e sui nodi intermediari). Le uniche transazioni registrate sulla blockchain sono le transazioni che aprono o aprono un canale. Su una scala più completa, il risultato è una rete di nodi interconnessi che costruisce migliaia di percorsi diversi tra i partecipanti per “trasferire” fondi da un nodo all’altro secondo alcune rigide regole. Quasi tutte queste transazioni vengono archiviate solo nel file di database dei nodi stessi. Questo è il motivo per cui li chiamiamo off-chain.
Il diagramma mostra una visualizzazione di tutti i componenti dell'applicazione

In breve:
1) L'utente invia un comando al bot in Telegram
2) Telegram invia un messaggio sull'evento applicazione pitone Bot
3) applicazione pitone invia una richiesta a Server BTCPay
4) BTCPayServer genera indirizzi BTC e LTC in entrata e invia anche una richiesta di fattura a carica di fulmine, che a sua volta comunica con il demone c-lampo. Di conseguenza, otteniamo un bellissimo modulo di elaborazione dei pagamenti HTML
5) L'utente paga la fattura e vede la conferma
6) Server BTCPay invia notifica del pagamento della fattura (IPN) al callback_url specificato, nel nostro caso callbacks.py (un'altra applicazione Python per ricevere notifiche)
7) In base ai dati ricevuti, il saldo dell’utente cambia
...e se l'utente volesse prelevare fondi (monete che ha ricevuto da altri)...
8) Applicazione Python Il bot attende il testo o l'immagine del codice QR e quando vengono ricevuti dati validi l'utilità effettua il pagamentopaylightning.py*, che avvia una transazione tramite c-lightning RPC.

*Per essere onesti, vale la pena notare che il mio wrapper paylightning.py non è del tutto completo e potrebbe restituire un falso negativo in scenari specifici. raccomando nei casi vicini alla produzione
Cosa abbiamo? Gli utenti del nostro bot possono inviare messaggi all'interno di una chat di gruppo o direttamente valore materiale senza limiti. E non è tutto: grazie al protocollo Lightning Network, che in un certo senso è una rete di pagamento unificata e semplificata, diventa possibile inviare lo stesso denaro ricevuto in chat ad applicazioni completamente di terze parti. Ad esempio, Telegram aveva già il primo bot per i pagamenti Bitcoin: @lntxbot. "Single Balance" ti consente di utilizzare qualsiasi bot a seconda delle preferenze di una particolare chat di gruppo (sì, il problema è completamente inverosimile e la soluzione è molto inutile, ma questo è il punto). Trasferire il saldo da un bot all'altro non costa nulla e richiede pochi secondi! È importante notare che i creatori di questi robot non hanno mai comunicato tra loro.

Tutto quello che devi fare è inoltrare un messaggio di richiesta di deposito da @lntxbot a @atomic_tipbot e voul!
Non si tratta più semplicemente di “gettare numeri in un database”, ma di un pagamento tra due database diversi e non correlati. Pertanto nel bot sono già integrati diversi “LApp”, tra cui: и .
Cosa significa Integrazione LApp?
ogni Lightning Network Un nodo è essenzialmente un portafoglio Bitcoin. Ha due equilibri: on-chain e off-chain. È necessario un saldo sulla catena per aprire nuovi canali e archiviare fondi da canali chiusi. Ma il saldo fuori catena è esattamente ciò che avviene tra i nodi. I requisiti principali per un nodo sono la ricezione e l'invio di pagamenti, quindi ogni nodo ha funzioni come un software pagare и fattura. Dimostrerò come ciò accade:
user@ln-node:/ % lightning-cli invoice 1000000000 internal_description external_description
{
"payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0",
"expires_at" : 1558709834,
"bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6"
}
Riceviamo una "fattura" delle specifiche in questo caso, che è il formato di pagamento nella rete Bitcoin (e anche Litecoin, tra l'altro). Questa è una stringa contenente informazioni sul destinatario, importo della transazione, data di scadenza della richiesta, ecc., informazioni dettagliate possono essere ottenute eseguendo decodepay in relazione a questa stringa:
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"
}
Ma per pagare una “fattura” di questo tipo abbiamo bisogno della funzione di pagamento di 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"
}
Tutti gli stati delle transazioni vengono elaborati dall'intera rete e dal tuo nodo in particolare. Non è necessario (ma è possibile) interagire con gli autori dell'applicazione del destinatario del pagamento o con una qualsiasi delle loro API per ottenere informazioni sullo stato del pagamento. Non è necessario verificare lo stato del pagamento nel sistema di elaborazione intermediario. Non è necessario attendere che la transazione venga approvata da una banca o da un ente governativo. Dopotutto, non ci sono storni di addebito o altri fattori esterni che possono influenzare il saldo del tuo account. Si tratta di una soluzione per spostare valore su Internet, senza la necessità di un arbitro terzo che decida se la transazione è conforme alle regole (a volte anche alle regole interne, di cui non tutti i partecipanti sono informati in anticipo) o meno. Non ci sono “regole della casa” in Bitcoin. Le uniche regole da seguire sono quelle della rete, aperte e conosciute da tutti.
Lo rende reale diretto, praticamente gratuito и immediato transazioni monetarie tra persone o programmi in modalità completamente autonoma.
Se hai la possibilità di ricevere dati di pagamento da un'applicazione di terze parti, diventa possibile interagire finanziariamente con tale applicazione. Consideriamo ad esempio il servizio lnsms.world, che permette di inviare un messaggio SMS ad un numero arbitrario, pagandolo in bitcoin. Per integrare questa applicazione, dobbiamo solo trasferire i dati dal modulo web direttamente allo script di invio SMS - emulare le azioni dell'utente sul sito web:
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)
Non so per quale motivo, ma lnsms risponde con un codice di stato HTTP 201 e restituisce una fattura in formato BOLT11. Bene, questo è sufficiente perché gli utenti dei bot possano pagare l'invio di SMS dal saldo ricevuto nelle chat. L’utente non sa nemmeno cosa sta succedendo, ha solo pagato un paio di centesimi per mandare un SMS. E io, come sviluppatore, non entro nei dettagli su come funzionano i servizi SMS. Ho appena inoltrato il pagamento e ho ricevuto il servizio. Puoi aggiungere un markup sopra oppure non è necessario: questa è la mia libera scelta. Nessun account, accordo o altra API per attività banali come l'invio di SMS.
Ora immaginiamo per un momento che la nostra applicazione sia qualcosa di più utile di un chatbot ed effettui un pagamento non a un altro bot, ma a un'altra applicazione o dispositivo connesso a Internet. Oppure si tratta di decine o addirittura centinaia di pagamenti insignificanti ogni secondo tra dispositivi, servizi, negozi o alcuni fornitori di servizi. Questo è il potere dei micropagamenti, ecco come dovrebbe essere l’Internet delle cose. Ci sono già progetti come che danno vita a queste idee e nel prossimo futuro vedremo grandi cambiamenti, a mio avviso, nell’area che ora chiamiamo e-commerce.
Se ti è piaciuto il post e vuoi provare i bitcoin in azione - .
Solo gli utenti registrati possono partecipare al sondaggio. Per favore.
Sei interessato ad articoli puramente tecnici su Bitcoin e software correlato?
Sì
No
Sono più interessato agli aspetti di mercato della criptovaluta
8 utenti hanno votato. 4 utenti si sono astenuti.
Fonte: habr.com
