Tijaabada Dadweynaha: Xalka Qarsoodinimada iyo Is-beddelka ee Ethereum

Bloccain waa tignoolajiyad cusub oo ballan qaadaysa inay horumarinayso qaybo badan oo nolosha aadanaha ah. Waxay u wareejisaa hababka dhabta ah iyo alaabooyinka goobta dhijitaalka ah, waxay hubisaa xawaaraha iyo isku halaynta macaamilka maaliyadeed, waxay yaraynaysaa kharashkooda, waxayna sidoo kale kuu ogolaaneysaa inaad abuurto codsiyada casriga ah ee DAPP adoo isticmaalaya qandaraasyada casriga ah ee shabakadaha baahsan.

Marka la eego faa'iidooyinka badan iyo codsiyada kala duwan ee blockchain, waxay u muuqan kartaa wax la yaab leh in tignoolajiyadan rajo-gelinta ah aysan wali sameynin warshad kasta. Dhibaatadu waxay tahay in xannibaadaha casriga ah ee baahsanaanta ay ka maqan yihiin scalability. Hababka Ethereum ee ku saabsan macaamil ganacsi 20 ilbiriqsi kasta, taas oo aan ku filneyn in ay buuxiso baahiyaha ganacsiyada firfircoon ee maanta. Isla mar ahaantaana, shirkadaha isticmaala tignoolajiyada blockchain waxay ka walaacsan yihiin inay ka tagaan Ethereum sababtoo ah heerka sare ee ilaalinta ka ilaalinta jabsiga iyo fashilka shabakada.

Si loo hubiyo maamul-daadejinta, amniga iyo scalability ee blockchain, si loo xalliyo Scalability Trilemma, kooxda horumarinta Fursad abuuray Plasma Cash, silsilad hoose oo ka kooban qandaraas caqli-gal ah iyo shabakad gaar ah oo ku salaysan Node.js, taas oo xilliyada qaar u gudbisa gobolkeeda silsiladda xididka (Ethereum).

Tijaabada Dadweynaha: Xalka Qarsoodinimada iyo Is-beddelka ee Ethereum

Hababka muhiimka ah ee Plasma Cash

1. Isticmaaluhu wuxuu ugu yeeraa shaqada qandaraaska smart 'deposit', isaga oo u gudbinaya qaddarka ETH ee uu doonayo inuu ku shubo calaamadda Plasma Cash. Shaqada qandaraaska caqliga leh waxay abuurtaa calaamad waxayna abuurtaa dhacdo ku saabsan.

2. Plasma Cash nodes ka diiwaan gashan dhacdooyinka qandaraasyada smart waxay helayaan dhacdo ku saabsan abuurista deebaaji oo ay ku daraan macaamil ganacsi oo ku saabsan abuurista calaamad barkadda.

3. Marmar, noodhadhka Lacagta Plasma ee khaaska ah waxay ka qaadaan dhammaan wax kala iibsiga barkada (ilaa 1 milyan) oo ka samee block iyaga, xisaabiya geedka Merkle iyo, si waafaqsan, xashiishka. Balooggaan waxaa loo diraa qanjidhada kale si loo xaqiijiyo. Noodyadu waxay hubiyaan in xashiishka Merkle uu sax yahay iyo in wax kala gadashadu ay sax tahay iyo in kale (tusaale ahaan, haddii soo diraha calaamaduhu uu yahay mulkiilaha). Ka dib markii la xaqiijiyo xannibaadda, noodhka ayaa wacaya shaqada 'submitBlock' ee qandaraaska smart, kaas oo badbaadiya lambarka block iyo Merkle hash ilaa silsiladda cidhifka. Qandaraaska caqliga leh wuxuu abuuraa dhacdo tilmaamaysa ku-darka guusha ee block. Wax kala iibsiga ayaa laga saaray barkada.

4. Nambarada hela dhacdada soo gudbinta xannibaadda waxay bilaabaan inay adeegsadaan macaamilada lagu daray block.

5. Mar marka qaar, milkiilaha (ama kan aan lahayn) calaamadda ayaa raba inuu ka saaro Plasma Cash. Si tan loo sameeyo, wuxuu wacay shaqada 'startExit', isaga oo u gudbinaya macluumaadka ku saabsan 2-dii macaamil ee ugu dambeeyay ee calaamadda, taas oo xaqiijinaysa in uu yahay milkiilaha calaamadda. Qandaraaska casriga ah, oo isticmaalaya xashiishka Merkle, wuxuu hubinayaa joogitaanka wax kala iibsiga ee blocks wuxuuna u diraa calaamada ka noqoshada, kaas oo dhici doona laba toddobaad gudahood.

6. Haddii hawlgalka ka-noqoshada calaamaduhu ay ku dhaceen xadgudubyo (calaamaduhu waxay kharash gareeyeen ka dib markii nidaamka ka-noqoshada uu bilaabmay ama calaamaddu waxay ahayd qof kale ka hor intaan la bixin), mulkiilaha calaamaduhu wuxuu diidi karaa ka bixitaanka laba toddobaad gudahood.

Tijaabada Dadweynaha: Xalka Qarsoodinimada iyo Is-beddelka ee Ethereum

Qarsoodinimada waxaa lagu gaaraa laba siyaabood

1. Silsiladda xididku waxba kama garanayso wax kala iibsiga laga sameeyo oo loo gudbiyo silsiladda carruurta dhexdeeda. Macluumaadka ku saabsan cidda dhigtay oo ka saartay ETH Plasma Cash ayaa ah mid dawli ah.

2. Silsiladda carruurtu waxay ogolaataa macaamil ganacsi oo qarsoodi ah iyadoo la adeegsanayo zk-SNARKs.

Xirmada tignoolajiyada

  • NodeJS
  • Redis
  • etherium
  • Ciid

Imtixaanka

Intii aan horumarinaynay Lacagta Plasma, waxaan tijaabinay xawaaraha nidaamka waxaanan helnay natiijooyinka soo socda:

  • Ilaa 35 macaamil ganacsi ilbiriqsikii ayaa lagu daraa barkada;
  • Ilaa 1 macaamil ganacsi ayaa lagu kaydin karaa block.

Tijaabooyin ayaa lagu fuliyay 3 server ee soo socda:

1. Intel Core i7-6700 Quad-Core Skylake oo ay ku jiraan. NVMe SSD - 512 GB, 64 GB DDR4 RAM
3 ansaxinaya qanjidhada lacagta Plasma ayaa kor loo qaaday.

2. AMD Ryzen 7 1700X Octa-Core "Summit Ridge" (Zen), SATA SSD - 500 GB, 64 GB DDR4 RAM
Ropsten testnet ETH ayaa kor loo qaaday.
3 ansaxinaya qanjidhada lacagta Plasma ayaa kor loo qaaday.

3. Intel Core i9-9900K Octa-Core oo ay ku jiraan. NVMe SSD - 1 TB, 64 GB DDR4 RAM
1 Plasma Cash soo gudbinta ayaa kor loo qaaday.
3 ansaxinaya qanjidhada lacagta Plasma ayaa kor loo qaaday.
Tijaabo ayaa la bilaabay in wax kala iibsiga lagu daro shabakada Plasma Cash.

Wadarta: 10 Plasma Cash nodes ee shabakada gaarka ah.

Imtixaanka 1

Waxaa jira xad ah 1 milyan oo macaamil ganacsi block kasta. Sidaa darteed, 1 milyan oo xawaalad ah waxay ku dhacaan 2 blocks (maadaama nidaamku maamulo inuu qayb ka qaato macaamilka oo uu soo gudbiyo inta la dirayo).


Gobolka ugu horeeya: block ugu dambeeya #7; 1 milyan oo macaamil ganacsi iyo calaamado ayaa lagu kaydiyaa kaydka xogta.

00:00 - bilawga qoraalka jiilka wax kala iibsiga
01:37 - 1 milyan oo macaamil ganacsi ayaa la abuuray oo loo dirayay noodhka ayaa bilaabmay
01:46 - soo gudbi noode waxay ka qaadatay 240k macaamil ganacsi barkada waxayna foomamka block #8. Waxaan sidoo kale aragnaa in 320k macaamil ganacsi lagu daro barkadda 10 ilbiriqsi gudahood
01:58 - xannibaadda #8 waa la saxeexay oo loo diray si loo ansixiyo
02:03 - xannibaadda # 8 waa la ansaxiyay 'submitBlock' shaqada qandaraaska caqliga leh waxaa loogu yeeraa hash-ka Merkle iyo lambarka xannibaadda.
02:10 - script demo ayaa shaqada dhameeyay, kaas oo soo diray 1 milyan oo xawaalad 32 ilbiriqsi gudahood
02:33 - nodes waxay bilaabeen inay helaan macluumaadka block #8 lagu daray silsiladda xididka, oo bilaabay inay sameeyaan 240k macaamil ganacsi
02:40 - 240k macaamil ganacsi ayaa laga saaray barkada, kuwaas oo horey ugu jiray block #8
02:56 - soo gudbi noode waxay ka qaadatay 760k macaamil ganacsi oo hartay barkada waxayna bilaabeen xisaabinta xashiishka Merkle iyo saxeexa block #9
03:20 - Dhammaan qanjidhada ayaa ka kooban 1 milyan 240k macaamil ganacsi iyo calaamado
03:35 - xannibaadda #9 waa la saxeexay oo loo diray si loo ansixiyo noodhadhka kale
03:41 - cilad shabakadeed ayaa dhacday
04:40 - sugitaanka xannibaadda #9 ansaxinta ayaa waqtigeedu dhammaaday
04:54 - soo gudbi noode waxay ka qaadatay 760k macaamil ganacsi oo hartay barkada waxayna bilaabeen xisaabinta xashiishka Merkle iyo saxeexa block #9
05:32 - xannibaadda #9 waa la saxeexay oo loo diray si loo ansixiyo noodhadhka kale
05:53 - xannibaadda #9 waa la ansaxiyay waxaana loo diraa silsiladda xididka
06:17 - nodes waxay bilaabeen inay helaan macluumaadka block #9 lagu daray silsiladda xididka oo bilaabay inay sameeyaan 760k macaamil ganacsi
06:47 - barkadu waxay nadiifisay wax kala iibsiga ee ku jira qaybta #9
09:06 - dhammaan qanjidhada ayaa ka kooban 2 milyan oo macaamil ganacsi iyo calaamado

Imtixaanka 2

Waxaa jira xad ah 350k halkii block. Natiijo ahaan, waxaan leenahay 3 blocks.


Gobolka hore: block ugu dambeeya #9; 2 milyan oo macaamil ganacsi iyo calaamado ayaa lagu kaydiyaa kaydka xogta

00:00 - qoraalka jiilka wax kala iibsiga ayaa durba la bilaabay
00:44 - 1 milyan oo macaamil ganacsi ayaa la abuuray oo loo dirayay noodhka ayaa bilaabmay
00:56 - soo gudbi noode waxay ka qaadatay 320k macaamil ganacsi barkada waxayna foomamka block #10. Waxaan sidoo kale aragnaa in 320k macaamil ganacsi lagu daro barkadda 10 ilbiriqsi gudahood
01:12 - xannibaadda #10 waa la saxeexay oo loo diray noodhadhka kale si loo ansixiyo
01:18 - script demo ayaa shaqada dhameeyay, kaas oo soo diray 1 milyan oo xawaalad 34 ilbiriqsi gudahood
01:20 - xannibaadda #10 waa la ansaxiyay waxaana loo diraa silsiladda xididka
01:51 - Dhammaan qanjidhada waxay heleen macluumaadka silsiladda xididka ee xannibaadda #10 ayaa lagu daray oo bilaabay inay adeegsadaan 320k macaamil ganacsi
02:01 - barkadu waxay nadiifisay 320k macaamil ganacsi oo lagu daray in la xannibo #10
02:15 - soo gudbi noode waxay ka qaadatay 350k macaamil ganacsi barkada waxayna foomamka xirtay #11
02:34 - xannibaadda #11 waa la saxeexay oo loo diray noodhadhka kale si loo ansixiyo
02:51 - xannibaadda #11 waa la ansaxiyay waxaana loo diraa silsiladda xididka
02:55 - noodhka ugu dambeeya ee la dhammeeyay macaamil ganacsi oo ka yimid xannibaadda #10
10:59 - wax kala iibsiga la soo gudbinta block #9 waxay qaadatay waqti aad u dheer silsiladda xididka, laakiin waa la dhammaystiray oo dhammaan qanjidhada ayaa helay macluumaadka ku saabsan waxayna bilaabeen inay sameeyaan 350k macaamil ganacsi
11:05 - barkadu waxay nadiifisay 320k macaamil ganacsi oo lagu daray in la xannibo #11
12:10 - dhammaan qanjidhada ayaa ka kooban 1 milyan 670k macaamil ganacsi iyo calaamado
12:17 - soo gudbi noode waxay ka qaadatay 330k macaamil ganacsi barkada waxayna foomamka ka dhigtay block #12
12:32 - xannibaadda #12 waa la saxeexay oo loo diray noodhadhka kale si loo ansixiyo
12:39 - xannibaadda #12 waa la ansaxiyay waxaana loo diraa silsiladda xididka
13:44 - Dhammaan qanjidhada waxay heleen macluumaadka silsiladda xididka ee xannibaadda #12 ayaa lagu daray oo bilaabay inay adeegsadaan 330k macaamil ganacsi
14:50 - dhammaan qanjidhada ayaa ka kooban 2 milyan oo macaamil ganacsi iyo calaamado

Imtixaanka 3

Serfarada kowaad iyo labaad, hal noode ansaxinaya ayaa lagu bedelay noodhka gudbinta.


Gobolka hore: block ugu dambeeya # 84; 0 macaamil ganacsi iyo calaamado lagu kaydiyay kaydka

00:00 β€” 3 qoraal ayaa la bilaabay kuwaaso dhaliya oo soo dira 1 milyan oo macaamil ganacsi midkiiba
01:38 - 1 milyan oo macaamil ganacsi ah ayaa la sameeyay oo loo diray inay soo gudbiyaan noodhka #3 ayaa bilaabmay
01:50 - soo gudbi noode #3 waxay ka qaadatay 330k macaamil ganacsi barkada waxayna foomamka block #85 (f21). Waxaan sidoo kale aragnaa in 350k macaamil ganacsi lagu daro barkadda 10 ilbiriqsi gudahood
01:53 - 1 milyan oo macaamil ganacsi ah ayaa la sameeyay oo loo diray inay soo gudbiyaan noodhka #1 ayaa bilaabmay
01:50 - soo gudbi noode #3 waxay ka qaadatay 330k macaamil ganacsi barkada waxayna foomamka block #85 (f21). Waxaan sidoo kale aragnaa in 350k macaamil ganacsi lagu daro barkadda 10 ilbiriqsi gudahood
02:01 - soo gudbi noode #1 waxay ka qaadatay 250k xawaalad barkada waxayna foomamka block #85 (65e)
02:06 - xannibaadda # 85 (f21) waa la saxeexay oo loo diray noodhadhka kale si loo ansixiyo
02:08 - qoraalka demo ee server-ka #3, kaas oo soo diray 1 milyan oo xawaalad 30 ilbiriqsi gudahood, dhameeyay shaqadii
02:14 - xannibaadda # 85 (f21) waa la ansaxiyay oo loo diray silsiladda xididka
02:19 - xannibaadda # 85 (65e) waa la saxeexay oo loo diray noodhadhka kale si loo ansixiyo
02:22 - 1 milyan oo macaamil ganacsi ah ayaa la sameeyay oo loo diray inay soo gudbiyaan noodhka #2 ayaa bilaabmay
02:27 - xannibaadda # 85 (65e) la ansixiyay oo loo diray silsiladda xididka
02:29 - soo gudbi noode #2 waxay ka qaadatay 111855 xawaalad barkada iyo foomamka block #85 (256).
02:36 - xannibaadda # 85 (256) waa la saxeexay oo loo diray noodhadhka kale si loo ansixiyo
02:36 - qoraalka demo ee server-ka #1, kaas oo soo diray 1 milyan oo xawaalad 42.5 ilbiriqsi gudahood, dhameeyay shaqadii
02:38 - xannibaadda # 85 (256) waa la ansixiyay oo loo diray silsiladda xididka
03:08 - Adeegga # 2 qoraalka ayaa dhammeeyey shaqadiisa, kaas oo soo diray 1 milyan oo macaamil ganacsi 47 ilbiriqsi gudahood
03:38 - Dhammaan qanjidhada waxay heleen macluumaadka silsiladda xididka ee xannibaya #85 (f21), #86(65e), #87(256) ayaa lagu daray oo bilaabay inay dalbadaan 330k, 250k, 111855 macaamil ganacsi
03:49 - barkada waxaa lagu nadiifiyay 330k, 250k, 111855 macaamil ganacsi oo lagu daray blocks #85 (f21), #86(65e), #87(256)
03:59 - soo gudbi noode #1 waxay ka qaadatay 888145 macaamil ganacsi oo barkad ah waxayna foomamka block #88 (214), soo gudbi noode #2 waxay qaadatay 750k xawaalad barkada iyo foomamka block #88 (50a), soo gudbi noode #3 waxay ka qaadatay 670k macaamil ganacsi barkada iyo foomamka block #88 (d3b)
04:44 - xannibaadda # 88 (d3b) waa la saxeexay oo loo diray noodhadhka kale si loo ansixiyo
04:58 - xannibaadda # 88 (214) waa la saxeexay oo loo diray noodhadhka kale si loo ansixiyo
05:11 - xannibaadda #88 (50a) waa la saxeexay oo loo diray noodhadhka kale si loo ansixiyo
05:11 - xannibaadda # 85 (d3b) waa la ansixiyay waxaana loo diraa silsiladda xididka
05:36 - xannibaadda # 85 (214) waa la ansixiyay oo loo diray silsiladda xididka
05:43 - Dhammaan qanjidhada waxay heleen macluumaadka silsiladda xididka ee xannibaya #88 (d3b), #89(214) ayaa lagu daray oo bilaabay inay dalbadaan 670k, 750k macaamil ganacsi
06:50 - Isgaarsiin la'aan awgeed, xannibaadda #85 (50a) lama ansaxin
06:55 - soo gudbi noode #2 waxay ka qaadatay 888145 xawaalad barkada waxayna foomamka block #90 (50a)
08:14 - xannibaadda #90 (50a) waa la saxeexay oo loo diray noodhadhka kale si loo ansixiyo
09:04 - xannibaadda # 90 (50a) waa la ansixiyay waxaana loo diraa silsiladda xididka
11:23 - Dhammaan qanjidhada waxay heleen macluumaadka silsiladda xididka ee xannibaadda # 90 (50a) lagu daray, oo bilaabay inay adeegsadaan 888145 macaamil ganacsi. Isla mar ahaantaana, server-ka #3 ayaa mar hore ka dalbaday wax kala iibsiga blocks #88 (d3b), #89(214)
12:11 - Dhammaan barkadaha waa madhan
13:41 - Dhammaan qanjidhada server-ka #3 waxay ka kooban yihiin 3 milyan oo macaamil ganacsi iyo calaamado
14:35 - Dhammaan qanjidhada server-ka #1 waxay ka kooban yihiin 3 milyan oo macaamil ganacsi iyo calaamado
19:24 - Dhammaan qanjidhada server-ka #2 waxay ka kooban yihiin 3 milyan oo macaamil ganacsi iyo calaamado

Caqabadaha

Intii lagu guda jiray horumarinta lacagta Plasma, waxaan la kulannay dhibaatooyinka soo socda, kuwaas oo aan si tartiib tartiib ah u xallinay oo aan xallinayno:

1. Isku dhacyada isdhexgalka ee hawlaha nidaamka kala duwan. Tusaale ahaan, shaqada ku darista wax kala iibsiga barkada ayaa xannibtay shaqada soo gudbinta iyo ansixinta blocks, iyo liddi ku ah, taas oo keentay hoos u dhaca xawaaraha.

2. Isla markiiba ma cadda sida loo diro tiro aad u badan oo macaamil ganacsi ah iyadoo la dhimayo kharashaadka wareejinta xogta.

3. Ma cadda sida iyo halka lagu kaydiyo xogta si loo gaaro natiijooyin sare.

4. Ma cadda sida loo abaabulo shabakad u dhaxaysa qanjidhada, sababtoo ah xajmiga block oo leh 1 milyan oo xawaalad ah ayaa qaadata ilaa 100 MB.

5. Ku shaqaynta qaab hal-threaded ah waxay jebiyaa xidhiidhka ka dhexeeya noodhka marka xisaabinta dheer dhacdo (tusaale, dhisidda geedka Merkle iyo xisaabinta xashiishkiisa).

Sideen wax uga qabanay waxaas oo dhan?

Nooca ugu horreeya ee Plasma Cash node wuxuu ahaa nooc isku-dar ah oo wax walba samayn kara isku mar: aqbal wax kala iibsiga, soo gudbi oo ansixiya baloogyada, oo siiya API-ga gelitaanka xogta. Maadaama NodeJS asal ahaan uu yahay xadhig-hal-xidhaale ah, hawsha xisaabinta geedka ee Merkle ee culus ayaa xannibtay hawsha wax kala iibsiga. Waxaan aragnay laba ikhtiyaar oo lagu xallinayo dhibaatadan:

1. Bilaw dhowr habraac oo NodeJS ah, kuwaas oo mid walba uu qabto hawlo gaar ah.

2. Isticmaal worker_threads oo u dhaqaaji fulinta qayb ka mid ah koodka dunta.

Natiijo ahaan, waxaanu isticmaalnay labada doorasho isku mar: waxaan si macquul ah u qaybinay hal noode 3 qaybood oo si gooni ah u shaqayn kara, laakiin isku mar ah si isku mid ah.

1. Soo gudbinta noodhka, kaas oo aqbala wax kala iibsiga barkada oo abuura blocks.

2. Nood saxaya oo hubinaya ansaxnimada qanjidhada.

3. API node - waxay siisaa API-ga gelitaanka xogta.

Xaaladdan oo kale, waxaad ku xidhi kartaa noode kasta adigoo isticmaalaya godad unix adoo isticmaalaya cli.

Waxaan u dhaqaaqnay hawlgallo culus, sida xisaabinta geedka Merkle, dun gaar ah.

Markaa, waxaan ku gaadhnay hawlgal caadi ah dhammaan hawlaha Lacagta Lacagta Plasma isku mar iyo guuldarro la'aan.

Markii nidaamku shaqeynayey, waxaan bilownay tijaabinta xawaaraha, nasiib darro, waxaan helnay natiijooyin aan wanaagsaneyn: 5 macaamil ilbiriqsi iyo ilaa 000 macaamil ganacsi kasta. Waxay ahayd inaan ogaado waxa si khaldan loo fuliyay.

Si aan ku bilowno, waxaan bilownay in aan tijaabino habka isgaarsiinta ee Plasma Cash si aan u ogaano awoodda ugu sarreysa ee nidaamka. Waxaan horey u soo qornay in noodhka Plasma Cash uu bixiyo interface socket interface. Markii hore waxay ahayd qoraal ku salaysan. walxaha json waxa la soo diray iyadoo la isticmaalayo `JSON.parse()`iyo `JSON.stringify()`.

```json
{
  "action": "sendTransaction",
  "payload":{
    "prevHash": "0x8a88cc4217745fd0b4eb161f6923235da10593be66b841d47da86b9cd95d93e0",
    "prevBlock": 41,
    "tokenId": "57570139642005649136210751546585740989890521125187435281313126554130572876445",
    "newOwner": "0x200eabe5b26e547446ae5821622892291632d4f4",
    "type": "pay",
    "data": "",
    "signature": "0xd1107d0c6df15e01e168e631a386363c72206cb75b233f8f3cf883134854967e1cd9b3306cc5c0ce58f0a7397ae9b2487501b56695fe3a3c90ec0f61c7ea4a721c"
  }
}
```

Waxaan cabbirnay xawaaraha wareejinta walxahan oo kale waxaanan helnay ~ 130k ilbiriqsi kasta. Waxaan isku daynay inaan bedelno shaqooyinka caadiga ah ee la shaqeynta json, laakiin wax qabadku ma horumarin. Matoorka V8 waa in si wanaagsan loogu hagaajiyaa hawlahan.

Waxaan la shaqaynay wax kala iibsiga, calaamadaha, iyo blocks iyada oo loo marayo fasallo. Marka la abuurayo fasallada noocaas ah, waxqabadka ayaa hoos u dhacay 2 jeer, taas oo muujinaysa in OOP aanu nagu habboonayn. Waxay ahayd inaan wax walba dib ugu qoro hab shaqayn kara

Duubista kaydka xogta

Markii hore, Redis waxaa loo doortay kaydinta xogta mid ka mid ah xalalka ugu waxtarka badan ee qanciya shuruudahayada: kaydinta qiimaha muhiimka ah, la shaqeynta miisaska xashiishka, jaantusyada. Waxaan bilownay redis-benchmark waxaana ku helnay ~ 80k hawlgal ilbiriqsikiiba 1 qaab tuubo.

Waxqabadka sare, waxaan u hagaajinay Redis si fiican:

  • Isku xirka godka unix ayaa la sameeyay.
  • Waxa aanu curyaaminay in aanu gobolka ku kaydino saxanka (halaynta la isku halayn karo, waxa aad samayn kartaa nuqul oo aad ku kaydin kartaa saxanka Redis gaar ah).

Gudaha Redis, barkaduhu waa miiska xashiishka sababtoo ah waxaan u baahanahay inaan awoodno inaan ku soo ceshano dhammaan wax kala iibsiga hal weydiimo oo aan tirtirno wax kala iibsiga mid mid. Waxaan isku daynay inaan isticmaalno liis caadi ah, laakiin way ka gaabinaysaa marka liiska oo dhan la dejiyo.

Markaad isticmaalayso heerka NodeJS, maktabadaha Redis waxay gaadheen waxqabad 18k macaamil ilbiriqsikii. Xawaaraha ayaa hoos u dhacay 9 jeer.

Maadaama bartilmaameedku ina tusay in suurtogalnimada ay si cad 5 jeer uga weyn tahay, waxaan bilownay inaan wanaajino. Waxaan u bedelnay maktabadda ioredis waxaana helnay waxqabadka 25k ilbiriqsikii. Waxaan mid mid ugu darnay wax kala iibsiga anagoo adeegsanayna amarka `hset'. Markaa waxaan ku dhalinaynay su'aalo badan Redis. Fikradda ayaa kacday in la isku daro wax kala iibsiga oo loo diro hal amar 'hmset'. Natiijadu waa 32k ilbiriqsikii.

Sababo dhowr ah, kuwaas oo aan hoos ku tilmaami doono, waxaan ku shaqeynaa xogta anagoo adeegsanayna 'Buffer' iyo, sida ay soo baxday, haddii aad u beddesho qoraal (`buffer.toString('hex')`) ka hor intaadan qorin, waxaad heli kartaa dheeraad ah waxqabadka. Sidaa darteed, xawaaruhu waxa lagu kordhiyey 35k ilbiriqsikiiba. Waqtigan xaadirka ah, waxaan go'aansanay inaan joojino tayaynta dheeraadka ah.

Waxay ahayd inaan u beddelno borotokoolka binary sababtoo ah:

1. Nidaamku wuxuu inta badan xisaabiyaa xashiishyada, saxeexyada, iwm., tanna waxay u baahan tahay xogta 'Buffer'.

2. Marka la diro inta u dhaxaysa adeegyada, xogta binary waxay ka miisaan yar tahay qoraalka. Tusaale ahaan, marka la dirayo block leh 1 milyan oo macaamil ganacsi, xogta qoraalka ku jirta waxay qaadan kartaa in ka badan 300 megabyte.

3. Beddelka joogtada ah ee xogta waxay saamaysaa waxqabadka

Sidaa darteed, waxaan u qaadannay hab-maamuuska binary-ga noo gaar ah ee kaydinta iyo gudbinta xogta, kaas oo lagu horumariyay maktabadda 'binary-data' cajiibka ah.

Natiijo ahaan, waxaan helnay qaab dhismeedka xogta soo socota:

β€” Wax kala iibsiga

  ```json
  {
    prevHash: BD.types.buffer(20),
    prevBlock: BD.types.uint24le,
    tokenId: BD.types.string(null),
    type: BD.types.uint8,
    newOwner: BD.types.buffer(20),
    dataLength: BD.types.uint24le,
    data: BD.types.buffer(({current}) => current.dataLength),
    signature: BD.types.buffer(65),
    hash: BD.types.buffer(32),
    blockNumber: BD.types.uint24le,
    timestamp: BD.types.uint48le,
  }
  ```

- Token

  ```json
  {
    id: BD.types.string(null),
    owner: BD.types.buffer(20),
    block: BD.types.uint24le,
    amount: BD.types.string(null),
  }
  ```

- xannibid

  ```json
  {
    number: BD.types.uint24le,
    merkleRootHash: BD.types.buffer(32),
    signature: BD.types.buffer(65),
    countTx: BD.types.uint24le,
    transactions: BD.types.array(Transaction.Protocol, ({current}) => current.countTx),
    timestamp: BD.types.uint48le,
  }
  ```

Awaamiirta caadiga ah `BD.encode(block, Protocol).slice();`iyo `BD.decode(buffer, Protocol)` waxa aanu xogta u badalnaa `Buffer` si aanu u kaydino Redis ama u gudbino noodh kale oo aanu soo saarno xogta dib.

Waxa kale oo aanu haynaa 2 hab-maamuus oo laba-jibbaaran oo loogu kala wareejinayo xogta adeegyada dhexdooda:

- Hab-maamuuska isdhexgalka ee Plasma Node iyada oo loo marayo socket unix

  ```json
  {
    type: BD.types.uint8,
    messageId: BD.types.uint24le,
    error: BD.types.uint8,
    length: BD.types.uint24le,
    payload: BD.types.buffer(({node}) => node.length)
  }
  ```

meesha:

  • 'nooca' - ficilka la qabanayo, tusaale ahaan, 1 - sendTransaction, 2 - getTransaction;
  • 'raadin' - xogta u baahan in loo gudbiyo shaqada ku habboon;
  • 'messageId' - fariin id si jawaabta loo aqoonsan karo.

- Hab-maamuuska is dhexgalka u dhexeeya qanjidhada

  ```json
  {
    code: BD.types.uint8,
    versionProtocol: BD.types.uint24le,
    seq: BD.types.uint8,
    countChunk: BD.types.uint24le,
    chunkNumber: BD.types.uint24le,
    length: BD.types.uint24le,
    payload: BD.types.buffer(({node}) => node.length)
  }
  ```

meesha:

  • 'code' - lambarka fariinta, tusaale ahaan 6 - PREPARE_NEW_BLOCK, 7 - BLOCK_VALID, 8 - BLOCK_COMMIT;
  • 'versionProtocol' - nooca borotokoolka, maadaama noodhadhka leh noocyo kala duwan lagu kicin karo shabakadda waxayna u shaqeyn karaan si kala duwan;
  • 'seq' - aqoonsiga fariinta;
  • 'countChunk' ΠΈ 'numbarka chunk' lagama maarmaan u ah kala qaybinta farriimaha waaweyn;
  • 'dhererka' ΠΈ 'raadin' dhererka iyo xogta lafteeda.

Maadaama aan horay u qornay xogta, nidaamka kama dambaysta ah aad ayuu uga dhaqso badan yahay maktabadda Ethereum`rlp. Nasiib darro, weli ma aanan awoodin inaan diidno, maadaama ay lagama maarmaan tahay in la dhameeyo qandaraaska smart, kaas oo aan qorsheyneyno inaan mustaqbalka sameyno.

Haddaynu ku guulaysanay in aynu xawliga gaadhno 35 000 macaamil ganacsi ilbiriqsi kasta, waxaan sidoo kale u baahanahay inaan ka baaraandegno waqtiga ugu fiican. Maaddaama wakhtiga samaynta xannibaadda qiyaastii ay qaadanayso 30 ilbiriqsi, waxaan u baahanahay inaan ku darno blockka 1 000 000 macaamil ganacsi, taas oo macnaheedu yahay in badan oo la dirayo 100 MB xogta.

Markii hore, waxaan isticmaalnay maktabadda `ehereumjs-devp2p` si aan ula xiriirno noodhka, laakiin ma xamili karin xog badan. Natiijo ahaan, waxaanu isticmaalnay maktabadda `ws` oo aanu habaysanay diritaanka xogta binary via websocket. Dabcan, waxaan sidoo kale la kulannay dhibaatooyin markii aan dirnay xirmooyinka xogta waaweyn, laakiin waxaan u kala qaybinay qaybo iyo hadda dhibaatooyinkani way baxeen.

Sidoo kale samaynta geedka Merkle iyo xisaabinta xashiishka 1 000 000 macaamiladu waxay u baahan tahay oo ku saabsan 10 ilbiriqsiyo xisaabin joogto ah. Inta lagu jiro wakhtigan, xidhiidhka dhammaan qanjidhada ayaa maamula inuu jabo. Waxaa la go'aamiyay in xisaabintan loo raro dun gaar ah.

Gabagabo:

Dhab ahaantii, natiijooyinkayagu maaha kuwo cusub, laakiin sababaha qaar khubaro badan ayaa ku illoobay iyaga marka ay horumarinayaan.

  • Isticmaalka Barnaamijaynta Waxqabadka halkii laga isticmaali lahaa Barnaamij-ku- Jiheysan Wax-soo-saarka waxay hagaajisaa wax-soo-saarka.
  • Hal-ku-dheggu wuu ka xun yahay qaab-dhismeedka adeegga ee nidaamka NodeJS ee wax soo saarka leh.
  • Isticmaalka 'xadhkaha_shaqaale' xisaabinta culus waxay wanaajisaa ka jawaabista nidaamka, gaar ahaan marka wax laga qabanayo hawlgallada i/o.
  • godka unix waa ka xasiloon yahay oo ka dhaqso badan yahay codsiyada http.
  • Haddii aad u baahan tahay inaad si dhakhso ah ugu wareejiso xogta weyn ee shabakada, waxa fiican inaad isticmaasho websockets oo aad dirto xogta binary, oo loo qaybiyo qaybo, kuwaas oo loo gudbin karo haddii aysan iman, ka dibna la isku daro hal fariin.

Waxaan kugu martiqaadeynaa inaad soo booqato GitHub mashruuca: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Maqaalka waxaa wada qoray Alexander Nashivan, horumariye sare Hal qayb oo ka mid ah Clever Solution Inc.

Source: www.habr.com

Add a comment