Tástáil Phoiblí: Réiteach le haghaidh Príobháideachta agus Inscálaithe ar Ethereum

Blockchain is teicneolaíocht nuálach í a gheallann feabhas a chur ar go leor réimsí de shaol an duine. Aistríonn sé próisis agus táirgí fíor isteach sa spás digiteach, cinntíonn sé luas agus iontaofacht na n-idirbheart airgeadais, laghdaítear a gcostas, agus ligeann sé duit feidhmchláir nua-aimseartha DAPP a chruthú ag baint úsáide as conarthaí cliste i líonraí díláraithe.

Mar gheall ar na buntáistí iomadúla agus na hiarratais éagsúla a bhaineann le blockchain, d'fhéadfadh sé a bheith iontas nach bhfuil an teicneolaíocht seo geallta fós i ngach tionscal. Is í an fhadhb atá ann go bhfuil easpa scalability blockchain díláraithe nua-aimseartha. Próiseálann Ethereum thart ar 20 idirbheart in aghaidh an tsoicind, rud nach leor chun freastal ar riachtanais ghnólachtaí dinimiciúla an lae inniu. Ag an am céanna, tá leisce ar chuideachtaí a úsáideann teicneolaíocht blockchain Ethereum a thréigean mar gheall ar a ardleibhéal cosanta ó hackáil agus teipeanna líonra.

Chun dílárú, slándáil agus scalability a chinntiú sa blockchain, mar sin réiteach an Scalability Trilemma, an fhoireann forbartha Deis chruthaigh Plasma Cash, slabhra fochuideachta comhdhéanta de chonradh cliste agus líonra príobháideach bunaithe ar Node.js, a aistríonn a stát go tréimhsiúil chuig an slabhra fréimhe (Ethereum).

Tástáil Phoiblí: Réiteach le haghaidh Príobháideachta agus Inscálaithe ar Ethereum

Príomhphróisis in Airgid Plasma

1. Glaonn an t-úsáideoir ar fheidhm an chonartha cliste `taisce`, ag dul isteach ann an méid ETH atá sé ag iarraidh a thaisceadh isteach sa chomhartha Airgid Plasma. Cruthaíonn feidhm an chonartha chliste comhartha agus gineann sé imeacht faoi.

2. Faigheann nóid Plasma Cash atá suibscríofa le himeachtaí conartha cliste imeacht faoi éarlais a chruthú agus cuireann siad idirbheart maidir le comhartha a chruthú leis an linn.

3. Go tréimhsiúil, glacann nóid Airgid Plasma speisialta gach idirbheart ón linn (suas le 1 milliún) agus foirmíonn siad bloc uathu, ríomh an crann Merkle agus, dá réir sin, an hash. Seoltar an bloc seo chuig nóid eile lena fhíorú. Seiceálann na nóid cibé an bhfuil an Merkle hash bailí agus cibé an bhfuil na hidirbhearta bailí (mar shampla, cibé an é seoltóir an chomhartha a úinéir). Tar éis an bloc a fhíorú, glaonn an nód feidhm `submitBlock` an chonartha chliste, rud a shábhálann an uimhir bhloc agus Merkle hash chuig an slabhra imeall. Gineann an conradh cliste imeacht a léiríonn go rathúil bloc a chur leis. Baintear na hidirbhearta as an linn.

4. Tosaíonn nóid a fhaigheann an t-imeacht aighneacht bloc na hidirbhearta a cuireadh leis an mbloc a chur i bhfeidhm.

5. Ag pointe éigin, tá úinéir (nó neamh-úinéir) an chomhartha ag iarraidh é a tharraingt siar ó Plasma Cash. Chun seo a dhéanamh, glaonn sé an fheidhm `startExit`, agus cuireann sé isteach ann faisnéis faoin 2 idirbheart dheireanach ar an chomhartha, a dhearbhaíonn gurb é úinéir an chomhartha é. Seiceálann an conradh cliste, ag baint úsáide as hash Merkle, láithreacht na n-idirbheart sna bloic agus cuireann sé an comhartha le haghaidh tarraingt siar, a tharlóidh i gceann coicíse.

6. Má tharla an oibríocht aistarraingthe chomharthaí le sáruithe (caitheadh ​​​​an chomhartha tar éis don nós imeachta aistarraingthe tosú nó má bhí an comhartha ag duine éigin eile cheana féin roimh an tarraingt siar), féadfaidh úinéir an chomhartha aistarraingthe a bhréagnú laistigh de dhá sheachtain.

Tástáil Phoiblí: Réiteach le haghaidh Príobháideachta agus Inscálaithe ar Ethereum

Baintear príobháideacht amach ar dhá bhealach

1. Níl a fhios ag an slabhra fréimhe aon rud faoi na hidirbhearta a ghintear agus a chuirtear ar aghaidh laistigh den slabhra leanaí. Tá faisnéis faoi cé a thaisce agus a tharraing ETH siar ó Plasma Cash fós poiblí.

2. Ceadaíonn an slabhra leanaí idirbhearta gan ainm ag baint úsáide as zk-SNARKs.

Stack teicneolaíochta

  • NodeJS
  • Redis
  • Etheriam
  • ithir

Tástáil

Agus Plasma Cash á fhorbairt againn, rinneamar tástáil ar luas an chórais agus fuaireamar na torthaí seo a leanas:

  • cuirtear suas le 35 idirbheart in aghaidh an tsoicind leis an linn;
  • is féidir suas le 1 idirbheart a stóráil i mbloc.

Rinneadh tástálacha ar na 3 fhreastalaí seo a leanas:

1. Intel Core i7-6700 Quad-Core Skylake san áireamh. NVMe SSD - 512 GB, 64 GB DDR4 RAM
Ardaíodh 3 nód Plasma Cash a bhailíochtú.

2. AMD Ryzen 7 1700X Octa-Core “Summit Ridge” (Zen), SATA SSD - 500 GB, 64 GB DDR4 RAM
Ardaíodh nód testnet ETH Ropsten.
Ardaíodh 3 nód Plasma Cash a bhailíochtú.

3. Intel Core i9-9900K Octa-Core san áireamh. NVMe SSD - 1 TB, 64 GB DDR4 RAM
1 Ardaíodh nód aighneacht airgid Plasma.
Ardaíodh 3 nód Plasma Cash a bhailíochtú.
Seoladh tástáil chun idirbhearta a chur leis an líonra Plasma Cash.

Iomlán: 10 nód Plasma Cash i líonra príobháideach.

Tástáil 1

Tá teorainn de 1 milliún idirbheart in aghaidh an bhloc. Mar sin, tagann 1 milliún idirbheart isteach i 2 bhloc (ós rud é go mbainistíonn an córas cuid de na hidirbhearta a ghlacadh agus a chur isteach agus iad á seoladh).


Staid tosaigh: bloc deireanach #7; Stóráiltear 1 milliún idirbheart agus comharthaí sa bhunachar sonraí.

00:00 - tús script giniúna idirbhirt
01:37 - Cruthaíodh 1 milliún idirbheart agus cuireadh tús le seoladh chuig an nód
01:46 - nód a chur isteach ghlac 240k idirbheart as an linn snámha agus foirmeacha bloc #8. Feicimid freisin go gcuirtear 320k idirbheart leis an linn i 10 soicind
01:58 - sínithe agus seolta le haghaidh bailíochtaithe bloc #8
02:03 - bailíochtaítear bloc #8 agus glaoitear an fheidhm `submitBlock` den chonradh cliste leis an hash Merkle agus an uimhir bhloc
02:10 - script taispeána críochnaithe ag obair, a sheol 1 milliún idirbheart i 32 soicind
02:33 - thosaigh nóid ag fáil faisnéise gur cuireadh bloc #8 leis an bhfréamhshlabhra, agus thosaigh siad ag déanamh 240k idirbheart
02:40 - Baineadh 240k idirbheart as an linn, atá i mbloc #8 cheana féin
02:56 - thóg nód a chur isteach na 760k eile idirbhearta ón linn agus thosaigh sé ag ríomh an hash Merkle agus síniú bloc #9
03:20 - tá 1 milliún idirbheart 240k agus comharthaí i ngach nóid
03:35 - tá bloc #9 sínithe agus seolta chuig nóid eile lena bhailíochtú
03:41 - tharla earráid líonra
04:40 - ag fanacht le bailíochtú bloc #9 imithe i léig
04:54 - thóg nód a chur isteach na 760k eile idirbhearta ón linn agus thosaigh sé ag ríomh an hash Merkle agus síniú bloc #9
05:32 - tá bloc #9 sínithe agus seolta chuig nóid eile lena bhailíochtú
05:53 - bailíochtaítear bloc #9 agus seoltar chuig an slabhra fréimhe é
06:17 - thosaigh nóid ag fáil faisnéise gur cuireadh bloc #9 leis an bhfréamhshlabhra agus thosaigh siad ag déanamh 760k idirbheart
06:47 - tá idirbhearta atá i mbloc #9 glanta ag an linn
09:06 - tá 2 mhilliún idirbheart agus comharthaí i ngach nóid

Tástáil 2

Tá teorainn 350k in aghaidh an bhloc. Mar thoradh air sin, ní mór dúinn 3 bloic.


Staid tosaigh: bloc deireanach #9; Stóráiltear 2 mhilliún idirbheart agus comharthaí sa bhunachar sonraí

00:00 - tá script giniúna idirbheart seolta cheana féin
00:44 - Cruthaíodh 1 milliún idirbheart agus cuireadh tús le seoladh chuig an nód
00:56 - nód a chur isteach ghlac 320k idirbheart as an linn snámha agus foirmeacha bloc #10. Feicimid freisin go gcuirtear 320k idirbheart leis an linn i 10 soicind
01:12 - síniú bloc #10 agus seoltar chuig nóid eile é lena bhailíochtú
01:18 - script taispeána críochnaithe ag obair, a sheol 1 milliún idirbheart i 34 soicind
01:20 - bailíochtaítear bloc #10 agus seoltar chuig an slabhra fréimhe é
01:51 - fuair gach nód faisnéis ón bhfréamhshlabhra gur cuireadh bloc #10 leis agus gur cuireadh tús le 320k idirbheart a chur i bhfeidhm
02:01 - tá an linn glanta le haghaidh 320k idirbheart a cuireadh le bloc #10
02:15 - nód a chur isteach ghlac 350k idirbheart as an linn snámha agus foirmeacha bloc #11
02:34 - síniú bloc #11 agus seoltar chuig nóid eile é lena bhailíochtú
02:51 - bailíochtaítear bloc #11 agus seoltar chuig an slabhra fréimhe é
02:55 - chríochnaigh an nód deireanach idirbhearta ó bhloc #10
10:59 - thóg an t-idirbheart le haighneacht bloc # 9 tréimhse an-fhada sa slabhra fréimhe, ach críochnaíodh é agus fuair na nóid go léir faisnéis faoi agus thosaigh siad ag déanamh 350k idirbheart
11:05 - tá an linn glanta le haghaidh 320k idirbheart a cuireadh le bloc #11
12:10 - tá 1 milliún idirbheart 670k agus comharthaí i ngach nóid
12:17 - nód a chur isteach ghlac 330k idirbheart as an linn snámha agus foirmeacha bloc #12
12:32 - síniú bloc #12 agus seoltar chuig nóid eile é lena bhailíochtú
12:39 - bailíochtaítear bloc #12 agus seoltar chuig an slabhra fréimhe é
13:44 - fuair gach nód faisnéis ón bhfréamhshlabhra gur cuireadh bloc #12 leis agus gur cuireadh tús le 330k idirbheart a chur i bhfeidhm
14:50 - tá 2 mhilliún idirbheart agus comharthaí i ngach nóid

Tástáil 3

Sa chéad agus sa dara freastalaí, cuireadh nód tíolactha in ionad nód bailíochtaithe amháin.


Staid tosaigh: bloc deireanach #84; 0 idirbheart agus comharthaí a shábháil sa bhunachar sonraí

00:00 - Seoladh 3 script a ghineann agus a sheolann 1 milliún idirbheart an ceann
01:38 - Cruthaíodh 1 milliún idirbheart agus cuireadh tús le seoladh chun nód #3 a chur isteach
01:50 - nód a chur isteach #3 ghlac 330k idirbheart as an linn snámha agus foirmeacha bloc #85 (f21). Feicimid freisin go gcuirtear 350k idirbheart leis an linn i 10 soicind
01:53 - Cruthaíodh 1 milliún idirbheart agus cuireadh tús le seoladh chun nód #1 a chur isteach
01:50 - nód a chur isteach #3 ghlac 330k idirbheart as an linn snámha agus foirmeacha bloc #85 (f21). Feicimid freisin go gcuirtear 350k idirbheart leis an linn i 10 soicind
02:01 - nód a chur isteach ghlac #1 idirbheart 250k ón linn agus bloc foirmeacha #85 (65e)
02:06 - sínítear bloc #85 (f21) agus seoltar chuig nóid eile é lena bhailíochtú
02:08 - script taispeána an fhreastalaí #3, a sheol 1 milliún idirbheart i 30 soicind, críochnaithe ag obair
02:14 - bailíochtaítear bloc #85 (f21) agus seoltar chuig an slabhra fréimhe é
02:19 - sínítear bloc #85 (65e) agus seoltar chuig nóid eile é lena bhailíochtú
02:22 - Cruthaíodh 1 milliún idirbheart agus cuireadh tús le seoladh chun nód #2 a chur isteach
02:27 - bailíochtú bloc #85 (65e) agus seoladh chuig an slabhra fréimhe é
02:29 - cuir isteach nód #2 ghlac 111855 idirbheart ón linn agus foirmeacha bloc #85 (256).
02:36 - sínítear bloc #85 (256) agus seoltar chuig nóid eile é lena bhailíochtú
02:36 - script taispeána an fhreastalaí #1, a sheol 1 milliún idirbheart i 42.5 soicind, críochnaithe ag obair
02:38 - bailíochtaítear bloc #85 (256) agus seoltar chuig an slabhra fréimhe é
03:08 - chríochnaigh script freastalaí #2 ag obair, a sheol 1 milliún idirbheart i 47 soicind
03:38 - fuair gach nód faisnéis ón slabhra fréimhe gur cuireadh bloic #85 (f21), #86(65e), #87(256) agus gur thosaigh siad ag cur idirbheart 330k, 250k, 111855 i bhfeidhm
03:49 - glanadh an linn ag 330k, 250k, 111855 idirbheart a cuireadh le bloic #85 (f21), #86(65e), #87(256)
03:59 - cuir isteach nód #1 ghlac 888145 idirbheart ón linn agus foirmeacha bloc #88 (214), cuir isteach nód #2 ghlac 750k idirbheart as an linn snámha agus foirmeacha bloc #88 (50a), cuir isteach nód #3 ghlac 670k idirbheart ó an linn agus foirmeacha bloc #88 (d3b)
04:44 - sínítear bloc #88 (d3b) agus seoltar chuig nóid eile é lena bhailíochtú
04:58 - sínítear bloc #88 (214) agus seoltar chuig nóid eile é lena bhailíochtú
05:11 - sínítear bloc #88 (50a) agus seoltar chuig nóid eile é lena bhailíochtú
05:11 - bailíochtaítear bloc #85 (d3b) agus seoltar chuig an slabhra fréimhe é
05:36 - bailíochtaítear bloc #85 (214) agus seoltar chuig an slabhra fréimhe é
05:43 - fuair gach nód faisnéis ón slabhra fréimhe go bhfuil bloic #88 (d3b), #89(214) curtha leis agus atá ag tosú ar 670k, 750k idirbheart a chur i bhfeidhm
06:50 - de bharr teip cumarsáide, níor bailíochtaíodh bloc #85 (50a).
06:55 - nód a chur isteach ghlac #2 888145 idirbheart ón linn agus bloc foirmeacha #90 (50a)
08:14 - sínítear bloc #90 (50a) agus seoltar chuig nóid eile é lena bhailíochtú
09:04 - bailíochtaítear bloc #90 (50a) agus seoltar chuig an slabhra fréimhe é
11:23 - fuair gach nód faisnéis ón slabhra fréimhe gur cuireadh bloc #90 (50a), agus cuireadh tús le hidirbhearta 888145 a chur i bhfeidhm. Ag an am céanna, chuir freastalaí #3 idirbhearta ó bhloic #88 (d3b), #89(214) i bhfeidhm cheana féin
12:11 - tá gach linnte folamh
13:41 - tá 3 mhilliún idirbheart agus comharthaí i ngach nóid fhreastalaí #3
14:35 - tá 1 mhilliún idirbheart agus comharthaí i ngach nóid fhreastalaí #3
19:24 - tá 2 mhilliún idirbheart agus comharthaí i ngach nóid fhreastalaí #3

Constaicí

Le linn fhorbairt Plasma Cash, tháinig muid ar na fadhbanna seo a leanas, a réitigh muid de réir a chéile agus atá á réiteach againn:

1. Coimhlint in idirghníomhú feidhmeanna córais éagsúla. Mar shampla, chuir an fheidhm a bhaineann le hidirbhearta a chur leis an linn bac ar obair bloic a chur isteach agus a bhailíochtú, agus vice versa, rud a d'eascair laghdú ar luas.

2. Ní raibh sé soiléir láithreach conas líon mór idirbheart a sheoladh agus costais aistrithe sonraí á n-íoslaghdú.

3. Ní raibh sé soiléir conas agus cén áit ar cheart sonraí a stóráil chun torthaí arda a bhaint amach.

4. Ní raibh sé soiléir conas líonra a eagrú idir nóid, ós rud é go dtógann méid bloc le 1 milliún idirbheart suas thart ar 100 MB.

5. Ag obair i mód aon-snáithithe briseann an nasc idir nóid nuair a tharlaíonn ríomhaireachtaí fada (mar shampla, crann Merkle a thógáil agus a hash a ríomh).

Conas a dhéileálamar leis seo ar fad?

Ba chineál comhcheangail é an chéad leagan den nód Plasma Cash a d'fhéadfadh gach rud a dhéanamh ag an am céanna: glacadh le hidirbhearta, bloic a chur isteach agus a bhailíochtú, agus API a sholáthar chun rochtain a fháil ar shonraí. Ós rud é go bhfuil NodeJS aon-snáithe ó dhúchas, chuir feidhm ríofa chrainn Merkle trom bac ar an bhfeidhm idirbhirt cuir leis. Chonaiceamar dhá rogha chun an fhadhb seo a réiteach:

1. Seoladh roinnt próiseas NodeJS, agus comhlíonann gach ceann acu feidhmeanna sonracha.

2. Úsáid worker_threads agus bog forghníomhú cuid den chód ina snáitheanna.

Mar thoradh air sin, d'úsáidamar an dá rogha ag an am céanna: roinneamar nód amháin go loighciúil i 3 chuid is féidir a bheith ag obair ar leithligh, ach ag an am céanna go sioncrónach

1. Nód aighneachta, a ghlacann idirbhearta isteach sa chomhthiomsú agus cruthaíonn sé bloic.

2. Nód bailíochtaithe a sheiceálann bailíocht nóid.

3. nód API - soláthraíonn API chun rochtain a fháil ar shonraí.

Sa chás seo, is féidir leat ceangal le gach nód trí soicéad unix ag baint úsáide as cli.

Bhog muid oibríochtaí troma, mar shampla an crann Merkle a ríomh, isteach i snáithe ar leith.

Mar sin, tá gnáthoibriú na bhfeidhmeanna Plasma Cash go léir bainte amach againn ag an am céanna agus gan teipeanna.

Nuair a bhí an córas feidhmiúil, thosaigh muid ag tástáil an luas agus, ar an drochuair, fuair torthaí míshásúla: 5 idirbheart in aghaidh an tsoicind agus suas le 000 idirbheart in aghaidh an bhloc. Bhí orm a dhéanamh amach cad a cuireadh i bhfeidhm go mícheart.

Ar an gcéad dul síos, thosaigh muid ag tástáil an mheicníocht cumarsáide le Plasma Cash chun buaicchumas an chórais a fháil amach. Scríobh muid níos luaithe go soláthraíonn nód Plasma Cash comhéadan soicéad unix. Ar dtús bhí sé bunaithe ar théacs. seoltar réada json le `JSON.parse()` agus `JSON.stringify()`.

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

Thomhaiseamar luas aistrithe rudaí den sórt sin agus fuair muid ~ 130k in aghaidh an tsoicind. Rinneamar iarracht na feidhmeanna caighdeánacha le haghaidh oibriú le json a athsholáthar, ach níor tháinig feabhas ar an bhfeidhmíocht. Ní mór an t-inneall V8 a optamú go maith le haghaidh na n-oibríochtaí seo.

D'oibríomar le hidirbhearta, comharthaí, agus bloic trí ranganna. Agus ranganna den sórt sin á gcruthú, thit an fheidhmíocht 2 uair, rud a léiríonn nach bhfuil OOP oiriúnach dúinn. Bhí orm gach rud a athscríobh ar mhodh feidhmiúil amháin.

Taifeadadh sa bhunachar sonraí

Ar dtús, roghnaíodh Redis le haghaidh stórála sonraí mar cheann de na réitigh is táirgiúla a shásaíonn ár gceanglas: stóráil eochair-luach, ag obair le táblaí hash, tacair. Sheolamar redis-tagarmharc agus fuaireamar ~80k oibríochtaí in aghaidh an tsoicind i modh píblíne amháin.

Le haghaidh ardfheidhmíochta, rinneamar tiúnadh níos míne ar Redis:

  • Tá nasc soicéad unix bunaithe.
  • Dhíchumasaigh muid an staid a shábháil go diosca (ar mhaithe le hiontaofacht, is féidir leat macasamhail a shocrú agus é a shábháil ar diosca i Redis ar leith).

In Redis, is tábla hash é linn mar ní mór dúinn a bheith in ann gach idirbheart a aisghabháil in aon cheist amháin agus idirbheart a scriosadh ceann ar cheann. Rinneamar iarracht liosta rialta a úsáid, ach tá sé níos moille nuair a bhíonn an liosta iomlán á dhíluchtú.

Agus NodeJS caighdeánach á n-úsáid, bhain leabharlanna Redis feidhmíocht idirbheart 18k in aghaidh an tsoicind amach. Thit an luas 9 n-uaire.

Ós rud é gur léirigh an tagarmharc dúinn go raibh na féidearthachtaí 5 huaire níos mó go soiléir, thosaigh muid ag barrfheabhsú. D'athraigh muid an leabharlann go dtí ioredis agus fuaireamar feidhmíocht de 25k in aghaidh an tsoicind. Chuireamar idirbhearta leis ceann ar cheann ag baint úsáide as an ordú `hset`. Mar sin bhíomar ag giniúint go leor ceisteanna i Redis. Tháinig an smaoineamh chun cinn idirbhearta a chomhcheangal ina mbaisceanna agus iad a sheoladh le hordú amháin `hmset`. Is é an toradh ná 32k in aghaidh an tsoicind.

Ar chúiseanna éagsúla, a ndéanfaimid cur síos orthu thíos, oibrímid le sonraí ag baint úsáide as `Buffer` agus, mar a tharlaíonn sé, má dhéanann tú é a thiontú go téacs (`buffer.toString('hex')`) roimh scríobh, is féidir leat breise a fháil feidhmíocht. Mar sin, méadaíodh an luas go 35k in aghaidh an tsoicind. I láthair na huaire, shocraigh muid a chur ar fionraí tuilleadh leas iomlán a bhaint.

Bhí orainn aistriú go prótacal dénártha mar gheall ar:

1. Is minic a ríomhann an córas hashes, sínithe, etc., agus le haghaidh seo ní mór sonraí sa Maolán `.

2. Nuair a sheoltar iad idir seirbhísí, bíonn meáchan sonraí dénártha níos lú ná téacs. Mar shampla, nuair a sheoltar bloc le 1 milliún idirbheart, is féidir leis na sonraí sa téacs níos mó ná 300 meigibheart a thógáil.

3. Bíonn tionchar ag athrú sonraí i gcónaí ar fheidhmíocht.

Mar sin, ghlacamar mar bhunús lenár bprótacal dénártha féin maidir le sonraí a stóráil agus a tharchur, a forbraíodh ar bhonn na leabharlann iontach `shonraí-dénártha`.

Mar thoradh air sin, fuaireamar na struchtúir sonraí seo a leanas:

— Idirbheart

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

— Comhartha

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

—Bloc

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

Leis na gnáthorduithe `BD.encode(bloc, Protocol). slisne();` agus `BD.decode(maolán, Prótacal)` déanaimid na sonraí a thiontú go `Maolán` chun iad a shábháil in Redis nó a chur ar aghaidh chuig nód eile agus an sonraí ar ais.

Tá 2 phrótacal dhénártha againn freisin chun sonraí a aistriú idir seirbhísí:

— Prótacal maidir le hidirghníomhú le Nód Plasma trí shoicéad 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)
  }
  ```

más rud é:

  • `cineál` — an gníomh a bheidh le déanamh, mar shampla, 1 — sendTransaction, 2 — getTransaction;
  • `ualach pá` — sonraí nach mór a chur ar aghaidh chuig an bhfeidhm iomchuí;
  • `teachtaireachtId` — aitheantas na teachtaireachta ionas gur féidir an freagra a shainaithint.

— Prótacal maidir le hidirghníomhú idir nóid

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

más rud é:

  • `cód` — cód teachtaireachta, mar shampla 6 — PREPARE_NEW_BLOCK, 7 — BLOCK_VALID, 8 — BLOCK_COMMIT;
  • `leagan Prótacal` — leagan prótacail, ós rud é gur féidir nóid le leaganacha éagsúla a ardú ar an líonra agus gur féidir leo oibriú ar bhealach difriúil;
  • `seq` — aitheantóir teachtaireachta;
  • `countChunk` и `ChunkUimhir` riachtanach chun teachtaireachtaí móra a roinnt;
  • `fad` и `ualach pá` fad agus na sonraí féin.

Ós rud é go ndearna muid na sonraí a réamhchlóscríobh, tá an córas deiridh i bhfad níos tapúla ná leabharlann `rlp` Ethereum. Ar an drochuair, níor éirigh linn é a dhiúltú go fóill, ós rud é go bhfuil sé riachtanach an conradh cliste a thabhairt chun críche, a bhfuil sé beartaithe againn a dhéanamh sa todhchaí.

Má d'éirigh linn an luas a bhaint amach 35 000 idirbhearta in aghaidh an tsoicind, ní mór dúinn freisin chun iad a phróiseáil san am is fearr. Ós rud é go dtógann an t-am foirmithe bloc thart ar 30 soicind, ní mór dúinn a áireamh sa bhloc 1 000 000 idirbhearta, rud a chiallaíonn níos mó a sheoladh 100 MB sonraí.

Ar dtús, d'úsáideamar an leabharlann `ethereumjs-devp2p` chun cumarsáid a dhéanamh idir nóid, ach ní raibh sé in ann an oiread sin sonraí a láimhseáil. Mar thoradh air sin, d'úsáideamar an leabharlann `ws` agus rinneamar sonraí dénártha a sheoladh trí shoicéad gréasáin a chumrú. Ar ndóigh, bhí fadhbanna againn freisin agus paicéid mhóra sonraí á seoladh againn, ach roinneamar iad ina smután agus anois tá na fadhbanna seo imithe.

Chomh maith leis sin fhoirmiú crann Merkle agus ríomh an hash 1 000 000 idirbhearta éilíonn thart 10 soicind de ríomh leanúnach. Le linn an ama seo, bainistíonn an nasc leis na nóid go léir a bhriseadh. Socraíodh an ríomh seo a aistriú go snáithe ar leith.

Conclúidí:

Go deimhin, níl ár dtorthaí nua, ach ar chúis éigin déanann go leor saineolaithe dearmad orthu agus iad ag forbairt.

  • Feabhsaítear táirgiúlacht trí Chlárú Feidhmeach a úsáid in ionad Ríomhchlárú atá Dírithe ar Oibiachtaí.
  • Tá an monolith níos measa ná ailtireacht seirbhíse do chóras NodeJS táirgiúil.
  • Feabhsaítear sofhreagracht an chórais trí `worker_threads` a úsáid le haghaidh ríomh throm, go háirithe nuair a bhíonn tú ag déileáil le hoibríochtaí i/o.
  • tá soicéad unix níos cobhsaí agus níos tapúla ná iarratais http.
  • Más gá duit sonraí móra a aistriú go tapa thar an líonra, tá sé níos fearr soicéid gréasáin a úsáid agus sonraí dénártha a sheoladh, roinnte ina smután, ar féidir iad a chur ar aghaidh mura dtagann siad, agus ansin iad a chomhcheangal i dteachtaireacht amháin.

Tugaimid cuireadh duit cuairt a thabhairt GitHub tionscadal: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Comhscríobhadh an t-alt ag Alexander Nashivan, forbróir sinsearach Réiteach Cliste Inc.

Foinse: will.com

Add a comment