Blockchain na theicneòlas Ăšr-ghnĂ thach a tha aâ gealltainn leasachadh a dhèanamh air mòran raointean de bheatha dhaoine. Bidh e aâ gluasad fĂŹor phròiseasan agus thoraidhean a-steach don Ă ite dhidseatach, aâ dèanamh cinnteach Ă astar agus earbsachd gnothaichean ionmhais, aâ lughdachadh na cosgais aca, agus cuideachd aâ toirt cothrom dhut tagraidhean DAPP Ăšr-nodha a chruthachadh aâ cleachdadh cĂšmhnantan snasail ann an lĂŹonraidhean dĂŹ-mheadhanaichte.
Leis na buannachdan agus na h-iarrtasan eadar-mheasgte a tha aig blockchain, is dòcha gu bheil e na iongnadh nach eil an teicneòlas gealltanach seo air a shlighe a-steach don h-uile gnĂŹomhachas fhathast. Is e an duilgheadas a thâ ann gu bheil dĂŹth scalability aig blockchain dĂŹ-mheadhanaichte an latha an-diugh. Bidh Ethereum a 'pròiseasadh mu 20 malairt gach diog, rud nach eil gu leòr gus coinneachadh ri feumalachdan gnĂŹomhachasan fiĂšghantach an latha an-diugh. Aig an aon Ă m, tha companaidhean a tha a âcleachdadh teicneòlas blockchain leisg Ethereum a thrèigsinn air sgĂ th an ĂŹre Ă rd de dhĂŹon a thâ aca bho hackadh agus fĂ illigeadh lĂŹonra.
Gus dèanamh cinnteach Ă dĂŹ-mheadhanachadh, tèarainteachd agus scalability anns an blockchain, mar sin aâ fuasgladh an Scalability Trilemma, an sgioba leasachaidh chruthaich Plasma Cash, sèine fo-chompanaidh anns a bheil cĂšmhnant snasail agus lĂŹonra prĂŹobhaideach stèidhichte air Node.js, a bhios bho Ă m gu Ă m aâ gluasad a stĂ ite chun t-sèine freumh (Ethereum).

PrÏomh phròiseasan ann an Plasma Cash
1. Canaidh an neach-cleachdaidh ris aâ ghnĂŹomh cĂšmhnant smart âtasgadhâ, aâ toirt a-steach an ĂŹre de ETH a tha e airson a thasgadh a-steach don tòcan Plasma Cash. Bidh gnĂŹomh cĂšmhnant snasail aâ cruthachadh comharra agus aâ gineadh tachartas mu dheidhinn.
2. Bidh nodan Plasma Cash a tha an sĂ s ann an tachartasan cĂšmhnant snasail aâ faighinn tachartas mu bhith aâ cruthachadh tasgadh agus aâ cur gnothach ris mu bhith aâ cruthachadh comharradh don amar.
3. Bho Ă m gu Ă m, bidh nodan sònraichte Plasma Cash a âtoirt a h-uile gnothach bhon amar (suas ri 1 millean) agus aâ cruthachadh bloc bhuapa, a âtomhas aâ chraobh Merkle agus, a rèir sin, an hash. Thèid am bacadh seo a chur gu nodan eile airson dearbhadh. Bidh na nodan aâ sgrĂšdadh a bheil an Merkle hash dligheach agus a bheil na gnothaichean dligheach (mar eisimpleir, an e neach a chuir an comharra an sealbhadair aige). Ăs deidh dha am bloca a dhearbhadh, bidh an nĂłd aâ gairm gnĂŹomh `submitBlock` aâ chĂšmhnant snasail, a shĂ bhaileas Ă ireamh aâ bhloca agus hash Merkle chun t-sèine iomall. Bidh an cĂšmhnant snasail aâ gineadh tachartas a tha aâ comharrachadh gun deach bloc a chuir ris gu soirbheachail. Thèid gnothaichean a thoirt air falbh bhon amar.
4. Bidh nodan a gheibh an tachartas tagraidh bloc aâ tòiseachadh a âcur an sĂ s na gnothaichean a chaidh a chur ris aâ bhloc.
5. Aig Ă m air choreigin, tha sealbhadair (no neo-shealbhadair) an tòcan ag iarraidh a tharraing air ais bho Plasma Cash. Gus seo a dhèanamh, tha e ag ainmeachadh an gnĂŹomh 'startExit', a 'toirt seachad fiosrachadh mu na 2 ghnothaichean mu dheireadh air an tòcan, a tha a' dearbhadh gur e sealbhadair an tòcan. Bidh an cĂšmhnant snasail, a âcleachdadh hash Merkle, aâ sgrĂšdadh lĂ thaireachd ghnothaichean anns na blocaichean agus a âcur aâ chomharra airson tarraing air ais, a thachras ann an dĂ sheachdain.
6. Ma thachair an obair tarraing air ais tòcan le brisidhean (chaidh an tòcan a chaitheamh às deidh don mhodh tarraing air ais tòiseachadh no ma bha an comharra mar-thà aig cuideigin eile mus deach a tharraing air ais), faodaidh sealbhadair an tòcan an tarraing air ais a dhiÚltadh taobh a-staigh dà sheachdain.

Tha dÏomhaireachd air a choileanadh ann an dà dhòigh
1. Chan eil fios aig an t-sreath bunaiteach mu na gnothaichean a thèid a chruthachadh agus a chuir air adhart taobh a-staigh an t-sreath chloinne. Tha fiosrachadh mu cò a thaisg agus a tharraing air ais ETH bho Plasma Cash fhathast poblach.
2. Tha an t-sreath cloinne aâ ceadachadh gnothaichean gun urra aâ cleachdadh zk-SNARKs.
Stòr teicneòlas
- NodeJS
- Redis
- etherium
- Ăir
Deuchainn
Fhad âs a bha sinn aâ leasachadh Plasma Cash, rinn sinn deuchainn air astar an t-siostam agus fhuair sinn na toraidhean a leanas:
- thèid suas ri 35 gnothach gach diog a chur ris an amar;
- faodar suas ri 1 gnothach a stòradh ann am bloc.
Chaidh deuchainnean a dhèanamh air na 3 frithealaichean a leanas:
1. Intel Core i7-6700 Quad-Core Skylake incl. NVMe SSD - 512 GB, 64 GB DDR4 RAM
Chaidh 3 nodan Plasma Cash a dhearbhadh a thogail.
2. AMD Ryzen 7 1700X Octa-Core âSummit Ridgeâ (Zen), SATA SSD - 500 GB, 64 GB DDR4 RAM
Chaidh an nĂłd testnet ETH Ropsten a thogail.
Chaidh 3 nodan Plasma Cash a dhearbhadh a thogail.
3. Intel Core i9-9900K Octa-Core incl. NVMe SSD - 1 TB, 64 GB DDR4 RAM
1 Chaidh nĂłd tagraidh Plasma Cash a thogail.
Chaidh 3 nodan Plasma Cash a dhearbhadh a thogail.
Chaidh deuchainn a chuir air bhog gus gnothaichean a chuir ris an lĂŹonra Plasma Cash.
Iomlan: 10 nodan Plasma Cash ann an lĂŹonra prĂŹobhaideach.
Deuchainn 1
Tha crĂŹoch de 1 millean gnothach gach bloc. Mar sin, bidh 1 millean gnothach aâ tuiteam ann an 2 bhloc (leis gu bheil an siostam aâ riaghladh pĂ irt de na gnothaichean a ghabhail agus a chuir a-steach fhad âs a tha iad gan cur).

Staid tÚsail: bloc mu dheireadh #7; Tha 1 millean malairt agus comharran air an stòradh san stòr-dà ta.
00:00 - toiseach sgriobt gineadh malairt
01:37 - chaidh 1 millean gnothach a chruthachadh agus thòisich an cur chun nód
01:46 - thug nĂłd cuir a-steach gnothaichean 240k bhon amar agus foirmean bloc #8. ChĂŹ sinn cuideachd gu bheil 320k gnothaichean air an cur ris an amar ann an 10 diogan
01:58 - bloc #8 air a shoidhnigeadh agus air a chuir airson dearbhadh
02:03 - bloc #8 air a dhearbhadh agus tha gnĂŹomh âsubmitBlockâ den chĂšmhnant snasail air a ghairm leis an hash Merkle agus Ă ireamh aâ bhloc
02:10 - chrĂŹochnaich an sgriobt demo ag obair, a chuir 1 millean gnothach ann an 32 diogan
02:33 - thòisich nodan aâ faighinn fiosrachadh gun deach bloc #8 a chur ris an t-sèine freumh, agus thòisich iad air gnothaichean 240k a dhèanamh
02:40 - chaidh gnothaichean 240k a thoirt a-mach Ă s an amar, a tha mar-thĂ ann am bloc #8
02:56 - thug an nĂłd cuir a-steach na gnothaichean 760k a bha air fhĂ gail bhon amar agus thòisich iad aâ tomhas hash Merkle agus aâ soidhnigeadh bloc #9
03:20 - tha 1 millean malairt 240k agus comharran anns a h-uile nod
03:35 - bloc #9 air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
03:41 - Thachair mearachd lĂŹonraidh
04:40 - aâ feitheamh ri dearbhadh bloc #9 air tighinn gu crĂŹch
04:54 - thug an nĂłd cuir a-steach na gnothaichean 760k a bha air fhĂ gail bhon amar agus thòisich iad aâ tomhas hash Merkle agus aâ soidhnigeadh bloc #9
05:32 - bloc #9 air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
05:53 - bloc #9 air a dhearbhadh agus air a chuir chun t-sèine freumh
06:17 - thòisich nodan aâ faighinn fiosrachadh gun deach bloc #9 a chur ris an t-sèine freumh agus thòisich iad air gnothaichean 760k a dhèanamh
06:47 - tha an amar air glanadh de ghnothaichean a tha ann am bloc #9
09:06 - tha 2 mhillean gnothach agus comharran anns a h-uile nod
Deuchainn 2
Tha crĂŹoch de 350k gach bloc ann. Mar thoradh air an sin, tha 3 blocaichean againn.

Staid tÚsail: bloc mu dheireadh #9; Tha 2 mhillean malairt agus comharran air an stòradh san stòr-dà ta
00:00 - chaidh sgriobt gineadh malairt a chuir air bhog mu thrĂ th
00:44 - chaidh 1 millean gnothach a chruthachadh agus thòisich an cur chun nód
00:56 - thug nĂłd cuir a-steach gnothaichean 320k bhon amar agus foirmean bloc #10. ChĂŹ sinn cuideachd gu bheil 320k gnothaichean air an cur ris an amar ann an 10 diogan
01:12 - bloc #10 air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
01:18 - chrĂŹochnaich an sgriobt demo ag obair, a chuir 1 millean gnothach ann an 34 diogan
01:20 - bloc #10 air a dhearbhadh agus air a chuir chun t-sèine freumh
01:51 - fhuair a h-uile nodan fiosrachadh bhon t-sreath freumh a chaidh bacadh #10 a chur ris agus tòiseachadh air gnothaichean 320k a chuir an sà s
02:01 - tha an amar air fhuadach airson gnothaichean 320k a chaidh a chur ri bloc #10
02:15 - thug nĂłd cuir a-steach gnothaichean 350k bhon amar agus foirmean bloc #11
02:34 - bloc #11 air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
02:51 - bloc #11 air a dhearbhadh agus air a chuir chun t-sèine freumh
02:55 - chrĂŹochnaich an nĂłd mu dheireadh gnothaichean bho bhloc #10
10:59 - thug an gnothach le bhith aâ cur a-steach bloc # 9 Ăšine mhòr anns an t-sèine freumh, ach chaidh a chrĂŹochnachadh agus fhuair a h-uile nodan fiosrachadh mu dheidhinn agus thòisich iad air gnothaichean 350k a dhèanamh
11:05 - tha an amar air fhuadach airson gnothaichean 320k a chaidh a chur ri bloc #11
12:10 - anns a h-uile nod tha 1 millean malairt 670k agus comharran
12:17 - thug nĂłd cuir a-steach gnothaichean 330k bhon amar agus foirmean bloc #12
12:32 - bloc #12 air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
12:39 - bloc #12 air a dhearbhadh agus air a chuir chun t-sèine freumh
13: 44 - fhuair a h-uile nodan fiosrachadh bhon t-sèine freumh a chaidh bacadh # 12 a chuir ris agus tòiseachadh air gnothaichean 330k a chuir an sà s
14:50 - tha 2 mhillean gnothach agus comharran anns a h-uile nod
Deuchainn 3
Anns aâ chiad agus an dĂ rna frithealaiche, chaidh nĂłd cuir a-steach a chuir an Ă ite aon nĂłd dearbhaidh.

Staid tÚsail: bloc mu dheireadh #84; 0 gnothaichean agus comharran air an sà bhaladh san stòr-dà ta
00:00 - Chaidh 3 sgriobtaichean a chuir air bhog a ghineas agus a chuireas 1 millean gnothach an urra
01:38 - Chaidh 1 millean gnothach a chruthachadh agus thòisich iad aâ cur a-steach nĂłd #3
01:50 - cuir a-steach nĂłd #3 thug e 330k gnothach bhon amar agus foirmean bloc #85 (f21). ChĂŹ sinn cuideachd gu bheil 350k gnothaichean air an cur ris an amar ann an 10 diogan
01:53 - Chaidh 1 millean gnothach a chruthachadh agus thòisich iad aâ cur a-steach nĂłd #1
01:50 - cuir a-steach nĂłd #3 thug e 330k gnothach bhon amar agus foirmean bloc #85 (f21). ChĂŹ sinn cuideachd gu bheil 350k gnothaichean air an cur ris an amar ann an 10 diogan
02:01 - cuir a-steach nĂłd # 1 thug e 250k gnothach bhon amar agus foirmean bloc #85 (65e)
02:06 - bloc #85 (f21) air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
02:08 - sgriobt demo de fhrithealaiche #3, a chuir 1 millean gnothach ann an 30 diogan, deiseil ag obair
02:14 - bloc #85 (f21) air a dhearbhadh agus air a chuir chun t-sèine freumh
02:19 - bloc #85 (65e) air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
02:22 - Chaidh 1 millean gnothach a chruthachadh agus thòisich iad aâ cur a-steach nĂłd #2
02:27 - bloc #85 (65e) air a dhearbhadh agus air a chuir chun t-sèine freumh
02:29 - cuir a-steach nĂłd #2 thug e 111855 gnothach bhon amar agus bloc foirmean #85 (256).
02:36 - bloc #85 (256) air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
02:36 - sgriobt demo de fhrithealaiche #1, a chuir 1 millean gnothach ann an 42.5 diogan, deiseil ag obair
02:38 - bloc #85 (256) air a dhearbhadh agus air a chuir chun t-sèine freumh
03:08 - chrĂŹochnaich sgriobt frithealaiche #2 ag obair, a chuir 1 millean gnothach ann an 47 diogan
03:38 - fhuair a h-uile nodan fiosrachadh bhon t-sèine freumh a bha aâ cur bacadh air #85 (f21), #86(65e), #87(256) agus thòisich iad air gnothaichean 330k, 250k, 111855 a chur an sĂ s
03:49 - chaidh an amar fhuadach aig 330k, 250k, 111855 gnothaichean a chaidh a chur ri blocaichean #85 (f21), #86(65e), #87(256)
03:59 - cuir a-steach nĂłd # 1 ghabh 888145 gnothach bhon amar agus bloc foirmean #88 (214), cuir a-steach nĂłd #2 ghabh 750k gnothach bhon amar agus foirmean bloc #88 (50a), cuir a-steach nĂłd #3 ghabh 670k gnothach bho an amar agus foirmean bloc #88 (d3b)
04:44 - bloc #88 (d3b) air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
04:58 - bloc #88 (214) air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
05:11 - bloc #88 (50a) air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
05:11 - bloc #85 (d3b) air a dhearbhadh agus air a chuir chun t-sèine freumh
05:36 - bloc #85 (214) air a dhearbhadh agus air a chuir chun t-sèine freumh
05:43 - fhuair a h-uile nodan fiosrachadh bhon t-sèine freumh a tha aâ cur bacadh air #88 (d3b), #89(214) agus aâ tòiseachadh air gnothaichean 670k, 750k a chur an sĂ s
06:50 - mar thoradh air fĂ illigeadh conaltraidh, cha deach bloc #85 (50a) a dhearbhadh
06:55 - cuir a-steach nĂłd #2 thug e 888145 gnothach bhon amar agus blocaichean foirmean #90 (50a)
08:14 - bloc #90 (50a) air a shoidhnigeadh agus air a chuir gu nodan eile airson dearbhadh
09:04 - bloc #90 (50a) air a dhearbhadh agus air a chuir chun t-sèine freumh
11:23 - fhuair a h-uile nodan fiosrachadh bhon t-sèine freumh a chaidh bloc # 90 (50a) a chuir ris, agus tòiseachadh air gnothaichean 888145 a chuir an sà s. Aig an aon à m, tha frithealaiche #3 mu thrà th air gnothaichean a chuir an sàs bho bhlocaichean #88 (d3b), #89(214)
12:11 - tha na lòin uile falamh
13:41 - tha 3 millean gnothach agus comharran anns a h-uile nod de fhrithealaiche #3
14:35 - tha 1 millean gnothach agus comharran anns a h-uile nod de fhrithealaiche #3
19:24 - tha 2 millean gnothach agus comharran anns a h-uile nod de fhrithealaiche #3
Cnapan-starra
Rè leasachadh Plasma Cash, choinnich sinn ris na duilgheadasan a leanas, a dh âfhuasgail sinn mean air mhean agus a tha sinn aâ fuasgladh:
1. Còmhstri ann an eadar-obrachadh diofar ghnÏomhan siostam. Mar eisimpleir, chuir an gnÏomh a bhith a 'cur ghnothaichean ris an amar bacadh air an obair a bhith a' cur a-steach agus a 'dearbhadh bhlocaichean, agus a chaochladh, a dh' adhbhraich lÚghdachadh ann an astar.
2. Cha robh e soilleir sa bhad ciamar a chuireadh tu Ă ireamh mhòr de ghnothaichean air falbh fhad âs a bha iad aâ lughdachadh cosgaisean gluasad dĂ ta.
3. Cha robh e soilleir ciamar agus cà ite an stòradh dà ta gus toraidhean à rd a choileanadh.
4. Cha robh e soilleir ciamar a chuirear lĂŹonra air dòigh eadar nodan, leis gu bheil meud bloca le 1 millean gnothach aâ toirt suas ri 100 MB.
5. Le bhith ag obair ann am modh aon-snĂ ithlean bidh sin aâ briseadh aâ cheangail eadar nodan nuair a bhios Ă ireamhachadh fada aâ tachairt (mar eisimpleir, aâ togail craobh Merkle agus aâ tomhas a hash).
Ciamar a dhèilig sinn ri seo uile?
Bha aâ chiad dreach den nĂłd Plasma Cash na sheòrsa de chothlamadh a dhâ fhaodadh a h-uile cĂ il a dhèanamh aig an aon Ă m: gabhail ri gnothaichean, cuir a-steach agus dearbhaich blocaichean, agus thoir seachad API airson faighinn gu dĂ ta. Leis gu bheil NodeJS gu dĂšthchasach aon-snĂ thainn, chuir gnĂŹomh trom Ă ireamhachaidh chraobhan Merkle bacadh air aâ ghnĂŹomh malairt cuir ris. Chunnaic sinn dĂ roghainn airson an duilgheadas seo fhuasgladh:
1. Cuir air bhog grunn phròiseasan NodeJS, agus bidh gach fear dhiubh aâ coileanadh gnĂŹomhan sònraichte.
2. Cleachd worker_threads agus gluais coileanadh pà irt den chòd gu snà ithleanan.
Mar thoradh air an sin, chleachd sinn an dĂ roghainn aig an aon Ă m: roinn sinn gu loidsigeach aon nĂłd ann an 3 pĂ irtean as urrainn obrachadh air leth, ach aig an aon Ă m gu sioncronach
1. Cuir a-steach nĂłd, a tha a 'gabhail ri gnothaichean a-steach don linne agus a' cruthachadh bhlocaichean.
2. Nod dearbhaidh a nÏ sgrÚdadh air èifeachd nodan.
3. nĂłd API - aâ toirt seachad API airson faighinn gu dĂ ta.
Anns a 'chÚis seo, faodaidh tu ceangal a dhèanamh ri gach nód tro socaid unix a' cleachdadh cli.
Ghluais sinn obraichean troma, leithid a bhith ag obrachadh aâ chraobh Merkle, gu snĂ ithlean air leth.
Mar sin, tha sinn air obrachadh Ă bhaisteach a h-uile gnĂŹomh Plasma Cash a choileanadh aig an aon Ă m agus Ă s aonais fĂ illigidhean.
Aon uair âs gu robh an siostam ag obair, thòisich sinn aâ dèanamh deuchainn air an astar agus, gu mĂŹ-fhortanach, fhuair sinn toraidhean neo-thaitneach: 5 gnothach gach diog agus suas ri 000 gnothach gach bloc. Bha agam ri faighinn a-mach dè a chaidh a chuir an gnĂŹomh gu ceĂ rr.
An toiseach, thòisich sinn aâ dèanamh deuchainn air an dòigh conaltraidh le Plasma Cash gus faighinn a-mach dè an ĂŹre as Ă irde de chomas an t-siostaim. SgrĂŹobh sinn na bu thrĂ ithe gu bheil an nĂłd Plasma Cash aâ toirt seachad eadar-aghaidh socaid unix. An toiseach bha e stèidhichte air teacsa. chaidh nithean json a chuir aâ cleachdadh `JSON.parse()` agus `JSON.stringify()`.
```json
{
"action": "sendTransaction",
"payload":{
"prevHash": "0x8a88cc4217745fd0b4eb161f6923235da10593be66b841d47da86b9cd95d93e0",
"prevBlock": 41,
"tokenId": "57570139642005649136210751546585740989890521125187435281313126554130572876445",
"newOwner": "0x200eabe5b26e547446ae5821622892291632d4f4",
"type": "pay",
"data": "",
"signature": "0xd1107d0c6df15e01e168e631a386363c72206cb75b233f8f3cf883134854967e1cd9b3306cc5c0ce58f0a7397ae9b2487501b56695fe3a3c90ec0f61c7ea4a721c"
}
}
```
Thomhais sinn astar gluasaid nan nithean sin agus lorg sinn ~ 130k san diog. Dhâ fheuch sinn ris na gnĂŹomhan Ă bhaisteach a chuir an Ă ite a bhith ag obair le json, ach cha do dhâ fhĂ s coileanadh. Feumaidh an einnsean V8 a bhith air a dheagh leasachadh airson na h-obraichean sin.
Dhâobraich sinn le gnothaichean, tokens, agus blocaichean tro chlasaichean. Nuair a chruthaicheas tu na clasaichean sin, thuit an coileanadh 2 uair, a tha a 'sealltainn nach eil OOP freagarrach dhuinn. Bha agam ri a h-uile cĂ il ath-sgrĂŹobhadh gu dòigh-obrach dĂŹreach obrachail.
A ' clà radh san stòr-dà ta
An toiseach, chaidh Redis a thaghadh airson stòradh dà ta mar aon de na fuasglaidhean as cinneasaiche a choinnicheas ri ar riatanasan: stòradh prÏomh-luach, ag obair le clà ran hash, seataichean. Chuir sinn ath-shlat-tomhais air bhog agus fhuair sinn ~ 80k gnÏomhachd gach diog ann am modh pÏobaireachd 1.
Airson Ă rd-choileanadh, rinn sinn gleusadh air Redis nas mionaidiche:
- Chaidh ceangal socaid unix a stèidheachadh.
- Chuir sinn à comas sà bhaladh na stà ite gu diosc (airson earbsachd, faodaidh tu mac-samhail a stèidheachadh agus a shà bhaladh gu diosc ann an Redis air leth).
Ann an Redis, is e clĂ r hash a thâ ann an pool oir feumaidh sinn a bhith comasach air a h-uile gnothach fhaighinn air ais ann an aon cheist agus cuir Ă s do ghnothaichean aon ri aon. Dhâ fheuch sinn ri liosta Ă bhaisteach a chleachdadh, ach tha e nas slaodaiche nuair a bhios sinn aâ luchdachadh an liosta gu lèir.
Nuair a bha iad aâ cleachdadh NodeJS Ă bhaisteach, choilean na leabharlannan Redis coileanadh de ghnothaichean 18k gach diog. Thuit an astar 9 tursan.
Leis gun do sheall an slat-tomhais dhuinn gu robh na cothroman gu soilleir 5 tursan nas motha, thòisich sinn aâ dèanamh an fheum as fheĂ rr. Dhâatharraich sinn an leabharlann gu ioredis agus fhuair sinn coileanadh de 25k san diog. Chuir sinn ris gnothaichean aon ri aon aâ cleachdadh an Ă ithne `hset`. Mar sin bha sinn aâ togail tòrr cheistean ann an Redis. Dhâ èirich am beachd gnothaichean a chur còmhla ann an baidsean agus an cur le aon Ă ithne `hmset`. Is e an toradh 32k gach diog.
Airson grunn adhbharan, air am bi sinn aâ mĂŹneachadh gu h-ĂŹosal, bidh sinn ag obair le dĂ ta aâ cleachdadh `Buffer` agus, mar a nochdas e, ma thionndaidheas tu e gu teacsa (`buffer.toString ('hex')`) mus sgrĂŹobh thu, gheibh thu a bharrachd coileanadh. Mar sin, chaidh an astar Ă rdachadh gu 35k gach diog. Aig an Ă m seo, chuir sinn romhainn tuilleadh optimization a chuir dheth.
Bâ fheudar dhuinn atharrachadh gu protocol binary air sgĂ th:
1. Bidh an siostam gu tric aâ cunntadh hashes, ainmean-sgrĂŹobhte, msaa, agus airson seo feumaidh e dĂ ta anns an `Buffer.
2. Nuair a thèid a chuir eadar seirbheisean, tha cuideam dà ta binary nas lugha na teacsa. Mar eisimpleir, nuair a chuireas tu bloc le 1 millean gnothach, faodaidh an dà ta san teacsa barrachd air 300 megabytes a ghabhail.
3. Bidh atharrachadh dĂ ta an-còmhnaidh aâ toirt buaidh air coileanadh.
Mar sin, ghabh sinn mar bhunait ris aâ phròtacal binary againn fhèin airson stòradh agus tar-chuir dĂ ta, air a leasachadh air bunait an leabharlann iongantach `dĂ -dĂ ta`.
Mar thoradh air an sin, fhuair sinn na structaran dĂ ta a leanas:
â GnĂŹomh
```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,
}
```
â Comharradh
```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 h-òrdughan Ă bhaisteach `BD.encode (bloc, Protocol). slice ();` agus `BD.decode (bufair, Protocol)` bidh sinn aâ tionndadh an dĂ ta gu `Buffer` airson a shĂ bhaladh ann an Redis no a chuir air adhart gu nĂłd eile agus aâ faighinn an dĂ ta air ais.
Tha 2 phròtacal dà na againn cuideachd airson dà ta a ghluasad eadar seirbheisean:
- Pròtacal airson eadar-obrachadh le Plasma Node tro socaid 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)
}
```
far:
- `seòrsa` - an gnÏomh a thèid a choileanadh, mar eisimpleir, 1 - cuir Transaction, 2 - faighTransaction;
- `luchd-pĂ ighidh' - dĂ ta a dhâ fheumar a chuir chun ghnĂŹomh iomchaidh;
- `teachdaireachd Id' - id teachdaireachd gus an tèid am freagairt aithneachadh.
- Pròtacal airson eadar-obrachadh eadar nodan
```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)
}
```
far:
- `còd' - còd teachdaireachd, mar eisimpleir 6 - PREPARE_NEW_BLOCK, 7 - BLOCK_VALID, 8 - BLOCK_COMMIT;
- `dreach Pròtacal` - dreach protocol, leis gum faodar nodan le dreachan eadar-dhealaichte a thogail air an lÏonra agus faodaidh iad obrachadh ann an dòigh eadar-dhealaichte;
- `seq` - aithnichear teachdaireachd;
- `cunntas' и `Ăireamh Chunntais' riatanach airson sgoltadh brathan mòra;
- `fad` и `luchd-pà ighidh' fad agus an dà ta fhèin.
Leis gun do sgrÏobh sinn an dà ta ro-là imh, tha an siostam mu dheireadh tòrr nas luaithe na leabharlann `rlp` Ethereum. Gu mÏ-fhortanach, cha b 'urrainn dhuinn fhathast a dhiÚltadh, oir tha e riatanach crÏoch a chur air a' chÚmhnant snasail, a tha sinn an dÚil a dhèanamh san à m ri teachd.
Ma chaidh againn air an astar a ruighinn 35 000 gnothaichean gach diog, feumaidh sinn cuideachd an giullachd anns an Ăšine as fheĂ rr. Leis gu bheil an Ăšine tuairmseach airson cruthachadh blocaichean a âtoirt 30 diogan, feumaidh sinn a thoirt a-steach don bhloc 1 000 000 gnothaichean, a tha aâ ciallachadh a bhith aâ cur barrachd 100 MB de dhĂ ta.
An toiseach, chleachd sinn an leabharlann `ethereumjs-devp2p` gus conaltradh eadar nodan, ach cha bâ urrainn dha uimhir de dhĂ ta a lĂ imhseachadh. Mar thoradh air an sin, chleachd sinn an leabharlann `ws` agus rèitich sinn a bhith aâ cur dĂ ta binary tro websocket. Gu dearbh, bha duilgheadasan againn cuideachd nuair a bha sinn aâ cur phasganan mòra dĂ ta, ach roinn sinn iad ann am pĂŹosan agus a-nis tha na duilgheadasan sin air falbh.
Cuideachd a 'cruthachadh craobh Merkle agus obrachadh a-mach an hash 1 000 000 feumaidh gnothaichean mu dheidhinn 10 diogan de à ireamhachadh leantainneach. Rè na h-Úine seo, bidh an ceangal leis na nodan gu lèir a 'briseadh. Chaidh co-dhÚnadh an à ireamhachadh seo a ghluasad gu snà ithlean air leth.
Co-dhĂšnaidhean:
Gu dearbh, ar co-dhÚnaidhean nach eil Úr, ach airson adhbhar air choireigin mòran eòlaichean a 'dÏochuimhneachadh mun deidhinn rè leasachadh.
- Le bhith aâ cleachdadh prògramadh gnĂŹomh an Ă ite Prògramadh a tha ag amas air nithean aâ leasachadh cinneasachd.
- Tha am monolith nas miosa na ailtireachd seirbheis airson siostam toraidh NodeJS.
- Le bhith aâ cleachdadh âworker_threadsâ airson obrachadh trom, leasaichidh sin freagairteachd an t-siostaim, gu sònraichte nuair a thathar aâ dèiligeadh ri gnĂŹomhachd i/o.
- tha socaid unix nas seasmhaiche agus nas luaithe na iarrtasan http.
- Ma dhâ fheumas tu dĂ ta mòr a ghluasad gu sgiobalta thairis air an lĂŹonra, tha e nas fheĂ rr socaidean lĂŹn a chleachdadh agus dĂ ta binary a chuir, air a roinn ann am pĂŹosan, a dhâ fhaodar a chuir air adhart mura ruig iad, agus an uairsin a chur còmhla ann an aon teachdaireachd.
Tha sinn aâ toirt cuireadh dhut tadhal GitHub pròiseact:
Chaidh an artaigil a cho-sgrĂŹobhadh le Alasdair Nashivan, Ă rd leasaiche .
Source: www.habr.com
