Com llançar micropagaments a la vostra aplicació

Vaig passar la setmana passada desenvolupant el meu primer programa públic: un bot de Telegram que funciona com a cartera de Bitcoin i us permet "llenar monedes" a altres participants en xats en grup, així com fer pagaments externs de Bitcoin a vosaltres mateixos o a altres anomenats. "Aplicacions Lightning". Suposo que el lector generalment està familiaritzat amb Bitcoin i Telegram, perquè Intentaré escriure breument, sense aprofundir en detalls. Una selecció de recursos sobre Bitcoin està disponible en aquest enllaç, bé, Telegram és un mitjà de missatgeria instantània en dispositius mòbils i ordinadors, que us permet crear les vostres pròpies petites aplicacions (bots de xat) a la seva plataforma.

Quines són les característiques principals d'aquesta aplicació?

  • Et permet agrair o animar al teu interlocutor amb un valor material real, i no només "com virtual", això porta la comunicació electrònica a un nivell completament nou
  • Un exemple real d'una aplicació que pot interactuar econòmicament amb altres aplicacions mitjançant un protocol de pagament obert
  • Tots els components de l'aplicació són projectes de codi obert i es poden modificar i utilitzar per a les vostres pròpies tasques. L'aplicació no utilitza solucions tancades ni comercials, malgrat que encaixa en l'àmbit del comerç electrònic, que avui dia és bastant difícil d'anomenar obert.

I com aplicar-ho a la pràctica?

alguna cosa com això…

Com llançar micropagaments a la vostra aplicació
o així...

Com llançar micropagaments a la vostra aplicació
Què signifiquen aquests números? Això unitats bitcoin - satoshi. Als preus de canvi a mitjan 2019, 1000 satoshi són aproximadament 0.06 dòlars. Satoshi es pot gastar en línia o canviar fàcilment per moneda nacional. És per aquest motiu (liquidesa) que no és només un altre "entrada a la base de dades" o “punts que pots gastar a les nostres botigues col·laboradores”I diners reals a Internet.
*M'agradaria assenyalar de seguida que, òbviament, no intento escriure algunes paraules o frases en rus; o bé no conec la traducció contextual en alguns casos, o tal traducció, al meu entendre, sona més enganyós que correcte

Pot sorgir la pregunta, com utilitzar aquesta aplicació si no hi ha bitcoins. Es poden comprar fàcilment en petites quantitats en un dels molts intercanvis o intercanviadors, o podeu fer-ho d'un amic de Bitcoin, o fins i tot rebre monedes dels usuaris actuals del bot. Moltes carteres de telèfon ofereixen l'opció de comprar bitcoins directament "sense sortir de la caixa registradora".

Com llançar micropagaments a la vostra aplicacióCom llançar micropagaments a la vostra aplicacióCom llançar micropagaments a la vostra aplicació

Quan tens a les teves mans bitcoins (o més aviat satosh-ami(?)) - llançament @atomic_tipbot i fer /dipositar.

El bot respondrà preguntant quants satoshis afegir al vostre saldo i enviar-vos una factura de pagament, que es pot pagar amb una cartera mòbil escanejant el codi QR o prement el botó ("obrir a la cartera") a la pàgina de factura.

Com llançar micropagaments a la vostra aplicacióCom llançar micropagaments a la vostra aplicacióCom llançar micropagaments a la vostra aplicació

Un cop confirmat el pagament a la vostra cartera, el bot enviarà gairebé immediatament la confirmació del pagament i aquesta es mostrarà visualment al marc de la factura.

Fins a aquest punt, hem tocat dos components de l'aplicació: el back-end del bot de telegram i el sistema de processament de pagaments de criptomoneda (més aviat, el seu front-end).

Vaig utilitzar per crear un bot de Telegram Python Telegram Bot. I, per descomptat, el propi bot codi obert.

Com a sistema per processar pagaments i resoldre problemes d'UX, l'elecció va caure (de fet, gairebé no hi ha opció) en BTCPayServer, en la qual documentació en aquest enllaç.

Si busqueu solucions per processar esdeveniments de pagament directament, hauríeu de prestar atenció Pàgines del manual d'Electrum CLI per als anomenats pagaments en cadena i per a solucions de micropagaments instantanis (Lightning). Càrrega del llamp o Sparko.

Llavors, és autoallotjat o no!?

Sí, ho és. A la meva aplicació faig servir allotjament gratuït BTCPayServer - BTCPayJungle, però és absolutament possible i no requereix molt de temps per posar en marxa el vostre propi centre de processament. Tanmateix, val la pena recordar que necessitareu ~ 500 GB disponibles al disc dur per emmagatzemar les cadenes de blocs de Bitcoin (i Litecoin). També necessitareu recursos informàtics i de xarxa mentre duri la sincronització i, en funció de les vostres necessitats, els "embolcalls" necessaris per a les cadenes de blocs perquè sigui convenient interactuar amb ells. BTCPayServer no conté per disseny claus privades o qualsevol altra informació que us permeti controlar la vostra cartera.

Per als pagaments en cadena (regulars), cal afegir l'anomenat. clau de cartera xpub a BTCPayServer per generar adreces de recepció (claus públiques). Això fa que sigui possible i segur utilitzar BTCPayServer fins i tot en forma "compartida". Totes aquestes claus i adreces xpub es poden obtenir fàcilment en bones carteres com Electrum, per a la configuració del processament posterior.

Tothom que s'ha trobat amb Bitcoin ha sentit que Bitcoin és lent i les transaccions són cares, sobretot quan hi ha bombo, de manera que per als micropagaments instantanis val la pena utilitzar transaccions de Lightning Network (fora de la cadena).

Què és aquesta xarxa Lightning?

Això és una cosa semblant a un connector per a Bitcoin, que afegeix una capa addicional d'abstracció i permet fer transaccions instantànies i pràcticament gratuïtes a la xarxa Bitcoin. Tot això és possible gràcies a la màgia criptogràfica de les multisignatures, més comunament anomenada contracte intel·ligent. Hi ha diverses implementacions del protocol Lightning Network, que faig servir c-llamp implementació en C.

La principal diferència entre els pagaments en cadena i fora de cadena (Lightning) és com s'emmagatzemen. Tots en cadena les transaccions es transmeten a tots els nodes de la xarxa fins que un dels nodes de Bitcoin ho anuncia nou bloc minat amb les transaccions que s'hi inclouen. (Al centre hi ha fins i tot BitFury, només produeixen ferro per a la mineria). És per aquest motiu que anomenem aquestes transaccions en cadena. Aquestes transaccions es registraran en una cadena de blocs comuna i hi romandran fins al final de la seva existència. A més, aquestes transaccions estan disponibles públicament i es poden supervisar, fer un seguiment i analitzar-les.

En cas de fora de cadena Les transaccions (llamps) tot passa de manera diferent. Cada node de xarxa Lightning en té un (o més) Les adreces en cadena són les mateixes adreces habituals de Bitcoin on tot comença. Quan els bitcoins apareixen en aquesta adreça, és possible obrir l'anomenat. canal de llamps a un altre node, el que significa que mitjançant tècniques criptogràfiques, aquests dos nodes van acordar la disponibilitat de fons entre ells. Més tard, totes les transaccions (tant les nostres com les de nodes de tercers) que passen per aquest canal només es guarden als nodes dels participants de la transacció (i als nodes intermediaris). Les úniques transaccions que es registren a la cadena de blocs són les que obren o obren un canal. A una escala més completa, el resultat és una xarxa de nodes interconnectats que construeix milers de camins diferents entre els participants per "transferir" fons d'un node a un altre segons determinades regles estrictes. Gairebé totes aquestes transaccions s'emmagatzemen només al fitxer de base de dades dels mateixos nodes. Aquesta és la raó per la qual els anomenem fora de cadena.

El diagrama mostra una visualització de tots els components de l'aplicació

Com llançar micropagaments a la vostra aplicació

En resum:

1) L'usuari envia una ordre al bot telegram

2) Telegram envia un missatge sobre l'esdeveniment aplicació python bot

3) aplicació python envia una sol·licitud a BTCPayServer

4) BTCPayServer genera adreces BTC i LTC entrants i també envia una sol·licitud de factura a càrrega de llamp, que al seu torn es comunica amb el dimoni c-llamp. Com a resultat, obtenim un bonic formulari de processament de pagaments HTML

5) L'usuari paga la factura i veu la confirmació

6) BTCPayServer envia notificació de pagament de la factura (IPN) al callback_url especificat, en el nostre cas callbacks.py (una altra aplicació Python per rebre notificacions)

7) Segons les dades rebudes, el saldo de l'usuari canvia

... i si l'usuari volia retirar fons (monedes que va rebre d'altres) ...

8) Aplicació Python El bot espera el text o la imatge del codi QR, i quan es reben dades vàlides, el pagament el fa la utilitatpaylightning.py*, que inicia una transacció mitjançant c-lightning RPC.

Com llançar micropagaments a la vostra aplicació

*Per ser justos, val la pena assenyalar que el meu embolcall paylightning.py no està completament complet i pot tornar un fals negatiu en escenaris específics. Recomano utilitzar un embolcall ben depurat en casos propers a la producció

Què tenim? Els usuaris del nostre bot poden enviar missatges dins d'un xat de grup o directament valor material sense limits. I això no és tot: gràcies al protocol Lightning Network, que en cert sentit és una xarxa de pagament unificada i simplificada, és possible enviar els mateixos diners rebuts al xat a aplicacions completament de tercers. Per exemple, Telegram ja tenia el primer bot per als pagaments de Bitcoin: @lntxbot. "Single Balance" us permet utilitzar qualsevol dels robots en funció de les preferències d'un grup de xat en concret (sí, el problema és completament exagerat i la solució és molt inútil, però aquest és el punt). Transferir el saldo d'un bot a un altre no costa res i triga segons! És important tenir en compte que els creadors d'aquests robots mai no es van comunicar entre ells.

Com llançar micropagaments a la vostra aplicació Com llançar micropagaments a la vostra aplicació

Tot el que heu de fer és reenviar un missatge de sol·licitud de dipòsit de @lntxbot a @atomic_tipbot i voul!

Això ja no és només "llençar números a una base de dades", sinó un pagament entre dues bases de dades diferents i no relacionades. Així, ja s'han integrat diverses "LApps" al bot, entre elles: sat2.io и lnsms.món.

Què vol dir? Integració de LApp?

Cadascun Xarxa Lightning Un node és essencialment una cartera Bitcoin. Té dos equilibris: en cadena i fora de cadena. Es requereix un saldo a la cadena per obrir nous canals i emmagatzemar fons dels canals tancats. Però l'equilibri fora de la cadena és exactament el que passa entre els nodes. Els principals requisits per a un node són rebre i enviar pagaments, de manera que cada node té funcions com a programari pagar и factura. Demostraré com passa això:

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

Rebem una "factura" de l'especificació PARALLA 11 en aquest cas, que és el format de pagament a la xarxa Bitcoin (i Litecoin, per cert, també). Aquesta és una cadena que conté informació sobre el destinatari, l'import de la transacció, el temps de caducitat de la sol·licitud, etc., es pot obtenir informació detallada executant decodepay en relació amb aquesta cadena:

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ò per pagar aquesta "factura" necessitem la funció de pagament de 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"
}

Tots els estats de transacció són processats per tota la xarxa i el vostre propi node en particular. No cal (però és possible) interactuar amb els autors de l'aplicació del destinatari del pagament o amb qualsevol de les seves API per obtenir informació sobre l'estat del pagament. No cal comprovar l'estat de pagament al sistema de processament intermediari. No cal esperar que la vostra transacció sigui aprovada per un banc o una agència governamental. Al cap i a la fi, no hi ha devolucions de càrrecs ni altres factors externs que puguin afectar el saldo del vostre compte. Es tracta d'una solució per moure valor a través d'Internet, sense necessitat d'un tercer àrbitre que decideixi si la transacció compleix les normes (de vegades fins i tot normes internes, de les quals no s'informa prèviament a tots els participants) o no. No hi ha "regles domèstiques" a Bitcoin. Les úniques regles que cal seguir són les regles de la xarxa, obertes i conegudes per tothom.

Ho fa real línies rectes, pràcticament gratuït и instantani transaccions monetàries entre persones o programes en un mode completament fora de línia.

Si teniu la possibilitat de rebre dades de pagament d'una aplicació de tercers, serà possible interactuar econòmicament amb aquesta aplicació. Com a exemple, considereu el servei lnsms.world, que us permet enviar un missatge SMS a un número arbitrari, pagant-lo amb bitcoins. Per integrar aquesta aplicació, només necessitem passar dades del formulari web directament a l'script d'enviament de SMS: emuleu les accions de l'usuari al lloc 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)

No sé per quin motiu, però lnsms respon amb un codi d'estat HTTP 201 i retorna una factura en format BOLT11. Bé, això és suficient perquè els usuaris del bot puguin pagar per enviar SMS des del saldo rebut als xats. L'usuari ni tan sols sap què passa allà, només ha pagat un parell de cèntims per enviar un SMS. I jo, com a desenvolupador, no entro en els detalls de com funcionen els serveis d'SMS. Acabo de reenviar el pagament i rebre el servei. Podeu fer un marcatge a la part superior, o no ho heu de fer, aquesta és la meva lliure elecció. No hi ha comptes, acords o una altra API per a tasques trivials com enviar SMS.

Ara imaginem-nos per un moment que la nostra aplicació és quelcom més útil que un chatbot i fa un pagament no a un altre bot, sinó a una altra aplicació o dispositiu connectat a Internet. O es tracta de desenes o fins i tot centenars de pagaments insignificants cada segon entre dispositius, serveis, botigues o alguns proveïdors de serveis. Aquest és el poder dels micropagaments, així hauria de ser l'Internet de les coses. Ja hi ha projectes com Althea que donen vida a aquestes idees i en un futur proper veurem grans canvis, al meu entendre, en l'àmbit que ara anomenem comerç electrònic.

Si t'ha agradat la publicació i vols provar els bitcoins en acció - Envieu-me un got de cervesa i panets francesos suaus.

Només els usuaris registrats poden participar en l'enquesta. Inicia sessiósi us plau.

Esteu interessats en articles purament tècnics sobre Bitcoin i programari relacionat?

  • No

  • Estic més interessat en els aspectes de mercat de la criptomoneda

Han votat 8 usuaris. 4 usuaris es van abstenir.

Font: www.habr.com

Afegeix comentari