Come avviare micropagamenti nella tua app

La scorsa settimana ho sviluppato il mio primo programma pubblico: un bot di Telegram che funziona come un wallet Bitcoin e consente di "inviare monete" ad altri membri delle chat di gruppo, oltre a effettuare pagamenti Bitcoin esterni a sé stessi o ad altri, definiti 'Lightning Apps'. Presumo che il lettore sia familiarizzato con Bitcoin e Telegram, quindi cercherò di essere conciso, senza entrare nei dettagli. Una selezione di risorse su Bitcoin è disponibile a questo link, mentre Telegram è un mezzo di messaggistica istantanea per dispositivi mobili e PC, che consente di creare piccole applicazioni (chatbot) sulla loro piattaforma.

Quali sono le funzioni chiave di questa applicazione?

  • Permette di ringraziare o ricompensare un interlocutore con un valore materiale reale, e non solo "un 'like' virtuale", portando la comunicazione elettronica a un livello completamente nuovo
  • Un esempio reale di applicazione che può interagire finanziariamente con altre applicazioni utilizzando un protocollo di pagamento aperto
  • Tutti i componenti dell'applicazione sono progetti open source che possono essere modificati e utilizzati per i propri scopi. L'applicazione non utilizza soluzioni proprietarie o commerciali, anche se appartiene al settore dell'e-commerce, che oggi è difficile definire veramente aperto.

E come si applica nella pratica?

in questo modo…

Come avviare micropagamenti nella tua app
o così…

Come avviare micropagamenti nella tua app
Cosa significano questi numeri? Sono unità di bitcoin — satoshi. Secondo i prezzi di mercato di metà 2019, 1000 satoshi corrispondono a circa $0.06. I satoshi possono essere spesi online o facilmente scambiati con valuta nazionale. Proprio per questa ragione (liquidità), non sono semplicemente un'altra «voce nel database» o «punti che puoi spendere nei negozi dei nostri partner», e vera valuta di internet.
*voglio subito sottolineare che alcune parole o frasi non sto tentando di scrivere in russo — o non conosco io stesso la traduzione contestuale in alcuni casi, oppure tale traduzione mi sembra piuttosto fuorviante che corretta.

Potrebbe sorgere la domanda su come utilizzare un'applicazione del genere se non si possiedono bitcoin. È facile acquistare piccole quantità su uno dei tanti exchange o presso un exchange locale, oppure si può ricevere qualche moneta da un amico che possiede bitcoin o addirittura ottenerlo da utenti esistenti del bot. Molti wallet per smartphone offrono la possibilità di comprare bitcoin direttamente "senza allontanarsi dalla cassa".

Come avviare micropagamenti nella tua appCome avviare micropagamenti nella tua appCome avviare micropagamenti nella tua app

Quando si possiedono bitcoin (o meglio satoshi-ami(?)) — avviamo @atomic_tipbot e facciamo /deposit.

Il bot risponderà chiedendo quanti satoshi depositare sul bilancio e invierà un fattura, che può essere pagata tramite un wallet mobile scansionando il codice QR o cliccando il pulsante ("apri nel wallet") sulla pagina della fattura.

Come avviare micropagamenti nella tua appCome avviare micropagamenti nella tua appCome avviare micropagamenti nella tua app

Dopo aver confermato il pagamento nel proprio wallet, il bot invierà praticamente immediatamente una conferma di pagamento, che sarà visualizzata nel frame della fattura.

Fino a questo momento abbiamo toccato due componenti dell'applicazione: il bot Telegram back-end e il sistema di elaborazione dei pagamenti in criptovaluta (soprattutto il suo front-end).

Per creare il bot Telegram ho utilizzato Python Telegram Bot. E naturalmente, il bot stesso open source..

Per la gestione dei pagamenti e le soluzioni UX, la scelta è caduta (in realtà, non ci sono molte opzioni) su BTCPayServer, su cui documentazione a questo link.

Se stai cercando soluzioni per l'elaborazione degli eventi di pagamento direttamente, dovresti prestare attenzione a pagine del manuale di Electrum CLI per i pagamenti on-chain, mentre per i pagamenti istantanei (Lightning) soluzioni come Lightning-charge o Sparko.

Quindi, è self-hosted o no!?

Sì, esatto. Nella mia applicazione utilizzo il hosting gratuito di BTCPayServer — BTCPayJungle, ma è assolutamente possibile e non richiede molto tempo per avviare il proprio centro di elaborazione. Tuttavia, è importante ricordare che avrai bisogno di ~500 GB disponibili su disco per memorizzare le blockchain di Bitcoin (e Litecoin). Avrai anche bisogno di risorse di calcolo e di rete durante la sincronizzazione e, a seconda delle tue esigenze, delle "wrapper" per le blockchain per un'interazione più comoda. BTCPayServer non contiene by-design chiavi private o qualsiasi altra informazione che consenta di controllare il tuo portafoglio.

Per i pagamenti on-chain (tradizionali) è necessario aggiungere il cosiddetto xpub-key del portafoglio in BTCPayServer per generare indirizzi di ricezione (chiavi pubbliche). Questo rende possibile e sicuro utilizzare BTCPayServer anche in modalità 'condivisa'. Tutti questi xpub-key e indirizzi possono essere facilmente ottenuti in buoni portafogli come Electrum, per una configurazione ulteriore del processo.

Chiunque abbia avuto esperienza con Bitcoin ha sentito dire che il bitcoin è lento e le transazioni costose, specialmente durante i periodi di alta richiesta. Pertanto, per pagamenti istantanei di microtransazioni, è consigliabile utilizzare transazioni off-chain tramite la Lightning Network.

Che cos'è la Lightning Network?

È una sorta di plugin per Bitcoin che sovrappone un ulteriore strato di astrazione e consente di effettuare transazioni istantanee e praticamente gratuite nella rete Bitcoin. Tutto ciò è possibile grazie alla magia crittografica delle multi-firme, più comunemente chiamata smart contract. Ci sono diverse implementazioni del protocollo Lightning Network, Io utilizzo c-lightning un'implementazione in C.

La principale differenza tra pagamenti on-chain e off-chain (Lightning) risiede nel modo in cui vengono memorizzati. Tutte on-chain le transazioni vengono ritrasmesse attraverso tutti i nodi della rete, finché uno dei nodi Bitcoin non annuncia un nuovo blocco minato con transazioni incluse. (Su Habr c'è anche BitFury, che producono hardware per il mining). Proprio per questo motivo chiamiamo queste transazioni on-chain. Tali transazioni verranno registrate nella blockchain generale e rimarranno lì fino alla fine della sua esistenza. Inoltre, queste transazioni sono accessibili al pubblico e possono essere monitorate, tracciate e analizzate.

In caso di off-chain transazioni (Lightning), tutto funziona in modo diverso. Ogni nodo della rete Lightning ha un (o più) indirizzi on-chain, ovvero gli indirizzi bitcoin standard da cui tutto ha inizio. Quando appaiono bitcoin su un indirizzo del genere, è possibile aprire un cosiddetto canale lightning a un'altra nodo, il che significa che, tramite tecniche crittografiche, queste due nodi hanno concordato sulla disponibilità dei fondi tra di loro. In seguito, tutte le transazioni (sia le proprie che quelle di nodi esterni) che passano attraverso tale canale vengono memorizzate solo sui nodi dei partecipanti alla transazione (e sui nodi intermedi). Le uniche transazioni che vengono registrate nella blockchain sono quelle relative all'apertura o alla chiusura del canale. In un contesto più ampio, si crea una rete di nodi interconnessi che costruisce migliaia di percorsi diversi per il trasferimento di fondi da un nodo all'altro secondo regole ben definite. Praticamente tutte queste transazioni sono conservate solo nel file del database dei nodi stessi. Proprio per questo motivo le chiamiamo off-chain.

Nella diagramma è visibile la visualizzazione di tutti i componenti dell'applicazione

Come avviare micropagamenti nella tua app

In breve:

1) L'utente invia un comando al bot in Telegram

2) Telegram invia un messaggio sull'evento applicazione python bot

3) applicazione python invia una richiesta a BTCPayServer

4) BTCPayServer genera indirizzi BTC e LTC in entrata e invia una richiesta di fattura a lightning-charge, che a sua volta comunica con il demone c-lightning. Abbiamo un bel modulo HTML per la gestione dei pagamenti.

5) L'utente paga la fattura e riceve una conferma.

6) BTCPayServer invia una notifica di pagamento della fattura (IPN) all'url di callback specificato, nel nostro caso callbacks.py (un'altra applicazione Python per ricevere notifiche)

7) In base ai dati ricevuti, il saldo dell'utente viene aggiornato.

… e se l'utente desidera prelevare fondi (monete ricevute da altri) …

8) Applicazione Python il bot attende un testo o un'immagine del codice QR, e quando i dati validi vengono ricevuti, il pagamento viene eseguito tramite l'utilitàpaylightning.py*, che inizializza la transazione tramite c-lightning RPC.

Come avviare micropagamenti nella tua app

*A scanso di equivoci, vale la pena notare che il mio wrapper paylightning.py non è completamente finito e potrebbe restituire un risultato falso negativo in scenari specifici. Consiglio di utilizzare un wrapper ben testato in casi vicini alla produzione.

Cosa abbiamo? Gli utenti del nostro bot possono all'interno di una chat di gruppo o direttamente trasferire valore materiale. senza limitazioni. E non è tutto: grazie al protocollo Lightning Network, che in un certo senso funge da rete di pagamento unificata e semplificata, è possibile inviare gli stessi fondi ricevuti in chat a applicazioni completamente esterne. Ad esempio, in Telegram è già stato sviluppato il primo bot per i pagamenti in Bitcoin — @lntxbot. Il "bilancio unico" consente di utilizzare uno qualsiasi dei bot in base alle preferenze del gruppo chat specifico (sì, il problema è del tutto inventato e la soluzione piuttosto 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 bot non hanno mai collaborato tra loro.

Come avviare micropagamenti nella tua app Come avviare micropagamenti nella tua app

Basta semplicemente inoltrare il messaggio con la richiesta di deposito da @lntxbot a @atomic_tipbot e voilà!

Non si tratta più semplicemente di "spostare numeri in un database", ma di un pagamento tra due database distinti e non correlati. In questo modo, sono già integrate nel bot diverse "LApps", tra cui: sat2.io e lnsms.world.

Cosa significa integrazione LApp?

Ogni Lightning Network Un nodo è essenzialmente un portafoglio Bitcoin. Ha due saldi: on-chain e off-chain. Il saldo on-chain è necessario per aprire nuovi canali e per conservare fondi da canali chiusi. Il saldo off-chain è ciò che si muove tra i nodi. I requisiti principali per un nodo includono la ricezione e l'invio di pagamenti, quindi ogni nodo come software ha funzioni paga e fattura. Mostrerò come avviene:

user@ln-node:/ % lightning-cli invoice 1000000000 internal_description external_description
{
   "payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0",
   "expires_at" : 1558709834,
   "bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6"
}

Riceviamo una «fattura» delle specifiche BOLT11 in questo caso, che è il formato delle transazioni nella rete Bitcoin (e anche Litecoin, per dire). Questa stringa contiene informazioni sul destinatario, sull'importo della transazione, sul tempo di scadenza della richiesta, e così via; ulteriori dettagli possono essere ottenuti eseguendo decodepay relativamente 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"
}

Per poter effettuare il pagamento di questa "fattura" è necessaria la funzione pay 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 gestiti dall'intera rete e dalla tua node in particolare. Non è necessario (ma è possibile) interagire con gli sviluppatori dell'applicazione del destinatario del pagamento o con le loro API per ottenere informazioni sullo stato del pagamento. Non è necessario controllare lo stato del pagamento nel sistema di elaborazione intermediaria. Non devi aspettare l'approvazione della tua transazione da parte di una banca o di un ente governativo. In fin dei conti, non ci sono chargeback e altri fattori esterni che possono influenzare il saldo del tuo conto. Questa è una soluzione per trasferire valore tramite Internet, senza necessità di un arbitro esterno che decida se la transazione rispetta le regole (a volte anche regole interne, di cui non tutti i partecipanti sono stati informati in anticipo) oppure no. In Bitcoin non ci sono “regole interne”. Le uniche regole da seguire sono quelle della rete — aperte e ben conosciute.

Questo rende reali diretti, praticamente gratuiti e istantanei trasferimenti di denaro tra persone o programmi in modalità completamente autonoma.

Se hai la possibilità di ottenere i dati di pagamento da un'applicazione di terze parti, puoi interagire con essa dal punto di vista finanziario. Ad esempio, il servizio lnsms.world consente di inviare un SMS a un numero a scelta, pagando in bitcoin. Per integrare questa applicazione, è sufficiente trasferire i dati da un modulo web direttamente allo script di invio SMS, emulando 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 restituisce un codice di stato HTTP 201 e restituisce una fattura nel formato BOLT11. Beh, questo è sufficiente affinché gli utenti del bot possano pagare l'invio di SMS dal loro saldo ottenuto nelle chat. L'utente non sa nemmeno cosa stia succedendo, ha semplicemente pagato qualche centesimo per inviare un SMS. E io, come sviluppatore, non entro nei dettagli del funzionamento dei servizi SMS. Ho solo trasferito il pagamento e ricevuto il servizio. Posso applicare un sovrapprezzo, oppure no—è una mia libera scelta. Nessun account, accordi e ulteriori API per compiti banali come l'invio di SMS.

E ora, immaginiamo per un momento che la nostra applicazione sia qualcosa di più utile di un chatbot e effettui un pagamento non a un altro bot, ma a un'altra applicazione o dispositivo connesso a Internet. Oppure sono decine o addirittura centinaia di pagamenti insignificanti ogni secondo tra dispositivi, servizi, negozi o fornitori di servizi. Questa è la potenza dei micropagamenti, così deve apparire l'Internet delle cose. Esistono già progetti come Althea che incarnano queste idee nella realtà e presto vedremo grandi cambiamenti, a mio avviso, nell'ambito che chiamiamo commercio elettronico.

Se ti è piaciuto il post e vuoi provare i bitcoin in azione — mandami una birra e delle soffici brioche francesi..

Solo gli utenti registrati possono partecipare al sondaggio. Accedi, per favore.

Ti interessano articoli puramente tecnici su bitcoin e software correlato?

  • No

  • A me interessano di più gli aspetti di mercato delle criptovalute.

Hanno votato 8 utenti. 4 utenti si sono astenuti.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster