Kuidas kÀivitada mikro-makse oma rakenduses

Eelmisel nĂ€dalal töötasin oma esimese avaliku rakenduse kallal – Telegrami-boti, mis toimib Bitcoin-rahakotina ja vĂ”imaldab "visata mĂŒnte" teistele rĂŒhmachatide liikmetele ning teha vĂ€liseid Bitcoin-makse endale vĂ”i teistele nn "Lightning Apps"-ile. Eeldan, et lugeja on ĂŒldiselt tuttav Bitcoin'i ja Telegram'i kontseptsioonidega, kuna pĂŒĂŒan kirjutada lĂŒhidalt, ilma detailidesse sĂŒĂŒbimata. Bitcoin'i ressurside valik on saadaval siit, Telegram on aga mobiilseadmetes ja arvutites kasutatav kohese sĂ”numiveo rakendus, mis vĂ”imaldab platvormil luua oma vĂ€ikesi rakendusi (chat-bote).

Millised on selle rakenduse peamised omadused?

  • See vĂ”imaldab tĂ€nada vĂ”i premeerida vestluspartnerit tĂ”eliselt materiaalse vÀÀrtusega, mitte lihtsalt "virtuaalse meeldimise", see viib elektroonilise suhtluse tĂ€iesti uuele tasemele
  • Reaalne nĂ€ide rakendusest, mis suudab finantsiliselt suhelda teiste rakendustega, kasutades avatud makseprotokolli.
  • Kogu rakenduse komponentideks on avatud lĂ€htekoodiga projektid, mida saab muuta ja oma eesmĂ€rkideks kasutada. Rakendus ei kasuta suletud ega kommertsilahendusi, isegi kui see sobib e-kaubanduse valdkonda, mida on tĂ€napĂ€eval raske nimetada avatud.

Kuidas seda praktikas rakendada?

niimoodi


Kuidas kÀivitada mikro-makse oma rakenduses
vÔi nii


Kuidas kÀivitada mikro-makse oma rakenduses
Mida need numbrid tĂ€hendavad? See on bitcoini ĂŒksused — satoshid. 2019. aasta keskpaiga börsihindade jĂ€rgi on 1000 satoshit umbes 0,06 $. Satoshisid saab veebis kulutada vĂ”i lihtsalt kohaliku valuuta vastu vahetada. Just sellepĂ€rast (likviidsuse tĂ”ttu) ei ole see lihtsalt jĂ€rjekordne «kande andmebaasis» vĂ”i «punkte, mida saate kulutada meie partnerite kauplustes», ja tĂ”elised interneti raha.
*tahan kohe mĂ€rkida, et mĂ”ningaid sĂ”nu vĂ”i vĂ€ljendeid ĂŒritan teadlikult mitte vene keeles kirjutada — kas ei tea kontekstuaalset tĂ”lget vĂ”i arvan, et selline tĂ”lge kĂ”lab pigem eksitavalt kui Ă”igesti.

VĂ”ib tekkida kĂŒsimus, kuidas sellist rakendust kasutada, kui bitcoine pole. Neid on lihtne osta vĂ€hestes kogustes ĂŒhel mitmest börsist vĂ”i vahetusest, vĂ”i saada sĂ”bralt-bitcoini omanikult, vĂ”i isegi saada mĂŒnte praegustelt botikasutajatelt. Paljud telefonikoti rahakotid pakuvad vĂ”imalust osta bitcoine otse „Àri tegemise kohalt”.

Kuidas kÀivitada mikro-makse oma rakendusesKuidas kÀivitada mikro-makse oma rakendusesKuidas kÀivitada mikro-makse oma rakenduses

Kui oleme bitcoine (vĂ”i pigem satoshis-ides(?)) omandanud — kĂ€ivita @atomic_tipbot ja tee /deposit.

Bot kĂŒsib vastuseks, kui palju satoshit tasakaalu lisada ja saadab tasumiseks arve, mille saab mobiilirahakotiga maksta, skaneerides QR-koodi vĂ”i vajutades nuppu („ava rahakotis”) arve lehel.

Kuidas kÀivitada mikro-makse oma rakendusesKuidas kÀivitada mikro-makse oma rakendusesKuidas kÀivitada mikro-makse oma rakenduses

Kui oled makse oma rahakotis kinnitanud, saadab bot peaaegu kohe kinnituse makse kohta ja see kuvatakse visuaalselt arve raamis.

Kuni selle hetkeni oleme kĂ€sitlenud kahte rakenduse komponenti — back-end telegrami boti ja krĂŒptovaluuta maksesĂŒsteemi (peamiselt selle front-endi).

Telegrami boti loomiseks kasutasin Python Telegram Bot. Ja muidugi, bot ise on avatud lÀhtekoodiga.

MaksesĂŒsteemi ja UX-ĂŒlesannete lahenduse valik langes (tĂ”eliselt, valikut peaaegu pole) BTCPayServer, millele leidub dokumentatsioon sellel lingil.

Kui otsite maksesĂŒndmuste töötlemise lahendusi otse, tuleks tĂ€helepanu pöörata Electrum CLI kĂ€siraamatule niisuguste on-chain maksete jaoks, ja kiirete mikro-maksete (Lightning) jaoks lahendustele nagu Lightning-charge vĂ”i Sparko.

Nii et kas see on isehostitud vÔi mitte!?

Jah, nii on. Oma rakenduses kasutan tasuta BTCPayServeri hostimist — BTCPayJungle, kuid seda on tĂ€iesti vĂ”imalik teha ja see ei nĂ”ua palju aega, et kĂ€ivitada oma maksesĂŒsteem. Siiski tuleks arvestada, et teil on vaja umbes 500 GB vaba ruumi kĂ”vakettal Bitcoin (ja Litecoin) plokkide salvestamiseks. Samuti on vajalikud arvutus- ja vĂ”rguresursside ajutine kasutamine sĂŒnkroonimise ajal ning sĂ”ltuvalt teie vajadustest vajalikud â€žĂŒmbrikud” plokkide jaoks, et nendega mugavalt suhelda. BTCPayServer ei sisalda disaini tĂ”ttu privaatsĂŒsteeme ega mingit muud teavet, mis vĂ”imaldaks teie rahakotti kontrollida.

On-chain (tavaliste) maksete jaoks on vaja lisada BTCPayServerisse rahakoti xpub-vĂ”ti, et genereerida vastuvĂ”tu aadresse (avalikke vĂ”tmeid). See muudab BTCPayServeri kasutamise isegi „jagatud” kujul vĂ”imalikkuks ja ohutuks. KĂ”ik need xpub-vĂ”tmed ja aadressid on hĂ”lpsasti kĂ€ttesaadavad heades rahakottides nagu Electrum, et edasise töötlemise seadistamiseks.

KÔik, kes on Bitcoiniga kokku puutunud, on kuulnud, et Bitcoin on aeglane ja tehingud on kallid, eriti hype ajal; seetÔttu on kohesteks mikro-makseteks mÔistlik kasutada (off-chain) Lightning Networki tehinguid.

Mis on Lightning Network?

See on midagi nagu Bitcoini plugin, mis lisab tĂ€iendava abstraktsioonikihi ja vĂ”imaldab Bitcoinis teostada kohe ja praktiliselt tasuta tehinguid. KĂ”ik see on vĂ”imalik tĂ€nu krĂŒptograafilisele maagiale mitme allkiri, mida sageli nimetatakse nutikaks lepinguks. Lightning Networki protokolli on mitu teostust, mina kasutan c-lightning C keele teostust.

Peamine erinevus on-chain ja off-chain (Lightning) maksete vahel seisneb selles, kuidas need salvestatakse. KĂ”ik on-chain tehingud edastatakse kĂ”igi vĂ”rgu sĂ”lmede kaudu, kuni ĂŒks Bitcoin node kuulutab need vĂ€lja. uus kaevandatud blokk koos selles olevate tehingutega. (Habr's on isegi BitFury, nad toodavad kaevandamiseks vajalikku riistvara). Just sellepĂ€rast nimetame me selliseid tehinguid on-chain. Sellised tehingud kantakse ĂŒldisse plokiahelasse ja salvestatakse sinna senikaua, kuni see eksisteerib. Samuti on need tehingud avalikult kĂ€ttesaadavad ja neid on vĂ”imalik jĂ€lgida, monitoorida ja analĂŒĂŒsida.

Juhul kui off-chain (Lightning) tehingud kĂ€ivad kĂ”ik teisiti. Igal Lightning-vĂ”rgu sĂ”lmel on ĂŒks (vĂ”i rohkem) on-chain aadress — need on need tavalised Bitcoin'i aadressid, millest kĂ”ik algab. Kui sellisel aadressil ilmnevad Bitcoini, on vĂ”imalik avada nn. lightning kanal teise sĂ”lme, mis tĂ€hendab, et nende kahe sĂ”lme vahel on kokkulepe vahendite kĂ€ttesaadavuse kohta kasutades krĂŒptograafia tehnikaid. Hiljem salvestatakse kĂ”ik tehingud (nii oma kui ka kolmandate osapoolte sĂ”lmede omanduses), mis kĂ€ivad lĂ€bi sellise kanali, ainult tehingu osaliste sĂ”lmedes (ja vahendajate sĂ”lmedes). Ainsad tehingud, mis pannakse plokiahelasse, on kanalite avamise vĂ”i sulgemise tehingud. Suuremas ulatuses moodustub selline omavahel ĂŒhendatud sĂ”lmede vĂ”rgustik, mis loob osaliste vahel tuhandeid erinevaid teid, et „kanda“ vahendeid ĂŒhest sĂ”lmest teise kindlate reeglite alusel. Peaaegu kĂ”ik sellised tehingud salvestatakse ainult sĂ”lmede andmefailidesse. Just sellepĂ€rast nimetame me neid off-chain.

Diagrammil on visualiseeritud kÔik rakenduse komendid.

Kuidas kÀivitada mikro-makse oma rakenduses

LĂŒhidalt:

1) Kasutaja saadab kÀsu botile Telegram

2) Telegram saadab sĂŒndmuse teate python rakendusele boti

3) python-rakendus saadab pÀringu BTCPayServer

4) BTCPayServer genereerib sisenevad BTC ja LTC aadressid ning saadab ka arve pÀringu lightning-charge, mis omakorda suhtleb deemoniga c-lightning. Me saame kauni HTML-pangemakse vormi

5) Kasutaja maksab arve ja nÀeb kinnitust

6) BTCPayServer saadetud arve makse teadet (IPN) mÀÀratud callback_url-ile, meie puhul callbacks.py (teine python rakendus teadete vastuvÔtmiseks)

7) Tuginend saadud andmetele muutub kasutaja saldo


 ja kui kasutaja soovib raha vÀlja vÔtta (sendi, mida ta teistelt sai) 


8) Python-rakendus bot ootab QR-koodi teksti vÔi pilti ning kui kehtivad andmed saavad, toimub makse utiliidigapaylightning.py*, mis algatab tehingu c-lightning RPC kaudu.

Kuidas kÀivitada mikro-makse oma rakenduses

*ÕigusemĂ”istmise nimel tuleb mĂ€rkida, et minu paylightning.py wrapper ei ole tĂ€iesti lĂ”puni viidud ning vĂ”ib anda vale-negatiivse tulemuse spetsiifilistes stsenaariumites. Soovitan kasutada hĂ€sti testitud wrapperit juhtudel, mis on lĂ€hedased tootmisreklaamile

Mida me saame? Meie boti kasutajad saavad rĂŒhmachat'is vĂ”i otse edastada materiaalset vÀÀrtust ilma piiranguteta. Ja see ei ole veel kĂ”ik — tĂ€nu Lightning Network protokollile, mis teatud mĂ”ttes on ĂŒhtne ja lihtsustatud maksevĂ”rk, on vĂ”imalik saata samu rahasid, mis on saadud vestluses, tĂ€iesti vĂ€listesse rakendustesse. NĂ€iteks on Telegramis juba esmakordselt boti rakendatud bitcoini maksete jaoks — @lntxbot. "Üksikult saldo" vĂ”imaldab kasutada ĂŒkskĂ”ik millist roboti sĂ”ltuvalt konkreetse grupivestluse eelistustest (jah, probleem on tĂ€iesti tobe ja lahendus ei ole eriti kasulik, aga asi on olemuses). Üle kanda saldo ĂŒhest botist teise ei maksa midagi ja vĂ”tab vaid sekundeid! Oluline on mĂ€rkida, et nende botide loojad ei ole kunagi omavahel suhtlenud.

Kuidas kÀivitada mikro-makse oma rakenduses Kuidas kÀivitada mikro-makse oma rakenduses

On piisav lihtsalt edastada sÔnum deposiidi taotlusega @lntxbot'ilt @atomic_tipbot'ile ja voila!

See ei ole enam lihtsalt „numbrite ĂŒlekandmine andmebaasidesse”, vaid makse kahe erineva, omavahel mitte seotud andmebaasi vahel. Seega on botisse integreeritud juba mitu „LAppi”, sealhulgas: sat2.io ja lnsms.world.

Mis tÀhendab LAppi integreerimine?

Iga Lightning Network Node on oma olemuselt Bitcoin-rahakott. Tal on kaks taset: on-chain ja off-chain. On-chain saldo on vajalik uute kanalite avamiseks ja vahendite hoidmiseks suletud kanalitest. Off-chain saldo on aga see, mis liigub kanalite vahel. Peamised nÔuded nodedele on maksete vastuvÔtmine ja saatmine, seega on igal nodil tarkvarana funktsioonid makse ja arve. NÀitan, kuidas see toimub:

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

Me saame «arve» spetsifikatsioonid BOLT11 selles juhul, mis on makseformaat Bitcoin (ja Litecoin, muide, ka) vÔrgust. See rida sisaldab teavet saaja, tehingu summa, pÀringu aegumisaeg jne, rohkem teavet saab, kÀivitades decodepay sellele reale:

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

Kuid selle «arve» tasumiseks on meil vaja c-lightning'i maksefunktsiooni:

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

KĂ”ik tehingute staatused töödeldakse kogu vĂ”rgu ja teie enda node'i poolt. Ei ole vajalik (kuigi see on vĂ”imalik) suhelda makset vastuvĂ”tteva rakenduse autoritega vĂ”i nende API-dega teabe saamiseks makse seisundi kohta. Ei ole vaja kontrollida makse staatust vahendaja töötlemissektoris. Teie tehingu heakskiitu pangast vĂ”i valitsusasutusest oodata ei tule. LĂ”ppude lĂ”puks ei eksisteeri siin tagasimakseid ja muid vĂ€liseid tegureid, mis vĂ”ivad mĂ”jutada teie konto saldo. See on lahendus vÀÀrtuste edastamiseks interneti kaudu, ilma vajaduseta kolmanda osalise kohta, kes otsustab, kas tehing vastab reeglitele (mĂ”nikord isegi sisemistele reeglitele, millest kĂ”ik osalised pole eelnevalt teavitatud) vĂ”i mitte. Bitcoini puhul ei ole „sisemisi reegleid”. Ainsad reeglid, millele tuleb jĂ€rgida, on vĂ”rgu reeglid - avatud ja kĂ”igile tuntud.

See teeb vÔimalikuks otse, peaaegu tasuta ja hetkede rahalised tehingud inimeste vÔi programmide vahel tÀielikult autonoomsel viisil.

Kui teil on vĂ”imalus saada makseandmeid kolmandalt rakenduselt, siis on teil vĂ”imalus selle rakendusega finantsiliselt suhelda. NĂ€iteks vĂ”ib tuua teenuse lnsms.world, mis vĂ”imaldab saata SMS-sĂ”numeid mis tahes numbrile, makstes selle eest bitcoiinidega. Selle rakenduse integreerimiseks peame lihtsalt edastama andmed veebivormist otse SMS-i saatmise skriptile — emuleerides kasutaja toiminguid veebisaidil:

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)

Ma ei tea, mis pĂ”hjusel, kuid lnsms vastab 201 HTTP staatuse koodiga ja tagastab BOLT11 formaadis arve. See on piisav, et botikasutajad saaksid oma saldo eest, mis on saadud vestlusringides, SMS-sendimise eest maksta. Kasutaja ei tea isegi, mis toimub, ta lihtsalt maksab paar senti SMSi saatmise eest. Mina, kui arendaja, ei sĂŒvene SMS-teenuste töödetailidesse. Ma lihtsalt edastasin makse ja sain teenuse. VĂ”in vĂ”tta tasu juurde, aga ei pruugi — see on minu vaba valik. Ei mingeid kontosid, lepinguid ega jĂ€rgmisi APIsid tĂŒhiste ĂŒlesannete, nagu SMSide saatmine, jaoks.

Kujutame nĂŒĂŒd hetkeks, et meie rakendus on midagi kasulikumat kui juturobot ja teostab makseid mitte teisele botile, vaid teisele rakendusele vĂ”i seadmele, mis on Internetiga ĂŒhendatud. VĂ”i isegi kĂŒmneid vĂ”i isegi sadu tĂŒhiseid makseid iga sekundi jooksul seadmete, teenuste, poodide vĂ”i mingite teenusepakkujate vahel. See on mikro-maksetes peituv tugevus, selline peaks olema asjade internet. Olemas on juba projektid nagu Althea mis transformatsioonide elluviimiseks, ja peagi nĂ€eme, minu arvates, suuri muutusi valdkonnas, mida praegu nimetame elektrooniliseks kaubanduseks.

Kui see postitus meeldis ja soovite proovida bitcoine tegevuses — saada mulle kruus Ă”lut ja pehmeid prantsuse saiakesi..

Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. Logige sisse, palun.

Kas teid huvitavad puhtalt tehnilised artiklid bitcoini ja sellega seotud tarkvara kohta?

  • Jah

  • Ei

  • Mind huvitavad rohkem krĂŒptovaluutade turu aspektid.

HÀÀletas 8 kasutajat. 4 kasutajat ei hÀÀletanud.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster