Eelmisel nädalal töötasin oma esimese avaliku programmi kallal – Telegrami boti, mis toimib Bitcoin rahakotina ning võimaldab , 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...

või nii...

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



Kui olete bitcoine saanud (või pigem satoshis-ide(?)) — käivitage 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.



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 . Ja muidugi on see bot .
Makseprotsessimise ja UX-ülesannete lahendamiseks on valikuks (tõepoolest, valikuvõimalusi on peaaegu ei olegi) BTCPayServer dokumentatsioon on saadaval sellel lingil .
Electrum CLI käsiraamatule Lightning-charge või .
Jah, see on nii. Oma rakenduses kasutan BTCPayServeri tasuta hostimist —
BTCPayJungle by-design erakliente ega mingit muud teavet, mis võimaldaks teie rahakoti kontrollimist. приватных ключей или любой другой информации, позволяющей контролировать ваш кошелек.
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 , 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 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 kaasatud tehingutega. (Habrés on isegi olemas , 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 канал 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

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.

*Õ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 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.

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: ja .
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 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 , 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 — .
Ainult registreeritud kasutajad saavad küsitluses osaleda. , 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
