Nnwale Ọhaneze: Ngwọta maka Nzuzo na Scalability na Ethereum

Ihe ngọngọ bụ teknụzụ ọhụrụ nke na-ekwe nkwa imeziwanye ọtụtụ akụkụ nke ndụ mmadụ. Ọ na-enyefe ezigbo usoro na ngwaahịa n'ime oghere dijitalụ, na-eme ka ọsọ ọsọ na ntụkwasị obi nke azụmahịa ego, na-ebelata ọnụ ahịa ha, ma na-enye gị ohere ịmepụta ngwa DAPP nke oge a site na iji nkwekọrịta smart na netwọk ndị na-enweghị isi.

N'iburu ọtụtụ uru na ngwa dị iche iche nke blockchain, ọ nwere ike iyi ihe ijuanya na nkà na ụzụ a na-ekwe nkwa abanyebeghị n'ime ụlọ ọrụ ọ bụla. Nsogbu a bụ na blockchains decentralized ọgbara ọhụrụ enweghị scalability. Usoro Ethereum gbasara azụmahịa 20 kwa nkeji, nke na-ezughị ezu iji gboo mkpa nke azụmaahịa siri ike nke taa. N'otu oge ahụ, ụlọ ọrụ ndị na-eji teknụzụ blockchain na-ala azụ ịhapụ Ethereum n'ihi oke nchebe ya site na hacking na ọdịda netwọk.

Iji hụ na ntọhapụ, nchekwa na scalability na blockchain, si otú a na-edozi Scalability Trilemma, ndị otu mmepe. Ohere kere Plasma Cash, agbụ enyemaka nke nwere nkwekọrịta smart yana netwọk nzuzo dabere na Node.js, nke na-ebufe steeti ya kwa oge na agbụ mgbọrọgwụ (Ethereum).

Nnwale Ọhaneze: Ngwọta maka Nzuzo na Scalability na Ethereum

Isi usoro na Plasma Cash

1. Onye ọrụ na-akpọ ọrụ nkwekọrịta smart 'nkwụnye ego', na-agafe n'ime ya ego ETH ọ chọrọ itinye n'ime akara Plasma Cash. Ọrụ nkwekọrịta smart na-emepụta akara ma na-emepụta ihe omume gbasara ya.

2. Plasma Cash nodes debanyere aha na ihe omume nkwekọrịta smart na-enweta ihe omume gbasara ịmepụta nkwụnye ego ma gbakwunye azụmahịa gbasara ịmepụta akara na ọdọ mmiri.

3. Oge ụfọdụ, oghere Plasma Cash pụrụ iche na-ewepụ azụmahịa niile site na ọdọ mmiri (ihe ruru nde 1) wee mepụta ngọngọ site na ha, gbakọọ osisi Merkle na, yabụ, hash. A na-eziga ngọngọ a na ọnụ ụzọ ndị ọzọ maka nkwenye. Ọnụ ụzọ na-enyocha ma hash Merkle ọ̀ dị irè yana ma azụmahịa ndị ahụ ọ̀ dị irè (dịka ọmụmaatụ, ma onye zitere token bụ onye nwe ya). Mgbe nyochaa ngọngọ ahụ, ọnụ na-akpọ 'submitBlock' ọrụ nke nkwekọrịta smart, nke na-echekwa nọmba ngọngọ na Merkle hash na agbụ n'akụkụ. Nkwekọrịta smart na-emepụta ihe omume na-egosi na mgbakwunye na-aga nke ọma nke ngọngọ. A na-ewepụ azụmahịa na ọdọ mmiri ahụ.

4. Nodes na-enweta ihe omume ntinye ihe mgbochi na-amalite itinye azụmahịa ndị agbakwunyere na ngọngọ ahụ.

5. N'oge ụfọdụ, onye nwe (ma ọ bụ onye na-abụghị onye) nke token chọrọ ịdọrọ ya na Plasma Cash. Iji mee nke a, ọ na-akpọ ọrụ 'startExit', na-agafe n'ime ya ozi gbasara azụmahịa 2 ikpeazụ na token, nke na-egosi na ọ bụ ya nwe akara ngosi ahụ. Nkwekọrịta smart, na-eji Merkle hash, na-enyocha ọnụnọ nke azụmahịa na ngọngọ ma zipụ akara ngosi maka iwepụ, nke ga-eme n'ime izu abụọ.

6. Ọ bụrụ na ọrụ iwepụ ihe nrịbama ahụ mere site na mmebi iwu (a na-emefu ihe ngosi ahụ mgbe usoro nkwụsị ahụ malitere ma ọ bụ akara ahụ adịlarị nke onye ọzọ tupu iwepụ ya), onye nwe akara ahụ nwere ike ịgbagha nkwụsị ahụ n'ime izu abụọ.

Nnwale Ọhaneze: Ngwọta maka Nzuzo na Scalability na Ethereum

A na-enweta nzuzo n'ụzọ abụọ

1. Mgbọrọgwụ yinye amaghị ihe ọ bụla gbasara azụmahịa a na-emepụta ma na-ebuga n'ime agbụ ụmụaka. Ozi gbasara onye debere ma wepụ ETH na Plasma Cash ka bụ ọha.

2. Agbụ ụmụaka na-enye ohere azụmahịa na-amaghị aha site na iji zk-SNARK.

Teknụzụ tojupụtara

  • NodeJS
  • Redis
  • etherium
  • Ala

Ule

Ka anyị na-etolite Plasma Cash, anyị nwalere ọsọ nke sistemụ wee nweta nsonaazụ ndị a:

  • ruo 35 azụmahịa kwa nkeji na-agbakwunyere na ọdọ mmiri;
  • Enwere ike ịchekwa ihe ruru 1 azụmahịa na ngọngọ.

Emere ule na sava 3 ndị a:

1. Intel Core i7-6700 Quad-Core Skylake gụnyere. NVMe SSD - 512 GB, 64 GB DDR4 Ram
3 na-akwado ọnụ ọnụ Plasma Cash ewelitere.

2. AMD Ryzen 7 1700X Octa-Core "Summit Ridge" (Zen), SATA SSD - 500 GB, 64 GB DDR4 Ram.
E welitere ọnụ ụzọ Ropsten testnet ETH.
3 na-akwado ọnụ ọnụ Plasma Cash ewelitere.

3. Intel Core i9-9900K Octa-Core gụnyere. NVMe SSD - 1 TB, 64 GB DDR4 Ram
1 Plasma Cash ewelitere ọnụ nrubeisi.
3 na-akwado ọnụ ọnụ Plasma Cash ewelitere.
Ewepụtara ule iji tinye azụmahịa na netwọk Plasma Cash.

Ọnụ: 10 Plasma Cash ọnụ na netwọk nkeonwe.

Nwale 1

Enwere njedebe nke azụmahịa 1 nde kwa ngọngọ. Ya mere, 1 nde azụmahịa na-adaba n'ime ngọngọ 2 (ebe ọ bụ na usoro ahụ na-ejikwa akụkụ nke azụmahịa ma nyefee mgbe a na-eziga ha).


Ọnọdụ mbụ: ngọngọ ikpeazụ #7; A na-echekwa azụmahịa na akara nde 1 na nchekwa data.

00:00 - mmalite nke edemede ọgbọ azụmahịa
01:37 - 1 nde azụmahịa ka emepụtara na izipu na ọnụ ụzọ malitere
01:46 - nyefee ọnụ were 240k azụmahịa site na ọdọ mmiri na ụdị mgbochi #8. Anyị na-ahụkwa na a na-agbakwunye azụmahịa 320k na ọdọ mmiri na 10 sekọnd
01:58 - abanyela na ngọngọ #8 ​​ma ziga maka nkwado
02:03 - ngọngọ #8 ​​kwadoro ma a na-akpọ ọrụ 'submitBlock' nke nkwekọrịta smart na Merkle hash na nọmba ngọngọ.
02:10 - script ngosi rụchara ọrụ, nke zigara azụmahịa nde 1 na sekọnd 32
02:33 - nodes malitere ịnata ozi na agbakwunyere ngọngọ #8 ​​na agbụ mgbọrọgwụ, wee malite ịme azụmahịa 240k.
02:40 - 240k azụmahịa wepụrụ na ọdọ mmiri, nke dịlarị na ngọngọ #8
02:56 - nyefee ọnụ were were azụmaahịa 760k fọdụrụ na ọdọ mmiri wee malite ịgbakọ hash Merkle na ịbanye ngọngọ #9
03:20 - ọnụ ụzọ niile nwere azụmahịa na akara 1 nde 240k
03:35 - abanyela aka na ngọngọ #9 ma ziga maka nkwado na ọnụ ndị ọzọ
03:41 - njehie netwọk mere
04:40 - ichere mgbochi #9 nkwado agafeela
04:54 - nyefee ọnụ were were azụmaahịa 760k fọdụrụ na ọdọ mmiri wee malite ịgbakọ hash Merkle na ịbanye ngọngọ #9
05:32 - abanyela aka na ngọngọ #9 ma ziga maka nkwado na ọnụ ndị ọzọ
05:53 - ngọngọ #9 kwadoro ma zigara ya na mgbọrọgwụ mgbọrọgwụ
06:17 - nodes malitere ịnata ozi na agbakwunyere ngọngọ #9 na agbụ mgbọrọgwụ wee malite ịme azụmahịa 760k.
06:47 - ọdọ mmiri ekpochapụla azụmahịa ndị dị na ngọngọ #9
09:06 - ọnụ ụzọ niile nwere azụmahịa na akara nde abụọ

Nwale 2

Enwere oke nke 350k kwa ngọngọ. N'ihi ya, anyị nwere 3 blocks.


Ọnọdụ mbụ: ngọngọ ikpeazụ #9; A na-echekwa azụmahịa na akara nde 2 na nchekwa data

00:00 - ewepụtala edemede ọgbọ azụmahịa
00:44 - 1 nde azụmahịa ka emepụtara na izipu na ọnụ ụzọ malitere
00:56 - nyefee ọnụ were 320k azụmahịa site na ọdọ mmiri na ụdị mgbochi #10. Anyị na-ahụkwa na a na-agbakwunye azụmahịa 320k na ọdọ mmiri na 10 sekọnd
01:12 - abanyela aka na ngọngọ #10 ma ziga ya na ọnụ ụzọ ndị ọzọ maka nkwado
01:18 - script ngosi rụchara ọrụ, nke zigara azụmahịa nde 1 na sekọnd 34
01:20 - ngọngọ #10 kwadoro ma zigara ya na mgbọrọgwụ mgbọrọgwụ
01:51 - ọnụ ụzọ niile nwetara ozi sitere na mgbọrọgwụ mgbọrọgwụ nke agbakwunyere ngọngọ #10 wee malite itinye azụmahịa 320k.
02:01 - ọdọ mmiri ekpochapụla maka azụmahịa 320k agbakwunyere iji gbochie #10
02:15 - nyefee ọnụ were 350k azụmahịa site na ọdọ mmiri na ụdị mgbochi #11
02:34 - abanyela aka na ngọngọ #11 ma ziga ya na ọnụ ụzọ ndị ọzọ maka nkwado
02:51 - ngọngọ #11 kwadoro ma zigara ya na mgbọrọgwụ mgbọrọgwụ
02:55 - ọnụ ahịa ikpeazụ emechara site na ngọngọ #10
10:59 - azụmahịa na nrubeisi nke ngọngọ #9 were ogologo oge na mgbọrọgwụ yinye, ma ọ dechara na niile ọnụ natara ozi banyere ya wee malite ịrụ 350k azụmahịa.
11:05 - ọdọ mmiri ekpochapụla maka azụmahịa 320k agbakwunyere iji gbochie #11
12:10 - ọnụ ụzọ niile nwere azụmahịa na akara 1 nde 670k
12:17 - nyefee ọnụ were 330k azụmahịa si ọdọ mmiri na ụdị ngọngọ #12
12:32 - abanyela aka na ngọngọ #12 ma ziga ya na ọnụ ụzọ ndị ọzọ maka nkwado
12:39 - ngọngọ #12 kwadoro ma zigara ya na mgbọrọgwụ mgbọrọgwụ
13:44 - ọnụ ụzọ niile nwetara ozi sitere na agbụ mgbọrọgwụ nke agbakwunyere ngọngọ #12 wee malite itinye azụmahịa 330k.
14:50 - ọnụ ụzọ niile nwere azụmahịa na akara nde abụọ

Nwale 3

Na sava nke mbụ na nke abụọ, otu ọnụ ọnụ na-akwado ka ejiri ọnụ ntinye dochie anya.


Ala mbụ: ngọngọ ikpeazụ #84; 0 azụmahịa yana akara echekwara na nchekwa data

00:00 - ewepụtala edemede 3 na-ewepụta ma na-eziga azụmahịa nde 1 nke ọ bụla
01:38 - Azụmahịa nde 1 ka emepụtara na izipu ka ha nyefee ọnụ #3 malitere
01:50 - nyefee ọnụ #3 were 330k azụmahịa site na ọdọ mmiri na ụdị ngọngọ #85 (f21). Anyị na-ahụkwa na a na-agbakwunye azụmahịa 350k na ọdọ mmiri na 10 sekọnd
01:53 - Azụmahịa nde 1 ka emepụtara na izipu ka ha nyefee ọnụ #1 malitere
01:50 - nyefee ọnụ #3 were 330k azụmahịa site na ọdọ mmiri na ụdị ngọngọ #85 (f21). Anyị na-ahụkwa na a na-agbakwunye azụmahịa 350k na ọdọ mmiri na 10 sekọnd
02:01 - nyefee ọnụ #1 weghaara azụmahịa 250k site na ọdọ mmiri wee mepụta ngọngọ #85 (65e)
02:06 - ngọngọ #85 (f21) abanyela aka ma zigara ya na ọnụ ndị ọzọ maka nkwado
02:08 - ihe ngosi ngosi nke ihe nkesa #3, nke zigara azụmahịa nde 1 na sekọnd 30, rụchara ọrụ
02:14 - ngọngọ #85 (f21) kwadoro ma ziga ya na mgbọrọgwụ mgbọrọgwụ
02:19 - ngọngọ #85 (65e) abanyela aka ma ziga ya na ọnụ ụzọ ndị ọzọ maka nkwado
02:22 - Azụmahịa nde 1 ka emepụtara na izipu ka ha nyefee ọnụ #2 malitere
02:27 - ngọngọ #85 (65e) kwadoro ma zigara ya na mgbọrọgwụ mgbọrọgwụ
02:29 - nyefee ọnụ #2 were 111855 azụmahịa si ọdọ mmiri na ụdị ngọngọ #85 (256).
02:36 - ngọngọ #85 (256) abanyela aka ma ziga ya na ọnụ ụzọ ndị ọzọ maka nkwado
02:36 - ihe ngosi ngosi nke ihe nkesa #1, nke zigara azụmahịa nde 1 na sekọnd 42.5, rụchara ọrụ
02:38 - ngọngọ #85 (256) kwadoro ma ziga ya na agbụ mgbọrọgwụ
03: 08 - ihe nkesa # 2 script rụchara ọrụ, nke zigara azụmahịa nde 1 na sekọnd 47
03:38 - ọnụ ụzọ niile natara ozi sitere na agbụ mgbọrọgwụ nke na-egbochi #85 (f21), #86 (65e), #87 (256) wee malite itinye azụmahịa 330k, 250k, 111855
03:49 - A kpochapụrụ ọdọ mmiri ahụ na 330k, 250k, 111855 azụmahịa ndị agbakwunyere na ngọngọ #85 (f21), #86 (65e), #87 (256)
03:59 - nyefee ọnụ #1 were 888145 azụmahịa si ọdọ mmiri na ụdị ngọngọ #88 (214), nyefee ọnụ #2 weere 750k azụmahịa si ọdọ mmiri na ụdị ngọngọ #88 (50a), n'okpuru ọnụ #3 weere 670k azụmahịa si ọdọ mmiri na ụdị ngọngọ #88 (d3b)
04:44 - ngọngọ #88 (d3b) abanyela aka ma ziga ya na ọnụ ụzọ ndị ọzọ maka nkwado
04:58 - ngọngọ #88 (214) abanyela aka ma ziga ya na ọnụ ụzọ ndị ọzọ maka nkwado
05:11 - ngọngọ #88 (50a) abanyela aka ma ziga ya na ọnụ ụzọ ndị ọzọ maka nkwado
05:11 - ngọngọ #85 (d3b) kwadoro ma ziga ya na mgbọrọgwụ mgbọrọgwụ
05:36 - ngọngọ #85 (214) kwadoro ma ziga ya na agbụ mgbọrọgwụ
05:43 - ọnụ ụzọ niile enwetara ozi sitere na agbụ mgbọrọgwụ nke na-egbochi #88 (d3b), #89 (214) agbakwunyere ma malite itinye 670k, azụmahịa 750k.
06:50 - n'ihi ọdịda nkwurịta okwu, mgbochi #85 (50a) akwadoghị
06:55 - nyefee ọnụ #2 weghaara azụmahịa 888145 site na ọdọ mmiri wee mepụta ngọngọ #90 (50a)
08:14 - ngọngọ #90 (50a) abanyela aka ma ziga ya na ọnụ ụzọ ndị ọzọ maka nkwado
09:04 - ngọngọ #90 (50a) kwadoro ma zigara ya na mgbọrọgwụ mgbọrọgwụ
11:23 - ọnụ ụzọ niile natara ozi sitere na agbụ mgbọrọgwụ nke agbakwunyere ngọngọ #90 (50a), wee malite itinye azụmahịa 888145. N'otu oge ahụ, ihe nkesa #3 etinyelarị azụmahịa site na ngọngọ #88 (d3b), #89(214)
12:11 - ọdọ mmiri niile tọgbọrọ chakoo
13:41 - ọnụ ụzọ niile nke ihe nkesa #3 nwere azụmahịa na akara nde atọ
14:35 - ọnụ ụzọ niile nke ihe nkesa #1 nwere azụmahịa na akara nde atọ
19:24 - ọnụ ụzọ niile nke ihe nkesa #2 nwere azụmahịa na akara nde atọ

Ihe mgbochi

N'oge mmepe nke Plasma Cash, anyị zutere nsogbu ndị a, nke anyị ji nwayọọ nwayọọ dozie ma na-edozi:

1. Esemokwu na mmekọrịta nke ọrụ usoro dị iche iche. Dịka ọmụmaatụ, ọrụ nke ịgbakwunye azụmahịa na ọdọ mmiri gbochiri ọrụ nke ntinye na ịkwado ngọngọ, na nke ọzọ, nke mere ka ọ daa ngwa ngwa.

2. O dochaghị anya ozugbo otu esi ezipu ọnụ ọgụgụ dị ukwuu nke azụmahịa ka ị na-ebelata ụgwọ mbufe data.

3. O dochaghị anya otu na ebe a ga-echekwa data iji nweta nsonaazụ dị elu.

4. O doghị anya ka esi ahazi netwọk n'etiti ọnụ, ebe ọ bụ na nha nke ngọngọ nwere azụmahịa 1 nde na-ewe ihe dịka 100 MB.

5. Na-arụ ọrụ na otu-threaded mode na-agbaji njikọ dị n'etiti ọnụ mgbe ogologo mgbako mere (dịka ọmụmaatụ, ewu a Merkle osisi na ịgbakọ hash).

Olee otú anyị si mesoo ihe a nile?

Ụdị nke mbụ Plasma Cash node bụ ụdị ngwakọta nke nwere ike ime ihe niile n'otu oge: nabata azụmahịa, nyefee ma kwado ngọngọ, ma nye API maka ịnweta data. Ebe ọ bụ na NodeJS bụ nke nwere otu eriri, ọrụ mgbako osisi Merkle dị arọ gbochiri ọrụ ntinye azụmahịa. Anyị hụrụ nhọrọ abụọ maka idozi nsogbu a:

1. Mepụta ọtụtụ usoro NodeJS, nke ọ bụla na-arụ ọrụ ụfọdụ.

2. Jiri worker_threads wee bugharịa mmezu nke akụkụ koodu ahụ n'ime eriri.

N'ihi ya, anyị na-eji nhọrọ abụọ ahụ n'otu oge: anyị kewara otu ọnụ n'ime akụkụ 3 nke nwere ike ịrụ ọrụ iche iche, ma n'otu oge ahụ synchronously.

1. Ntinye ntinye, nke na-anabata azụmahịa n'ime ọdọ mmiri ma mepụta ngọngọ.

2. Ọnụ ọnụ na-akwado nke na-enyocha ike nke ọnụ ọnụ.

3. Nọmba API - na-enye API maka ịnweta data.

N'okwu a, ịnwere ike ijikọ ọnụ ọnụ nke ọ bụla site na oghere unix site na iji cli.

Anyị bufere ọrụ siri ike, dị ka ịgbakọ osisi Merkle, n'ime eriri dị iche.

Yabụ, anyị enwetala ọrụ nkịtị nke ọrụ Plasma Cash niile n'otu oge na enweghị ọdịda.

Ozugbo usoro ahụ na-arụ ọrụ, anyị malitere ịnwale ọsọ ọsọ na, ọ dị mwute ikwu, natara nsonaazụ na-adịghị mma: azụmahịa 5 kwa nkeji na ruo 000 azụmahịa kwa ngọngọ. Ekwesịrị m ịchọpụta ihe etinyere na ezighi ezi.

Iji malite, anyị malitere ịnwale usoro nzikọrịta ozi na Plasma Cash iji chọpụta ike kachasị nke sistemụ ahụ. Anyị dere na mbụ na Plasma Cash node na-enye oghere oghere unix. Na mbido ọ dabere na ederede. ezitere ihe json site na iji `JSON.parse()` na `JSON.stringify()`.

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

Anyị tụlere ọsọ mbufe nke ihe ndị dị otú ahụ wee hụ ~ 130k kwa sekọnd. Anyị gbalịrị iji dochie ọrụ ọkọlọtọ maka iji json rụọ ọrụ, mana arụmọrụ emeghị nke ọma. A ga-emerịrị injin V8 nke ọma maka ọrụ ndị a.

Anyị na-arụ ọrụ na azụmahịa, tokens, na blocks site na klaasị. Mgbe ị na-eke klas ndị dị otú ahụ, arụmọrụ dara ugboro abụọ, nke na-egosi na OOP adịghị mma maka anyị. Ekwesịrị m idegharị ihe niile ka ọ bụrụ usoro na-arụ ọrụ naanị.

Ịdekọ na nchekwa data

Na mbụ, a họọrọ Redis maka nchekwa data dị ka otu n'ime ihe ngwọta kachasị mma nke na-egbo mkpa anyị: nchekwa uru bara uru, na-arụ ọrụ na tebụl hash, sets. Anyị bidoro redis-benchmark wee nweta ~80k arụmọrụ kwa nkeji na 1 pipelining mode.

Maka ịrụ ọrụ dị elu, anyị debere Redis nke ọma:

  • Ekwupụtala njikọ oghere unix.
  • Anyị nwere nkwarụ ichekwa steeti ahụ na diski (maka ntụkwasị obi, ị nwere ike ịtọ oyiri ma chekwaa na diski na Redis dị iche).

Na Redis, ọdọ mmiri bụ tebụl hash n'ihi na anyị kwesịrị inwe ike weghachite azụmahịa niile n'otu ajụjụ wee hichapụ azụmahịa otu otu. Anyị nwara iji ndepụta oge niile, mana ọ na-adị nwayọ mgbe anyị na-ebugo ndepụta niile.

Mgbe ị na-eji ọkọlọtọ NodeJS, ọba akwụkwọ Redis nwetara arụmọrụ nke azụmahịa 18k kwa sekọnd. Ọsọ ahụ dara ugboro 9.

Ebe ọ bụ na akara ngosi gosiri anyị na ohere ahụ doro anya karịa ugboro 5, anyị malitere ịkwalite. Anyị gbanwere ọbá akwụkwọ ka ọ bụrụ ioredis wee nweta arụmọrụ nke 25k kwa sekọnd. Anyị gbakwunyere azụmahịa otu otu site na iji iwu `hset'. Yabụ na anyị nọ na-ewepụta ọtụtụ ajụjụ na Redis. Echiche bilitere iji jikọta azụmahịa n'ime batches wee ziga ha na otu iwu 'hmset'. Ihe si na ya pụta bụ 32k kwa nkeji.

N'ihi ọtụtụ ihe, nke anyị ga-akọwa n'okpuru ebe a, anyị na-arụ ọrụ na data site na iji `Buffer` na, dị ka ọ na-apụta, ọ bụrụ na ị tọghata ya na ederede (`buffer.toString('hex')') tupu ide, ị nwere ike nweta ndị ọzọ. arụmọrụ. Ya mere, a na-abawanye ọsọ na 35k kwa nkeji. N'oge a, anyị kpebiri ịkwụsịtụ njikarịcha ọzọ.

Anyị ga-agbanye na protocol ọnụọgụ abụọ n'ihi:

1. Usoro a na-agbakọkarị hashes, mbinye aka, wdg, maka nke a ọ chọrọ data na 'Buffer.

2. Mgbe ezigara n'etiti ọrụ, data ọnụọgụ abụọ na-eru ihe na-erughị ederede. Dịka ọmụmaatụ, mgbe ị na-eziga ngọngọ na azụmahịa 1 nde, data dị na ederede nwere ike iburu ihe karịrị 300 megabyte.

3. Ịgbanwe data mgbe niile na-emetụta arụmọrụ.

Ya mere, anyị weere dị ka ihe ndabere nke anyị ọnụọgụ abụọ protocol maka ịchekwa na ịnyefe data, mepụtara na ndabere nke ọmarịcha 'ọnụọgụ-data' ọba akwụkwọ.

N'ihi ya, anyị nwetara usoro data ndị a:

-Ntugharị

  ```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),
  }
  ```

- Gbochie

  ```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,
  }
  ```

Site na iwu ndị a na-emebu `BD.encode(block, Protocol) .ibe();` na `BD.decode(buffer, Protocol)` anyị na-atụgharị data ahụ ka ọ bụrụ 'nchekwa' maka ichekwa na Redis ma ọ bụ zipu n'ọnụ ọzọ wee weghachi ya. data azụ.

Anyị nwekwara protocol ọnụọgụ abụọ maka ịnyefe data n'etiti ọrụ:

- Protocol maka mmekọrịta ya na Plasma Node site na oghere 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)
  }
  ```

ebe:

  • 'ụdị' - omume a ga-eme, dịka ọmụmaatụ, 1 - sendTransaction, 2 - getTransaction;
  • 'buo ibu' - data nke kwesịrị ibufe na ọrụ kwesịrị ekwesị;
  • 'oziId' - ozi id ka e wee mata nzaghachi.

- Protocol maka mmekọrịta n'etiti ọnụ

  ```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)
  }
  ```

ebe:

  • 'koodu' - koodu ozi, dịka ọmụmaatụ 6 - PREPARE_NEW_BLOCK, 7 - BLOCK_VALID, 8 - BLOCK_COMMIT;
  • 'ụdị Protocol' - ụdị protocol, ebe ọ bụ na ọnụ nwere ụdị dị iche iche nwere ike ibulite na netwọk ma ha nwere ike ịrụ ọrụ dị iche iche;
  • 'seq' - njirimara ozi;
  • 'countChunk' и 'Numba nọmba' dị mkpa maka ikewa nnukwu ozi;
  • 'ogologo' и 'buo ibu' ogologo na data n'onwe ya.

Ebe anyị buru ụzọ pịnye data ahụ, usoro ikpeazụ na-adị ngwa ngwa karịa ọba akwụkwọ Ethereum`rlp. N'ụzọ dị mwute, anyị enwebeghị ike ịjụ ya, ebe ọ bụ na ọ dị mkpa iji mechaa nkwekọrịta smart, nke anyị na-eme atụmatụ ime n'ọdịnihu.

Ọ bụrụ na anyị jisiri ike iru ọsọ 35 000 azụmahịa kwa nkeji, anyị na-mkpa hazie ha na ezigbo oge. Ebe ọ bụ na oge nhazi ihe mgbochi na-ewe 30 sekọnd, anyị kwesịrị itinye na ngọngọ 1 000 000 azụmahịa, nke pụtara izipu ndị ọzọ 100 MB nke data.

Na mbụ, anyị na-eji 'ehereumjs-devp2p' ọba akwụkwọ iji kparịta ụka n'etiti ọnụ ọnụ, mana ọ nweghị ike ijikwa ọtụtụ data. N'ihi ya, anyị na-eji 'ws' ọba akwụkwọ ma hazie izipu ọnụọgụ abụọ site na websocket. N'ezie, anyị na-ezutekwa nsogbu mgbe anyị na-ezipụ nnukwu data ngwugwu, ma anyị kewara ha na chunks na ugbu a nsogbu ndị a na-apụ.

Na-akpụkwa osisi Merkle na ịgbakọ hash 1 000 000 azụmahịa na-achọ banyere 10 sekọnd nke na-aga n'ihu ngụkọta oge. N'ime oge a, njikọ na ọnụ niile na-agbaji. Ekpebiri ịkwaga ngụkọ a na eri dị iche.

Mkpebi:

N'ezie, nchọpụta anyị abụghị ihe ọhụrụ, ma n'ihi ihe ụfọdụ ọtụtụ ndị ọkachamara na-echefu banyere ha mgbe ha na-etolite.

  • Iji mmemme na-arụ ọrụ kama mmemme dabere n'ihe na-eme ka nrụpụta dị mma.
  • Otu monolith dị njọ karịa ụlọ ọrụ maka sistemụ NodeJS na-arụpụta ihe.
  • Iji 'akara_onye ọrụ' maka mgbako dị arọ na-eme ka nnabata sistemụ na-anabata nke ọma, ọkachasị mgbe ị na-arụ ọrụ i/o.
  • sọket unix kwụsiri ike yana ngwa ngwa karịa arịrịọ http.
  • Ọ bụrụ na ịchọrọ ịnyefe data buru ibu ngwa ngwa na netwọkụ, ọ ka mma iji webụsaịtị wee zipụ data ọnụọgụ abụọ, kewara n'ime chunks, nke enwere ike ibuga ma ọ bụrụ na ha eruteghị, wee jikọta ya na otu ozi.

Anyị na-akpọ gị òkù ka ị bịa GitHub oru ngo: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Ọ bụ ndị ha na-edekọ akụkọ a Alexander Nashivan, agadi onye nrụpụta Ụlọ ọrụ Clever Solution Inc.

isi: www.habr.com

Tinye a comment