{"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\/hu\/blog\/administrirovanie\/publichnyj-test-reshenie-dlya-privatnosti-i-masshtabiruemosti-v-efiriume","title":{"rendered":"Nyilv\u00e1nos teszt: megold\u00e1s a mag\u00e1n\u00e9let v\u00e9delm\u00e9re \u00e9s a sk\u00e1l\u00e1zhat\u00f3s\u00e1gra az Ethereumon","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><b>Blokkl\u00e1nc<\/b> \u2014 egy innovat\u00edv technol\u00f3gia, amely \u00edg\u00e9retet tesz arra, hogy jav\u00edtja az emberi \u00e9let sz\u00e1mos ter\u00fclet\u00e9t. Ez a technol\u00f3gia a val\u00f3s folyamatokat \u00e9s term\u00e9keket \u00e1thelyezi a digit\u00e1lis t\u00e9rbe, biztos\u00edtja a p\u00e9nz\u00fcgyi tranzakci\u00f3k sebess\u00e9g\u00e9t \u00e9s megb\u00edzhat\u00f3s\u00e1g\u00e1t, cs\u00f6kkenti azok k\u00f6lts\u00e9geit, valamint lehet\u0151v\u00e9 teszi modern DAPP-alkalmaz\u00e1sok l\u00e9trehoz\u00e1s\u00e1t intelligens szerz\u0151d\u00e9sek seg\u00edts\u00e9g\u00e9vel decentraliz\u00e1lt h\u00e1l\u00f3zatokban.<\/p>\n<p>Figyelembe v\u00e9ve a blockchain sz\u00e1mos el\u0151ny\u00e9t \u00e9s alkalmaz\u00e1si ter\u00fclet\u00e9t, furcs\u00e1nak t\u0171nhet, hogy ez a sokat \u00edg\u00e9r\u0151 technol\u00f3gia m\u00e9g nem hatolt be minden ipar\u00e1gba. A probl\u00e9ma az, hogy a modern decentraliz\u00e1lt blockchainek m\u00e9retezhet\u0151s\u00e9ge hi\u00e1nyzik. Az Ethereum k\u00f6r\u00fclbel\u00fcl 20 tranzakci\u00f3t kezel m\u00e1sodpercenk\u00e9nt, ami nem elegend\u0151 a modern dinamikus \u00fczleti ig\u00e9nyek kiel\u00e9g\u00edt\u00e9s\u00e9re. Ugyanakkor a blockchain technol\u00f3gi\u00e1t haszn\u00e1l\u00f3 v\u00e1llalatok nem mernek lemondani az Ethereumr\u00f3l a magas fok\u00fa v\u00e9delme \u00e9s a h\u00e1l\u00f3zati le\u00e1ll\u00e1sok elleni v\u00e9delem miatt.<\/p>\n<p>A decentraliz\u00e1ci\u00f3, a biztons\u00e1g \u00e9s a m\u00e9retezhet\u0151s\u00e9g biztos\u00edt\u00e1sa \u00e9rdek\u00e9ben a blockchainben, ez\u00e1ltal megoldva a Sk\u00e1l\u00e1zhat\u00f3s\u00e1gi H\u00e1romsz\u00f6g\u00f6t, a fejleszt\u0151csapat <noindex><a rel=\"nofollow\" href=\"https:\/\/opporty.com\/\">Opporty<\/a><\/noindex> l\u00e9trehozta a Plasma Casht - egy alh\u00e1l\u00f3zatot, amely egy okosszerz\u0151d\u00e9sb\u0151l \u00e9s egy Node.js alap\u00fa priv\u00e1t h\u00e1l\u00f3zatb\u00f3l \u00e1ll, amely id\u0151szakosan \u00e1tadja \u00e1llapot\u00e1t a gy\u00f6k\u00e9rl\u00e1ncnak (Ethereum).<\/p>\n<p><img decoding=\"async\" alt=\"Nyilv\u00e1nos teszt: megold\u00e1s a mag\u00e1n\u00e9let v\u00e9delm\u00e9re \u00e9s a sk\u00e1l\u00e1zhat\u00f3s\u00e1gra az Ethereumon\" 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>A Plasma Cash kulcsfolyamatai<\/h2>\n<p>\n<b>1. <\/b>A felhaszn\u00e1l\u00f3 megh\u00edv egy okosszerz\u0151d\u00e9s `deposit` funkci\u00f3t, \u00e1tadva azt az \u00f6sszeget ETH-ban, amelyet a Plasma Cash tokenbe szeretne elhelyezni. Az okosszerz\u0151d\u00e9s funkci\u00f3 tokent hoz l\u00e9tre, \u00e9s esem\u00e9nyt gener\u00e1l err\u0151l.<\/p>\n<p><b>2. <\/b>A Plasma Cash csom\u00f3pontok, amelyek feliratkoztak az okosszerz\u0151d\u00e9s esem\u00e9nyeire, megkapj\u00e1k a bet\u00e9t l\u00e9trehoz\u00e1s\u00e1r\u00f3l sz\u00f3l\u00f3 esem\u00e9nyt, \u00e9s hozz\u00e1adj\u00e1k a token l\u00e9trehoz\u00e1s\u00e1r\u00f3l sz\u00f3l\u00f3 tranzakci\u00f3t a medenc\u00e9hez.<\/p>\n<p><b>3. <\/b>Id\u0151szakosan speci\u00e1lis Plasma Cash csom\u00f3pontok \u00f6sszegy\u0171jtik az \u00f6sszes tranzakci\u00f3t a medenc\u00e9b\u0151l (maximum 1 milli\u00f3) \u00e9s blokkokk\u00e1 alak\u00edtj\u00e1k \u0151ket, kisz\u00e1molj\u00e1k a Merkle-f\u00e1t \u00e9s ennek megfelel\u0151en a hash-t. Ezt a blokkot m\u00e1s csom\u00f3pontoknak k\u00fcldik ellen\u0151rz\u00e9sre. A csom\u00f3pontok ellen\u0151rzik, hogy a Merkle hash \u00e9rv\u00e9nyes-e, \u00e9s \u00e9rv\u00e9nyesek-e a tranzakci\u00f3k (p\u00e9ld\u00e1ul, hogy a token k\u00fcld\u0151je a token birtokosa-e). A blokk ellen\u0151rz\u00e9se ut\u00e1n a csom\u00f3pont megh\u00edvja az okosszerz\u0151d\u00e9s `submitBlock` funkci\u00f3j\u00e1t, amely elmenti a gy\u00f6k\u00e9rl\u00e1ncra a blokk sz\u00e1m\u00e1t \u00e9s a Merkle hash-t. Az okosszerz\u0151d\u00e9s esem\u00e9nyt gener\u00e1l a blokk sikeres hozz\u00e1ad\u00e1s\u00e1r\u00f3l. A tranzakci\u00f3k elt\u00e1vol\u00edt\u00e1sra ker\u00fclnek a medenc\u00e9b\u0151l. <\/p>\n<p><b>4. <\/b>A csom\u00f3pontok, amelyek megkapt\u00e1k a blokk bek\u00fcld\u00e9si esem\u00e9ny\u00e9t, elkezdik alkalmazni azokat a tranzakci\u00f3kat, amelyeket a blokkhoz adtak.<\/p>\n<p><b>5. <\/b>Egy bizonyos pillanatban a token tulajdonosa (vagy nem tulajdonosa) szeretn\u00e9 kivenni azt a Plasma Cash-b\u00f3l. Ehhez megh\u00edvja a `startExit` funkci\u00f3t, amelybe \u00e1tadja az utols\u00f3 2 tranzakci\u00f3 inform\u00e1ci\u00f3j\u00e1t a tokenr\u0151l, amelyek meger\u0151s\u00edtik, hogy val\u00f3ban \u0151 a token tulajdonosa. Az okos szerz\u0151d\u00e9s a Merkle hash seg\u00edts\u00e9g\u00e9vel ellen\u0151rzi a tranzakci\u00f3k megl\u00e9t\u00e9t a blokkokban, \u00e9s a tokent kiker\u00fclheti, ami k\u00e9t h\u00e9t m\u00falva fog megt\u00f6rt\u00e9nni.<\/p>\n<p><b>6. <\/b>Ha a token kivon\u00e1si m\u0171velete szab\u00e1lytalans\u00e1gokkal t\u00f6rt\u00e9nt (a tokent a kivon\u00e1s elind\u00edt\u00e1sa ut\u00e1n k\u00f6lt\u00f6tt\u00e9k el, vagy a token kivon\u00e1s el\u0151tt m\u00e1r m\u00e1s\u00e9 volt), a token tulajdonosa ak\u00e1r k\u00e9t h\u00e9ten bel\u00fcl megc\u00e1folhatja a kivon\u00e1st.<\/p>\n<p><img decoding=\"async\" alt=\"Nyilv\u00e1nos teszt: megold\u00e1s a mag\u00e1n\u00e9let v\u00e9delm\u00e9re \u00e9s a sk\u00e1l\u00e1zhat\u00f3s\u00e1gra az Ethereumon\" src=\"\/wp-content\/uploads\/2019\/10\/0626ca6b010eb847175dbfb0b6d7b357.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>A mag\u00e1n\u00e9let k\u00e9t m\u00f3dszerrel \u00e9rhet\u0151 el.<\/h2>\n<p>\n<b>1. <\/b>A gy\u00f6k\u00e9rl\u00e1nc semmit sem tud a tranzakci\u00f3kr\u00f3l, amelyek a gyermekl\u00e1ncon bel\u00fcl l\u00e9trej\u00f6nnek \u00e9s tov\u00e1bb\u00edt\u00f3dnak. A nyilv\u00e1nos inform\u00e1ci\u00f3 arr\u00f3l sz\u00f3l, hogy ki helyezett el \u00e9s vett ki ETH-t a Plasma Cash-be \u00e9s onnan.<\/p>\n<p><b>2. <\/b>A gyermekl\u00e1nc lehet\u0151v\u00e9 teszi az anonimit\u00e1s biztos\u00edt\u00e1s\u00e1t zk-SNARKs haszn\u00e1lat\u00e1val.<\/p>\n<h2>Technol\u00f3giai h\u00e1tt\u00e9r<\/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>Tesztel\u00e9s <\/h2>\n<p>\nA Plasma Cash fejleszt\u00e9se sor\u00e1n tesztelt\u00fck a rendszer sebess\u00e9g\u00e9t, \u00e9s a k\u00f6vetkez\u0151 eredm\u00e9nyeket kaptuk:<\/p>\n<ul>\n<li>legfeljebb 35 000 tranzakci\u00f3 m\u00e1sodpercenk\u00e9nt ker\u00fcl hozz\u00e1ad\u00e1sra a poolhoz;<\/li>\n<li>legfeljebb 1 000 000 tranzakci\u00f3 t\u00e1rolhat\u00f3 egy blokkban.<\/li>\n<\/ul>\n<p>\nA teszteket az al\u00e1bbi 3 szerveren v\u00e9gezt\u00fck:<\/p>\n<p><i>1. Intel Core i7-6700 Quad-Core Skylake NVMe SSD-vel \u2014 512 GB, 64 GB DDR4 RAM<\/i><br \/>\n 3 \u00e9rv\u00e9nyes Plasma Cash csom\u00f3pontot \u00e1ll\u00edtottunk fel.<\/p>\n<p><i>2. AMD Ryzen 7 1700X Octa-Core \u00abSummit Ridge\u00bb (Zen), SATA SSD \u2014 500 GB, 64 GB DDR4 RAM<\/i><br \/>\n Egy Ropsten testnet ETH csom\u00f3pontot \u00e1ll\u00edtottunk fel.<br \/>\n 3 \u00e9rv\u00e9nyes Plasma Cash csom\u00f3pontot \u00e1ll\u00edtottunk fel.<\/p>\n<p><i>3. Intel Core i9-9900K Octa-Core NVMe SSD-vel \u2014 1 TB, 64 GB DDR4 RAM<\/i><br \/>\n Egy Plasma Cash bek\u00fcld\u0151 csom\u00f3pontot \u00e1ll\u00edtottunk fel.<br \/>\n 3 \u00e9rv\u00e9nyes Plasma Cash csom\u00f3pontot \u00e1ll\u00edtottunk fel.<br \/>\n Teszt indult a tranzakci\u00f3k hozz\u00e1ad\u00e1s\u00e1ra a Plasma Cash h\u00e1l\u00f3zathoz.<\/p>\n<p><b>\u00d6sszesen: <\/b>10 Plasma Cash csom\u00f3pont a priv\u00e1t h\u00e1l\u00f3zatban.<\/p>\n<h3>1. teszt<\/h3>\n<p>\n1 milli\u00f3 tranzakci\u00f3s korl\u00e1t van egy blokkban. Ez\u00e9rt 1 milli\u00f3 tranzakci\u00f3 2 blokkba ker\u00fcl be (mivel a rendszer id\u0151ben k\u00e9pes r\u00e9szt venni egyes tranzakci\u00f3kban a bek\u00fcld\u00e9s sor\u00e1n).<\/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=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nKezdeti \u00e1llapot: utols\u00f3 blokk #7; az adatb\u00e1zisban 1 milli\u00f3 tranzakci\u00f3 \u00e9s token t\u00e1rolva.<\/p>\n<p>00:00 \u2014 a tranzakci\u00f3k gener\u00e1l\u00e1s\u00e1hoz sz\u00fcks\u00e9ges szkript ind\u00edt\u00e1sa<br \/>\n01:37 \u2014 1 milli\u00f3 tranzakci\u00f3 l\u00e9trej\u00f6tt \u00e9s elkezd\u0151d\u00f6tt a k\u00fcld\u00e9s a csom\u00f3pontra<br \/>\n01:46 \u2014 a bek\u00fcld\u0151 csom\u00f3pont 240 ezer tranzakci\u00f3t vett fel a poolb\u00f3l, \u00e9s form\u00e1lja a #8 blokkot. Emellett l\u00e1tjuk, hogy 320 ezer tranzakci\u00f3 ad\u00f3dik hozz\u00e1 a poolhoz 10 m\u00e1sodperc alatt<br \/>\n01:58 \u2014 a #8 blokk al\u00e1\u00edr\u00e1sra ker\u00fclt \u00e9s k\u00fcld\u00e9sre ker\u00fclt a valid\u00e1ci\u00f3hoz<br \/>\n02:03 \u2014 a #8 blokk valid\u00e1lva lett, \u00e9s a Merkle hash \u00e9s a blokksz\u00e1m alapj\u00e1n megh\u00edvta a `submitBlock` funkci\u00f3t a okos szerz\u0151d\u00e9sben<br \/>\n02:10 \u2014 a dem\u00f3 szkript befejezte m\u0171k\u00f6d\u00e9s\u00e9t, amely 1 milli\u00f3 tranzakci\u00f3t k\u00fcld\u00f6tt el 32 m\u00e1sodperc alatt<br \/>\n02:33 \u2014 a node-ok elkezdt\u00e9k megkapni az inform\u00e1ci\u00f3t, hogy a #8 blokk hozz\u00e1 lett adva a gy\u00f6k\u00e9rl\u00e1nchoz, \u00e9s 240 ezer tranzakci\u00f3t kezdtek el v\u00e9grehajtani<br \/>\n02:40 \u2014 a pool-b\u00f3l elt\u00e1vol\u00edtott\u00e1k a 240 ezer tranzakci\u00f3t, amelyek m\u00e1r a #8 blokkban voltak<br \/>\n02:56 \u2014 a submit node vette a marad\u00e9k 760 ezer tranzakci\u00f3t a pool-b\u00f3l, \u00e9s elkezdte sz\u00e1m\u00edtani a Merkle hasht, valamint al\u00e1\u00edrni a #9 blokkot<br \/>\n03:20 \u2014 minden node tartalmaz 1 milli\u00f3 240 ezer tranzakci\u00f3t \u00e9s tokent<br \/>\n03:35 \u2014 a #9 blokk al\u00e1\u00edrva lett \u00e9s valid\u00e1l\u00e1sra k\u00fcldt\u00e9k m\u00e1s node-okhoz <br \/>\n03:41 \u2014 h\u00e1l\u00f3zati hiba t\u00f6rt\u00e9nt<br \/>\n04:40 \u2014 id\u0151t\u00fall\u00e9p\u00e9s miatt megsz\u0171nt a #9 blokk valid\u00e1l\u00e1s\u00e1nak v\u00e1rakoz\u00e1sa<br \/>\n04:54 \u2014 a submit node vette a marad\u00e9k 760 ezer tranzakci\u00f3t a pool-b\u00f3l, \u00e9s elkezdte sz\u00e1m\u00edtani a Merkle hasht \u00e9s al\u00e1\u00edrni a #9 blokkot<br \/>\n05:32 \u2014 a #9 blokk al\u00e1\u00edrva lett \u00e9s valid\u00e1l\u00e1sra k\u00fcldt\u00e9k m\u00e1s node-okhoz<br \/>\n05:53 \u2014 a #9 blokk valid\u00e1lva lett \u00e9s elk\u00fcldt\u00e9k a gy\u00f6k\u00e9rl\u00e1nchoz<br \/>\n06:17 \u2014 a node-ok elkezdt\u00e9k megkapni az inform\u00e1ci\u00f3t, hogy a #9 blokk hozz\u00e1 lett adva a gy\u00f6k\u00e9rl\u00e1nchoz, \u00e9s 760 ezer tranzakci\u00f3t kezdtek el v\u00e9grehajtani<br \/>\n06:47 \u2014 a pool megtisztult a \u0442\u0440\u0430\u043d\u0437\u0430\u043aci\u00f3kt\u00f3l, amelyek a #9 blokkban voltak<br \/>\n09:06 \u2014 minden node tartalmaz 2 milli\u00f3 tranzakci\u00f3t \u00e9s tokent<\/p>\n<h3>Teszt 2<\/h3>\n<p>\n350 ezer a blokk hat\u00e1ra. Ennek eredm\u00e9nyek\u00e9nt 3 blokkot kapunk.<\/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=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nKezdeti \u00e1llapot: utols\u00f3 blokk #9; az adatb\u00e1zisban 2 milli\u00f3 tranzakci\u00f3 \u00e9s token van t\u00e1rolva<\/p>\n<p>00:00 \u2014 a tranzakci\u00f3k gener\u00e1l\u00e1s\u00e1ra szolg\u00e1l\u00f3 szkript m\u00e1r fut<br \/>\n00:44 \u2014 l\u00e9trej\u00f6tt 1 milli\u00f3 tranzakci\u00f3, \u00e9s elkezd\u0151d\u00f6tt a node-hoz val\u00f3 k\u00fcld\u00e9s<br \/>\n00:56 \u2014 a submit node vette a pool-b\u00f3l a 320 ezer tranzakci\u00f3t \u00e9s form\u00e1lja a #10 blokkot. Azt is l\u00e1tjuk, hogy a pool-ba 320 ezer tranzakci\u00f3 \u00e9rkezik 10 m\u00e1sodperc alatt<br \/>\n01:12 \u2014 a #10 blokk al\u00e1\u00edrva lett \u00e9s valid\u00e1l\u00e1sra k\u00fcldik m\u00e1s node-okhoz<br \/>\n01:18 \u2014 befejezte m\u0171k\u00f6d\u00e9s\u00e9t a dem\u00f3 szkript, amely 1 milli\u00f3 tranzakci\u00f3t k\u00fcld\u00f6tt el 34 m\u00e1sodperc alatt<br \/>\n01:20 \u2014 a #10 blokk valid\u00e1lva lett \u00e9s elk\u00fcldt\u00e9k a gy\u00f6k\u00e9rl\u00e1nchoz <br \/>\n01:51 \u2014 minden node megkapta a gy\u00f6k\u00e9rl\u00e1ncb\u00f3l az inform\u00e1ci\u00f3t, hogy a #10 blokk hozz\u00e1 lett adva, \u00e9s elkezdik alkalmazni a 320 ezer tranzakci\u00f3t<br \/>\n02:01 \u2014 a pool megtisztult 320 ezer tranzakci\u00f3t\u00f3l, amelyeket a #10 blokkba adtak hozz\u00e1<br \/>\n02:15 \u2014 a submit node vette a pool-b\u00f3l a 350 ezer tranzakci\u00f3t \u00e9s form\u00e1lja a #11 blokkot<br \/>\n02:34 \u2014 a #11 blokk al\u00e1\u00edrva lett \u00e9s m\u00e1s node-okhoz k\u00fcldt\u00e9k valid\u00e1l\u00e1sra<br \/>\n02:51 \u2014 a #11 blokk valid\u00e1lva lett \u00e9s elk\u00fcldt\u00e9k a gy\u00f6k\u00e9rl\u00e1nchoz <br \/>\n02:55 \u2014 az utols\u00f3 node v\u00e9grehajtotta a tranzakci\u00f3kat a #10 blokkban<br \/>\n10:59 \u2014 A nagyon hossz\u00fa tranzakci\u00f3 v\u00e9grehajt\u00e1sa t\u00f6rt\u00e9nt a gy\u00f6k\u00e9r l\u00e1ncban a #9-es blokk beny\u00fajt\u00e1s\u00e1val, de siker\u00fclt befejezni, \u00e9s minden csom\u00f3pont \u00e9rtes\u00fclt r\u00f3la, majd elind\u00edtott\u00e1k a 350 ezer tranzakci\u00f3t.<br \/>\n11:05 \u2014 A pool 320 ezer tranzakci\u00f3val megtisztult, amelyeket a #11-es blokkhoz adtak hozz\u00e1.<br \/>\n12:10 \u2014 Minden csom\u00f3pont 1 milli\u00f3 670 ezer tranzakci\u00f3t \u00e9s tokent tartalmaz.<br \/>\n12:17 \u2014 A beny\u00fajt\u00f3 csom\u00f3pont 330 ezer tranzakci\u00f3t vett a poolb\u00f3l, \u00e9s a #12-es blokkot k\u00e9pezi.<br \/>\n12:32 \u2014 A #12-es blokk al\u00e1\u00edr\u00e1sra ker\u00fclt \u00e9s m\u00e1s csom\u00f3pontokhoz k\u00fcldt\u00e9k valid\u00e1l\u00e1sra.<br \/>\n12:39 \u2014 A #12-es blokk valid\u00e1lva lett \u00e9s elk\u00fcldt\u00e9k a gy\u00f6k\u00e9r l\u00e1ncba. <br \/>\n13:44 \u2014 Minden csom\u00f3pont \u00e9rtes\u00edt\u00e9st kapott a gy\u00f6k\u00e9r l\u00e1ncb\u00f3l arr\u00f3l, hogy a #12-es blokk hozz\u00e1 lett adva, \u00e9s elkezdt\u00e9k alkalmazni a 330 ezer tranzakci\u00f3t.<br \/>\n14:50 \u2014 Minden csom\u00f3pont 2 milli\u00f3 tranzakci\u00f3t \u00e9s tokent tartalmaz.<\/p>\n<h3>Teszt 3<\/h3>\n<p>\nAz els\u0151 \u00e9s a m\u00e1sodik szerveren egy valid\u00e1l\u00f3 csom\u00f3pontot beny\u00fajt\u00f3 csom\u00f3ponttal helyettes\u00edtettek. <\/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=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nKezd\u0151 \u00e1llapot: utols\u00f3 blokk #84; az adatb\u00e1zisban 0 tranzakci\u00f3 \u00e9s token van t\u00e1rolva.<\/p>\n<p>00:00 \u2014 3 szkript indult, amelyek 1 milli\u00f3 tranzakci\u00f3t gener\u00e1lnak \u00e9s k\u00fcldenek.<br \/>\n01:38 \u2014 1 milli\u00f3 tranzakci\u00f3 j\u00f6tt l\u00e9tre \u00e9s elkezd\u0151d\u00f6tt a k\u00fcld\u00e9s a #3-as beny\u00fajt\u00f3 csom\u00f3pontba.<br \/>\n01:50 \u2014 A #3-as beny\u00fajt\u00f3 csom\u00f3pont 330 ezer tranzakci\u00f3t vett a poolb\u00f3l \u00e9s a #85-\u00f6s blokkot k\u00e9pezi (f21). Szint\u00e9n l\u00e1thatjuk, hogy 350 ezer tranzakci\u00f3 ker\u00fcl hozz\u00e1ad\u00e1sra 10 m\u00e1sodperc alatt.<br \/>\n01:53 \u2014 1 milli\u00f3 tranzakci\u00f3 j\u00f6tt l\u00e9tre \u00e9s elkezd\u0151d\u00f6tt a k\u00fcld\u00e9s a #1-es beny\u00fajt\u00f3 csom\u00f3pontba.<br \/>\n01:50 \u2014 A #3-as beny\u00fajt\u00f3 csom\u00f3pont 330 ezer tranzakci\u00f3t vett a poolb\u00f3l \u00e9s a #85-\u00f6s blokkot k\u00e9pezi (f21). Szint\u00e9n l\u00e1thatjuk, hogy 350 ezer tranzakci\u00f3 ker\u00fcl hozz\u00e1ad\u00e1sra 10 m\u00e1sodperc alatt.<br \/>\n02:01 \u2014 A #1-es beny\u00fajt\u00f3 csom\u00f3pont 250 ezer tranzakci\u00f3t vett a poolb\u00f3l \u00e9s a #85-\u00f6s blokkot k\u00e9pezi (65e).<br \/>\n02:06 \u2014 A #85-\u00f6s blokk (f21) al\u00e1\u00edr\u00e1sra ker\u00fclt \u00e9s m\u00e1s csom\u00f3pontokhoz k\u00fcldt\u00e9k valid\u00e1l\u00e1sra.<br \/>\n02:08 \u2014 A #3-as szerver dem\u00f3 szkriptje befejezte m\u0171k\u00f6d\u00e9s\u00e9t, amely 1 milli\u00f3 tranzakci\u00f3t k\u00fcld\u00f6tt 30 m\u00e1sodperc alatt.<br \/>\n02:14 \u2014 A #85-\u00f6s blokk (f21) valid\u00e1lva lett \u00e9s elk\u00fcldt\u00e9k a gy\u00f6k\u00e9r l\u00e1ncba. <br \/>\n02:19 \u2014 A #85-\u00f6s blokk (65e) al\u00e1\u00edr\u00e1sra ker\u00fclt \u00e9s m\u00e1s csom\u00f3pontokhoz k\u00fcldt\u00e9k valid\u00e1l\u00e1sra.<br \/>\n02:22 \u2014 1 milli\u00f3 tranzakci\u00f3 j\u00f6tt l\u00e9tre \u00e9s elkezd\u0151d\u00f6tt a k\u00fcld\u00e9s a #2-es beny\u00fajt\u00f3 csom\u00f3pontba.<br \/>\n02:27 \u2014 A #85-\u00f6s blokk (65e) valid\u00e1lva lett \u00e9s elk\u00fcldt\u00e9k a gy\u00f6k\u00e9r l\u00e1ncba. <br \/>\n02:29 \u2014 A #2-es beny\u00fajt\u00f3 csom\u00f3pont 111855 tranzakci\u00f3t vett a poolb\u00f3l \u00e9s a #85-\u00f6s blokkot k\u00e9pezi (256).<br \/>\n02:36 \u2014 A #85-\u00f6s blokk (256) al\u00e1\u00edr\u00e1sra ker\u00fclt \u00e9s m\u00e1s csom\u00f3pontokhoz k\u00fcldt\u00e9k valid\u00e1l\u00e1sra.<br \/>\n02:36 \u2014 A #1-es szerver dem\u00f3 szkriptje befejezte m\u0171k\u00f6d\u00e9s\u00e9t, amely 1 milli\u00f3 tranzakci\u00f3t k\u00fcld\u00f6tt 42,5 m\u00e1sodperc alatt.<br \/>\n02:38 \u2014 A #85-\u00f6s blokk (256) valid\u00e1lva lett \u00e9s elk\u00fcldt\u00e9k a gy\u00f6k\u00e9r l\u00e1ncba.<br \/>\n03:08 \u2014 A #2-es szerver dem\u00f3 szkriptje befejezte m\u0171k\u00f6d\u00e9s\u00e9t, amely 1 milli\u00f3 tranzakci\u00f3t k\u00fcld\u00f6tt 47 m\u00e1sodperc alatt. <br \/>\n03:38 \u2014 Minden csom\u00f3pont \u00e9rtes\u00edt\u00e9st kapott a gy\u00f6k\u00e9r l\u00e1ncb\u00f3l arr\u00f3l, hogy a #85 (f21), #86 (65e), #87 (256) blokkok hozz\u00e1 lettek adva, \u00e9s elkezdik alkalmazni a 330 ezer, 250 ezer, 111855 tranzakci\u00f3t.<br \/>\n03:49 \u2014 a medence 330k-ra, 250k-ra, 111855 tranzakci\u00f3ra tisztult, amelyek a #85 (f21), #86(65e), #87(256) blokkokba ker\u00fcltek<br \/>\n03:59 \u2014 az els\u0151 node 888145 tranzakci\u00f3t vett a medenc\u00e9b\u0151l, \u00e9s a #88 (214) blokkot alak\u00edtja, a m\u00e1sodik node 750k tranzakci\u00f3t vett a medenc\u00e9b\u0151l, \u00e9s a #88 (50a) blokkot alak\u00edtja, a harmadik node 670k tranzakci\u00f3t vett a medenc\u00e9b\u0151l, \u00e9s a #88 (d3b) blokkot alak\u00edtja<br \/>\n04:44 \u2014 a #88 (d3b) blokk al\u00e1\u00edr\u00e1sra ker\u00fclt, \u00e9s valid\u00e1l\u00e1sra elk\u00fcld\u00e9sre ker\u00fclt a t\u00f6bbi node-hoz<br \/>\n04:58 \u2014 a #88 (214) blokk al\u00e1\u00edr\u00e1sra ker\u00fclt, \u00e9s valid\u00e1l\u00e1sra elk\u00fcld\u00e9sre ker\u00fclt a t\u00f6bbi node-hoz<br \/>\n05:11 \u2014 a #88 (50a) blokk al\u00e1\u00edr\u00e1sra ker\u00fclt, \u00e9s valid\u00e1l\u00e1sra elk\u00fcld\u00e9sre ker\u00fclt a t\u00f6bbi node-hoz<br \/>\n05:11 \u2014 a #85 (d3b) blokk valid\u00e1lva lett, \u00e9s elk\u00fcldt\u00e9k a gy\u00f6k\u00e9r l\u00e1ncba <br \/>\n05:36 \u2014 a #85 (214) blokk valid\u00e1lva lett, \u00e9s elk\u00fcldt\u00e9k a gy\u00f6k\u00e9r l\u00e1ncba <br \/>\n05:43 \u2014 az \u00f6sszes node megkapta a gy\u00f6k\u00e9r l\u00e1ncb\u00f3l az inform\u00e1ci\u00f3t, hogy a #88 (d3b), #89(214) blokkok hozz\u00e1 lettek adva, \u00e9s elkezdik alkalmazni a 670k, 750k tranzakci\u00f3kat<br \/>\n06:50 \u2014 a kapcsolat megszakad\u00e1sa miatt a #85 (50a) blokk nem lett valid\u00e1lva<br \/>\n06:55 \u2014 a m\u00e1sodik node 888145 tranzakci\u00f3t vett a medenc\u00e9b\u0151l, \u00e9s a #90 (50a) blokkot alak\u00edtja<br \/>\n08:14 \u2014 a #90 (50a) blokk al\u00e1\u00edr\u00e1sra ker\u00fclt, \u00e9s valid\u00e1l\u00e1sra elk\u00fcld\u00e9sre ker\u00fclt a t\u00f6bbi node-hoz<br \/>\n09:04 \u2014 a #90 (50a) blokk valid\u00e1lva lett, \u00e9s elk\u00fcldt\u00e9k a gy\u00f6k\u00e9r l\u00e1ncba <br \/>\n11:23 \u2014 az \u00f6sszes node megkapta a gy\u00f6k\u00e9r l\u00e1ncb\u00f3l az inform\u00e1ci\u00f3t, hogy a #90 (50a) blokk hozz\u00e1 lett adva, \u00e9s elkezdik alkalmazni a 888145 tranzakci\u00f3t. Ekkor m\u00e1r r\u00e9gen a #3 szerver alkalmazta a tranzakci\u00f3kat a #88 (d3b), #89(214) blokkokb\u00f3l<br \/>\n12:11 \u2014 az \u00f6sszes medence \u00fcres<br \/>\n13:41 \u2014 az \u00f6sszes #3 szerver node 3 milli\u00f3 tranzakci\u00f3t \u00e9s tokent tartalmaz<br \/>\n14:35 \u2014 az \u00f6sszes #1 szerver node 3 milli\u00f3 tranzakci\u00f3t \u00e9s tokent tartalmaz<br \/>\n19:24 \u2014 az \u00f6sszes #2 szerver node 3 milli\u00f3 tranzakci\u00f3t \u00e9s tokent tartalmaz <\/p>\n<h2>Akad\u00e1lyok<\/h2>\n<p>\nA Plasma Cash fejleszt\u00e9se sor\u00e1n a k\u00f6vetkez\u0151 probl\u00e9m\u00e1kkal tal\u00e1lkoztunk, amelyeket fokozatosan megoldottunk \u00e9s megoldunk:<\/p>\n<p><b>1.<\/b> A rendszer k\u00fcl\u00f6nb\u00f6z\u0151 funkci\u00f3inak k\u00f6lcs\u00f6nhat\u00e1sa okozta konfliktus. P\u00e9ld\u00e1ul a tranzakci\u00f3k medenc\u00e9be val\u00f3 felv\u00e9tele blokkolta a blokkok al\u00e1\u00edr\u00e1s\u00e1t \u00e9s valid\u00e1l\u00e1s\u00e1t, \u00e9s ford\u00edtva, ami sebess\u00e9gcs\u00f6kken\u00e9shez vezetett.<\/p>\n<p><b>2. <\/b>Nem volt vil\u00e1gos, hogyan lehetne \u00f3ri\u00e1si mennyis\u00e9g\u0171 tranzakci\u00f3t k\u00fcldeni, mik\u00f6zben minimaliz\u00e1ljuk az adat\u00e1tviteli k\u00f6lts\u00e9geket.<\/p>\n<p><b>3. <\/b>Nem volt vil\u00e1gos, hogyan \u00e9s hol t\u00e1roljuk az adatokat a magas eredm\u00e9nyek el\u00e9r\u00e9se \u00e9rdek\u00e9ben.<\/p>\n<p><b>4. <\/b>Nem volt vil\u00e1gos, hogyan szervezhet\u0151 a h\u00e1l\u00f3zat a node-ok k\u00f6z\u00f6tt, mivel az 1 milli\u00f3 tranzakci\u00f3t tartalmaz\u00f3 blokk k\u00f6r\u00fclbel\u00fcl 100 MB m\u00e9ret\u0171.<\/p>\n<p><b>5.<\/b> Az egy sz\u00e1lon t\u00f6rt\u00e9n\u0151 munka megszak\u00edtja a kapcsolatot a node-ok k\u00f6z\u00f6tt, amikor hossz\u00fa sz\u00e1m\u00edt\u00e1sok t\u00f6rt\u00e9nnek (p\u00e9ld\u00e1ul a Merkle fa fel\u00e9p\u00edt\u00e9se \u00e9s a hash sz\u00e1m\u00edt\u00e1sa).<\/p>\n<h2>Hogyan birk\u00f3ztunk meg mindezzel?<\/h2>\n<p>\nA Plasma Cash node els\u0151 verzi\u00f3ja egyfajta komb\u00e1jn volt, amely egyszerre tudott mindent elv\u00e9gezni: tranzakci\u00f3kat fogadni, blokkot l\u00e9trehozni \u00e9s \u00e9rv\u00e9nyes\u00edteni, API-t biztos\u00edtani az adatok el\u00e9r\u00e9s\u00e9hez. Mivel a NodeJS eredetileg egy sz\u00e1l\u00fa, a neh\u00e9z Merkle-fa sz\u00e1m\u00edt\u00f3 funkci\u00f3 blokkolta a tranzakci\u00f3 hozz\u00e1ad\u00e1si funkci\u00f3t. K\u00e9t lehet\u0151s\u00e9get l\u00e1ttunk ennek a probl\u00e9m\u00e1nak a megold\u00e1s\u00e1ra:<\/p>\n<p><b>1. <\/b>T\u00f6bb NodeJS folyamat ind\u00edt\u00e1sa, mindegyik egy adott funkci\u00f3t l\u00e1t el.<\/p>\n<p><b>2. <\/b>Worker_threads haszn\u00e1lata, \u00e9s a k\u00f3d egy r\u00e9sz\u00e9nek a sz\u00e1lakba t\u00f6rt\u00e9n\u0151 kiemel\u00e9se.<\/p>\n<p>V\u00e9g\u00fcl mindk\u00e9t megold\u00e1st egyszerre alkalmaztuk: logikailag h\u00e1rom r\u00e9szre bontottuk az egyetlen node-t, amelyek k\u00fcl\u00f6n m\u0171k\u00f6dhetnek, de egyidej\u0171leg szinkron m\u00f3don is.<\/p>\n<p><b>1.<\/b> A submit node, amely a tranzakci\u00f3kat fogadja a poolba \u00e9s blokkokat kre\u00e1l.<\/p>\n<p><b>2.<\/b> Az \u00e9rv\u00e9nyes\u00edt\u0151 node, amely ellen\u0151rzi a node-ok \u00e9rv\u00e9nyess\u00e9g\u00e9t.<\/p>\n<p><b>3. <\/b>API node \u2014 API-t biztos\u00edt az adatok el\u00e9r\u00e9s\u00e9hez.<\/p>\n<p>Minden node-hoz hozz\u00e1 tudunk kapcsol\u00f3dni unix socket-en kereszt\u00fcl a cli-n.<\/p>\n<p>A neh\u00e9z m\u0171veleteket, mint a Merkle-fa sz\u00e1m\u00edt\u00e1s\u00e1t, k\u00fcl\u00f6n sz\u00e1lba helyezt\u00fck.<\/p>\n<p>\u00cdgy siker\u00fclt el\u00e9rni, hogy a Plasma Cash \u00f6sszes funkci\u00f3ja egyidej\u0171leg \u00e9s z\u00f6kken\u0151mentesen m\u0171k\u00f6dj\u00f6n.<\/p>\n<p>Amint a rendszer funkcion\u00e1lisan m\u0171k\u00f6dni kezdett, tesztelni kezdt\u00fck a sebess\u00e9get, \u00e9s sajnos el\u00e9gedetlen eredm\u00e9nyeket kaptunk: 5 000 tranzakci\u00f3 m\u00e1sodpercenk\u00e9nt \u00e9s ak\u00e1r 50 000 tranzakci\u00f3 blokkban. Ki kellett der\u00edten\u00fcnk, mi val\u00f3sult meg helytelen\u00fcl.<\/p>\n<p>El\u0151sz\u00f6r a Plasma Cash-sel val\u00f3 kommunik\u00e1ci\u00f3s mechanizmust kezdt\u00fck tesztelni, hogy kider\u00edts\u00fck a rendszer cs\u00facs teljes\u00edtm\u00e9ny\u00e9t. Kor\u00e1bban m\u00e1r \u00edrtuk, hogy a Plasma Cash node unix socket interf\u00e9szt biztos\u00edt. Kezdetben sz\u00f6veges form\u00e1tum\u00fa volt. A json objektumokat `JSON.parse()` \u00e9s `JSON.stringify()` haszn\u00e1lat\u00e1val k\u00fcldt\u00fck. <\/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>\nMegm\u00e9rt\u00fck az ilyen objektumok \u00e1tk\u00fcld\u00e9si sebess\u00e9g\u00e9t, \u00e9s ~ 130k m\u00e1sodpercenk\u00e9nt eredm\u00e9nyt kaptunk. Megpr\u00f3b\u00e1ltuk lecser\u00e9lni az alap\u00e9rtelmezett json kezel\u0151 funkci\u00f3kat, de a teljes\u00edtm\u00e9ny nem javult. Val\u00f3sz\u00edn\u0171leg a V8 motor j\u00f3l optimaliz\u00e1lt ezeken a m\u0171veleteken.<\/p>\n<p>A tranzakci\u00f3kkal, tokenekkel \u00e9s blokkokkal val\u00f3 munka oszt\u00e1lyokon kereszt\u00fcl zajlott n\u00e1lunk. Az ilyen oszt\u00e1lyok l\u00e9trehoz\u00e1sakor a teljes\u00edtm\u00e9ny a fel\u00e9re cs\u00f6kkent, ami azt jelzi, hogy az OOP nem megfelel\u0151 sz\u00e1munkra. \u00dajra kellett \u00edrni mindent tiszta funkcion\u00e1lis megk\u00f6zel\u00edt\u00e9sre.<\/p>\n<h2>Adatb\u00e1zisba \u00edr\u00e1s<\/h2>\n<p>\nKezdetben a Redis-t v\u00e1lasztottuk az adatok t\u00e1rol\u00e1s\u00e1ra, mint az egyik legteljes\u00edtm\u00e9nyig\u00e9nyesebb megold\u00e1st, ami megfelel az elv\u00e1r\u00e1sainknak: key-value t\u00e1rol\u00e1s, hash-t\u00e1bl\u00e1k kezel\u00e9se, halmazok. Futtattuk a redis-benchmarkot \u00e9s ~80k m\u0171veletet kaptunk m\u00e1sodpercenk\u00e9nt pipelining m\u00f3dban.<\/p>\n<p>A magas teljes\u00edtm\u00e9ny \u00e9rdek\u00e9ben a Redis-t finomabban \u00e1ll\u00edtottuk be: <\/p>\n<ul>\n<li>Unix socket kapcsolatot \u00e1ll\u00edtottunk be.<\/li>\n<li>Kikapcsoltuk a lemezre ment\u00e9st (megb\u00edzhat\u00f3s\u00e1g \u00e9rdek\u00e9ben be lehet \u00e1ll\u00edtani egy replik\u00e1t, \u00e9s m\u00e1r egy k\u00fcl\u00f6n Redis alapj\u00e1n v\u00e9gezni a lemezre ment\u00e9st).<\/li>\n<\/ul>\n<p>\nA Redis-ben a pool hash-t\u00e1bla, mivel sz\u00fcks\u00e9g\u00fcnk van arra, hogy az \u00f6sszes tranzakci\u00f3t egyetlen k\u00e9r\u00e9sben megkapjuk, \u00e9s egyes\u00e9vel t\u00f6r\u00f6lj\u00fck a tranzakci\u00f3kat. Megpr\u00f3b\u00e1ltuk a szok\u00e1sos list\u00e1t haszn\u00e1lni, de az lassabban m\u0171k\u00f6dik, ha az eg\u00e9sz list\u00e1t szeretn\u00e9nk ki\u00fcr\u00edteni. <\/p>\n<p>A standard NodeJS Redis k\u00f6nyvt\u00e1r haszn\u00e1latakor 18k tranzakci\u00f3t kaptunk m\u00e1sodpercenk\u00e9nt. A sebess\u00e9g 9-szeres\u00e9re cs\u00f6kkent. <\/p>\n<p>Mivel a benchmark vil\u00e1gosan megmutatta a lehet\u0151s\u00e9gek 5-sz\u00f6r\u00f6s\u00e9t, kezdett\u00fck az optimaliz\u00e1l\u00e1st. Megv\u00e1ltoztattuk a k\u00f6nyvt\u00e1rat ioredis-re, \u00e9s \u00edgy el\u00e9rt\u00fck a 25k-t m\u00e1sodpercenk\u00e9nt. A tranzakci\u00f3kat egyes\u00e9vel adtuk hozz\u00e1, az `hset` parancsot haszn\u00e1lva. \u00cdgy sok k\u00e9r\u00e9s keletkezett a Redis fel\u00e9. Felmer\u00fclt az \u00f6tlet, hogy a tranzakci\u00f3kat csomagokba egyes\u00edtj\u00fck, \u00e9s egyetlen `hmset` parancsot k\u00fcld\u00fcnk. Az eredm\u00e9ny \u2014 32k m\u00e1sodpercenk\u00e9nt. <\/p>\n<p>T\u00f6bb okb\u00f3l, amelyet al\u00e1bb ismertet\u00fcnk, a ```Buffer```-rel dolgozunk, \u00e9s kider\u00fclt, hogy ha ezt sz\u00f6vegg\u00e9 alak\u00edtjuk (`buffer.toString('hex')`) a ment\u00e9s el\u0151tt, akkor tov\u00e1bbi teljes\u00edtm\u00e9nyt nyerhet\u00fcnk. \u00cdgy a sebess\u00e9get 35 000-re siker\u00fclt n\u00f6velni m\u00e1sodpercenk\u00e9nt. Jelenleg \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy felf\u00fcggesztj\u00fck a tov\u00e1bbi optimaliz\u00e1l\u00e1st.<\/p>\n<p>\u00c1t kellett t\u00e9rn\u00fcnk a bin\u00e1ris protokollra, mivel:<\/p>\n<p><b>1. <\/b>A rendszer gyakran sz\u00e1m\u00edt hash-eket, al\u00e1\u00edr\u00e1sokat stb., \u00e9s ehhez bin\u00e1ris adatokra van sz\u00fcks\u00e9ge.<\/p>\n<p><b>2.<\/b> Szolg\u00e1ltat\u00e1sok k\u00f6z\u00f6tti adat\u00e1tvitelkor a bin\u00e1ris adatok kevesebb helyet foglalnak, mint a sz\u00f6veges adatok. P\u00e9ld\u00e1ul, amikor 1 milli\u00f3 tranzakci\u00f3t tartalmaz\u00f3 blokkot k\u00fcld\u00fcnk, a sz\u00f6veges adatok t\u00f6bb mint 300 megab\u00e1jtot is elfoglalhatnak.<\/p>\n<p><b>3.<\/b> Az adatok folyamatos \u00e1tkonvert\u00e1l\u00e1sa befoly\u00e1solja a teljes\u00edtm\u00e9nyt.<\/p>\n<p>Ez\u00e9rt alapul saj\u00e1t bin\u00e1ris adat t\u00e1rol\u00e1si \u00e9s tov\u00e1bb\u00edt\u00e1si protokollt vett\u00fcnk, amely a kiv\u00e1l\u00f3 `binary-data` k\u00f6nyvt\u00e1r alapj\u00e1n k\u00e9sz\u00fclt.<\/p>\n<p>Ennek eredm\u00e9nyek\u00e9nt a k\u00f6vetkez\u0151 adatszerkezetek j\u00f6ttek l\u00e9tre:<\/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>\nA `BD.encode(block, Protocol).slice();` \u00e9s a `BD.decode(buffer, Protocol)` parancsokkal adatokat alak\u00edtunk \u00e1t `Buffer` form\u00e1tumra, a Redis t\u00e1rol\u00e1s\u00e1ra vagy m\u00e1sik node-nak val\u00f3 tov\u00e1bb\u00edt\u00e1s\u00e1ra \u00e9s az adatok visszanyer\u00e9s\u00e9re.<\/p>\n<p>K\u00e9t bin\u00e1ris protokollunk is van az adatok \u00e1tad\u00e1s\u00e1ra a szolg\u00e1ltat\u00e1sok k\u00f6z\u00f6tt:<\/p>\n<p><i> \u2014 Protokoll a Plasma Node-dal val\u00f3 kommunik\u00e1ci\u00f3hoz unix socket-en kereszt\u00fcl<\/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 ahol:<\/p>\n<ul>\n<li> <b>`type`<\/b> \u2014 a v\u00e9grehajtand\u00f3 m\u0171velet, p\u00e9ld\u00e1ul 1 \u2014 sendTransaction, 2 \u2014 getTransaction;<\/li>\n<li> <b>`payload`<\/b> \u2014 az adatok, amelyeket a megfelel\u0151 funkci\u00f3nak kell \u00e1tadni;<\/li>\n<li> <b>`messageId`<\/b> \u2014 a \u00fczenet azonos\u00edt\u00f3ja, amely lehet\u0151v\u00e9 teszi a v\u00e1lasz azonos\u00edt\u00e1s\u00e1t. <\/li>\n<\/ul>\n<p>\n<i> \u2014 Protokoll a node-ok k\u00f6z\u00f6tti interakci\u00f3hoz<\/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 ahol:<\/p>\n<ul>\n<li> <b>`code`<\/b> \u2014 az \u00fczenet k\u00f3dja, p\u00e9ld\u00e1ul 6 \u2014 PREPARE_NEW_BLOCK, 7 \u2014 BLOCK_VALID, 8 \u2014 BLOCK_COMMIT;<\/li>\n<li> <b>`versionProtocol`<\/b> \u2014 a protokoll verzi\u00f3ja, mivel a h\u00e1l\u00f3zaton k\u00fcl\u00f6nb\u00f6z\u0151 verzi\u00f3j\u00fa node-ok is m\u0171k\u00f6dhetnek, amelyek elt\u00e9r\u0151en m\u0171k\u00f6dnek;<\/li>\n<li> <b>`seq`<\/b> \u2014 az \u00fczenet azonos\u00edt\u00f3ja;<\/li>\n<li> <b>`countChunk`<\/b> \u00e9s <b>`chunkNumber`<\/b> sz\u00fcks\u00e9gesek nagy \u00fczenetek has\u00edt\u00e1s\u00e1hoz;<\/li>\n<li> <b>`length`<\/b> \u00e9s <b>`payload`<\/b> a hossz\u00fas\u00e1g \u00e9s maguk az adatok.<\/li>\n<\/ul>\n<p>\nMivel el\u0151re t\u00edpusos\u00edtottuk az adatokat, a v\u00e9gs\u0151 rendszer sokkal gyorsabban m\u0171k\u00f6dik, mint az Ethereum `rlp` k\u00f6nyvt\u00e1ra. Sajnos eddig nem siker\u00fclt lemondanunk r\u00f3la, mivel a okos szerz\u0151d\u00e9st m\u00e9g ki kell dolgozni, amit a j\u00f6v\u0151ben tervez\u00fcnk megtenni.<\/p>\n<p>Ha siker\u00fclt el\u00e9rn\u00fcnk a sebess\u00e9get <b>35 000<\/b> m\u00e1sodpercenk\u00e9nt kell tranzakci\u00f3kat feldolgoznunk, \u00e9s ezt optim\u00e1lis id\u0151n bel\u00fcl kell megtenn\u00fcnk. Mivel egy blokk l\u00e9trehoz\u00e1s\u00e1nak k\u00f6r\u00fclbel\u00fcl 30 m\u00e1sodpercbe telik, be kell \u00e9p\u00edten\u00fcnk a blokkba <b>1 000 000<\/b> tranzakci\u00f3kat, ami t\u00f6bb mint <b>100<\/b> MB adat tov\u00e1bb\u00edt\u00e1s\u00e1t jelenti. <\/p>\n<p>Eredetileg az `ethereumjs-devp2p` k\u00f6nyvt\u00e1rat haszn\u00e1ltuk a csom\u00f3pontok k\u00f6z\u00f6tti kapcsolatra, de ez nem b\u00edrta el a mennyis\u00e9g\u0171 adatot. Ez\u00e9rt a `ws` k\u00f6nyvt\u00e1rra v\u00e1ltottunk, \u00e9s be\u00e1ll\u00edtottuk a bin\u00e1ris adatok tov\u00e1bb\u00edt\u00e1s\u00e1t websocketen. Term\u00e9szetesen probl\u00e9m\u00e1kkal is szembes\u00fclt\u00fcnk a nagy adatcsomagok \u00e1tad\u00e1sakor, de ezeket chunkokra osztottuk, \u00e9s a probl\u00e9m\u00e1k megsz\u0171ntek.<\/p>\n<p>A Merkle-fa l\u00e9trehoz\u00e1sa \u00e9s a hash kisz\u00e1m\u00edt\u00e1sa <b>1 000 000<\/b> tranzakci\u00f3nk\u00e9nt k\u00f6r\u00fclbel\u00fcl<b> 10<\/b> m\u00e1sodpercre van sz\u00fcks\u00e9g a folyamatos sz\u00e1m\u00edt\u00e1shoz. Ez id\u0151 alatt a kapcsolat megszakad az \u00f6sszes csom\u00f3ponttal. \u00dagy d\u00f6nt\u00f6tt\u00fcnk, hogy ezt a sz\u00e1m\u00edt\u00e1st egy k\u00fcl\u00f6n sz\u00e1lra helyezz\u00fck.<\/p>\n<h2>K\u00f6vetkeztet\u00e9sek:<\/h2>\n<p>\nVal\u00f3j\u00e1ban a meg\u00e1llap\u00edt\u00e1saink nem \u00fajjak, de valami\u00e9rt sok szak\u00e9rt\u0151 megfeledkezik r\u00f3luk a fejleszt\u00e9s sor\u00e1n. <\/p>\n<ul>\n<li>A funkcion\u00e1lis programoz\u00e1s haszn\u00e1lata az objektum-orient\u00e1lt programoz\u00e1s helyett n\u00f6veli a teljes\u00edtm\u00e9nyt.<\/li>\n<li>A monolitikus architekt\u00fara rosszabb, mint a szolg\u00e1ltat\u00e1s-architekt\u00fara egy teljes\u00edtm\u00e9nyorient\u00e1lt NodeJS rendszer sz\u00e1m\u00e1ra.<\/li>\n<li>A `worker_threads` haszn\u00e1lata a neh\u00e9z sz\u00e1m\u00edt\u00e1sokhoz jav\u00edtja a rendszer v\u00e1laszk\u00e9szs\u00e9g\u00e9t, k\u00fcl\u00f6n\u00f6sen az I\/O m\u0171veletek sor\u00e1n.<\/li>\n<li>A unix socket stabilabb \u00e9s gyorsabb, mint a http k\u00e9r\u00e9sek.<\/li>\n<li>Ha nagy mennyis\u00e9g\u0171 adatot szeretn\u00e9nk gyorsan \u00e1tadni a h\u00e1l\u00f3zaton, a websocketek haszn\u00e1lata a legjobb megold\u00e1s, bin\u00e1ris adatok chunkokra osztva, amelyeket \u00fajra tudunk k\u00fcldeni, ha nem \u00e9rkeznek meg, \u00e9s ut\u00e1na egy \u00fczenetbe egyes\u00edthetj\u00fck \u0151ket.<\/li>\n<\/ul>\n<p>\n\u00d6n is szeretettel v\u00e1rjuk <b>GitHub<\/b> a projektre: <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>A cikk t\u00e1rsszerz\u0151je volt <i>Alexander Nashivan<\/i>, a <noindex><a rel=\"nofollow\" href=\"https:\/\/clever-solution.com\/\">Clever Solution Inc<\/a><\/noindex>.<br \/>\n<br \/>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/publichnyj-test-reshenie-dlya-privatnosti-i-masshtabiruemosti-v-efiriume\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47Nyilv\u00e1nos teszt: Mag\u00e1n\u00e9let \u00e9s sk\u00e1l\u00e1zhat\u00f3s\u00e1g megold\u00e1s az Ethereumban | ProHoster","description":"A blockchain egy innovat\u00edv technol\u00f3gia, amely \u00edg\u00e9retesen jav\u00edthatja az emberi \u00e9let sok ter\u00fclet\u00e9t.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/publichnyj-test-reshenie-dlya-privatnosti-i-masshtabiruemosti-v-efiriume","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/38856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=38856"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/38856\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/29146"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=38856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=38856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=38856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}