Aghju passatu a settimana passata à sviluppà u mo primu prugramma publicu - un bot Telegram chì funziona cum'è una billetera di Bitcoin è permette di "lanciari muniti" à l'altri participanti in chats di gruppu, è ancu di fà pagamenti Bitcoin esterni à sè stessu o à l'altri chjamati. "Applicazioni Lightning". Assumimu chì u lettore hè generalmente familiarizatu cù Bitcoin è Telegram, perchè Pruvaraghju di scrive brevemente, senza sfondà in dettagli. , bè, Telegram hè un mezzu di messageria immediata in i dispositi mobili è i PC, chì vi permettenu di creà e vostre propiu applicazioni (chat bots) nantu à a so piattaforma.
Chì sò e caratteristiche chjave di sta applicazione?
- Permette di ringrazià o incuragisce u vostru interlocutore cun valore materiale reale, è micca solu "cum'è virtuale", questu porta a cumunicazione elettronica à un livellu completamente novu
- Un esempiu di a vita reale di una applicazione chì pò interagisce finanziariamente cù altre applicazioni utilizendu un protokollu di pagamentu apertu
- Tutti i cumpunenti di l'applicazione sò prughjetti open source è ponu esse mudificati è usati per i vostri compiti. L'applicazione ùn usa micca suluzioni chjuse o cummirciali, malgradu u fattu chì si mette in u campu di e-commerce, chì oghje hè abbastanza difficiuli di chjamà apertu.
E cumu applicà questu in pratica?
qualcosa cum'è questu ...

o cusì...

Chì significanu sti numeri ? Questu unità bitcoin - satoshi. À i prezzi di scambiu da a mità di 2019, 1000 satoshi hè di circa $ 0.06. Satoshi pò esse spesu in ligna o facilmente scambiatu per munita naziunale. Hè per quessa (liquidità) chì ùn hè micca solu un altru "entrata di basa di dati" o "punti chì pudete spende in i nostri magazzini partenarii"e soldi reale in Internet.
* Vogliu signalà subitu chì, ovviamente, ùn pruvate micca di scrive qualchì parolle o frasi in russo - o ùn cunnoscu micca a traduzzione cuntestuale in certi casi, o una tale traduzzione, in my opinion, sona più ingannosa chè currettu
A quistione pò esse, cumu utilizà una tale applicazione se ùn ci hè micca bitcoins. Puderanu facilmente esse acquistatu in picculi quantità nantu à unu di i numerosi scambii o scambiatori, o pudete da un amicu Bitcoin, o ancu riceve muniti da l'utilizatori attuali di u bot. Parechje carte telefoniche offrenu l'opzione di cumprà bitcoins direttamente "senza abbandunà u cash register".



Quandu avete a manu nantu à i bitcoins (o piuttostu satosh-ami(?)) - lanciari è fà / depositu.
U bot risponderà dumandendu quanti satoshis aghjunghje à u vostru equilibriu è vi mandendu una fattura per u pagamentu, chì pò esse pagata cù una billetera mobile scannendu u codice QR o premendu u buttone ("apre in u portafoglio") nantu à a pagina di fattura.



Dopu avè cunfirmatu u pagamentu in a vostra billetera, u bot guasi immediatamente mandarà a cunferma di pagamentu è questu serà visualmente visualizatu in u quadru di fattura.
Finu à questu puntu, avemu toccu dui cumpunenti di l'applicazione - u back-end di u telegram bot è u sistema di trattamentu di pagamentu di criptocurrency (piuttostu, u so front-end).
Per creà un bot di Telegram chì aghju utilizatu . E, sicuru, u bot stessu .
Cum'è un sistema per processà pagamenti è risolve i prublemi UX, a scelta hè cascata (in fatti, ùn ci hè quasi micca scelta) , nantu à quale .
Sè vo circate di suluzioni per trasfurmà l'avvenimenti di pagamentu direttamente, allura duvete attentu per i cosiddetti pagamenti in catena, è per suluzioni micro-pagamenti istantanei (Lightning) cum'è o .
Allora hè self-hosted o micca !?
Iè hè. In a mo applicazione aghju utilizatu hosting gratuitu BTCPayServer - , ma hè assolutamente pussibule è ùn hà micca bisognu di assai tempu per lancià u vostru propiu centru di trasfurmazioni. Tuttavia, vale a pena ricurdà chì avete bisognu di ~ 500GB dispunibili nantu à u discu duru per almacenà i blockchains di Bitcoin (è Litecoin). Averete ancu bisognu di risorse di l'informatica è di a rete per a durata di a sincronizazione è, sicondu i vostri bisogni, i "wrappers" necessarii per i blockchains per fà cunvene per interagisce cun elli. BTCPayServer ùn cuntene micca di designu chjavi privati o qualsiasi altra infurmazione chì vi permette di cuntrullà a vostra billetera.
Per i pagamenti nantu à a catena (regular), avete bisognu di aghjunghje u chjamatu. xpub wallet key in BTCPayServer per generà indirizzi di ricezione (chjavi publichi). Questu rende pussibule è sicuru d'utilizà BTCPayServer ancu in forma "spartita". Tutti issi chjavi xpub è l'indirizzi ponu esse facilmente ottenuti in boni portafogli cum'è , per una ulteriore configurazione di trasfurmazioni.
Tutti quelli chì anu scontru Bitcoin anu intesu chì Bitcoin hè lento è e transazzione sò caru, soprattuttu quandu ci hè hype, cusì per i micro-pagamenti instantani vale a pena aduprà transazzioni Lightning Network (fora di a catena).
Chì ghjè sta Lightning Network?
Questu hè qualcosa cum'è un plugin per Bitcoin, chì aghjunghje una capa addiziale di astrazione è vi permette di fà transazzioni instantani è praticamenti gratuiti nantu à a reta di Bitcoin. Tuttu chistu hè pussibule grazia à a magia criptografica di multi-signature, più cumunimenti chjamati cuntrattu intelligenti. Ci sò parechje implementazioni di u protocolu Lightning Network, aghju utilizatu implementazione in C.
A principal diferenza trà i pagamenti nantu à a catena è fora di a catena (Lightning) hè cumu si sò almacenati. Tuttu in catena e transazzione sò trasmesse in tutti i nodi di a rete finu à chì unu di i nodi Bitcoin annunzià cù e transazzioni inclusi in questu. (In u hub ci hè ancu , anu solu pruduce ferru per a minera). Hè per quessa chì chjamemu tali transazzioni in catena. Tali transazzioni seranu arregistrati in una blockchain cumuna è fermanu quì finu à a fine di a so esistenza. Inoltre, tali transazzioni sò publicamente dispunibili è ponu esse monitorati, seguiti è analizati.
In casu di fora di catena (Lightning) transazzione tuttu succede in modu diversu. Ogni nodu di rete Lightning hà unu (o più) l'indirizzi nantu à a catena sò i stessi indirizzi Bitcoin regulari induve tuttu principia. Quandu i bitcoins appariscenu in un tali indirizzu, hè pussibule apre u chjamatu. canale di fulmini à un altru node, chì significa chì utilizendu tecniche criptografiche, sti dui nodi accunsenu nantu à a dispunibilità di fondi trà elli. In seguitu, tutte e transazzione (sia i nostri è quelli di i nodi di terzu) chì passanu per un tali canali sò salvati solu nantu à i nodi di i participanti di a transazzione (è i nodi intermediari). L'unicu transazzione chì sò arregistrati nantu à u blockchain sò transazzione chì apre o apre un canale. À una scala più cumpleta, u risultatu hè una reta di nodi interconnessi chì custruisce millaie di camini diffirenti trà i participanti per "trasferisce" fondi da un nodu à l'altru secondu certe regule strette. Quasi tutti tali transazzioni sò guardati solu in u schedariu di basa di dati di i nodi stessi. Hè per quessa chì li chjamemu fora di catena.
U diagramma mostra una visualizazione di tutti i cumpunenti di l'applicazione

In breve:
1) L'utilizatore manda un cumandamentu à u bot in n'ambasciata
2) Telegram manda un missaghju annantu à l'avvenimentu applicazione python bot
3) applicazione python manda una dumanda à BTCPayServer
4) BTCPayServer genera indirizzi BTC è LTC in entrata, è manda ancu una dumanda per una fattura à carica di fulmini, chì in turnu cumunicà cù u dimòniu c-lampi. In u risultatu, avemu una bella forma di prucessu di pagamentu HTML
5) L'utilizatore paga a fattura è vede a cunferma
6) BTCPayServer manda notificazione di pagamentu di fattura (IPN) à u callback_url specificatu, in u nostru casu callbacks.py (un'altra applicazione python per riceve notificazioni)
7) Sicondu i dati ricevuti, l'equilibriu di l'utilizatori cambia
... è se l'utilizatore vulia ritirà fondi (muniti chì hà ricevutu da l'altri) ...
8) Applicazione Python U bot aspetta u testu o l'imaghjini di u codice QR, è quandu i dati validi sò ricevuti, u pagamentu hè fattu da l'utilità.paylightning.py*, chì inizia una transazzione via c-lightning RPC.

* Per esse ghjustu, vale a pena nutà chì u mo wrapper paylightning.py ùn hè micca cumpletamente finitu è pò vultà un risultatu falsu negativu in scenarii specifichi. I ricumandemu in casi vicinu à a pruduzzione
Chì avemu ? L'utilizatori di u nostru bot ponu mandà missaghji in un chat di gruppu o direttamente valore materiale senza limiti. È ùn hè micca tuttu - grazia à u protokollu Lightning Network, chì in un certu sensu hè una reta di pagamentu unificata è simplificata, diventa pussibule di mandà u stessu soldi ricevutu in chat à applicazioni cumpletamente di terzu. Per esempiu, Telegram hà digià avutu u primu bot per i pagamenti Bitcoin - @lntxbot. "Single Balance" vi permette di utilizà qualsiasi di i bots secondu e preferenze di un chat di gruppu particulari (iè, u prublema hè cumplettamente fora è a suluzione hè assai inutile, ma questu hè u puntu). U trasferimentu di u saldu da un bot à l'altru ùn costa nunda è dura seconde! Hè impurtante di nutà chì i creatori di sti bots ùn anu mai cumunicatu cù l'altri in tuttu.

Tuttu ciò chì duvete fà hè invià un missaghju di dumanda di depositu da @lntxbot à @atomic_tipbot è voul!
Questu ùn hè più solu "incendu numeri in una basa di dati", ma un pagamentu trà duie basa di dati diffirenti, senza relazione. Cusì, parechji "LApps" sò digià integrati in u bot, trà elli: и .
Chì significarà Integrazione LApp?
Ogni Lightning Network Un node hè essenzialmente una billetera Bitcoin. Hà dui equilibri: in catena è off-chain. L'equilibriu nantu à a catena hè necessariu per apre novi canali è almacenà fondi da i canali chjusi. Ma l'equilibriu off-chain hè esattamente ciò chì passa trà i nodi. I requisiti principali per un node sò riceve è mandà pagamenti, cusì ogni node hà funzioni cum'è software pacà и fattura. Dimustraraghju cumu succede questu:
user@ln-node:/ % lightning-cli invoice 1000000000 internal_description external_description
{
"payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0",
"expires_at" : 1558709834,
"bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6"
}
Ricevemu una "fattura" di a specificazione in questu casu, chì hè u formatu di pagamentu in a reta di Bitcoin (è Litecoin, per via, ancu). Questa hè una stringa chì cuntene infurmazioni nantu à u destinatariu, a quantità di transazzione, u tempu di scadenza di a dumanda, etc., l'infurmazioni detallate ponu esse ottenute da eseguendu decodepay in relazione à sta stringa:
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"
}
Ma per pagà per una tale "fattura" avemu bisognu di a funzione di pagamentu da c-lightning:
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"
}
Tutti i stati di transazzione sò trattati da tutta a reta è u vostru propiu node in particulare. Ùn ci hè bisognu (ma hè pussibule) di interagisce cù l'autori di l'applicazione di u destinatariu di pagamentu o qualsiasi di e so API per ottene infurmazione nantu à u statu di u pagamentu. Ùn ci hè bisognu di verificà u statutu di pagamentu in u sistema di trattamentu intermediariu. Ùn ci hè bisognu di aspittà chì a vostra transazzione sia appruvata da un bancu o agenzia di u guvernu. Dopu tuttu, ùn ci sò micca caricamenti o altri fattori esterni chì ponu influenzà u saldu di u vostru contu. Questa hè una suluzione per traslassi u valore nantu à Internet, senza a necessità di un arbitru di terzu chì decide se a transazzione cumplessi cù e regule (à volte ancu e regule internu, nantu à quale micca tutti i participanti sò infurmati in anticipu) o micca. Ùn ci hè micca "regula di casa" in Bitcoin. L'unicu regule chì deve esse seguitu sò e regule di a reta - aperta è cunnisciuta da tutti.
A rende vera linii diretti, praticamente gratis и istante transazzione monetaria trà persone o prugrammi in un modu cumplettamente autònuma.
Se avete a capacità di riceve dati di pagamentu da una applicazione di terzu, allora diventa pussibule interagisce finanziariamente cù quella applicazione. Per esempiu, cunzidira u serviziu lnsms.world, chì permette di mandà un missaghju SMS à un numeru arbitrariu, paghendu cù bitcoins. Per integrà sta applicazione, avemu solu bisognu di passà i dati da a forma web direttamente à u script di mandatu SMS - emulate l'azzioni di l'utilizatori nantu à u situ web:
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)
Ùn sò micca sapè per quale ragione, ma lnsms risponde cù un codice di statutu HTTP 201 è torna una fattura in u formatu BOLT11. Ebbè, questu hè abbastanza per l'utilizatori di u bot per pudè pagà per mandà SMS da u so saldo ricevutu in chats. L'utilizatore ùn sà ancu ciò chì succede quì, hà pagatu solu un paru di centesimi per mandà un SMS. Eiu, cum'è sviluppatore, ùn entre in i dettagli di cumu funziona i servizii SMS. Aghju solu rinviatu u pagamentu è ricevutu u serviziu. Pudete fà un marcatu in cima, o ùn avete micca bisognu - questu hè a mo scelta libera. Nisun cuntu, accordu o un altru API per i travaglii triviali cum'è l'inviu di SMS.
Avà imaginemu per un mumentu chì a nostra applicazione hè qualcosa di più utile ch'è un chatbot è face un pagamentu micca à un altru bot, ma à una altra applicazione o dispositivu cunnessu à Internet. O questi sò decine o ancu centinaie di pagamenti insignificanti ogni siconda trà i dispositi, servizii, magazzini o certi fornituri di servizii. Questu hè u putere di i micro-pagamenti, questu hè ciò chì l'Internet di e Cose deve esse. Ci sò digià prughjetti cum'è chì portanu sti idee à a vita è in un futuru vicinu, videremu grandi, in u mo parè, cambiamenti in u spaziu chì avemu avà chjamatu e-commerce.
Se ti piace u post è vulete pruvà bitcoins in azione - .
Solu l'utilizatori registrati ponu participà à l'indagine. , per piacè.
Avete interessatu in articuli puramente tecnichi nantu à Bitcoin è software rilativi?
chì
No
Sò più interessatu in l'aspettu di u mercatu di criptocurrency
8 utilizatori anu vutatu. 4 utilizatori si sò astenuti.
Source: www.habr.com
