Deuchainn Poblach: Prìobhaideachd Ethereum agus Fuasgladh Scalability

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 Cothrom 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).

Deuchainn Poblach: Prìobhaideachd Ethereum agus Fuasgladh Scalability

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.

Deuchainn Poblach: Prìobhaideachd Ethereum agus Fuasgladh Scalability

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: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Chaidh an artaigil a cho-sgrìobhadh le Alasdair Nashivan, àrd leasaiche Fiosrachadh mun chompanaidh Clever Solution Inc.

Source: www.habr.com

Cuir beachd ann