Hogyan indítsunk mikrotranzakciókat az alkalmazásunkban

A múlt héten az első nyilvános programom fejlesztésével foglalkoztam — egy Telegram-bot, amely Bitcoin pénztárcaként működik, és lehetővé teszi a 'pénzdobálást' más csoportos chat résztvevőknek, valamint külső Bitcoin tranzakciók lebonyolítását magamnak vagy másoknak a úgynevezett 'Lightning Apps'-en keresztül. Feltételezem, hogy az olvasó általában ismeri a Bitcoint és a Telegramot, mivel igyekszem röviden, a részletekbe való alábbi elmerülés nélkül írni. A Bitcoinról készült forrásszemle ezen a linken érhető el, a Telegram egy azonnali üzenetküldő szolgáltatás mobil eszközökre és számítógépekre, amely lehetővé teszi saját kis alkalmazásaink (chat-botok) létrehozását a platformjukon.

Mik a kulcsfontosságú funkciói ennek az alkalmazásnak?

  • Lehetővé teszi, hogy valódi anyagi értékkel kifejezze háláját vagy jutalmazza a beszélgetőpartnert, nem csupán „virtuális lájkkal”, ez egy teljesen új szintre emeli a digitális kommunikációt
  • Valódi példa egy alkalmazásra, amely pénzügyi interakcióba léphet más alkalmazásokkal nyílt fizetési protokoll használatával.
  • Az alkalmazás minden komponensének nyílt forráskódú projekteknek kell lennie, amelyeket módosítani és a saját céljainkra alkalmazni lehet. Az alkalmazás nem használ zárt vagy kereskedelmi megoldásokat, annak ellenére, hogy illeszkedik az elektronikus kereskedelem területére, amely napjainkban meglehetősen nehezen nevezhető nyitottnak.

És hogyan alkalmazzuk ezt a gyakorlatban?

valahogy így...

Hogyan indítsunk mikrotranzakciókat az alkalmazásunkban
vagy így...

Hogyan indítsunk mikrotranzakciókat az alkalmazásunkban
Mit jelentenek ezek a számok? Ezek a bitcoin egységei — satoshi. A 2019-es középárak alapján 1000 satoshi körülbelül $0.06. A satoshit online el lehet költeni, vagy könnyen átváltható nemzeti valutára. Éppen ezért (likviditás) ez nem csupán egy újabb „bejegyzés az adatbázisban” vagy „pontok, amelyeket a partnereink boltjaiban költhetsz el”, és a valódi internetes pénz.
*azonnal szeretném megjegyezni, hogy néhány szót vagy kifejezést szándékosan nem próbálok oroszul írni — vagy nem tudom az adott kontextusú fordítást egyes esetekben, vagy az ilyen fordítás véleményem szerint inkább megtévesztőnek hangzik, mint helyesnek.

Felmerülhet a kérdés, hogyan használható egy ilyen alkalmazás, ha nincs bitcoint. Ezeket könnyen meg lehet vásárolni kis mennyiségben számos tőzsdén vagy váltón, barátoktól, akik bitcoinnal foglalkoznak, vagy akár kapni is lehet érméket a bot jelenlegi felhasználóitól. Számos mobil Wallet közvetlenül, "pénztárról" megvásárolható bitcoint kínál.

Hogyan indítsunk mikrotranzakciókat az alkalmazásunkbanHogyan indítsunk mikrotranzakciókat az alkalmazásunkbanHogyan indítsunk mikrotranzakciókat az alkalmazásunkban

Miután megvan a bitcoin (vagy inkább a satoshi)-k,(?)) - indítsuk el @atomic_tipbot és adjuk meg a \/deposit parancsot.

A bot válaszában megkérdezi, hogy mennyi satoshit szeretnénk betenni a számlára, és elküld egy számlát, amelyet mobile Wallet segítségével QR-kód beolvasásával, vagy a ("megnyitás a pénztárcában") gomb megnyomásával tudunk kifizetni a számlaoldalon.

Hogyan indítsunk mikrotranzakciókat az alkalmazásunkbanHogyan indítsunk mikrotranzakciókat az alkalmazásunkbanHogyan indítsunk mikrotranzakciókat az alkalmazásunkban

A fizetés megerősítése után a bot szinte azonnal küld egy megerősítést a kifizetésről, amely vizuálisan meg fog jelenni a számla keretein belül.

Eddig két komponenst érintettünk a alkalmazásból — a back-end telegram botot és a kriptovalutás fizetésfeldolgozó rendszert (inkább annak front-endjét).

A Telegram-bot létrehozásához a Python Telegram Bot-ot használtam. Nos, és természetesen, maga a bot nyílt forráskódú.

A kriptovalutás fizetésfeldolgozásának és UX-problémák megoldásának érdekében a választásom a (valójában alig van választási lehetőség) BTCPayServer, amelyhez a dokumentáció ezen a linken.

Ha közvetlenül keresnénk a kifizetések események kezelésének megoldásait, érdemes megvizsgálni a Electrum CLI kézikönyv oldalait az úgynevezett on-chain kifizetésekhez, míg az azonnali mikro-kifizetésekhez (Lightning) olyan megoldásokra, mint a Lightning-charge vagy Sparko..

Ez tehát self-hosted vagy sem!?

Igen, így van. A saját alkalmazásomban ingyenes BTCPayServer hostingot használok — BTCPayJungle, de teljesen lehetséges saját feldolgozó központot indítani, ami nem igényel sok időt. Arra viszont érdemes figyelni, hogy körülbelül 500GB szabad helyre lesz szükség a Bitcoin (és Litecoin) blokkláncok tárolásához. Számítási és hálózati erőforrásokra is szükség lesz a szinkronizálás idejére, valamint az igényeid szerint szükséges "csomagolásokra" a blokkláncokkal való kényelmesabb interakcióhoz. A BTCPayServer nem tartalmaz tervezett privát kulcsokat vagy bármilyen más információt, amely lehetővé tenné a pénztárcád ellenőrzését.

Az on-chain (hagyományos) kifizetésekhez szükséges, hogy a BTCPayServerhez hozzáadjuk a pénztárca úgynevezett xpub-culcsát az érkezési címek (nyilvános kulcsok) generálásához. Ez lehetővé és biztonságossá teszi a BTCPayServer használatát még megosztott módon is. Mindezek az xpub-culcsok és címek könnyen megszerezhetők jó pénztárcákban, mint például Electrum, a további feldolgozás beállításához.

Mindenki, aki találkozott a Bitcoinnal, hallott arról, hogy a bitcoin lassú és a tranzakciók drágák, különösen, amikor fellendülés van, ezért az azonnali mikrofizetésekhez érdemes (off-chain) Lightning Network tranzakciókat használni.

Mi az a Lightning Network?

Ez egyfajta plugin a bitcoinhoz, amely egy extra absztrakciós réteget állít fel, és lehetővé teszi az azonnali és gyakorlatilag ingyenes tranzakciókat a Bitcoin hálózatban. Mindez a több aláírással végzett kriptográfiai varázslatnak köszönhető, gyakran nevezik smart contract-nak. Számos megvalósítása van a Lightning Network protokollnak, én a c-lightning C nyelvű megvalósítást használok.

A fő különbség az on-chain és az off-chain (Lightning) kifizetések között az, ahogyan tárolják őket. Minden on-chain tranzakciót továbbítanak a hálózat összes csomópontja között, amíg az egyik bitcoin csomópont be nem jelenti a újonnan bányászott blokk tranzakcióival. (A Habrán van egy BitFury, ők készítik a bányászathoz szükséges hardvert). Ezért hívjuk ezeket a tranzakciókat on-chain. Ezek a tranzakciók rögzítve lesznek a közös blokkláncon, és ott maradnak létezésük végéig. Az ilyen tranzakciók nyilvánosak, és figyelhetők, nyomon követhetők és elemezhetők.

Off-chain (Lightning) tranzakciók esetén minden másként zajlik. Minden Lightning-hálózati csomópontnak van egy (vagy több) on-chain címe — ezek a hagyományos bitcoin címek, ahonnan minden kezdődik. Amikor bitcoinok kerülnek egy ilyen címre, lehetőség nyílik egy úgynevezett lightning csatorna megnyitására. villámcsatorna egy másik csomópontra, ami azt jelenti, hogy kriptográfiai technikák segítségével a két csomópont megállapodott a források elérhetőségéről. Később minden tranzakció (legyen az saját vagy harmadik féltől származó) amely ezen a csatornán átmegy, csak a tranzakció résztvevőinek csomópontjain marad tárolva (és a közvetítő csomópontokon). Az egyetlen tranzakciók, amelyeket a blokkláncra rögzítenek — ezek a csatornanyitó vagy csatornaigazoló tranzakciók. Így egy összekapcsolt csomópontokból álló hálózat jön létre, amely ezer különböző utat épít a résztvevők között az alapok átadásához egy csomópontból a másikba, szigorú szabályok mentén. Gyakorlatilag minden ilyen tranzakciót csak a csomópontok adatbázis fájljaiban tárolnak. Ezért nevezzük őket (Lightning) tranzakciók esetén minden másként zajlik. Minden Lightning-hálózati csomópontnak van egy.

A diagramon látható az alkalmazás összes komponensének vizualizációja

Hogyan indítsunk mikrotranzakciókat az alkalmazásunkban

Röviden:

1) A felhasználó parancsot küld a botnak Telegram

2) A Telegram elküldi az eseményről szóló üzenetet python alkalmazásnak bot

3) python-alkalmazás lekéri BTCPayServer

4) A BTCPayServer generálja a bejövő BTC és LTC címeket, valamint egy számlázási kérdést küld a lightning-charge, amely viszont kommunikál a démonnal c-lightning. A kimeneten egy szép HTML-űrlapot kapunk a kifizetések kezelésére

5) A felhasználó kifizeti a számlát és megerősítést lát

6) BTCPayServer küldi a számla kifizetési értesítést (IPN) a megadott callback_url-re, a mi esetünkben callbacks.py (még egy python alkalmazás az értesítések fogadására)

7) A kapott adatok alapján a felhasználó egyenlege megváltozik

… és ha a felhasználó ki szeretné venni a forrást (érmék, amelyeket másoktól kapott) …

8) A Python-alkalmazás a bot várja a QR-kód szövegét vagy képét, és amikor érvényes adatokat kap, akkor a kifizetés apaylightning.py*, amely elindítja a tranzakciót a c-lightning RPC-n keresztül.

Hogyan indítsunk mikrotranzakciókat az alkalmazásunkban

*Az igazság kedvéért érdemes megemlíteni, hogy a paylightning.py burkolóm nem teljesen befejezett, és bizonyos forgatókönyvekben hamis-negatív eredményt adhat. Ajánlom a jól működő burkoló használatát a termeléshez hasonló esetekben

Mit is kapunk? A botunk felhasználói a csoportos chatben vagy közvetlenül anyagi értéket tudnak átadni érték korlátlan. És ez még nem minden — a Lightning Network protokollnak köszönhetően, amely bizonyos értelemben egy egységesített és egyszerűsített fizetési hálózat, lehetőség nyílik arra, hogy a csevegés során kapott pénzt teljesen idegen alkalmazásoknak küldjük. Például a Telegram már rendelkezik egy első bitcoin-fizetési bottal — @lntxbot. Az „Egységes egyenleg” lehetővé teszi, hogy a csoportos chat különböző preferenciái szerint bármelyik botot használjuk (igen, a probléma teljesen kitalált, és a megoldás meglehetősen haszontalan, de a lényeg számít). Az egyenleg átkonvertálása az egyik botról a másikra semmibe sem kerül, és másodpercekbe telik! Fontos megjegyezni, hogy ezeknek a botoknak a készítői soha nem léptek kapcsolatba egymással.

Hogyan indítsunk mikrotranzakciókat az alkalmazásunkban Hogyan indítsunk mikrotranzakciókat az alkalmazásunkban

Csak át kell irányítani a letéttel kapcsolatos üzenetet az @lntxbot-tól az @atomic_tipbot-hoz, és voilà!

Ez már nem csupán „számok átugrása az adatbázisban”, hanem egy tranzakció két különböző, egymással nem kapcsolódó adatbázis között. Így a botba már integrálva van több „LApp”, köztük: sat2.io és lnsms.world.

Mit jelent az LApp integráció?

Minden Lightning Network csomópont lényegében egy bitcoin-tárca. Két egyenlege van: on-chain és off-chain. Az on-chain egyenleg szükséges új csatornák megnyitásához és a lezárt csatornákban tárolt eszközökhez. Az off-chain egyenleg pedig éppen az, ami a csomópontok között mozog. A csomópont alapvető követelménye a tranzakciók fogadása és küldése, ezért minden csomópont, mint szoftver, rendelkezik a következő funkciókkal: pay és invoice. Megmutatom, hogyan történik ez:

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

Megkapjuk az „invoice” specifikációt BOLT11 ebben az esetben, amely a bitcoin (és a Litecoin) hálózaton használt transzferformátum. Ez egy olyan sor, amely tartalmazza a címzett, a tranzakció összegét, a kérés lejárati idejét stb. részletes információkat a decodepay futtatásával kaphatunk a megadott sorra vonatkozóan:

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

A fizetéshez szükség van a c-lightning pay funkciójára az ilyen «számla» esetén:

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

A tranzakciók állapotát az egész hálózat és különösen a saját node-od dolgozza fel. Nincs szükség (de van rá lehetőség) arra, hogy kapcsolatba lépj a kifizetés fogadójának alkalmazásának vagy bármely API-jával az állapot információk megszerzéséhez. Nincs szükség a kifizetés állapotának ellenőrzésére a közvetítő feldolgozórendszerében. Nem kell várni a tranzakciód jóváhagyására a bank vagy állami szerv részéről. Végül is itt nincsenek chargeback-ek és más külső tényezők, amelyek befolyásolják a számlád egyenlegét. Ez egy megoldás az érték interneten történő átvitelére, harmadik fél bírája nélkül, aki eldönti, hogy a tranzakció megfelel-e a szabályoknak (néha még azoknak a belső szabályoknak is, amelyekről nem minden résztvevő értesült előre), vagy sem. A bitcoinnál nincsenek "belső szabályok". Az egyetlen szabály, amit követni kell, a hálózat szabályai — nyíltak és mindenki számára ismertek.

Ez valóra váltja közvetlen, gyakorlatilag ingyenes és azonnali pénzügyi tranzakciókat emberek és programok között teljesen önállóan.

Ha lehetősége van arra, hogy harmadik féltől származó alkalmazástól adatokat kapjon, akkor lehetősége van pénzügyi szempontból interakcióba lépni ezzel az alkalmazással. Például vegyük az lnsms.world szolgáltatást, amely lehetővé teszi, hogy SMS-t küldjön bármely számra, Bitcoinért cserébe. Az alkalmazás integrálásához csak annyira van szükség, hogy az adatokat a webűrlapról közvetlenül a SMS küldő szkripthez továbbítsuk — a felhasználó weboldalon végzett tevékenységeinek emulálásával:

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)

Nem tudom, miért, de az lnsms 201-es HTTP státuszkóddal válaszol, és egy BOLT11 formátumú számlát küld vissza. Nos, ez elegendő ahhoz, hogy a bot felhasználói a saját egyenlegükből kifizessék az SMS küldését. A felhasználó még csak nem is tudja, mi történik, csak pár centet fizetett az SMS küldéséért. Mint programozó, nem mélyedek el az SMS-szolgáltatások működésének részleteiben. Csak továbbítottam a kifizetést, és megkaptam a szolgáltatást. Lehúzást is lehet rajta tenni, de nem kötelező — ez az én szabad választásom. Nincsenek fiókok, megállapodások és újabb API-k a jelentéktelen feladatokhoz, mint az SMS küldése.

Most képzeljük el, hogy alkalmazásunk valami hasznosabb, mint egy chat-bot, és kifizetést végez nem egy másik botnak, hanem egy másik alkalmazásnak vagy eszköznek, amely csatlakozik az internethez. Vagy akár ez tucatnyi vagy akár száz jelentéktelen kifizetés másodpercenként eszközök, szolgáltatások, üzletek vagy valamilyen szolgáltató között. Ez a mikro-kifizetések ereje, így kellene kinéznie a dolgok internetének. Már léteznek projektek, mint a Althea amelyek életre keltik ezeket az ötleteket, és a közeljövőben nagy változásokra számítok abban a területen, amelyet most elektronikus kereskedelemnek nevezünk.

Ha tetszett a bejegyzés, és szeretné látni a Bitcoin működését — küldjön nekem egy sört és néhány puha francia zsemlét.

Csak a regisztrált felhasználók vehetnek részt a szavazáson. Kérem, jelentkezzen be., kérem.

Érdeklik önt a tisztán technikai cikkek a bitcoinról és a kapcsolódó szoftverekről?

  • Igen

  • Nem

  • Engem jobban érdekelnek a kriptovaluta piaci aspektusai.

8 felhasználó szavazott. 4 felhasználó tartózkodott.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster