Kuidas kÀivitada mikro-makse oma rakenduses

Eelmisel nĂ€dalal töötasin oma esimese avaliku programmi kallal – Telegrami boti, mis toimib Bitcoin rahakotina ning vĂ”imaldab Bitcoiniga seotud ressursside valik on saadaval sellel lingil, ja Telegram on mobiilsetel seadmetel ja arvutites kasutatav kohese sĂ”numside vahend, mis vĂ”imaldab nende platvormil luua vĂ€ikseid rakendusi (vestlusbote).

Millised on selle rakenduse peamised funktsioonid?

  • 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 vĂ”ib rahaliselt suhelda teiste rakendustega, kasutades avatud makseprotokolli
  • KĂ”ik rakenduse komponendid on avatud lĂ€htekoodiga projektid, mida on vĂ”imalik muuta ja oma vajadustele kohandada. Rakendus ei kasuta suletud ega kommerts lahendusi, kuigi see kuulub tĂ€napĂ€eva e-kaubanduse valdkonda, mida tĂ€na avatud nimetada on keeruline.

Ja 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? Need on bitcoini ĂŒksused - satoshid. Börsi hindade jĂ€rgi 2019. aasta keskel on 1000 satoshit ligikaudu $0,06. Satoshisid saab veebis kulutada vĂ”i kergesti vahetada rahvusvaluuta vastu. Just selle tĂ”ttu (likviidsus) ei ole see pelgalt „kanne andmebaasis” vĂ”i „punkte, mida saate kasutada meie partnerite poodides”, vaid tĂ”eliselt internetirahad.
*tahan kohe mĂ€rkida, et mĂ”ned sĂ”nad vĂ”i vĂ€ljendid pĂŒĂŒan teadlikult mitte kirjutada vene keeles – kas ei tunne konteksti tĂ”lget vĂ”i tundub see minu arvates eksitavalt korrektne.

VĂ”ib tekkida kĂŒsimus, kuidas sellist rakendust kasutada, kui bitcoine ei ole. Need on hĂ”lpsasti ostetavad vĂ€ikestes kogustes ĂŒhel paljudest börsidest vĂ”i vahetuspunktidest, vĂ”i vĂ”ite neid saada bitcoini omavalt sĂ”bralt vĂ”i isegi praegustelt botikasutajatelt. Paljud mobiilset rahakotti pakkuvad teenused vĂ”imaldavad osta bitcoine otse "kassast eemal minemata".

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

Kui olete bitcoine saanud (vĂ”i pigem satoshis-ide(?)) — kĂ€ivitage @atomic_tipbot ja tehke /deposit.

Bot kĂŒsib, kui palju satoshis soovite saldole lisada, ja saadab maksmiseks arve, mille saate mobiilse rahakoti abil QR-koodi skaneerimise vĂ”i nupu ("ava rahakotis") kaudu arve lehelt maksta.

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

Makse kinnitamisel oma rahakotis saadab bot peaaegu kohe makse kinnituse ja see kuvatakse visuaalselt arve raamis.

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

Telegrami boti loomiseks olen kasutanud Python Telegram Bot. Ja muidugi on see bot avatud lÀhtekoodiga.

Makseprotsessimise ja UX-ĂŒlesannete lahendamiseks on valikuks (tĂ”epoolest, valikuvĂ”imalusi on peaaegu ei olegi) BTCPayServer , mille kohtadokumentatsioon on saadaval sellel lingil Kui otsite makseĂŒrituste töötlemise lahendusi otse, siis tasub tĂ€helepanu pöörata.

Electrum CLI kÀsiraamatule nii-öelda on-chain maksete jaoks ja kiirete mikro-maksete (Lightning) lahendustele nagu Lightning-charge Sparko vÔi Kas see on self-hosted vÔi mitte!?.

Jah, see on nii. Oma rakenduses kasutan BTCPayServeri tasuta hostimist —

BTCPayJungle , kuid on tĂ€iesti vĂ”imalik ja ei nĂ”ua palju aega, et kĂ€ivitada oma makseprotsessor. Tasub siiski meeles pidada, et teil on vaja ~500GB ruumi vĂ€lisele kĂ”vakettale Bitcoin (ja Litecoin) plokkide hoidmiseks. Samuti on vajalikud arvutus- ja vĂ”rguelemendid sĂŒnkroonimise ajaks ning sĂ”ltuvalt teie vajadustest vajalikud "ĂŒmbrikud" plokkide jaoks, et nendega mugavalt suhelda. BTCPayServer ei sisaldaby-design erakliente ega mingit muud teavet, mis vĂ”imaldaks teie rahakoti kontrollimist. privaatvĂ”tmete vĂ”i muu teabe kohta, mis vĂ”imaldab teil oma rahakotti kontrollida.

On-chain (tavaliste) maksete jaoks tuleb lisada nii-öelda xpub-rahakoti vÔti BTCPayServeris, et genereerida vastuvÔtmiseks (avalikke vÔtmeid) aadresse. See vÔimaldab ja muudab BTCPayServeri kasutamise isegi 'jagatuna' turvaliseks. KÔiki neid xpub-vÔtmeid ja aadresse on lihtne saada headest rahakottidest, nagu Electrum, et edasi liikuda protsessimise seadistamisega.

KÔik, kes on bitcoini kasutanud, on kuulnud, et bitcoini tehingud on aeglased ja kulukad, eriti siis, kui on buum, seepÀrast tasub kiirete mikro-maksete jaoks kasutada (off-chain) tehinguid Lightning Networki kaudu.

Mis asi on Lightning Network?

See on midagi nagu Bitcoini pistikprogramm, mis loob tĂ€iendava abstraktsioonikihi ja vĂ”imaldab teha kiireid ja praktiliselt tasuta tehinguid Bitcoinis. KĂ”ik see on vĂ”imalik tĂ€nu krĂŒptograafilisele maagiale mitme allkirjaga, mida tihti nimetatakse nutilepinguks. Lightning Networki protokolli on mitu rakendust, mina kasutan c-lightning rakendust C keeles.

Peamine erinevus on-chain ja off-chain (Lightning) maksete vahel seisneb selles, kuidas neid salvestatakse. KĂ”ik on-chain tehingud edastatakse kĂ”igi vĂ”rgu sĂ”lmede kaudu, kuni ĂŒks Bitcoin' node kuulutab vĂ€lja uue kaevandatud ploki kaasatud tehingutega. (HabrĂ©s on isegi olemas BitFury, nad toodavad just kaevandamiseks mĂ”eldud riistvara). Just seetĂ”ttu nimetame me neid tehinguid on-chain. Sellised tehingud salvestatakse ĂŒldisesse plokiahelasse ja jÀÀvad sinna kogu oma eksisteerimise ajaks. Samuti on need tehingud ĂŒldiselt kergesti jĂ€lgitavad, neid saab jĂ€lgida ja analĂŒĂŒsida.

Off-chain (Lightning) tehingute puhul toimub kĂ”ik teisiti. Igal Lightning-vĂ”rgu sĂ”lmel on ĂŒks (vĂ”i rohkem) on-chain aadresse – need on need tavapĂ€rased bitcoini aadressid, kust kĂ”ik algab. Kui sellises aadressis ilmnevad bitcoiinid, on vĂ”imalik avada nii-öelda lightning kanal lightning kanal teise sĂ”lme, mis tĂ€hendab, et krĂŒptograafiliste tehnikate abil on need kaks sĂ”lme kokku leppinud vahendite kergesti kĂ€tte saamise osas. Hiljem salvestatakse kĂ”ik tehingud (nii enda kui ka kolmandate osaliste sĂ”lmede tehingud), mis liiguvad sellise kanali kaudu, ainult tehingu osaliste sĂ”lmedes (ja vahendavates sĂ”lmedes). Ainsad tehingud, mis kajastuvad plokiahelas, on kanalite avamise vĂ”i taasavamise tehingud. Tulemuseks on funktsionaalne vĂ”rk, mis ĂŒhendab sadu erinevaid teid osalejate vahel raha ĂŒleviimiseks ĂŒhest sĂ”lmest teise rangete reeglite jĂ€rgi. Praktiliselt kĂ”ik sellised tehingud salvestatakse ainult osaliste sĂ”lmede andmebaasifailides. Just sellepĂ€rast nimetame neid (Lightning) tehingute puhul toimub kĂ”ik teisiti. Igal Lightning-vĂ”rgu sĂ”lmel on ĂŒks.

Diagrammil on nÀha rakenduse kÔikide komponentide visualiseerimine

Kuidas kÀivitada mikro-makse oma rakenduses

LĂŒhidalt:

1) Kasutaja saadab kÀsu botile Telegram

2) Telegram saadab sĂŒndmuse kohta teate python rakendusele botile

3) python-rakendus saadab pÀringu , mille kohta

4) BTCPayServer genereerib sisenevad BTC ja LTC aadressid ning saadab arve pÀringu lightning-charge, mis omakorda suhtleb deemoniga c-lightning. VÀljundina saame kena HTML-makse töötlemise vormi

5) Kasutaja tasub arve ja nÀeb kinnitust

6) , mille kohta saadab arve makse уĐČĐ”ĐŽĐŸĐŒĐ»Đ”ĐœĐžĐ” (IPN) antud callback_url, meie juhul callbacks.py (veel ĂŒks python rakendus teavituste vastuvĂ”tmiseks)

7) Vastavalt saadud andmetele muudab kasutaja saldo


 ja kui kasutaja soovib vĂ€lja vĂ”tta vahendeid (mĂŒnte, mida on saadud teistelt) 


8) Python-rakendus bot ootab tekst vÔi QR-koodi pilti ja kui kehtivad andmed on saadud, toimub makse utiliidipaylightning.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Ă”petatud ja vĂ”ib kahtlastes stsenaariumides vale negatiivset tulemust anda. Soovitan kasutada hĂ€sti vĂ€lja töötatud wrapperit loodud kvaliteedi jĂ€rgi tootmislĂ€hedastes tingimustes

Mida me saame? Meie boti kasutajad saavad grupivestluses vĂ”i otse edastada materiaalset vÀÀrtust piiranguteta. Ja see ei ole veel kĂ”ik — tĂ€nu Lightning Network protokollile, mis on teatud mĂ”ttes ĂŒhtne ja lihtsustatud makseteenus, on vĂ”imalik saata samu raha, mis on vestluses saadud, tĂ€iesti vĂ€listele rakendustele. NĂ€iteks, Telegramis on juba esimene bot Bitcoin'i maksete jaoks — @lntxbot. "Ühine saldo" vĂ”imaldab kasutada igasuguseid bote, sĂ”ltuvalt konkreetse grupi vestluse eelistustest (jah, probleem on tĂ€ielikult vĂ€lja mĂ”eldud ja lahendus ĂŒsna kasutu, kuid asi on olemuses). Saldo ĂŒlekandmine ĂŒhelt botal teisele ei maksa midagi ja vĂ”tab sekundeid! Oluline on mĂ€rkida, et nende botide loojad pole omavahel kunagi ĂŒhendust vĂ”tnud.

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

On lihtsalt vajalik edastada sĂ”num, millel on depoos kĂŒsitlus @lntxbot'ilt @atomic_tipbot'ile ja voila!

See ei ole enam lihtsalt "numbrite edastamine DB-sse", vaid makse kahe erineva, omavahel mitteseotud andmebaasi vahel. Seega on botis juba integreeritud mitmed "LApp'id", nende seas: sat2.io ja lnsms.world.

Mida tÀhendab LApp'i integraatsioon?

Iga Lightning Network node on oma olemuselt Bitcoin'i rahakott. Tal on kaks saldo: on-chain ja off-chain. On-chain saldo on vajalik uute kanalite avamiseks ja sulgemise kanalite vahendite hoidmiseks. Off-chain saldo on just see, mis liigub node'ide vahel. Node'i peamised nÔuded on maksete vastuvÔtmine ja saatmine, seetÔttu on igal node'il tarkvarana funktsioonid pay ja invoice. NÀitan, kuidas see kÀib:

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

Saame "arve" spetsiifikatsiooni BOLT11 selles osas, mis on maksete formaat Bitcoin'i (ja Litecoin'i, muide, samuti). See on string, mis sisaldab teavet saaja, tehingu summa, taotlemise kehtivuse aja jne, ĂŒksikasjalikku teavet saab saada, kĂ€ivitades decodepay selle stringi suhtes:

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

Selleks, et sellist "arvet" maksta, on meil vajalik c-lightning'i pay funktsioon:

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Ă”iki tehingute olekuid töötleb kogu vĂ”rk ja teie oma node eraldi. Maksete oleku kohta teabe saamiseks pole vajalik (kuigi see on vĂ”imalik) suhelda rakenduse vastuvĂ”tjate autoritega vĂ”i nende API-dega. Maksete staatuse kontrollimiseks ei ole vaja protsessi vahendava sĂŒsteemiga suhelda. Teie tehingu heakskiitu pangalt vĂ”i riigiasutuselt ei ole vaja oodata. LĂ”ppude lĂ”puks ei ole siin chargeback'e ega muid vĂ€liseid tegureid, mis vĂ”ivad teie konto saldo mĂ”jutada. See on lahendus, mis vĂ”imaldab vÀÀrtuse edastamist Interneti kaudu, ilma et oleks vajalik vĂ€line vahekohtunik, kes otsustab, kas tehing vastab reeglitele (mĂ”nikord isegi sisemistele reeglitele, millest kĂ”ik osalejad ei pruugi ette teada) vĂ”i mitte. Bitcoinis ei ole "sisemisi reegleid". Ainsad reeglid, millele tuleb jĂ€rgida, on vĂ”rgu - avalikud ja kĂ”igile tuntud reeglid.

See teeb kÔigeks vÔimalikuks otse, peaaegu tasuta ja kohesed rahatransaktsioonid inimeste vÔi programmide vahel tÀielikult iseseisvalt.

Kui teil on vĂ”imalus saada makseandmeid kolmandalt rakenduselt, siis vĂ”ite finantsiliselt suhelda selle rakendusega. NĂ€iteks vĂ”ib tuua teenuse lnsms.world, mis vĂ”imaldab saata SMS-sĂ”numeid juhuslikule numbrile, makstes selle eest bitcoine. Selle rakenduse integreerimiseks peame lihtsalt edastama andmed veebivormist otse SMS-i saatmiseni — emuleerides kasutaja tegevusi 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, miks, kuid lnsms vastab HTTP staatuse koodiga 201 ja tagastab BOLT11 formaadis arve. Mis iganes, sellest piisab, et boti kasutajad saaksid tasuda SMS-i saatmise eest oma tĆĄĂ€tiruumides teenitud sissemaksetega. Kasutaja ei tea isegi, mis seal toimub, ta lihtsalt maksab paar senti SMS-i saatmise eest. Ja mina, kui arendaja, ei sĂŒvenenud SMS-teenuste töö ĂŒksikasjadesse. Lihtsalt edastasin makse ja sain teenuse. VĂ”in kehtestada lisatasu vĂ”i mitte — see on minu vabatahtlik valik. Ükski konto, leping ega jĂ€rjekordne API tĂŒhiste ĂŒlesannete jaoks, nagu SMS-i saatmine.

NĂŒĂŒd kujutame hetkeks ette, et meie rakendus on midagi enamat kui vestlusbot ja teeb makse mitte teisele botile, vaid teisele rakendusele vĂ”i seadmele, mis on ĂŒhendatud Internetiga. VĂ”i see on kĂŒmmekond vĂ”i isegi sadu tillukesi makseid iga sekundi jooksul seadmete, teenuste, kaupluste vĂ”i mĂ”nede teenusepakkujatega. Just selleks on mikromaksed, nii peaks Internet asjade maailmas vĂ€lja nĂ€gema. Juba on olemas projekte nagu Althea , mis tĂ”lgivad neid ideid ellu ja peagi nĂ€eme suuri, minu arvates, muutusi valdkonnas, mida me praegu nimetame elektrooniliseks kaubanduseks.

Kui teile meeldis postitus ja soovite nĂ€ha bitcoine tegudes — saadke mulle ĂŒks Ă”lu ja pehmed prantsuse kuklid.

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

Kas teie jaoks on huvitavad puhttehnilised artiklid bitcoini ja sellega seotud tarkvara kohta?

  • Jah

  • Ei

  • Mind huvitavad rohkem krĂŒptovaluutade turu aspektid.

HÀÀletas 8 kasutajat. Hoidus Àra 4 kasutajat.

Allikas: habr.com

Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster