{"id":38856,"date":"2019-10-31T22:26:22","date_gmt":"2019-10-31T19:26:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/publichnyj-test-reshenie-dlya-privatnosti-i-masshtabiruemosti-v-efiriume\/"},"modified":"2019-10-31T22:26:22","modified_gmt":"2019-10-31T19:26:22","slug":"publichnyj-test-reshenie-dlya-privatnosti-i-masshtabiruemosti-v-efiriume","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/publichnyj-test-reshenie-dlya-privatnosti-i-masshtabiruemosti-v-efiriume","title":{"rendered":"Test i hapur: zgjidhja p\u00ebr privat\u00ebsin\u00eb dhe shkall\u00ebzueshm\u00ebrin\u00eb n\u00eb Ethereum","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b>Blockchain<\/b> \u2014 Teknologji inovative q\u00eb premton t\u00eb p\u00ebrmir\u00ebsoj\u00eb shum\u00eb fusha t\u00eb jet\u00ebs njer\u00ebzore. Ajo transferon proceset dhe produktet reale n\u00eb hap\u00ebsir\u00ebn digjitale, garanton shpejt\u00ebsi dhe besueshm\u00ebri t\u00eb operacioneve financiare, ul kostot e tyre, si dhe mund\u00ebson krijimin e aplikacioneve moderne DAPP duke p\u00ebrdorur kontrata inteligjente n\u00eb rrjete t\u00eb decentralizuara.<\/p>\n<p>Duke marr\u00eb parasysh shum\u00eb p\u00ebrfitimet dhe aplikimet e ndryshme t\u00eb blockchain, mund t\u00eb duket e \u00e7uditshme q\u00eb kjo teknologji premtuese ende nuk ka dep\u00ebrtuar n\u00eb t\u00eb gjitha industrin\u00eb. Problemi \u00ebsht\u00eb se blockchain-et e decentralizuara moderne nuk kan\u00eb shkall\u00ebzim t\u00eb mjaftuesh\u00ebm. Ethereum p\u00ebrpunon rreth 20 transaksione n\u00eb sekond\u00eb, q\u00eb nuk \u00ebsht\u00eb e mjaftueshme p\u00ebr t\u00eb p\u00ebrmbushur nevojat e biznesit dinamik modern. Nd\u00ebrkoh\u00eb, kompanit\u00eb q\u00eb p\u00ebrdorin teknologjin\u00eb blockchain nuk po guxojn\u00eb t\u00eb braktisin Ethereum p\u00ebr shkak t\u00eb nivelit t\u00eb tij t\u00eb lart\u00eb t\u00eb siguris\u00eb kund\u00ebr sulmeve dhe d\u00ebshtimeve t\u00eb rrjetit.<\/p>\n<p>P\u00ebr t\u00eb siguruar decentralizimin, sigurin\u00eb dhe shkall\u00ebzimin n\u00eb blockchain, duke zgjidhur k\u00ebshtu Trilemm\u00ebn e Shkall\u00ebzimit, ekipi i zhvilluesve <noindex><a rel=\"nofollow\" href=\"https:\/\/opporty.com\/\">Opporty<\/a><\/noindex> krijoi Plasma Cash \u2014 nj\u00eb zinxhir dyt\u00ebsor, i p\u00ebrb\u00ebr\u00eb nga nj\u00eb kontrat\u00eb inteligjente dhe nj\u00eb rrjet privat bazuar n\u00eb Node.js, q\u00eb p\u00ebrcjell periodikisht gjendjen e tij n\u00eb zinxhirin themelor (Ethereum).<\/p>\n<p><img decoding=\"async\" alt=\"Test i hapur: zgjidhja p\u00ebr privat\u00ebsin\u00eb dhe shkall\u00ebzueshm\u00ebrin\u00eb n\u00eb Ethereum\" src=\"\/wp-content\/uploads\/2019\/10\/02cc45df3474179d0936c2a86fb7dee3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Proceset ky\u00e7e n\u00eb Plasma Cash<\/h2>\n<p>\n<b>1. <\/b>P\u00ebrdoruesi th\u00ebrret funksionin e kontrat\u00ebs inteligjente `deposit`, duke i kaluar shum\u00ebn n\u00eb ETH q\u00eb d\u00ebshiron t\u00eb vendos\u00eb n\u00eb tokenin Plasma Cash. Funksioni i kontrat\u00ebs inteligjente krijon nj\u00eb token dhe gjeneron nj\u00eb ngjarje rreth k\u00ebsaj.<\/p>\n<p><b>2. <\/b>Nodet e Plasma Cash, t\u00eb n\u00ebnshkruara p\u00ebr ngjarjet e kontrat\u00ebs inteligjente, marrin ngjarjen e krijimit t\u00eb depozit\u00ebs dhe shtojn\u00eb n\u00eb pulin e transaksioneve t\u00eb krijimit t\u00eb tokenit.<\/p>\n<p><b>3. <\/b>Periodikisht, nodet speciale t\u00eb Plasma Cash marrin t\u00eb gjitha transaksionet nga puli (deri n\u00eb 1 milion) dhe formojn\u00eb nj\u00eb bllok prej tyre, llogaritin pem\u00ebn Merkle dhe, p\u00ebrkat\u00ebsisht, hash-in. Ky bllok d\u00ebrgohet nod\u00ebve t\u00eb tjer\u00eb p\u00ebr verifikim. Nodet kontrollojn\u00eb n\u00ebse hash-i Merkle \u00ebsht\u00eb valid, n\u00ebse transaksionet jan\u00eb valide (p.sh., n\u00ebse d\u00ebrguesi i tokenit \u00ebsht\u00eb zot\u00ebruesi i tij). Pas verifikimit t\u00eb bllokut, nodi th\u00ebrret funksionin `submitBlock` t\u00eb kontrat\u00ebs inteligjente, e cila ruan numrin dhe hash-in Merkle t\u00eb bllokut n\u00eb zinxhirin themelor. Kontrata inteligjente gjeneron nj\u00eb ngjarje mbi shtimin e suksesit t\u00eb bllokut. Transaksionet fshihen nga puli. <\/p>\n<p><b>4. <\/b>Nodet q\u00eb kan\u00eb marr\u00eb ngjarjen e dor\u00ebzimit t\u00eb bllokut fillojn\u00eb t\u00eb aplikojn\u00eb transaksionet q\u00eb jan\u00eb shtuar n\u00eb bllok.<\/p>\n<p><b>5. <\/b>N\u00eb nj\u00eb moment, pronari (ose jo pronari) i simbolit d\u00ebshiron ta t\u00ebrheq\u00eb at\u00eb nga Plasma Cash. P\u00ebr k\u00ebt\u00eb, ai th\u00ebrret funksionin `startExit`, duke kaluar n\u00eb t\u00eb informacionin mbi dy transaksionet e fundit p\u00ebr simbolin, t\u00eb cilat konfirmojn\u00eb se ai \u00ebsht\u00eb pronari i simbolit. Kontrata inteligjente, duke p\u00ebrdorur hashin Merkle, verifikon pranin\u00eb e transaksioneve n\u00eb blloqe dhe d\u00ebrgon simbolin p\u00ebr t\u00ebrheqje, e cila do t\u00eb ndodhi pas dy jav\u00ebsh.<\/p>\n<p><b>6. <\/b>N\u00ebse operacioni i t\u00ebrheqjes s\u00eb simbolit ndodhi me shkelje (simboli u shpenzua pas fillimit t\u00eb procedur\u00ebs s\u00eb t\u00ebrheqjes ose simboli p\u00ebrpara t\u00ebrheqjes ishte tashm\u00eb i huaj), pronari i simbolit mund t\u00eb kund\u00ebrshtoj\u00eb t\u00ebrheqjen brenda dy jav\u00ebsh.<\/p>\n<p><img decoding=\"async\" alt=\"Test i hapur: zgjidhja p\u00ebr privat\u00ebsin\u00eb dhe shkall\u00ebzueshm\u00ebrin\u00eb n\u00eb Ethereum\" src=\"\/wp-content\/uploads\/2019\/10\/0626ca6b010eb847175dbfb0b6d7b357.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Privat\u00ebsia arrihet n\u00eb dy m\u00ebnyra<\/h2>\n<p>\n<b>1. <\/b>Pika rr\u00ebnj\u00ebsore nuk di asgj\u00eb p\u00ebr transaksionet q\u00eb formohen dhe d\u00ebrgohen brenda zinxhirit t\u00eb p\u00ebrb\u00ebr\u00eb. Informacioni publik mbetet p\u00ebr at\u00eb kush ka depozituar dhe t\u00ebrhequr ETH n\u00eb\/dal\u00eb nga Plasma Cash.<\/p>\n<p><b>2. <\/b>Zinxhiri i f\u00ebmij\u00ebs lejon organizimin e transaksioneve t\u00eb an\u00ebtar\u00ebsuara, duke p\u00ebrdorur zk-SNARKs.<\/p>\n<h2>Stoku teknologjik<\/h2>\n<p><\/p>\n<ul>\n<li>NodeJS<\/li>\n<li>Redis<\/li>\n<li>Etherium<\/li>\n<li>Soild<\/li>\n<\/ul>\n<p><\/p>\n<h2>Testimi <\/h2>\n<p>\nDuke zhvilluar Plasma Cash, ne testuam shpejt\u00ebsin\u00eb e sistemit dhe mor\u00ebm rezultatet e m\u00ebposhtme:<\/p>\n<ul>\n<li>deri n\u00eb 35,000 transaksione n\u00eb sekund\u00eb shtohen n\u00eb pool;<\/li>\n<li>deri n\u00eb 1,000,000 transaksione mund t\u00eb ruhen n\u00eb bllok.<\/li>\n<\/ul>\n<p>\nTestet u zhvilluan n\u00eb 3 serverat e m\u00ebposht\u00ebm:<\/p>\n<p><i>1. Intel Core i7-6700 Quad-Core Skylake me NVMe SSD - 512 GB, 64 GB DDR4 RAM<\/i><br \/>\n U ngrit\u00ebn 3 nodet valide t\u00eb Plasma Cash.<\/p>\n<p><i>2. AMD Ryzen 7 1700X Octa-Core \"Summit Ridge\" (Zen), SATA SSD - 500 GB, 64 GB DDR4 RAM<\/i><br \/>\n U ngrit nj\u00eb nod\u00eb ETH n\u00eb testnet Ropsten.<br \/>\n U ngrit\u00ebn 3 nodet valide t\u00eb Plasma Cash.<\/p>\n<p><i>3. Intel Core i9-9900K Octa-Core me NVMe SSD - 1 TB, 64 GB DDR4 RAM<\/i><br \/>\n U ngrit nj\u00eb nod\u00eb p\u00ebr dor\u00ebzimin e Plasma Cash.<br \/>\n U ngrit\u00ebn 3 nodet valide t\u00eb Plasma Cash.<br \/>\n U lan\u00e7ua nj\u00eb test p\u00ebr shtimin e transaksioneve n\u00eb rrjetin Plasma Cash.<\/p>\n<p><b>Pra, n\u00eb p\u00ebrfundim: <\/b>10 nodet e Plasma Cash n\u00eb nj\u00eb rrjet privat.<\/p>\n<h3>Testi 1<\/h3>\n<p>\nKa nj\u00eb kufi prej 1 milion transaksionesh n\u00eb bllok. Prandaj, 1 milion transaksione kalojn\u00eb n\u00eb 2 blloqe (pasi sistemi arrin t\u00eb marr\u00eb nj\u00eb pjes\u00eb t\u00eb transaksioneve dhe t\u00eb dor\u00ebzoj\u00eb ndonj\u00ebher\u00eb para se ato t\u00eb d\u00ebrgohen).<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"pKwqyGkEgdQ\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/pKwqyGkEgdQ\/hqdefault.jpg\" alt=\"Luaj videon\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nShteti fillestar: blloku i fundit #7; 1 milion transaksionesh dhe simbole jan\u00eb ruajtur n\u00eb baz\u00eb.<\/p>\n<p>00:00 - nisja e skriptit p\u00ebr gjenerimin e transaksioneve<br \/>\n01:37 - u krijua 1 milion transaksione dhe filloi d\u00ebrgimi n\u00eb nod\u00eb<br \/>\n01:46 - nod\u00eb e dor\u00ebzimit mori nga pool 240k transaksione dhe formon bllokun #8. Po ashtu, shohim se n\u00eb pool shtohen 320k transaksione p\u00ebr 10 sek.<br \/>\n01:58 - blloku #8 \u00ebsht\u00eb n\u00ebnshkruar dhe d\u00ebrguar p\u00ebr validim<br \/>\n02:03 \u2014 blloku #8 \u00ebsht\u00eb verifikuar dhe \u00ebsht\u00eb thirrur funksioni `submitBlock` i kontrat\u00ebs smart me hash Merkle dhe numrin e bllokut<br \/>\n02:10 \u2014 p\u00ebrfundoi skenari demo, i cili d\u00ebrgoi 1 milion transaksione p\u00ebr 32 sekonda<br \/>\n02:33 \u2014 nodet filluan t\u00eb marrin informacion n\u00eb lidhje me bllokun #8 q\u00eb \u00ebsht\u00eb shtuar n\u00eb zinxhirin rr\u00ebnor dhe filluan t\u00eb ekzekutojn\u00eb 240k transaksione<br \/>\n02:40 \u2014 nga puli u hoq\u00ebn 240k transaksione, t\u00eb cilat tashm\u00eb ishin n\u00eb bllokun #8<br \/>\n02:56 \u2014 nodi i dor\u00ebzimit mori nga puli 760k transaksione t\u00eb mbetura dhe filloi t\u00eb llogaris\u00eb hash Merkle dhe t\u00eb n\u00ebnshkruaj\u00eb bllokun #9<br \/>\n03:20 \u2014 t\u00eb gjitha nodet p\u00ebrmbajn\u00eb 1 milion 240k transaksione dhe tokene<br \/>\n03:35 \u2014 blloku #9 \u00ebsht\u00eb n\u00ebnshkruar dhe d\u00ebrgohet p\u00ebr verifikim n\u00eb nodet e tjera <br \/>\n03:41 \u2014 ndodhi nj\u00eb gabim rrjeti<br \/>\n04:40 \u2014 p\u00ebr shkak t\u00eb skadimit, u ndal pritja p\u00ebr verifikimin e bllokut #9<br \/>\n04:54 \u2014 nodi i dor\u00ebzimit mori nga puli 760k transaksione t\u00eb mbetura dhe filloi t\u00eb llogaris\u00eb hash Merkle dhe t\u00eb n\u00ebnshkruaj\u00eb bllokun #9<br \/>\n05:32 \u2014 blloku #9 \u00ebsht\u00eb n\u00ebnshkruar dhe d\u00ebrgohet p\u00ebr verifikim n\u00eb nodet e tjera<br \/>\n05:53 \u2014 blloku #9 \u00ebsht\u00eb verifikuar dhe d\u00ebrguar n\u00eb zinxhirin rr\u00ebnor<br \/>\n06:17 \u2014 nodet filluan t\u00eb marrin informacion n\u00eb lidhje me bllokun #9 q\u00eb \u00ebsht\u00eb shtuar n\u00eb zinxhirin rr\u00ebnor dhe filluan t\u00eb ekzekutojn\u00eb 760k transaksione<br \/>\n06:47 \u2014 puli \u00ebsht\u00eb pastruar nga transaksionet, t\u00eb cilat jan\u00eb n\u00eb bllokun #9<br \/>\n09:06 \u2014 t\u00eb gjitha nodet p\u00ebrmbajn\u00eb 2 milion transaksione dhe tokene<\/p>\n<h3>Test 2<\/h3>\n<p>\nEkziston nj\u00eb limit prej 350k p\u00ebr bllok. Si rezultat, kemi 3 blloqe.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"mpTfTPKYRIc\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/mpTfTPKYRIc\/hqdefault.jpg\" alt=\"Luaj videon\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nStadi i origjin\u00ebs: blloku i fundit #9; n\u00eb baz\u00eb jan\u00eb ruajtur 2 milion transaksione dhe tokene<\/p>\n<p>00:00 \u2014 skenari i gjenerimit t\u00eb transaksioneve \u00ebsht\u00eb tashm\u00eb n\u00eb funksionim<br \/>\n00:44 \u2014 jan\u00eb krijuar 1 milion transaksione dhe \u00ebsht\u00eb nisur d\u00ebrgimi n\u00eb nod<br \/>\n00:56 \u2014 nodi i dor\u00ebzimit mori nga puli 320k transaksione dhe po formon bllokun #10. Gjithashtu shohim se n\u00eb pul \u00ebsht\u00eb shtuar 320k transaksione p\u00ebr 10 sekonda<br \/>\n01:12 \u2014 blloku #10 \u00ebsht\u00eb n\u00ebnshkruar dhe d\u00ebrgohet n\u00eb nodet e tjera p\u00ebr verifikim<br \/>\n01:18 \u2014 skenari demo p\u00ebrfundoi, i cili d\u00ebrgoi 1 milion transaksione p\u00ebr 34 sekonda<br \/>\n01:20 \u2014 blloku #10 \u00ebsht\u00eb verifikuar dhe d\u00ebrguar n\u00eb zinxhirin rr\u00ebnor <br \/>\n01:51 \u2014 t\u00eb gjitha nodet mor\u00ebn nga zinxhiri rr\u00ebnor informacionin n\u00eb lidhje me bllokun #10 q\u00eb \u00ebsht\u00eb shtuar dhe filluan t\u00eb aplikojn\u00eb 320k transaksione<br \/>\n02:01 \u2014 puli \u00ebsht\u00eb pastruar me 320k transaksione, t\u00eb cilat jan\u00eb shtuar n\u00eb bllokun #10<br \/>\n02:15 \u2014 nodi i dor\u00ebzimit mori nga puli 350k transaksione dhe po formon bllokun #11<br \/>\n02:34 \u2014 blloku #11 \u00ebsht\u00eb n\u00ebnshkruar dhe d\u00ebrgohet n\u00eb nodet e tjera p\u00ebr verifikim<br \/>\n02:51 \u2014 blloku #11 \u00ebsht\u00eb verifikuar dhe d\u00ebrguar n\u00eb zinxhirin rr\u00ebnor <br \/>\n02:55 \u2014 nodi i fundit ekzekutoi transaksionet nga blloku #10<br \/>\n10:59 \u2014 nj\u00eb transaksion me d\u00ebrgimin e bllokut #9 u realizua shum\u00eb ngadal\u00eb n\u00eb zinxhirin kryesor, por u p\u00ebrfundua dhe t\u00eb gjitha nodet mor\u00ebn informacion mbi k\u00ebt\u00eb dhe filluan t\u00eb ekzekutojn\u00eb 350k transaksione<br \/>\n11:05 \u2014 pool-u u pastrua me 320k transaksione, t\u00eb cilat u shtuan n\u00eb bllokun #11<br \/>\n12:10 \u2014 t\u00eb gjitha nodet p\u00ebrmbajn\u00eb 1 milion 670k transaksione dhe tokens<br \/>\n12:17 \u2014 nodi i d\u00ebrgimit mori 330k transaksione nga pool dhe po formon bllokun #12<br \/>\n12:32 \u2014 blloku #12 u n\u00ebnshkrua dhe u d\u00ebrgua tek nodet e tjera p\u00ebr validim<br \/>\n12:39 \u2014 blloku #12 u validua dhe u d\u00ebrgua n\u00eb zinxhirin kryesor <br \/>\n13:44 \u2014 t\u00eb gjitha nodet mor\u00ebn informacion nga zinxhiri kryesor se blloku #12 u shtua dhe fillojn\u00eb t\u00eb aplikojn\u00eb 330k transaksione<br \/>\n14:50 \u2014 t\u00eb gjitha nodet p\u00ebrmbajn\u00eb 2 milion transaksione dhe tokens<\/p>\n<h3>Test 3<\/h3>\n<p>\nN\u00eb serverat e par\u00eb dhe t\u00eb dyt\u00eb, nj\u00eb nod validues u z\u00ebvend\u00ebsua me nj\u00eb nod d\u00ebrgimi. <\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"w5QHab3heIc\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/w5QHab3heIc\/hqdefault.jpg\" alt=\"Luaj videon\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nGjat\u00ebsia fillestare: blloku i fundit #84; n\u00eb baz\u00eb ruajti 0 transaksione dhe tokens<\/p>\n<p>00:00 \u2014 U nis\u00ebn 3 skripta, t\u00eb cil\u00ebt gjenerojn\u00eb dhe d\u00ebrgojn\u00eb nga 1 milion transaksione<br \/>\n01:38 \u2014 u krijua 1 milion transaksione dhe filloi d\u00ebrgimi n\u00eb nodin d\u00ebrgues #3<br \/>\n01:50 \u2014 nodi d\u00ebrgues #3 mori 330k transaksione nga pool dhe po formon bllokun #85 (f21). Po ashtu, shohim se n\u00eb pool shtohen 350k transaksione brenda 10 sekondave<br \/>\n01:53 \u2014 u krijua 1 milion transaksione dhe filloi d\u00ebrgimi n\u00eb nodin d\u00ebrgues #1<br \/>\n01:50 \u2014 nodi d\u00ebrgues #3 mori 330k transaksione nga pool dhe po formon bllokun #85 (f21). Po ashtu, shohim se n\u00eb pool shtohen 350k transaksione brenda 10 sekondave<br \/>\n02:01 \u2014 nodi d\u00ebrgues #1 mori 250k transaksione nga pool dhe po formon bllokun #85 (65e)<br \/>\n02:06 \u2014 blloku #85 (f21) u n\u00ebnshkrua dhe u d\u00ebrgua tek nodet e tjera p\u00ebr validim<br \/>\n02:08 \u2014 demostrapti i serverit #3 p\u00ebrfundoi pun\u00ebn, i cili d\u00ebrgoi 1 milion transaksione brenda 30 sekondash<br \/>\n02:14 \u2014 blloku #85 (f21) u validua dhe u d\u00ebrgua n\u00eb zinxhirin kryesor <br \/>\n02:19 \u2014 blloku #85 (65e) u n\u00ebnshkrua dhe u d\u00ebrgua tek nodet e tjera p\u00ebr validim<br \/>\n02:22 \u2014 u krijua 1 milion transaksione dhe filloi d\u00ebrgimi n\u00eb nodin d\u00ebrgues #2<br \/>\n02:27 \u2014 blloku #85 (65e) u validua dhe u d\u00ebrgua n\u00eb zinxhirin kryesor <br \/>\n02:29 \u2014 nodi d\u00ebrgues #2 mori 111855 transaksione nga pool dhe po formon bllokun #85 (256).<br \/>\n02:36 \u2014 blloku #85 (256) u n\u00ebnshkrua dhe u d\u00ebrgua tek nodet e tjera p\u00ebr validim<br \/>\n02:36 \u2014 demostrapti i serverit #1 p\u00ebrfundoi pun\u00ebn, i cili d\u00ebrgoi 1 milion transaksione brenda 42.5 sekondash<br \/>\n02:38 \u2014 blloku #85 (256) u validua dhe u d\u00ebrgua n\u00eb zinxhirin kryesor<br \/>\n03:08 \u2014 demostrapti i serverit #2 p\u00ebrfundoi pun\u00ebn, i cili d\u00ebrgoi 1 milion transaksione brenda 47 sekondash <br \/>\n03:38 \u2014 t\u00eb gjitha nodet mor\u00ebn informacion nga zinxhiri kryesor p\u00ebr t\u00eb treguar se blloqet #85 (f21), #86 (65e), #87 (256) u shtuan dhe fillojn\u00eb t\u00eb aplikojn\u00eb 330k, 250k, 111855 transaksione<br \/>\n03:49 \u2014 pooli u pastruar 330k, 250k, 111855 transaksione, t\u00eb cilat u shtuan n\u00eb blloqet #85 (f21), #86(65e), #87(256)<br \/>\n03:59 \u2014 submissi i nod\u00ebs #1 mori nga pool 888145 transaksione dhe po formon bllokun #88 (214), submissi i nod\u00ebs #2 mori nga pool 750k transaksione dhe po formon bllokun #88 (50a), submissi i nod\u00ebs #3 mori nga pool 670k transaksione dhe po formon bllokun #88 (d3b)<br \/>\n04:44 \u2014 blloku #88 (d3b) \u00ebsht\u00eb n\u00ebnshkruar dhe d\u00ebrgohet n\u00eb nodat e tjera p\u00ebr validim<br \/>\n04:58 \u2014 blloku #88 (214) \u00ebsht\u00eb n\u00ebnshkruar dhe d\u00ebrgohet n\u00eb nodat e tjera p\u00ebr validim<br \/>\n05:11 \u2014 blloku #88 (50a) \u00ebsht\u00eb n\u00ebnshkruar dhe d\u00ebrgohet n\u00eb nodat e tjera p\u00ebr validim<br \/>\n05:11 \u2014 blloku #85 (d3b) \u00ebsht\u00eb validuar dhe d\u00ebrguar n\u00eb zinxhirin rr\u00ebnjor <br \/>\n05:36 \u2014 blloku #85 (214) \u00ebsht\u00eb validuar dhe d\u00ebrguar n\u00eb zinxhirin rr\u00ebnjor <br \/>\n05:43 \u2014 t\u00eb gjitha nodat mor\u00ebn nga zinxhiri rr\u00ebnjor informacionin se blloqet #88 (d3b), #89(214) jan\u00eb shtuar dhe fillojn\u00eb t\u00eb aplikojn\u00eb 670k, 750k transaksione<br \/>\n06:50 \u2014 p\u00ebr shkak t\u00eb nd\u00ebrprerjes s\u00eb lidhjes blloku #85 (50a) nuk u validua<br \/>\n06:55 \u2014 submissi i nod\u00ebs #2 mori nga pool 888145 transaksione dhe po formon bllokun #90 (50a)<br \/>\n08:14 \u2014 blloku #90 (50a) \u00ebsht\u00eb n\u00ebnshkruar dhe d\u00ebrgohet n\u00eb nodat e tjera p\u00ebr validim<br \/>\n09:04 \u2014 blloku #90 (50a) \u00ebsht\u00eb validuar dhe d\u00ebrguar n\u00eb zinxhirin rr\u00ebnjor <br \/>\n11:23 \u2014 t\u00eb gjitha nodat mor\u00ebn nga zinxhiri rr\u00ebnjor informacionin se blloku #90 (50a) \u00ebsht\u00eb shtuar dhe fillojn\u00eb t\u00eb aplikojn\u00eb 888145 transaksione. Nd\u00ebrkoh\u00eb, serveri #3 ka aplikuar prej koh\u00ebsh transaksionet nga blloqet #88 (d3b), #89(214)<br \/>\n12:11 \u2014 t\u00eb gjitha pool-et jan\u00eb bosh<br \/>\n13:41 \u2014 t\u00eb gjitha nodat e serverit #3 p\u00ebrmbajn\u00eb 3 milion transaksione dhe token-e<br \/>\n14:35 \u2014 t\u00eb gjitha nodat e serverit #1 p\u00ebrmbajn\u00eb 3 milion transaksione dhe token-e<br \/>\n19:24 \u2014 t\u00eb gjitha nodat e serverit #2 p\u00ebrmbajn\u00eb 3 milion transaksione dhe token-e <\/p>\n<h2>Pengesat<\/h2>\n<p>\nGjat\u00eb zhvillimit t\u00eb Plasma Cash ne u p\u00ebrball\u00ebm me k\u00ebto probleme, t\u00eb cilat i zgjidhim gradualisht:<\/p>\n<p><b>1.<\/b> Konflikti i nd\u00ebrveprimit t\u00eb funksioneve t\u00eb ndryshme t\u00eb sistemit. P\u00ebr shembull, funksioni i shtimit t\u00eb transaksioneve n\u00eb pool bllokoi pun\u00ebn e submissi dhe validimit t\u00eb blloqeve, dhe anasjelltas, \u00e7ka \u00e7oi n\u00eb uljen e shpejt\u00ebsis\u00eb.<\/p>\n<p><b>2. <\/b>Nuk ishte e qart\u00eb se si t\u00eb d\u00ebrgonim nj\u00eb num\u00ebr t\u00eb madh transaksionesh dhe n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb t\u00eb minimizonim shpenzimet p\u00ebr transferimin e t\u00eb dh\u00ebnave.<\/p>\n<p><b>3. <\/b>Nuk ishte e qart\u00eb se si dhe ku t\u00eb ruanim t\u00eb dh\u00ebnat p\u00ebr t\u00eb arritur rezultate t\u00eb larta.<\/p>\n<p><b>4. <\/b>Nuk ishte e qart\u00eb se si t\u00eb organizonim rrjetin mes nodave, pasi madh\u00ebsia e bllokut me 1 milion transaksione merr rreth 100 Mb.<\/p>\n<p><b>5.<\/b> Puna n\u00eb m\u00ebnyr\u00eb nj\u00ebra me nj\u00eb tjet\u00ebr prish lidhjen mes nod\u00ebve kur ndodhin llogaritje t\u00eb gjat\u00eb (p.sh., nd\u00ebrtimi i pem\u00ebs Merkle dhe llogaritja e hash-it t\u00eb saj).<\/p>\n<h2>Si e p\u00ebrball\u00ebm gjith\u00eb k\u00ebt\u00eb?<\/h2>\n<p>\nVersioni i par\u00eb i nod\u00ebs Plasma Cash ishte nj\u00eb lloj kombajni q\u00eb mund t\u00eb b\u00ebnte gjith\u00e7ka nj\u00ebher\u00ebsh: merrte transaksione, dor\u00ebzonte dhe validonte blloqe, ofronte nj\u00eb API p\u00ebr akses n\u00eb t\u00eb dh\u00ebna. Pasi NodeJS \u00ebsht\u00eb fillimisht nj\u00eb proces nj\u00ebra, funksioni i r\u00ebnd\u00eb i llogaritjes s\u00eb pem\u00ebs Merkle bllokonte funksionin e shtimit t\u00eb transaksionit. Ne shihnim dy zgjidhje p\u00ebr k\u00ebt\u00eb problem:<\/p>\n<p><b>1. <\/b>T\u00eb nisim disa procese NodeJS, secili prej t\u00eb cil\u00ebve kryen funksione t\u00eb caktuara.<\/p>\n<p><b>2. <\/b>T\u00eb p\u00ebrdorim worker_threads dhe ta \u00e7ojm\u00eb ekzekutimin e disa kodit n\u00eb procese t\u00eb ndara.<\/p>\n<p>N\u00eb fund, ne p\u00ebrdor\u00ebm t\u00eb dyja zgjidhjet nj\u00ebkoh\u00ebsisht: e ndam\u00eb logjikisht nj\u00eb nod\u00eb n\u00eb 3 pjes\u00eb, t\u00eb cilat mund t\u00eb funksionojn\u00eb ve\u00e7mas, por nj\u00ebkoh\u00ebsisht.<\/p>\n<p><b>1.<\/b> Noda e dor\u00ebzimit, e cila merr transaksione n\u00eb pool dhe merret me krijimin e blloqeve.<\/p>\n<p><b>2.<\/b> Noda e validimit, e cila kontrollon vlefshm\u00ebrin\u00eb e nodave.<\/p>\n<p><b>3. <\/b>Noda API - ofron API p\u00ebr akses n\u00eb t\u00eb dh\u00ebna.<\/p>\n<p>N\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb, \u00e7do nod\u00eb mund t\u00eb lidhet p\u00ebrmes unix socket p\u00ebrmes CLI.<\/p>\n<p>Operacionet e r\u00ebnda, t\u00eb tilla si llogaritja e pem\u00ebs Merkle, i kemi \u00e7uar n\u00eb nj\u00eb rrjedh\u00eb t\u00eb ve\u00e7ant\u00eb.<\/p>\n<p>N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, arrit\u00ebm t\u00eb siguronim funksionimin normal t\u00eb t\u00eb gjitha funksioneve t\u00eb Plasma Cash nj\u00ebkoh\u00ebsisht dhe pa prishje.<\/p>\n<p>Pasi sistemi filloi t\u00eb funksiononte, filluam t\u00eb testonim shpejt\u00ebsin\u00eb dhe, fatkeq\u00ebsisht, mor\u00ebm rezultate t\u00eb pak\u00ebnaqshme: 5,000 transaksione n\u00eb sekond\u00eb dhe deri n\u00eb 50,000 transaksione n\u00eb bllok. Na duhej t\u00eb zbulojm\u00eb se \u00e7far\u00eb ishte implementuar gabimisht.<\/p>\n<p>Fillimisht, nis\u00ebm testimin e mekanizmit t\u00eb komunikimit me Plasma Cash p\u00ebr t\u00eb zbuluar kapacitetin maksimal t\u00eb sistemit. M\u00eb par\u00eb, kishim shkruar se nodi Plasma Cash ofron nj\u00eb nd\u00ebrfaqe unix socket. N\u00eb fillim, ajo ishte tekstuale. Objektet json d\u00ebrgoheshin duke p\u00ebrdorur `JSON.parse()` dhe `JSON.stringify()`. <\/p>\n<pre><code class=\"plaintext\">{\n  \"action\": \"sendTransaction\",\n  \"payload\":{\n    \"prevHash\": \"0x8a88cc4217745fd0b4eb161f6923235da10593be66b841d47da86b9cd95d93e0\",\n    \"prevBlock\": 41,\n    \"tokenId\": \"57570139642005649136210751546585740989890521125187435281313126554130572876445\",\n    \"newOwner\": \"0x200eabe5b26e547446ae5821622892291632d4f4\",\n    \"type\": \"pay\",\n    \"data\": \"\",\n    \"signature\": \"0xd1107d0c6df15e01e168e631a386363c72206cb75b233f8f3cf883134854967e1cd9b3306cc5c0ce58f0a7397ae9b2487501b56695fe3a3c90ec0f61c7ea4a721c\"\n  }\n}\n<\/code><\/pre>\n<p>\nNe mat\u00ebm shpejt\u00ebsin\u00eb e d\u00ebrgimit t\u00eb k\u00ebtyre objekteve dhe mor\u00ebm ~ 130k n\u00eb sekond\u00eb. Provuan t\u00eb z\u00ebvend\u00ebsojn\u00eb funksionet standarde p\u00ebr pun\u00ebs me json, por performanca nuk u rrit. Duhet t\u00eb jet\u00eb q\u00eb motori V8 \u00ebsht\u00eb optimizuar mir\u00eb p\u00ebr k\u00ebto operacione.<\/p>\n<p>Puna me transaksionet, token\u00ebt, bloket \u00ebsht\u00eb realizuar p\u00ebrmes klasave. Kur krijuam k\u00ebto klasa, performanca ra p\u00ebr 2 her\u00eb, q\u00eb tregon se: OOP nuk na p\u00ebrshtatet. Duhet t\u00eb rikodojm\u00eb gjith\u00e7ka n\u00eb nj\u00eb qasje n\u00eb m\u00ebnyr\u00eb funksionale.<\/p>\n<h2>Shkruaj n\u00eb baz\u00eb t\u00eb t\u00eb dh\u00ebnave<\/h2>\n<p>\nFillimisht, p\u00ebr ruajtjen e t\u00eb dh\u00ebnave u zgjodh Redis si nj\u00eb nga zgjidhjet m\u00eb t\u00eb performuara q\u00eb plot\u00ebsonte k\u00ebrkesat tona: depozit\u00eb key-value, pun\u00eb me tabela hash, grupe. Lan\u00eb redis-benchmark dhe mor\u00ebn ~80k operacione n\u00eb sekond\u00eb n\u00eb modalitetin 1 pipelining.<\/p>\n<p>P\u00ebr performanc\u00eb t\u00eb lart\u00eb, e kemi konfiguruar Redis m\u00eb holl\u00ebsisht: <\/p>\n<ul>\n<li>Vendos\u00ebm lidhjen me soket unix.<\/li>\n<li>\u00c7aktivizuam ruajtjen e gjendjes n\u00eb disk (p\u00ebr besueshm\u00ebri, mund t\u00eb konfigurohet nj\u00eb replik\u00eb dhe t\u00eb b\u00ebhet ruajtja n\u00eb disk n\u00eb nj\u00eb Redis t\u00eb ve\u00e7ant\u00eb).<\/li>\n<\/ul>\n<p>\nN\u00eb Redis, pool \u00ebsht\u00eb nj\u00eb tabel\u00eb hash, pasi na nevojitet mund\u00ebsia p\u00ebr t\u00eb marr\u00eb t\u00eb gjitha transaksionet me nj\u00eb k\u00ebrkes\u00eb dhe p\u00ebr t\u00eb fshir\u00eb transaksionet nj\u00eb nga nj\u00eb. Provuan t\u00eb p\u00ebrdorin nj\u00eb list\u00eb t\u00eb zakonshme, por ajo punon m\u00eb ngadal\u00eb gjat\u00eb shkarkimit t\u00eb gjith\u00eb list\u00ebs. <\/p>\n<p>Duke p\u00ebrdorur bibliotek\u00ebn standarde NodeJS p\u00ebr Redis, mor\u00ebm nj\u00eb performanc\u00eb prej 18k transaksionesh n\u00eb sekond\u00eb. Shpejt\u00ebsia ra n\u00eb 9 her\u00eb. <\/p>\n<p>Sepse benchmarku na tregoi nj\u00eb kapacitet kolonialisht 5 her\u00eb m\u00eb shum\u00eb, filluam t\u00eb optimizojm\u00eb. E z\u00ebvend\u00ebsuam bibliotek\u00ebn me ioredisk dhe mor\u00ebm nj\u00eb performanc\u00eb prej 25k n\u00eb sekond\u00eb. Transaksionet i shtonim nj\u00eb nga nj\u00eb, duke p\u00ebrdorur komand\u00ebn `hset`. K\u00ebshtu, gjeneronim shum\u00eb k\u00ebrkesa n\u00eb Redis. Lind\u00ebn iden\u00eb p\u00ebr t\u00eb bashkuar transaksionet n\u00eb grupe dhe p\u00ebr t'i d\u00ebrguar ata me nj\u00eb komand\u00eb `hmset`. Rezultati \u2014 32k n\u00eb sekond\u00eb. <\/p>\n<p>P\u00ebr disa arsye, q\u00eb do t'i p\u00ebrshkruajm\u00eb m\u00eb posht\u00eb, ne punojm\u00eb me t\u00eb dh\u00ebnat duke p\u00ebrdorur `Buffer` dhe, si\u00e7 doli, n\u00ebse e kthejm\u00eb at\u00eb n\u00eb tekst (`buffer.toString('hex')`) para se ta shkruajm\u00eb, mund t\u00eb arrijm\u00eb performanc\u00eb shtes\u00eb. K\u00ebshtu, suksessh\u00ebm arrit\u00ebm t\u00eb rrisim shpejt\u00ebsin\u00eb deri n\u00eb 35,000 n\u00eb sekond\u00eb. N\u00eb k\u00ebt\u00eb moment, vendos\u00ebm t\u00eb ndalim optimizimin e m\u00ebtejsh\u00ebm.<\/p>\n<p>Na duhej t\u00eb kalonim n\u00eb protokollin binar pasi:<\/p>\n<p><b>1. <\/b>Sistemi shpesh llogarit hashet, n\u00ebnshkrimet etj., dhe p\u00ebr k\u00ebt\u00eb i nevojiten t\u00eb dh\u00ebnat n\u00eb `Buffer.<\/p>\n<p><b>2.<\/b> Kur transferimi midis sh\u00ebrbimeve, t\u00eb dh\u00ebnat binar kan\u00eb nj\u00eb pesh\u00eb m\u00eb t\u00eb vog\u00ebl se sa tekstet. P\u00ebr shembull, kur d\u00ebrgohet nj\u00eb bllok me 1 milion transaksione, t\u00eb dh\u00ebnat n\u00eb tekst mund t\u00eb z\u00ebn\u00eb m\u00eb shum\u00eb se 300 megabajt.<\/p>\n<p><b>3.<\/b> Konvertimi i vazhduesh\u00ebm i t\u00eb dh\u00ebnave ndikon n\u00eb performanc\u00eb.<\/p>\n<p>Prandaj, ne kemi marr\u00eb si baz\u00eb protokollin ton\u00eb binar p\u00ebr ruajtjen dhe transferimin e t\u00eb dh\u00ebnave, t\u00eb zhvilluar mbi baz\u00ebn e bibliotek\u00ebs s\u00eb shk\u00eblqyer `binary-data`.<\/p>\n<p>Si rezultat, ne kemi krijuar strukturat e m\u00ebposhtme t\u00eb dh\u00ebnash:<\/p>\n<h3> \u2014 Transaction<\/h3>\n<p><\/p>\n<pre><code class=\"plaintext\">  ```json\n  {\n    prevHash: BD.types.buffer(20),\n    prevBlock: BD.types.uint24le,\n    tokenId: BD.types.string(null),\n    type: BD.types.uint8,\n    newOwner: BD.types.buffer(20),\n    dataLength: BD.types.uint24le,\n    data: BD.types.buffer(({current}) =&gt; current.dataLength),\n    signature: BD.types.buffer(65),\n    hash: BD.types.buffer(32),\n    blockNumber: BD.types.uint24le,\n    timestamp: BD.types.uint48le,\n  }\n  ```\n<\/code><\/pre>\n<p><\/p>\n<h3> \u2014 Token<\/h3>\n<p><\/p>\n<pre><code class=\"plaintext\">  ```json\n  {\n    id: BD.types.string(null),\n    owner: BD.types.buffer(20),\n    block: BD.types.uint24le,\n    amount: BD.types.string(null),\n  }\n  ```\n<\/code><\/pre>\n<p><\/p>\n<h3> \u2014 Block<\/h3>\n<p><\/p>\n<pre><code class=\"plaintext\">  ```json\n  {\n    number: BD.types.uint24le,\n    merkleRootHash: BD.types.buffer(32),\n    signature: BD.types.buffer(65),\n    countTx: BD.types.uint24le,\n    transactions: BD.types.array(Transaction.Protocol, ({current}) =&gt; current.countTx),\n    timestamp: BD.types.uint48le,\n  }\n  ```\n<\/code><\/pre>\n<p>\nMe komandat e zakonshme `BD.encode(block, Protocol).slice();` dhe `BD.decode(buffer, Protocol)` ne e kthejm\u00eb t\u00eb dh\u00ebnat n\u00eb `Buffer` p\u00ebr ruajtje n\u00eb Redis ose d\u00ebrgim n\u00eb nod tjet\u00ebr dhe nxjerrjen e t\u00eb dh\u00ebnave p\u00ebrs\u00ebri.<\/p>\n<p>Po ashtu kemi dy protokolle binare p\u00ebr transferimin e t\u00eb dh\u00ebnave midis sh\u00ebrbimeve:<\/p>\n<p><i> \u2014 Protokolli p\u00ebr nd\u00ebrveprimin me Plasma Node p\u00ebrmes socket unix<\/i><\/p>\n<pre><code class=\"plaintext\">  ```json\n  {\n    type: BD.types.uint8,\n    messageId: BD.types.uint24le,\n    error: BD.types.uint8,\n    length: BD.types.uint24le,\n    payload: BD.types.buffer(({node}) =&gt; node.length)\n  }\n  ```\n<\/code><\/pre>\n<p>\n ku:<\/p>\n<ul>\n<li> <b>`type`<\/b> \u2014 veprimi q\u00eb duhet t\u00eb kryhet, p\u00ebr shembull, 1 \u2014 sendTransaction, 2 \u2014 getTransaction;<\/li>\n<li> <b>`payload`<\/b> \u2014 t\u00eb dh\u00ebnat q\u00eb duhet t\u00eb d\u00ebrgohen n\u00eb funksionin p\u00ebrkat\u00ebs;<\/li>\n<li> <b>`messageId`<\/b> \u2014 id e mesazhit p\u00ebr t\u00eb identifikuar p\u00ebrgjigjen. <\/li>\n<\/ul>\n<p>\n<i> \u2014 Protokolli i nd\u00ebrveprimit midis nodave<\/i><\/p>\n<pre><code class=\"plaintext\">  ```json\n  {\n    code: BD.types.uint8,\n    versionProtocol: BD.types.uint24le,\n    seq: BD.types.uint8,\n    countChunk: BD.types.uint24le,\n    chunkNumber: BD.types.uint24le,\n    length: BD.types.uint24le,\n    payload: BD.types.buffer(({node}) =&gt; node.length)\n  }\n  ```\n<\/code><\/pre>\n<p>\n ku:<\/p>\n<ul>\n<li> <b>`code`<\/b> \u2014 kodi i mesazhit, p\u00ebr shembull 6 \u2014 PREPARE_NEW_BLOCK, 7 \u2014 BLOCK_VALID, 8 \u2014 BLOCK_COMMIT;<\/li>\n<li> <b>`versionProtocol`<\/b> \u2014 versioni i protokollit, pasi n\u00eb rrjet mund t\u00eb ket\u00eb nod t\u00eb l\u00ebshuara me versione t\u00eb ndryshme dhe ato mund t\u00eb funksionojn\u00eb ndryshe;<\/li>\n<li> <b>`seq`<\/b> \u2014 identifikuesi i mesazhit;<\/li>\n<li> <b>`countChunk`<\/b> dhe <b>`chunkNumber`<\/b> nevojiten p\u00ebr ndarjen e mesazheve t\u00eb m\u00ebdha;<\/li>\n<li> <b>`length`<\/b> dhe <b>`payload`<\/b> gjat\u00ebsia dhe vet\u00eb t\u00eb dh\u00ebnat.<\/li>\n<\/ul>\n<p>\nPasi we parapem p\u00ebrpara t\u00eb dh\u00ebnat, sistemi p\u00ebrfundimtar punon shum\u00eb m\u00eb shpejt se biblioteka `rlp` e Ethereum. Fatkeq\u00ebsisht, ne nuk kemi arritur ende t\u00eb heqim dor\u00eb nga ajo, pasi \u00ebsht\u00eb e nevojshme t\u00eb p\u00ebrfundojm\u00eb kontrat\u00ebn e men\u00e7ur, gj\u00eb q\u00eb ne planifikojm\u00eb ta b\u00ebjm\u00eb n\u00eb t\u00eb ardhmen.<\/p>\n<p>N\u00ebse arrit\u00ebm t\u00eb arrijm\u00eb shpejt\u00ebsin\u00eb <b>35 000<\/b> e transaksioneve p\u00ebr sekond\u00eb, na nevojitet gjithashtu t'i p\u00ebrpunojm\u00eb ato brenda koh\u00ebs optimale. Pasi koha e p\u00ebraf\u00ebrt e formimit t\u00eb bllokut merr 30 sekonda, na nevojitet t\u00eb p\u00ebrfshijm\u00eb n\u00eb bllok <b>1 000 000<\/b> transaksione, q\u00eb do t\u00eb thot\u00eb d\u00ebrgim t\u00eb m\u00eb shum\u00eb <b>100<\/b> mb t\u00eb dh\u00ebnash. <\/p>\n<p>Fillimisht kemi p\u00ebrdorur bibliotek\u00ebn `ethereumjs-devp2p` p\u00ebr komunikimin e node-ve, por ajo nuk ishte n\u00eb gjendje t\u00eb p\u00ebrballonte nj\u00eb kaq shum\u00eb t\u00eb dh\u00ebna. Si rezultat, kemi p\u00ebrdorur bibliotek\u00ebn `ws` dhe kemi konfiguruar d\u00ebrgimin e t\u00eb dh\u00ebnave t\u00eb binarizuara p\u00ebrmes websocket. Sigurisht, ne gjithashtu u p\u00ebrball\u00ebm me probleme gjat\u00eb d\u00ebrgimit t\u00eb paketeve t\u00eb m\u00ebdha t\u00eb t\u00eb dh\u00ebnave, por i ndam\u00eb ato n\u00eb pjes\u00eb dhe tani k\u00ebto probleme nuk ekzistojn\u00eb m\u00eb.<\/p>\n<p>Gjithashtu, formimi i pem\u00ebs s\u00eb Merkle dhe llogaritja e hash-it <b>1 000 000<\/b> t\u00eb transaksioneve k\u00ebrkon rreth<b> 10<\/b> sekonda llogaritjeje t\u00eb vazhdueshme. Gjat\u00eb k\u00ebsaj kohe, lidhja me t\u00eb gjitha node-t priret t\u00eb p\u00ebrfundoj\u00eb. U vendos t\u00eb transferohet kjo llogaritje n\u00eb nj\u00eb thread t\u00eb ve\u00e7ant\u00eb.<\/p>\n<h2>P\u00ebrfundimet:<\/h2>\n<p>\nN\u00eb t\u00eb v\u00ebrtet\u00eb, p\u00ebrfundimet tona nuk jan\u00eb t\u00eb reja, por p\u00ebr arsye t\u00eb panjohura, shum\u00eb specialist\u00eb i harrojn\u00eb ato gjat\u00eb zhvillimit. <\/p>\n<ul>\n<li>P\u00ebrdorimi i Programimit Funksional n\u00eb vend t\u00eb Programimit Objektor rrit produktivitetin.<\/li>\n<li>Monoliti \u00ebsht\u00eb m\u00eb i keq se arkitektura e sh\u00ebrbimeve p\u00ebr nj\u00eb sistem produktiv n\u00eb NodeJS.<\/li>\n<li>P\u00ebrdorimi i `worker_threads` p\u00ebr llogaritje t\u00eb r\u00ebnda p\u00ebrmir\u00ebson reagimin e sistemit, ve\u00e7an\u00ebrisht gjat\u00eb operacioneve i\/o.<\/li>\n<li>socket unix \u00ebsht\u00eb m\u00eb i stabilizuar dhe m\u00eb i shpejt\u00eb se k\u00ebrkesat http.<\/li>\n<li>N\u00ebse nevojitet t\u00eb d\u00ebrgoni shpejt t\u00eb dh\u00ebna t\u00eb m\u00ebdha p\u00ebrmes rrjetit, \u00ebsht\u00eb m\u00eb mir\u00eb t\u00eb p\u00ebrdorni websocket dhe t\u00eb d\u00ebrgoni t\u00eb dh\u00ebna binar\u00eb t\u00eb ndara n\u00eb pjes\u00eb, t\u00eb cilat mund t\u00eb d\u00ebrgohen p\u00ebrs\u00ebri n\u00ebse nuk arrijn\u00eb, dhe p\u00ebr m\u00eb tep\u00ebr t\u00eb bashkohen n\u00eb nj\u00eb mesazh t\u00eb vet\u00ebm.<\/li>\n<\/ul>\n<p>\nJu ftojm\u00eb t\u00eb vizitoni <b>GitHub<\/b> projekti: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opporty-com\/Plasma-Cash\/tree\/new-version\">https:\/\/github.com\/opporty-com\/Plasma-Cash\/tree\/new-version<\/a><\/noindex><\/p>\n<p>Artikulli \u00ebsht\u00eb shkruar n\u00eb bashk\u00ebautori me <i>Aleksand\u00ebr Nashivanin<\/i>, zhvilluesi i lart\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/clever-solution.com\/\">Clever Solution Inc<\/a><\/noindex>.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/471096\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0411\u043b\u043e\u043a\u0447\u0435\u0439\u043d \u2014 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043e\u0431\u0435\u0449\u0430\u044e\u0449\u0430\u044f \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0444\u0435\u0440\u044b \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0439 \u0436\u0438\u0437\u043d\u0438. \u041e\u043d\u0430 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0432 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u0438\u0445 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 DAPP \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0432 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0438 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0444\u0435\u0440\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u044d\u0442\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29146,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38856","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0411\u043b\u043e\u043a\u0447\u0435\u0439\u043d \u2014 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043e\u0431\u0435\u0449\u0430\u044e\u0449\u0430\u044f \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0444\u0435\u0440\u044b \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0439 \u0436\u0438\u0437\u043d\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/publichnyj-test-reshenie-dlya-privatnosti-i-masshtabiruemosti-v-efiriume\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0435\u0441\u0442: \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0432 \u042d\u0444\u0438\u0440\u0438\u0443\u043c\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0411\u043b\u043e\u043a\u0447\u0435\u0439\u043d \u2014 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043e\u0431\u0435\u0449\u0430\u044e\u0449\u0430\u044f \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0444\u0435\u0440\u044b \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0439 \u0436\u0438\u0437\u043d\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/publichnyj-test-reshenie-dlya-privatnosti-i-masshtabiruemosti-v-efiriume\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:26:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:26:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Testi publik: zgjidhje p\u00ebr intimitet dhe shkall\u00ebzim n\u00eb Ethereum | ProHoster","description":"Blockchain \u00ebsht\u00eb nj\u00eb teknologji inovative q\u00eb premton t\u00eb p\u00ebrmir\u00ebsoj\u00eb shum\u00eb fusha t\u00eb jet\u00ebs njer\u00ebzore.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/publichnyj-test-reshenie-dlya-privatnosti-i-masshtabiruemosti-v-efiriume","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0442\u0435\u0441\u0442: \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0432 \u042d\u0444\u0438\u0440\u0438\u0443\u043c\u0435 | ProHoster","og:description":"\u0411\u043b\u043e\u043a\u0447\u0435\u0439\u043d \u2014 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u043e\u0431\u0435\u0449\u0430\u044e\u0449\u0430\u044f \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u0444\u0435\u0440\u044b \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0439 \u0436\u0438\u0437\u043d\u0438.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/publichnyj-test-reshenie-dlya-privatnosti-i-masshtabiruemosti-v-efiriume","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:26:22+00:00","article:modified_time":"2019-10-31T19:26:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38856","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 23:42:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:15:36","updated":"2026-01-23 23:42:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/38856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=38856"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/38856\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/29146"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=38856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=38856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=38856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}