Java javĂ«n e kaluar kalova duke zhvilluar programin tim tĂ« parĂ« publik â njĂ« bot Telegram qĂ« funksionon si portofol Bitcoin dhe lejon "tĂ« hedhĂ«sh monedha" pĂ«r pjesĂ«marrĂ«sit e tjerĂ« nĂ« bisedat grupore si dhe tĂ« bĂ«sh pagesa tĂ« jashtme Bitcoin pĂ«r veten ose pĂ«r tĂ« tjerĂ«t tĂ« njohur si âLightning Appsâ. Supozoj se lexuesi nĂ« pĂ«rgjithĂ«si Ă«shtĂ« i njohur me Bitcoin dhe Telegram, pasi do tĂ« mundohem tĂ« shkruaj shkurt, pa u thelluar nĂ« detaje. , dhe Telegram Ă«shtĂ« njĂ« mjet i menjĂ«hershĂ«m pĂ«r shkĂ«mbimin e mesazheve nĂ« pajisje mobile dhe PC, duke lejuar krijimin e aplikacioneve tĂ« vogla (bote) mbi platformĂ«n e tij.
Cilat janë funksionet kryesore të këtij aplikacioni?
- Lejon të falënderohet ose shpërblehet biseduesi me një vlerë të vërtetë materiale, e jo thjesht "një like virtual", kjo e çon komunikimin elektronik në një nivel krejtësisht të ri
- Një shembull real i aplikacionit që mund të ndërveprojë financiarisht me aplikacione të tjera duke përdorur protokollin e hapur të pagesave
- Të gjitha komponentët e aplikacionit janë projekte me kod të hapur dhe mund të ndryshohen dhe aplikohen për nevoja të ndryshme. Aplikacioni nuk përdor zgjidhje të mbyllura apo komerciale, pavarësisht se kjo i përshtatet sferës së tregtisë elektronike, e cila sot është e vështirë të quhet e hapur.
Dhe si mund ta përdorim këtë në praktikë?
kĂ«shtuâŠ

apo kĂ«shtuâŠ

ĂfarĂ« do tĂ« thonĂ« kĂ«to numra? KĂ«to janĂ« njĂ«sitĂ« e bitcoin - satoshit. Sipas çmimeve tĂ« tregut nĂ« mes tĂ« vitit 2019, 1000 satoshi Ă«shtĂ« pĂ«rafĂ«rsisht $0.06. Satoshit mund tĂ« shpenzohen online ose lehtĂ« tĂ« kĂ«mbehen pĂ«r monedhĂ«n kombĂ«tare. PikĂ«risht pĂ«r kĂ«tĂ« arsye (likuiditeti) kjo nuk Ă«shtĂ« thjesht njĂ« "shĂ«nim nĂ« DB" ose "pikĂ« qĂ« mund tĂ« shpenzoni nĂ« dyqanet e partnerĂ«ve tanĂ«", ndĂ«rsa para tĂ« vĂ«rteta nĂ« internet.
*menjĂ«herĂ« dua tĂ« theksoj se disa fjalĂ« ose shprehje mĂ« duket se nuk kam mundĂ«sinĂ« t'i shkruaj nĂ« rusisht â ose nuk e di kontekstin e pĂ«rkthimit nĂ« disa raste, ose njĂ« pĂ«rkthim i tillĂ«, sipas mendimit tim, do tĂ« tingĂ«llonte mĂ« tepĂ«r mashtruese se sa korrekte.
Mund të lindë pyetja, si të përdoret një aplikacion i tillë nëse nuk ka bitcoin. Ato lehtë mund të blihen në një sasi të vogël në njërën nga shumë shkëmbime ose shkëmbim, ose mund të marrësh nga një mik-bitkoiner ose madje të marrësh monedha nga përdoruesit aktualë të botit. Shumë portofolë për telefon ofrojnë mundësinë për të blerë bitcoin direkt "pa u larguar nga kasa".



Kur tĂ« keni fituar bitcoin (dhe mĂ« saktĂ« satosh-Ă«(?)) â nisni dhe bĂ«ni /deposit.
Boti do të pyesë se sa satosh do të depozitoni në bilancin tuaj dhe do t'ju dërgojë një llogari për pagesë, të cilën mund ta paguani me portofolin tuaj celular duke skanuar kodin QR ose duke klikur në butonin ("hap në portofol") në faqen e faturës.



Pas konfirmimit të pagesës në portofolin tuaj, menjëherë do të dërgojë një konfirmim për pagesën dhe kjo do të shfaqet vizualisht në kornizën e faturës.
Derisa deri tani kemi pĂ«rmendur dy komponentĂ« tĂ« aplikacionit â back-endin e botit tĂ« telegramit dhe sistemin e procesimit tĂ« pagesave me cryptocurrency (mĂ« saktĂ« front-endin e tij).
Për krijimin e botit të Telegramit kam përdorur . Po ashtu, boti vetë .
Si sistem procesimi për pagesat dhe zgjidhjen e problemeve të UX, zgjedhja ra (në të vërtetë, ka pothuajse hiç zgjedhje) në , për të cilin .
Nëse kërkoni zgjidhje për trajtimin e ngjarjeve të pagesave në mënyrë direkte, ia vlen të disi shihni për pagesat e njohura si on-chain, dhe për pagesat mikro të menjëhershme (Lightning) zgjidhje si ose .
Pra, a është ai self-hosted apo jo!?
Po, Ă«shtĂ« kĂ«shtu. NĂ« aplikacionin tim pĂ«rdor njĂ« hostim falas BTCPayServer â , por Ă«shtĂ« absolutisht e mundur dhe nuk kĂ«rkon shumĂ« kohĂ« pĂ«r tĂ« nisur njĂ« qendĂ«r procesimi tĂ« vetĂ«-pronĂ«suar. MegjithatĂ«, duhet tĂ« mbani mend se do t'ju nevojiten ~500GB tĂ« disponueshĂ«m nĂ« HDD pĂ«r ruajtjen e blloqeve tĂ« Bitcoin (dhe Litecoin). Gjithashtu do tĂ« nevojiten burime kompjuterike dhe rrjetore gjatĂ« kohĂ«s sĂ« sinkronizimit dhe, nĂ« varĂ«si tĂ« nevojave tuaja, pĂ«r blloqet BTCPayServer nuk pĂ«rmban
Për pagesat on-chain (të zakonshme), është e nevojshme të shtoni çelësin xpub të portofolit në BTCPayServer për të gjeneruar adresat për pranimin (çelësat publikë). Kjo e bën të mundur dhe të sigurt përdorimin e BTCPayServer edhe në mënyrë 'të ndarë'. Të gjithë këta çelësa xpub dhe adresat mund të merren lehtësisht në portofolat e mirë si , për përfundimin e konfigurimit të procesimit.
Të gjithë ata që janë përballur me Bitcoin e dinë se Bitcoin është i ngadaltë dhe transaksionet janë të shtrenjta, veçanërisht kur ka ngritje, prandaj për pagesat mikro të menjëhershme duhet të përdoren transaksionet Lightning Network (off-chain).
ĂfarĂ« Ă«shtĂ« Lightning Network?
ĂshtĂ« diçka si njĂ« plugin pĂ«r Bitcoin, qĂ« ndihmon nĂ« krijimin e njĂ« shtrese tĂ« re abstraksioni dhe lejon kryerjen e transaksioneve tĂ« menjĂ«hershme dhe praktikisht pa kosto nĂ« rrjetin Bitcoin. E gjitha kjo Ă«shtĂ« e mundur falĂ« magjisĂ« kriptografike me nĂ«nshkrime tĂ« shumta, e njohur mĂ« shpesh si kontratĂ« inteligjente. Ka disa realizime tĂ« protokollit Lightning Network, unĂ« pĂ«rdor njĂ« realizim nĂ« C.
Dallimi kryesor midis pagesave on-chain dhe off-chain (Lightning) është se si ruhet informacioni. Të gjitha on-chain transaksionet transmetohen nëpër të gjithë nodet e rrjetit, derisa një nga nodet e Bitcoin të shpallë me transaksionet e përfshira në të. (Në Habrë madje ka , ata pikërisht prodhojnë harduer për minimin). Pikërisht për këtë arsye ne i quajmë këto lloje transaksionesh on-chain. Këto transaksione do të regjistrohen në bllokun e përbashkët dhe do të ruajnë në të deri në fund të ekzistencës së tij. Po ashtu, këto transaksione janë në dispozitë të përbashkët dhe është e mundur të monitorohen, ndjekin dhe analizohen.
NĂ« rastin e transaksioneve off-chain (Lightning), gjithçka ndodh ndryshe. Ădo nodĂ« e rrjetit Lightning ka njĂ« (ose mĂ« shumĂ«) adrese on-chain â kĂ«to janĂ« ato adresa tĂ« zakonshme tĂ« Bitcoin, nga e cila gjithçka fillon. Kur bitcoinĂ«t shfaqen nĂ« njĂ« adresĂ« tĂ« tillĂ«, Ă«shtĂ« e mundur tĂ« hapet ajo qĂ« quhet kanali lightning tek e tjetĂ«r nodĂ«, qĂ« do tĂ« thotĂ« se pĂ«rmes teknikave kriptografike kĂ«to dy nodĂ« ranĂ« dakord pĂ«r disponueshmĂ«rinĂ« e burimeve midis tyre. MĂ« vonĂ«, tĂ« gjitha transaksionet (si tĂ« tyre ashtu edhe transaksionet e nodave tĂ« tjera) qĂ« kalojnĂ« pĂ«rmes kĂ«tij kanali ruhen vetĂ«m nĂ« nodat e pjesĂ«marrĂ«sve tĂ« transaksionit (dhe nodat-mesĂ«marrĂ«se). Transaksionet e vetme qĂ« regjistrohen nĂ« blockchain janĂ« transaksionet pĂ«r hapjen ose mbylljen e kanaleve. NĂ« njĂ« shkallĂ« mĂ« tĂ« gjerĂ«, formohet njĂ« rrjet nĂ« ndĂ«rveprimin e nodave qĂ« krijon mijĂ«ra rrugĂ« tĂ« ndryshme pĂ«r transaksioneve off-chain.
Diagrami tregon vizualizimin e të gjitha komponenteve të aplikacionit

nuk ishte fare e mundur, pasi gjithçka funksiononte përmes Cygwin, MinGW ose Shërbimeve Windows për Unix.
1) Përdoruesi dërgon një komandë botit në Telegram
2) Telegram dërgon mesazhin për ngjarjen aplikacionin python botin
3) aplikacioni python dërgon një kërkesë për BTCPayServer
4) BTCPayServer gjeneron adresat hyrëse BTC dhe LTC, si dhe dërgon një kërkesë për faturë në lightning-charge, që nga ana e tij komunikon me demonin c-lightning. Si rezultat, ne marrim një formular HTML të bukur për përpunimin e pagesave
5) Përdoruesi paguan faturën dhe sheh konfirmimin
6) BTCPayServer dërgon njoftimin e pagesës së faturës (IPN) në adresën callback_url të caktuar, në rastin tonë callbacks.py (një aplikacion tjetër python për marrjen e njoftimeve)
7) Sipas të dhënave të marra, bilanci i përdoruesit ndryshon
⊠dhe nĂ«se pĂ«rdoruesi dĂ«shiron tĂ« tĂ«rheqĂ« burimet (monedhat qĂ« mori nga tĂ« tjerĂ«t) âŠ
8) Aplikacioni python i botit pret tekstin ose imazhin e kodit QR, dhe kur të dhëna valide merren, bëhet pagesa me ndihmën epaylightning.py*, i cili nënshtrohet transaksionit përmes c-lightning RPC.

*Për drejtësi, duhet të theksoj se mbështetje ime paylightning.py nuk është përfundimtare dhe mund të kthejë një rezultat fals negativ në skenarë specifikë. Rekomandoj në raste të afërta me prodhimin
ĂfarĂ« kemi? PĂ«rdoruesit e botit tonĂ« mund, brenda bisedĂ«s grupore ose direkt, tĂ« transferojnĂ« vlerĂ« tĂ« materies pa pa kufizime. Dhe kjo nuk Ă«shtĂ« e gjitha â falĂ« protokollit Lightning Network, i cili nĂ« njĂ« farĂ« mĂ«nyre Ă«shtĂ« njĂ« rrjet pagesash i unifikuar dhe i thjeshtuar, mundĂ«son dĂ«rgimin e tĂ« njĂ«jtave para qĂ« janĂ« marrĂ« nĂ« bisedĂ« nĂ« aplikacione krejtĂ«sisht tĂ« tjera. PĂ«r shembull, nĂ« Telegram tashmĂ« ka pasur robotin e parĂ« pĂ«r pagesat me Bitcoin â @lntxbot. "Balanca e njĂ«jtĂ«" lejon pĂ«rdorimin e ndonjĂ«rit nga robotĂ«t nĂ« varĂ«si tĂ« preferencave tĂ« bisedĂ«s grupore specifike (po, problemi Ă«shtĂ« krejtĂ«sisht i shpikur dhe zgjidhja Ă«shtĂ« shumĂ« e panevojshme, por e rĂ«ndĂ«sishme Ă«shtĂ« thelbi). TĂ« transferosh bilancin nga njĂ« robot nĂ« tjetrin nuk kushton asgjĂ« dhe zgjat sekonda! ĂshtĂ« e rĂ«ndĂ«sishme tĂ« theksohet se krijuesit e kĂ«tyre roboteve kurrĂ« nuk janĂ« lidhur me njĂ«ri-tjetrin.

Mjafton thjesht të dërgosh një mesazh me kërkesën për depozitë nga @lntxbot te @atomic_tipbot dhe voilà !
Kjo nuk është më thjesht "hedhje numrash në DB", por një pagesë midis dy DB-ve të ndryshme, të pa lidhura me njëra-tjetrën. Kështu që në robot janë integruar tashmë disa "LApps", midis tyre: dhe .
ĂfarĂ« do tĂ« thotĂ« integrimi i LApp?
Ădo Lightning Network nodĂ« Ă«shtĂ« nĂ« thelb njĂ« portofol Bitcoin. Ajo ka dy bilance: on-chain dhe off-chain. Bilanci on-chain Ă«shtĂ« i nevojshĂ«m pĂ«r hapjen e kanaleve tĂ« reja dhe ruajtjen e fondeve nga kanalet e mbyllura. NdĂ«rsa bilanci off-chain Ă«shtĂ« ajo qĂ« lĂ«viz mes node-ve. KĂ«rkesat kryesore pĂ«r njĂ« nodĂ« janĂ« marrja dhe dĂ«rgimi i pagesave, prandaj çdo nodĂ« si softuer ka funksionet pay dhe invoice. Do tĂ« tregoj se si ndodh kjo:
user@ln-node:\/ % lightning-cli invoice 1000000000 internal_description external_description
{
"payment_hash" : "64c0c8f5f8f708b08487ad1376f3d256f92ccb9606987ba395c2b4193efde5a0",
"expires_at" : 1558709834,
"bolt11" : "lnbc10m1pwdaj72pp5vnqv3a0c7uytppy845fhdu7j2mujejukq6v8hgu4c26pj0hauksqdpqv4u8getjdeskchmyv4ekxunfwp6xjmmwxqyjw5qcqp2rzjqw3qcrp2u3ggke56wrjlstcg76drmfw680cvjum88sl7ja7mpas7xzxz8sqqfecqqyqqqqlgqqqqqqgqjqn8e3ml733dkms2txxldnuwsllwhhkldss73268hdka3e7f083vjhjqurwqrndqd2rcd85pw7vkywnr4dq7yfd59r0g2mw4wzztwr6dcprxzej6"
}
Ne marrim "invoicën" e specifikimeve në këtë rast, e cila është formati i pagesave në rrjetin Bitcoin (dhe Litecoin, për ta thënë kështu, gjithashtu). Ky është një varg që përmban informacion për marrësin, shumën e transaksionit, kohën e skadimit të kërkesës etj., informacione më të detajuara mund të merren duke ekzekutuar decodepay lidhur me këtë varg:
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"
}
Megjithatë, për të paguar këtë 'invoicë', na nevojitet funksioni pay nga 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"
}
TĂ« gjitha statuset e transaksioneve pĂ«rpunohen nga e gjithĂ« rrjeti dhe nodi juaj nĂ« veçanti. Nuk ka nevojĂ« (por ekziston kjo mundĂ«si) tĂ« ndĂ«rveproni me autorĂ«t e aplikacionit-pranues tĂ« pagesĂ«s ose me ndonjĂ« API tĂ« tyre pĂ«r tĂ« marrĂ« informacion mbi statusin e pagesĂ«s. Nuk ka nevojĂ« tĂ« kontrolloni statusin e pagesĂ«s nĂ« sistemin procesues-mesĂ«morrĂ«s. Nuk Ă«shtĂ« e nevojshme tĂ« prisni miratimin e transaksionit tuaj nga banka ose nga ndonjĂ« institucion shtetĂ«ror. NĂ« fund tĂ« fundit, kĂ«tu nuk ka chargebacks dhe faktorĂ« tĂ« tjerĂ« tĂ« jashtĂ«m qĂ« mund tĂ« ndikojnĂ« nĂ« bilancin e llogarisĂ« suaj. Ky Ă«shtĂ« njĂ« solucion pĂ«r tĂ« transferuar vlerĂ« pĂ«rmes rrjetit tĂ« Internetit, pa nevojĂ«n pĂ«r njĂ« arbitĂ«r tĂ« tretĂ«, i cili vendos nĂ«se transaksioni pĂ«rmbush rregullat (ndonjĂ«herĂ« edhe rregullat e brendshme, pĂ«r tĂ« cilat nuk janĂ« tĂ« informuar tĂ« gjithĂ« pjesĂ«marrĂ«sit pĂ«rpara) apo jo. NĂ« Bitcoin nuk ka 'rregulla tĂ« brendshme'. Rregullat e vetme me tĂ« cilat duhet tĂ« ndiqni janĂ« rregullat e rrjetit â tĂ« hapura dhe tĂ« njohura pĂ«r tĂ« gjithĂ«.
Kjo e bën reale direkte, praktikisht falas dhe instant transaksionet financiare midis njerëzve ose programeve në mënyrë plotësisht autonome.
NĂ«se keni mundĂ«sinĂ« tĂ« merrni tĂ« dhĂ«nat e pagesĂ«s nga njĂ« aplikacion tjetĂ«r, atĂ«herĂ« krijohet mundĂ«sia tĂ« ndĂ«rveproni financiarisht me atĂ« aplikacion. Si shembull, mund tĂ« shqyrtojmĂ« shĂ«rbimin lnsms.world, i cili lejon dĂ«rgimin e njĂ« mesazhi SMS nĂ« njĂ« numĂ«r tĂ« rastĂ«sishĂ«m, duke paguar pĂ«r tĂ« me bitcoin. PĂ«r tĂ« integruar kĂ«tĂ« aplikacion, ne duhet thjesht tĂ« kalojmĂ« tĂ« dhĂ«nat nga forma e internetit direkt nĂ« skriptin e dĂ«rgimit tĂ« SMS â tĂ« imitojmĂ« veprimet e pĂ«rdoruesit nĂ« faqen e internetit:
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)
Nuk e di pse, por lnsms pĂ«rgjigjet me kodin 201 tĂ« statusit HTTP dhe kthen njĂ« faturĂ« nĂ« formatin BOLT11. Po, kjo mjafton qĂ« pĂ«rdoruesit e botit tĂ« mund tĂ« paguajnĂ« pĂ«r dĂ«rgimin e SMS nga balanca e tyre tĂ« fituar nĂ« biseda. PĂ«rdoruesi madje nuk e di se çfarĂ« po ndodh, ai thjesht ka paguar disa centĂ« pĂ«r dĂ«rgimin e SMS. Dhe unĂ«, si zhvillues, nuk merrem me detajet e funksionimit tĂ« shĂ«rbimeve tĂ« SMS. Thjesht kalova pagesĂ«n dhe mora shĂ«rbimin. Mund tĂ« vendos njĂ« pĂ«rqindje tĂ« sipĂ«rme, ose jo â kjo Ă«shtĂ« zgjedhja ime e lirĂ«. AsnjĂ« llogari, marrĂ«veshje dhe API tjetĂ«r pĂ«r detyra tĂ« thjeshta si dĂ«rgimi i SMS.
Tani le të imagjinojmë për një moment se aplikacioni ynë është diçka më të dobishme se një chatbot dhe bën pagesa jo për një bot tjetër, por për një aplikacion tjetër ose pajisje të lidhur me internetin. Ose ndoshta janë dhjetëra ose edhe qindra pagesa të padukshme çdo sekondë midis pajisjeve, shërbimeve, dyqaneve ose ndonjë ofruesi shërbimesh. Kjo është fuqia e mikro-pagësve, kështu duhet të duket Interneti i gjërave. Tashmë ekzistojnë projekte si që po e realizojnë këtë ide në jetë dhe në një të ardhme të afërt do të shohim ndryshime të mëdha, sipas mendimit tim, në fushën që tani e quajmë tregtia elektronike.
NĂ«se ju pĂ«lqeu ky postim dhe dĂ«shironi tĂ« provoni bitcoin nĂ« veprim â .
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , ju lutem.
A jeni të interesuar për artikuj të pastër teknikë rreth bitcoin dhe softuerëve përkatës?
Po.
Jo
Më interesojnë më shumë aspektet tregtare të kriptovalutave.
8 përdorues kanë votuar. 4 përdorues janë abstenuar.
Burimi: habr.com
