Kako pokrenuti mikroplaćanja u svojoj aplikaciji

Prošlu sedmicu sam proveo razvijajući svoj prvi javni program - Telegram bot koji radi kao Bitcoin novčanik i koji vam omogućava da „bacite novčiće“ drugim učesnicima grupnih ćaskanja, kao i da izvršite eksterna plaćanja Bitcoinima sebi ili drugima tzv. "Lightning aplikacije". Pretpostavljam da je čitalac generalno upoznat sa Bitcoin i Telegramom, jer Pokušaću da pišem ukratko, bez upuštanja u detalje. Izbor resursa o Bitcoin-u dostupan je na ovom linku, pa, Telegram je sredstvo za razmjenu trenutnih poruka na mobilnim uređajima i računarima, omogućavajući vam da kreirate vlastite male aplikacije (chat botove) na njihovoj platformi.

Koje su ključne karakteristike ove aplikacije?

  • Omogućava vam da zahvalite ili ohrabrite svog sagovornika stvarnom materijalnom vrijednošću, a ne samo "virtuelni lajk", ovo podiže elektronsku komunikaciju na potpuno novi nivo
  • Primjer aplikacije iz stvarnog života koja može financijski komunicirati s drugim aplikacijama koristeći otvoreni protokol plaćanja
  • Sve komponente aplikacije su projekti otvorenog koda i mogu se modificirati i koristiti za vlastite zadatke. Aplikacija ne koristi zatvorena ili komercijalna rješenja, unatoč činjenici da se uklapa u područje e-trgovine, koju je danas prilično teško nazvati otvorenim.

I kako to primijeniti u praksi?

ovako nešto…

Kako pokrenuti mikroplaćanja u svojoj aplikaciji
ili tako...

Kako pokrenuti mikroplaćanja u svojoj aplikaciji
Šta znače ovi brojevi? Ovo bitcoin jedinice - satoshi. Po berzanskim cenama od sredine 2019. godine, 1000 satošija je približno 0.06 dolara. Satoshi se može potrošiti na mreži ili lako zamijeniti za nacionalnu valutu. Iz tog razloga (likvidnosti) nije samo još jedan "unos u bazu podataka" ili “bodovi koje možete potrošiti u našim partnerskim trgovinama”i pravi internet novac.
*Odmah želim da istaknem da očigledno ne pokušavam da napišem neke reči ili fraze na ruskom – ili ne znam kontekstualni prevod u nekim slučajevima, ili takav prevod, po mom mišljenju, zvuči više varljivo nego ispravan

Može se postaviti pitanje kako koristiti takvu aplikaciju ako nema bitcoina. Lako se mogu kupiti u malim količinama na jednoj od mnogih berzi ili razmenjivača, ili možete od Bitcoin prijatelja, ili čak dobiti novčiće od trenutnih korisnika bota. Mnogi telefonski novčanici nude mogućnost kupovine bitcoina direktno „bez napuštanja kase“.

Kako pokrenuti mikroplaćanja u svojoj aplikacijiKako pokrenuti mikroplaćanja u svojoj aplikacijiKako pokrenuti mikroplaćanja u svojoj aplikaciji

Kada ste se dočepali bitcoina (ili bolje rečeno satoša-ami(?)) - lansiranje @atomic_tipbot i uradite /depozit.

Bot će odgovoriti tako što će vas pitati koliko satošija dodati na vaše stanje i poslati vam fakturu za plaćanje, koju možete platiti mobilnim novčanikom skeniranjem QR koda ili pritiskom na dugme ("otvori u novčaniku") na stranici računa.

Kako pokrenuti mikroplaćanja u svojoj aplikacijiKako pokrenuti mikroplaćanja u svojoj aplikacijiKako pokrenuti mikroplaćanja u svojoj aplikaciji

Nakon što potvrdi uplatu u vašem novčaniku, bot će gotovo odmah poslati potvrdu plaćanja i to će biti vizualno prikazano u okviru računa.

Do sada smo se dotakli dvije komponente aplikacije - back-end telegram bota i sistem za obradu plaćanja kriptovalutama (prije njegov front-end).

Za kreiranje Telegram bota sam koristio Python Telegram Bot. I naravno, sam bot open source.

Kao sistem za obradu plaćanja i rješavanje UX problema, izbor je pao (u stvari, izbora gotovo da i nema) na BTCPayServer, na kojoj dokumentaciju na ovom linku.

Ako tražite rješenja za direktnu obradu događaja plaćanja, obratite pažnju na to Electrum CLI stranice priručnika za tzv on-chain plaćanja, a za trenutna mikro plaćanja (Lightning) rješenja kao što su Naboj munje ili Sparko.

Dakle, da li je samostalno ili ne!?

Da, jeste. U svojoj aplikaciji koristim besplatni hosting BTCPayServer - BTCPayJungle, ali to je apsolutno moguće i ne zahtijeva puno vremena za pokretanje vlastitog procesnog centra. Međutim, vrijedi zapamtiti da će vam trebati ~500 GB dostupno na tvrdom disku za pohranjivanje Bitcoin (i Litecoin) blockchaina. Također će vam trebati računarski i mrežni resursi za vrijeme trajanja sinkronizacije i, ovisno o vašim potrebama, potrebni "omoti" za blockchaine kako bi bila zgodna interakcija s njima. BTCPayServer ne sadrži by-design privatne ključeve ili bilo koje druge informacije koje vam omogućavaju da kontrolišete svoj novčanik.

Za on-chain (redovna) plaćanja potrebno je dodati tzv. xpub ključ novčanika u BTCPayServeru za generisanje adresa primanja (javnih ključeva). Ovo čini mogućim i sigurnim korištenje BTCPayServera čak iu "dijeljenom" obliku. Svi ovi xpub ključevi i adrese mogu se lako dobiti u dobrim novčanicima kao što su Electrum, za dalje podešavanje obrade.

Svi koji su se susreli sa Bitcoin-om čuli su da je Bitcoin spor i da su transakcije skupe, posebno kada postoji hype, pa se za trenutna mikro plaćanja isplati koristiti (off-chain) Lightning Network transakcije.

Šta je ovo Lightning Network?

Ovo je nešto poput dodatka za Bitcoin, koji dodaje dodatni sloj apstrakcije i omogućava vam trenutne i praktično besplatne transakcije na Bitcoin mreži. Sve je to moguće zahvaljujući kriptografskoj magiji višestrukih potpisa, koja se češće naziva pametni ugovor. Ja koristim nekoliko implementacija Lightning Network protokola c-lightning implementacija u C.

Glavna razlika između on-chain i off-chain plaćanja (Lightning) je način na koji se pohranjuju. Sve na lancu Transakcije se prenose preko svih mrežnih čvorova dok se jedan od Bitcoin čvorova ne oglasi novi minirani blok sa transakcijama uključenim u njega. (Na čvorištu postoji čak BitFury, oni samo proizvode željezo za rudarstvo). Iz tog razloga takve transakcije nazivamo na lancu. Takve transakcije će se bilježiti u zajednički blockchain i tamo će ostati do kraja svog postojanja. Takođe, takve transakcije su javno dostupne i mogu se pratiti, pratiti i analizirati.

U slučaju van lanca (Lightning) transakcije sve se dešava drugačije. Svaki Lightning mrežni čvor ima jedan (ili više) adrese na lancu su iste obične Bitcoin adrese na kojima sve počinje. Kada se bitcoini pojave na takvoj adresi, moguće je otvoriti tzv. kanal munje drugom čvoru, što znači da su se korištenjem kriptografskih tehnika ova dva čvora dogovorila o dostupnosti sredstava među sobom. Kasnije, sve transakcije (kako naše tako i one čvorova trećih strana) koje prolaze kroz takav kanal čuvaju se samo na čvorovima učesnika u transakciji (i posredničkim čvorovima). Jedine transakcije koje se bilježe na blockchainu su transakcije koje otvaraju ili otvaraju kanal. U potpunijoj skali, rezultat je mreža međusobno povezanih čvorova koja gradi hiljade različitih puteva između učesnika za „prenos“ sredstava s jednog čvora na drugi prema određenim strogim pravilima. Gotovo sve takve transakcije pohranjene su samo u datoteci baze podataka samih čvorova. To je razlog zašto ih zovemo van lanca.

Dijagram prikazuje vizualizaciju svih komponenti aplikacije

Kako pokrenuti mikroplaćanja u svojoj aplikaciji

Ukratko:

1) Korisnik šalje naredbu botu telegram

2) Telegram šalje poruku o događaju python aplikacija bot

3) python aplikacija šalje zahtjev na BTCPayServer

4) BTCPayServer generiše dolazne BTC i LTC adrese, a takođe šalje zahtev za fakturom na naboj munje, koji zauzvrat komunicira sa demonom c-lightning. Kao rezultat, dobijamo prekrasan HTML obrazac za obradu plaćanja

5) Korisnik plaća račun i vidi potvrdu

6) BTCPayServer šalje obavještenje o uplati računa (IPN) na navedeni callback_url, u našem slučaju callbacks.py (još jedna python aplikacija za primanje obavještenja)

7) Prema primljenim podacima, stanje korisnika se mijenja

... i ako je korisnik želio podići sredstva (kovanice koje je dobio od drugih) ...

8) Python aplikacija Bot čeka tekst ili sliku QR koda, a kada primi valjane podatke, uplatu vrši komunalna službapaylightning.py*, koji pokreće transakciju putem c-lightning RPC-a.

Kako pokrenuti mikroplaćanja u svojoj aplikaciji

*Da budemo pošteni, vrijedi napomenuti da moj paylightning.py omot nije u potpunosti potpun i može vratiti lažno negativan u određenim scenarijima. predlažem da koristite dobro otklonjeni omotač u slučajevima blizu proizvodnje

Šta imamo? Korisnici našeg bota mogu slati poruke unutar grupnog razgovora ili direktno materijalna vrijednost Nema limita. I to nije sve - zahvaljujući Lightning Network protokolu, koji je u određenom smislu objedinjena i pojednostavljena mreža plaćanja, postaje moguće slati isti novac primljen u chatu aplikacijama potpuno trećih strana. Na primjer, Telegram je već imao prvog bota za Bitcoin plaćanja - @lntxbot. “Single Balance” vam omogućava korištenje bilo kojeg od botova ovisno o preferencijama određenog grupnog razgovora (da, problem je potpuno nategnut i rješenje je vrlo beskorisno, ali to je poenta). Prijenos stanja s jednog bota na drugog ne košta ništa i traje nekoliko sekundi! Važno je napomenuti da kreatori ovih botova uopće nisu međusobno komunicirali.

Kako pokrenuti mikroplaćanja u svojoj aplikaciji Kako pokrenuti mikroplaćanja u svojoj aplikaciji

Sve što trebate učiniti je proslijediti poruku sa zahtjevom za depozit od @lntxbot na @atomic_tipbot i voul!

Ovo više nije samo „ubacivanje brojeva u bazu podataka“, već plaćanje između dvije različite, nepovezane baze podataka. Tako je nekoliko „LApp-ova“ već integrisano u bot, među njima: sat2.io и lnsms.world.

Šta to znači LApp integracija?

Svaka Mreža munje Čvor je u suštini Bitcoin novčanik. Ima dva balansa: on-chain i off-chain. Saldo na lancu je potreban za otvaranje novih kanala i pohranjivanje sredstava sa zatvorenih kanala. Ali vanlančana ravnoteža je upravo ono što ide između čvorova. Glavni zahtjevi za čvor su primanje i slanje plaćanja, tako da svaki čvor ima funkciju softvera platiti и faktura. Pokazat ću kako se ovo dešava:

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

Dobijamo „fakturu“ specifikacije BOLT11 u ovom slučaju, to je format plaćanja u Bitcoin mreži (i Litecoin, usput rečeno, također). Ovo je niz koji sadrži informacije o primatelju, iznosu transakcije, vremenu isteka zahtjeva, itd., detaljne informacije se mogu dobiti pokretanjem decodepay u odnosu na ovaj niz:

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"
}

Ali za plaćanje takve "fakture" potrebna nam je funkcija plaćanja iz c-lightninga:

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"
}

Sva stanja transakcije obrađuje cijela mreža, a posebno vaš vlastiti čvor. Nema potrebe (ali je moguće) komunicirati sa autorima aplikacije primaoca plaćanja ili bilo kojim od njihovih API-ja da biste dobili informacije o statusu uplate. Nema potrebe provjeravati status plaćanja u sistemu posredničke obrade. Nema potrebe da čekate da vaša transakcija bude odobrena od strane banke ili vladine agencije. Na kraju krajeva, nema povraćaja sredstava ili drugih vanjskih faktora koji mogu utjecati na stanje na vašem računu. Ovo je rješenje za premeštanje vrijednosti preko interneta, bez potrebe za arbitrom treće strane koji odlučuje da li je transakcija u skladu s pravilima (ponekad čak i internim pravilima, o kojima nisu svi učesnici unaprijed obaviješteni) ili ne. U Bitcoinu nema „kućnih pravila“. Jedina pravila koja se moraju poštovati su pravila mreže - otvorena i svima poznata.

To ga čini stvarnim ravne linije, praktično besplatno и instant novčane transakcije između ljudi ili programa u potpuno offline modu.

Ako imate mogućnost da primate podatke o plaćanju iz aplikacije treće strane, tada postaje moguća finansijska interakcija s tom aplikacijom. Kao primjer, uzmite u obzir uslugu lnsms.world, koja vam omogućava da pošaljete SMS poruku na proizvoljni broj, plaćajući to bitcoinima. Da bismo integrirali ovu aplikaciju, potrebno je samo proslijediti podatke iz web obrasca direktno u skriptu za slanje SMS-a - emulirati radnje korisnika na web stranici:

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)

Ne znam iz kog razloga, ali lnsms odgovara sa 201 HTTP statusnim kodom i vraća fakturu u BOLT11 formatu. Pa, ovo je dovoljno da korisnici botova mogu da plate slanje SMS-a sa svog stanja primljenog u četovima. Korisnik ni ne zna šta se tamo dešava, samo je platio par centi da pošalje SMS. I ja, kao programer, ne ulazim u detalje kako SMS servisi funkcioniraju. Upravo sam proslijedio uplatu i primio uslugu. Možete napraviti oznaku na vrhu, ili ne morate - to je moj slobodan izbor. Nema naloga, sporazuma ili drugog API-ja za trivijalne zadatke poput slanja SMS-a.

Sada zamislimo na trenutak da je naša aplikacija nešto korisnije od chat bota i da ne vrši plaćanje nekom drugom botu, već drugoj aplikaciji ili uređaju spojenom na internet. Ili su to desetine ili čak stotine beznačajnih plaćanja svake sekunde između uređaja, servisa, trgovina ili nekih provajdera usluga. Ovo je moć mikro plaćanja, ovako bi trebao izgledati Internet stvari. Već postoje projekti poput Althea koji oživljavaju ove ideje iu bliskoj budućnosti ćemo vidjeti velike, po mom mišljenju, promjene u oblasti koju sada zovemo e-trgovina.

Ako vam se svidjela objava i želite isprobati bitcoine u akciji - pošalji mi čašu piva i meke francuske lepinje.

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Da li ste zainteresovani za čisto tehničke članke o Bitcoin-u i povezanom softveru?

  • Da

  • Nijedan

  • Više me zanimaju tržišni aspekti kriptovaluta

Glasalo je 8 korisnika. 4 korisnika je bila uzdržana.

izvor: www.habr.com

Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster