Su'ega a le Malo: O se Fofo mo le Fa'alilolilo ma le Fa'ateleina ile Ethereum

Blockchain ose tekonolosi fou e folafola mai e faʻaleleia le tele o vaega o le olaga o le tagata. E tuʻuina atu faiga moni ma oloa i totonu o le numera numera, faʻamautinoa le saoasaoa ma le faʻamaoni o fefaʻatauaiga tau tupe, faʻaitiitia a latou tau, ma faʻatagaina foi oe e fatuina talosaga DAPP faʻaonaponei e faʻaaoga ai konekarate atamai i fesoʻotaʻiga faʻapitoa.

Ona o le tele o faʻamanuiaga ma faʻaoga eseese o poloka poloka, e foliga mai o se mea e ofo ai e leʻi oʻo mai lenei tekinolosi faʻamaonia i totonu o pisinisi uma. O le fa'afitauli o le fa'aonaponei decentralized blockchains leai se scalability. E fa'aogaina e Ethereum le 20 fefa'atauaiga i le sekone, lea e le lava e fa'amalieina ai mana'oga o pisinisi fa'aolaola i aso nei. I le taimi lava e tasi, o kamupani o loʻo faʻaogaina tekinolosi poloka poloka e le mautonu e lafoai Ethereum ona o lona maualuga maualuga o le puipuiga mai le taʻavale ma le faʻaogaina o fesoʻotaʻiga.

Ina ia faʻamautinoa le tuʻufaʻatasia, saogalemu ma le faʻaogaina i totonu o le poloka poloka, ma faʻamalieina ai le Scalability Trilemma, le au atinaʻe. Avanoa faia Plasma Cash, o se lala lala e aofia ai se konekarate atamai ma se fesoʻotaʻiga tumaoti e faʻavae i luga o Node.js, lea e faʻafeiloaʻi i lea taimi ma lea taimi lona setete i le filifili aʻa (Ethereum).

Su'ega a le Malo: O se Fofo mo le Fa'alilolilo ma le Fa'ateleina ile Ethereum

Fa'agasologa autu ile Plasma Cash

1. E ta'ua e le tagata fa'aoga le galuega fa'akonekarate atamai 'teuga', pasi atu i ai le aofa'i o le ETH e mana'o e teu i totonu ole Plasma Cash token. O le galuega fa'akonekarate atamai e faia ai se fa'ailoga ma fa'atupuina se mea e tupu e uiga i ai.

2. Plasma Cash nodes o loʻo faʻapipiʻiina i mea faʻakonekarate atamai e maua ai se mea na tupu e uiga i le fatuina o se tupe teu ma faʻaopoopo se fefaʻatauaiga e uiga i le fatuina o se faʻailoga i le vaitaele.

3. Mai lea taimi i lea taimi, faʻapitoa Plasma Cash nodes e ave uma fefaʻatauaiga mai le vaitaele (e oʻo atu i le 1 miliona) ma fai se poloka mai ia i latou, fuafua le laau Merkle ma, e tusa ai, le hash. O lenei poloka e lafo i isi nodes mo le faʻamaonia. E siaki e nodes pe faʻamaonia le Merkle hash ma pe faʻamaonia fefaʻatauaiga (mo se faʻataʻitaʻiga, pe o le tagata na auina atu le faʻailoga o lona pule). A maeʻa ona faʻamaonia le poloka, e taʻua e le node le 'submitBlock' galuega a le konekarate atamai, lea e teu ai le numera poloka ma Merkle hash i le filifili pito. O le konekarate atamai e maua ai se mea na tupu e faʻaalia ai le faʻaopoopoina manuia o se poloka. E aveese fa'atauga mai le vaita'ele.

4. Nodes e mauaina le fa'alavelave tu'uina atu poloka e amata ona fa'aoga fefa'atauaiga na fa'aopoopo i le poloka.

5. I se taimi, e manaʻo le tagata e ona (poʻo lē e ona) o le faailoga e aveese mai le Plasma Cash. Ina ia faia lenei mea, na ia taʻua le 'startExit' galuega, pasi atu i ai faʻamatalaga e uiga i fefaʻatauaiga mulimuli 2 i luga o le faʻailoga, lea e faʻamaonia ai o ia e ona le faailoga. O le konekarate atamai, faʻaaogaina le Merkle hash, siaki le i ai o fefaʻatauaiga i totonu o poloka ma tuʻuina atu le faʻailoga mo le faaui i tua, lea o le a tupu i le lua vaiaso.

6. Afai na tupu le faauigaina o le faauigaina o faailoga ma soliga (na faʻaalu le faʻailoga ina ua maeʻa le faʻagasologa o le faaui i tua poʻo le faʻailoga ua i ai i se isi tagata aʻo leʻi faʻauʻuina), e mafai e lē e ona le faʻailoga ona faʻafitia le faaui i tua i totonu o le lua vaiaso.

Su'ega a le Malo: O se Fofo mo le Fa'alilolilo ma le Fa'ateleina ile Ethereum

E lua auala e ausia ai le le faalauaiteleina

1. E leai se mea e iloa e le filifili a'a e uiga i fefa'atauaiga o lo'o fa'atupu ma tu'u atu i totonu o le filifili tamaiti. O fa'amatalaga e uiga i le tagata na teuina ma aveese le ETH mai le Plasma Cash o lo'o tumau pea i le lautele.

2. Ole filifili ole tamaititi e faʻatagaina fefaʻatauaiga e le taʻua igoa e faʻaaoga ai zk-SNARKs.

Tekinolosi faaputuga

  • NodeJS
  • Redis
  • Eteru
  • palapala

Suʻega

A'o atia'e le Plasma Cash, sa matou fa'ata'ita'iina le saoasaoa o le faiga ma maua ai fa'ai'uga nei:

  • e oʻo atu i le 35 fefaʻatauaiga i le sekone e faʻaopoopo i le vaitaele;
  • e oʻo atu i le 1 fefaʻatauaiga e mafai ona teuina i totonu o se poloka.

Sa faia suʻega i luga o 'auʻaunaga nei e 3:

1. Intel Core i7-6700 Quad-Core Skylake e aofia ai. NVMe SSD - 512 GB, 64 GB DDR4 RAM
3 fa'amaonia le Plasma Cash nodes na siitia.

2. AMD Ryzen 7 1700X Octa-Core “Summit Ridge” (Zen), SATA SSD – 500 GB, 64 GB DDR4 RAM
O le Ropsten testnet ETH node na siitia.
3 fa'amaonia le Plasma Cash nodes na siitia.

3. Intel Core i9-9900K Octa-Core e aofia ai. NVMe SSD - 1 TB, 64 GB DDR4 RAM
1 Plasma Cash tu'uina atu node ua siitia.
3 fa'amaonia le Plasma Cash nodes na siitia.
Na fa'alauiloa se su'ega e fa'aopoopo ai fefa'atauaiga i le Plasma Cash network.

Aofai: 10 Plasma Cash nodes i totonu o se upega tafa'ilagi.

Su'ega 1

O loʻo i ai le tapulaʻa o le 1 miliona fefaʻatauaiga i le poloka. O le mea lea, o le 1 miliona fefaʻatauaiga e pa'ū i totonu o poloka 2 (talu ai o le faiga e pulea e ave se vaega o fefaʻatauaiga ma tuʻuina atu ao latou lafoina).


Tulaga amata: poloka mulimuli #7; 1 miliona fefaʻatauaiga ma faʻailoga o loʻo teuina i totonu o faʻamaumauga.

00:00 - amataga o le faʻasologa o fefaʻatauaiga
01:37 - 1 miliona fefaʻatauaiga na faia ma auina atu i le node na amata
01:46 - auina atu node na ave 240k fefaʻatauaiga mai le vaitaele ma faʻailoga poloka #8. Matou te vaʻai foi e 320k fefaʻatauaiga o loʻo faʻaopoopoina i le vaitaele i le 10 sekone
01:58 — poloka #8 ua sainia ma auina atu mo le faamaoniga
02:03 - poloka #8 ua faʻamaonia ma o le 'submitBlock' galuega a le konekarate atamai e valaʻau ma le Merkle hash ma le numera poloka
02:10 - faʻamaeʻa faʻamatalaga faʻataʻitaʻiga, lea na auina atu ai le 1 miliona fefaʻatauaiga i le 32 sekone
02:33 - na amata ona maua e nodes faʻamatalaga na faʻaopoopoina le poloka #8 i le filifili aʻa, ma amata ona faia fefaʻatauaiga 240k
02:40 - 240k fefaʻatauaiga na aveese mai le vaitaele, lea ua uma ona i totonu o le poloka #8
02:56 - tu'u node ave le 760k fefa'ataua'iga na totoe mai le vaita'ele ma amata fa'atatau le Merkle hash ma saini poloka #9
03:20 - o nodes uma e iai le 1 miliona 240k fefaʻatauaiga ma faʻailoga
03:35 — poloka #9 ua sainia ma auina atu mo le faamaoniga i isi nodes
03:41 - fa'aletonu feso'otaiga na tupu
04:40 - fa'atali mo poloka #9 fa'amaonia ua uma
04:54 - tu'u node ave le 760k fefa'ataua'iga na totoe mai le vaita'ele ma amata fa'atatau le Merkle hash ma saini poloka #9
05:32 — poloka #9 ua sainia ma auina atu mo le faamaoniga i isi nodes
05:53 - poloka #9 ua faʻamaonia ma auina atu i le filifili aʻa
06:17 - na amata ona maua e nodes faʻamatalaga na faʻaopoopoina le poloka #9 i le filifili aʻa ma amata ona faʻatino fefaʻatauaiga 760k
06:47 - ua faʻamama e le vaitaele fefaʻatauaiga o loʻo i totonu o le poloka #9
09:06 - o nodes uma e aofia ai le 2 miliona fefaʻatauaiga ma faʻailoga

Su'ega 2

E iai le tapula'a o le 350k ile poloka. O se taunuuga, e 3 a matou poloka.


Tulaga amata: poloka mulimuli #9; 2 miliona fefaʻatauaiga ma faʻailoga o loʻo teuina i totonu o faʻamaumauga

00:00 - faʻasalalauga faʻasologa o tusitusiga ua uma ona faʻalauiloa
00:44 - 1 miliona fefaʻatauaiga na faia ma auina atu i le node na amata
00:56 - auina atu node na ave 320k fefaʻatauaiga mai le vaitaele ma faʻailoga poloka #10. Matou te vaʻai foi e 320k fefaʻatauaiga o loʻo faʻaopoopoina i le vaitaele i le 10 sekone
01:12 — poloka #10 ua sainia ma auina atu i isi nodes mo le faamaoniga
01:18 - faʻamaeʻa faʻamatalaga faʻataʻitaʻiga, lea na auina atu ai le 1 miliona fefaʻatauaiga i le 34 sekone
01:20 - poloka #10 ua faʻamaonia ma auina atu i le filifili aʻa
01:51 - o nodes uma na maua faʻamatalaga mai le filifili aʻa na faʻaopoopoina poloka #10 ma amata faʻaaoga 320k fefaʻatauaiga
02:01 - ua kilia le vaitaele mo le 320k fefaʻatauaiga na faʻaopoopo i poloka #10
02:15 - tu'u node ave 350k fefa'atauaiga mai le vaita'ele ma fomu poloka #11
02:34 — poloka #11 ua sainia ma auina atu i isi nodes mo le faamaoniga
02:51 - poloka #11 ua faʻamaonia ma auina atu i le filifili aʻa
02:55 - o le node mulimuli na maeʻa fefaʻatauaiga mai poloka #10
10:59 - o le fefaʻatauaiga ma le tuʻuina atu o le poloka #9 na umi se taimi i le aʻa filifili, ae na maeʻa ma maua uma nodes faʻamatalaga e uiga i ai ma amata ona faia 350k fefaʻatauaiga
11:05 - ua kilia le vaitaele mo le 320k fefaʻatauaiga na faʻaopoopo i poloka #11
12:10 - o nodes uma e iai le 1 miliona 670k fefaʻatauaiga ma faʻailoga
12:17 - tu'u node ave 330k fefa'atauaiga mai le vaita'ele ma fomu poloka #12
12:32 — poloka #12 ua sainia ma auina atu i isi nodes mo le faamaoniga
12:39 - poloka #12 ua faʻamaonia ma auina atu i le filifili aʻa
13:44 - o nodes uma na maua faʻamatalaga mai le filifili aʻa na faʻaopoopoina poloka #12 ma amata ona faʻaoga 330k fefaʻatauaiga
14:50 - o nodes uma e aofia ai le 2 miliona fefaʻatauaiga ma faʻailoga

Su'ega 3

I le 'au'aunaga muamua ma le lua, na suia le tasi node fa'amaonia i le node tu'uina atu.


Tulaga amata: poloka mulimuli #84; 0 fefaʻatauaiga ma faʻailoga faʻasaoina i totonu o faʻamaumauga

00:00 - 3 tusitusiga ua faʻalauiloaina e faʻatupuina ma auina atu 1 miliona fefaʻatauaiga taʻitasi
01:38 - 1 miliona fefaʻatauaiga na faia ma auina atu e tuʻuina atu le node #3 amata
01:50 - tu'u le node #3 ave 330k fefa'atauaiga mai le vaita'ele ma fomu poloka #85 (f21). Matou te vaʻai foi e 350k fefaʻatauaiga o loʻo faʻaopoopoina i le vaitaele i le 10 sekone
01:53 - 1 miliona fefaʻatauaiga na faia ma auina atu e tuʻuina atu le node #1 amata
01:50 - tu'u le node #3 ave 330k fefa'atauaiga mai le vaita'ele ma fomu poloka #85 (f21). Matou te vaʻai foi e 350k fefaʻatauaiga o loʻo faʻaopoopoina i le vaitaele i le 10 sekone
02:01 — tu'u mai le node #1 na ave ai le 250k fefa'atauaiga mai le vaita'ele ma fomu poloka #85 (65e)
02:06 - poloka #85 (f21) ua sainia ma lafo i isi nodes mo le faʻamaonia
02:08 - faʻamatalaga faʻaaliga o le server #3, lea na lafoina 1 miliona fefaʻatauaiga i le 30 sekone, maeʻa galue
02:14 - poloka #85 (f21) ua faʻamaonia ma auina atu i le filifili aʻa
02:19 — poloka #85 (65e) ua sainia ma auina atu i isi nodes mo le faamaoniga
02:22 - 1 miliona fefaʻatauaiga na faia ma auina atu e tuʻuina atu le node #2 amata
02:27 - poloka #85 (65e) faʻamaonia ma auina atu i le filifili aʻa
02:29 — tu'u node #2 ave 111855 feuiaiga mai le vaitaele ma fomu poloka #85 (256).
02:36 — poloka #85 (256) ua sainia ma auina atu i isi nodes mo le faamaoniga
02:36 - faʻamatalaga faʻaaliga o le server #1, lea na lafoina 1 miliona fefaʻatauaiga i le 42.5 sekone, maeʻa galue
02:38 - poloka #85 (256) ua faʻamaonia ma auina atu i le filifili aʻa
03:08 — server #2 script ua uma ona galue, lea na auina atu le 1 miliona fefaʻatauaiga i le 47 sekone
03:38 - o nodes uma na maua faʻamatalaga mai le filifili aʻa e poloka ai #85 (f21), #86(65e), #87(256) na faʻaopoopoina ma amata ona faʻaoga 330k, 250k, 111855 fefaʻatauaiga
03:49 - na kilia le vaitaele i le 330k, 250k, 111855 fefaʻatauaiga na faʻaopoopo i poloka #85 (f21), #86(65e), #87(256)
03:59 — tu'u node #1 ave 888145 feuia'iga mai le vaita'ele ma fomu poloka #88 (214), tu'u node #2 ave 750k fefa'atauaiga mai le vaitaele ma fomu poloka #88 (50a), tu'u node #3 ave 670k fefa'atauaiga mai. le vaita'ele ma fa'apoloka #88 (d3b)
04:44 — poloka #88 (d3b) ua sainia ma auina atu i isi nodes mo le faamaoniga
04:58 — poloka #88 (214) ua sainia ma auina atu i isi nodes mo le faamaoniga
05:11 — poloka #88 (50a) ua sainia ma auina atu i isi nodes mo le faamaoniga
05:11 - poloka #85 (d3b) ua faʻamaonia ma auina atu i le filifili aʻa
05:36 - poloka #85 (214) ua faʻamaonia ma auina atu i le filifili aʻa
05:43 - o nodes uma na maua faʻamatalaga mai le filifili aʻa e poloka ai #88 (d3b), #89(214) ua faʻaopoopoina ma ua amata ona faʻaoga 670k, 750k fefaʻatauaiga
06:50 - ona o le faaletonu o fesoʻotaʻiga, poloka #85 (50a) e leʻi faʻamaonia
06:55 — tu'u le node #2 na ave 888145 feuiaiga mai le vaita'ele ma fomu poloka #90 (50a)
08:14 — poloka #90 (50a) ua sainia ma auina atu i isi nodes mo le faamaoniga
09:04 - poloka #90 (50a) ua faʻamaonia ma auina atu i le filifili aʻa
11:23 - o nodes uma na maua faʻamatalaga mai le filifili aʻa na faʻaopoopoina poloka #90 (50a), ma amata ona faʻaoga 888145 fefaʻatauaiga. I le taimi lava e tasi, ua uma ona faʻaogaina e le server #3 fefaʻatauaiga mai poloka #88 (d3b), #89(214)
12:11 - o vaitaele uma e gaogao
13:41 - o nodes uma o le server #3 o loʻo i ai le 3 miliona fefaʻatauaiga ma faʻailoga
14:35 - o nodes uma o le server #1 o loʻo i ai le 3 miliona fefaʻatauaiga ma faʻailoga
19:24 - o nodes uma o le server #2 o loʻo i ai le 3 miliona fefaʻatauaiga ma faʻailoga

Fa'alavelave

I le taimi o le atinaʻeina o Plasma Cash, na matou feagai ma faʻafitauli nei, lea na faasolosolo malie ona matou foia ma foia:

1. Fete'ena'iga i le fegalegaleai o galuega eseese o faiga. Mo se faʻataʻitaʻiga, o le galuega o le faʻaopoopoina o fefaʻatauaiga i le vaitaele na poloka ai le galuega o le tuʻuina atu ma le faʻamaonia o poloka, ma le isi itu, lea na mafua ai le pa'ū i le saoasaoa.

2. E leʻi vave faʻaalia pe faʻapefea ona auina atu se numera tele o fefaʻatauaiga aʻo faʻaititia le tau o faʻamatalaga.

3. E leʻi manino pe faʻafefea ma poʻo fea e teu ai faʻamaumauga ina ia maua ai faʻaiʻuga maualuluga.

4. E leʻi manino pe faʻapefea ona faʻatulagaina se fesoʻotaʻiga i le va o nodes, talu ai o le tele o le poloka ma le 1 miliona fefaʻatauaiga e tusa ma le 100 MB.

5. O le galue i le fa'aogaina o le filo e tasi e motusia ai le feso'ota'iga i le va o nodes pe a tupu fa'atatauga umi (fa'ata'ita'iga, fau se laau Merkle ma fa'atatauina lona hash).

Na faapefea ona tatou taulimaina nei mea uma?

O le vaega muamua o le Plasma Cash node o se ituaiga tuʻufaʻatasiga e mafai ona faia mea uma i le taimi e tasi: talia fefaʻatauaiga, tuʻuina atu ma faʻamaonia poloka, ma tuʻuina atu se API mo le mauaina o faʻamatalaga. Talu ai ona o le NodeJS e tasi le filo, o le galuega mamafa o le fuafuaina o laau Merkle na poloka ai le faʻaopoopoga o fefaʻatauaiga. Na matou vaaia ni filifiliga se lua mo le foia o lenei faafitauli:

1. Tatala nisi faiga NodeJS, o ia mea taitasi e faia galuega patino.

2. Fa'aoga le worker_threads ma fa'agaoioi le fa'atinoina o se vaega o le code i filo.

O se taunuuga, na matou faʻaogaina uma filifiliga i le taimi e tasi: matou te vaevaeina le tasi node i vaega e 3 e mafai ona galue eseese, ae i le taimi lava e tasi faʻatasi.

1. Node tu'uina atu, lea e talia fefa'atauaiga i totonu o le vaita'ele ma fa'atupu poloka.

2. O se node fa'amaonia e siaki ai le aoga o node.

3. API node - e maua ai se API mo le mauaina o faʻamatalaga.

I lenei tulaga, e mafai ona e faʻafesoʻotaʻi i node taʻitasi e ala i se socket unix e faʻaaoga ai cli.

Na matou siitia galuega mamafa, e pei o le fuafuaina o le laau Merkle, i se filo eseese.

O lea, ua matou ausia galuega masani o galuega uma Plasma Cash i le taimi e tasi ma e aunoa ma se faaletonu.

O le taimi lava na faʻaogaina ai le faiga, na amata ona matou suʻeina le saoasaoa ma, o le mea e leaga ai, na maua ai faʻaiʻuga le lelei: 5 fefaʻatauaiga i le sekone ma oʻo atu i le 000 fefaʻatauaiga i le poloka. Sa tatau ona ou iloa po o le a le mea na sese le faatinoga.

I le amataga, na amata ona matou suʻeina le faiga o fesoʻotaʻiga ma Plasma Cash e suʻe ai le maualuga o le gafatia o le faiga. Na matou tusia muamua o le Plasma Cash node e maua ai se fesoʻotaʻiga socket unix. Muamua sa fa'avae i tusitusiga. json mea faitino na auina mai e faaaoga ai le `JSON.parse()` ma le `JSON.stringify()`.

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

Na matou fuaina le saoasaoa o le fesiitaiga o ia mea ma maua ~ 130k i le sekone. Na matou taumafai e sui tulaga masani mo le galulue faatasi ma json, ae e leʻi faʻaleleia le faʻatinoga. O le V8 afi e tatau ona faʻalelei lelei mo nei gaioiga.

Sa matou galulue i fefaʻatauaiga, faʻailoga, ma poloka i vasega. Pe a fatuina ia vasega, o le faʻatinoga na pa'ū i le 2 taimi, lea e faʻaalia ai e le talafeagai le OOP mo i matou. Sa tatau ona ou toe tusia mea uma i se faiga mama atoatoa.

Fa'amauina i totonu o fa'amaumauga

I le taimi muamua, na filifilia Redis mo le teuina o faʻamaumauga o se tasi o fofo sili ona aoga e faʻamalieina ai o tatou manaʻoga: faʻamaumauga autu-taua, galue ma laulau hash, seti. Na matou faʻalauiloaina redis-benchmark ma maua ~ 80k gaioiga i le sekone i le 1 pipelining mode.

Mo le maualuga o le faʻatinoga, matou te faʻalogo lelei i le Redis:

  • Ua fa'atuina se socket socket unix.
  • Matou te le mafaia le faʻasaoina o le setete i le disk (mo le faʻamaoni, e mafai ona e setiina se faʻataʻitaʻiga ma sefe i le tisiki i se Redis ese).

I Redis, o le vaitaele o se laulau hash aua tatou te manaʻomia le mafai ona toe maua uma fefaʻatauaiga i le tasi fesili ma tape fefaʻatauaiga taʻitasi. Na matou taumafai e faʻaaoga se lisi masani, ae e faʻagesegese pe a laʻuina le lisi atoa.

A faʻaaogaina NodeJS masani, na ausia e le Redis faletusi se faʻatinoga o fefaʻatauaiga 18k i le sekone. Na pa'u le saoasaoa i le 9 taimi.

Talu ai ona o le faʻailoga na faʻaalia mai ia i matou o avanoa e manino 5 taimi sili atu, na amata ona matou faʻaogaina. Na matou suia le faletusi i le ioredis ma maua le faatinoga o le 25k i le sekone. Matou te faʻaopoopoina fefaʻatauaiga taʻitasi e faʻaaoga ai le 'hset' poloaiga. O lea na matou fatuina ai le tele o fesili i Redis. Na aliaʻe le manatu e tuʻufaʻatasia fefaʻatauaiga i totonu o vaega ma auina atu i latou i le tasi poloaiga `hmset`. Ole taunuuga ole 32k ile sekone.

Mo le tele o mafuaʻaga, o le a matou faʻamatalaina i lalo, matou te galulue faʻatasi ma faʻamatalaga e faʻaaoga ai le 'Buffer' ma, e foliga mai, afai e te faʻaliliuina i tusitusiga (`buffer.toString('hex')`) aʻo leʻi tusia, e mafai ona e mauaina faʻaopoopoga. faatinoga. O le mea lea, o le saoasaoa na siitia i le 35k i le sekone. I le taimi nei, na matou filifili e taofi le faʻaleleia atili.

Sa tatau ona matou sui i se protocol binary ona:

1. E masani ona faʻatulagaina e le faiga faʻailoga, saini, ma isi, ma mo lenei mea e manaʻomia ai faʻamatalaga i le 'Buffer.

2. A lafo i le va o tautua, fa'amaumauga binary e la'ititi ifo nai lo tusitusiga. Mo se faʻataʻitaʻiga, pe a tuʻuina atu se poloka ma le 1 miliona fefaʻatauaiga, o faʻamaumauga i totonu o tusitusiga e mafai ona sili atu i le 300 megabytes.

3. O le suia pea o fa'amaumauga e a'afia ai le fa'atinoga.

O le mea lea, na matou fa'avaeina ai a matou lava tulafono fa'avae mo le teuina ma le tu'uina atu o fa'amaumauga, na fausia i luga o le fa'avae o le faletusi matagofie 'binary-data'.

O se taunuuga, na matou maua faʻamaumauga faʻamaumauga nei:

—Feagai

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

— Faailoga

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

—Polo

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

Faatasi ai ma poloaiga masani `BD.encode(poloka, Protocol).slice();` ma le `BD.decode(buffer, Protocol)` matou te liua faʻamaumauga i le `Buffer` mo le teuina i Redis poʻo le tuʻuina atu i se isi node ma toe aumai le fa'amatalaga i tua.

E iai fo'i a matou tulafono fa'alua e 2 mo le fa'aliliuina o fa'amaumauga i le va o auaunaga:

- Polokalama mo fegalegaleaiga ma Plasma Node e ala i socket unix

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

pe afai:

  • 'ituaiga' — le gaioiga e fai, mo se faataitaiga, 1 — sendTransaction, 2 — getTransaction;
  • 'totogi' - faʻamatalaga e manaʻomia ona tuʻuina atu i le galuega talafeagai;
  • `messageId` - fe'au id ina ia mafai ona iloa le tali.

- Polokalama mo fegalegaleaiga i le va o nodes

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

pe afai:

  • 'code' — code code, mo se faataitaiga 6 — SAUNIA_NEW_BLOCK, 7 — BLOCK_VALID, 8 — BLOCK_COMMIT;
  • `versionProtocol` - faʻasologa o faʻasalalauga, talu ai e mafai ona faʻatupuina i luga o le fesoʻotaʻiga ma e mafai ona latou galulue eseese;
  • 'seq' - fa'ailoga fe'au;
  • 'countChunk' и `chunkNumber` talafeagai mo le vaevaeina o feʻau tetele;
  • `umi` и 'totogi' umi ma faʻamaumauga lava ia.

Talu ai na matou muai taina faʻamaumauga, o le faiga mulimuli e sili atu le vave nai lo le faletusi `rlp` a Ethereum. Ae paga lea, e leʻi mafai ona matou teena, talu ai e tatau ona faʻamaeʻaina le konekarate atamai, lea matou te fuafua e fai i le lumanaʻi.

Afai na mafai ona matou ausia le saoasaoa 35 000 fefa'ataua'iga i le sekone, e mana'omia fo'i ona tatou fa'agasolo i le taimi sili. Talu ai o le taimi fa'atulagaina poloka e mana'omia le 30 sekone, e tatau ona tatou fa'aaofia i totonu o le poloka 1 000 000 fefaʻatauaʻiga, o lona uiga o le lafoina atili 100 MB o faʻamatalaga.

I le taimi muamua, na matou faʻaogaina le faletusi 'ethereumjs-devp2p' e fesoʻotaʻi ai i le va o nodes, ae e le mafai ona taulimaina le tele o faʻamatalaga. O le i'uga, sa matou fa'aogaina le faletusi `ws` ma fa'atulaga le tu'uina atu o fa'amaumauga fa'alua e ala i websocket. O le mea moni, sa matou feagai foi ma faʻafitauli i le lafoina o faʻamaumauga tetele, ae na matou vaevaeina i ni pusi ma o lea ua leai nei faʻafitauli.

Fausia foi se laau Merkle ma fuafua le hash 1 000 000 fefa'ataua'iga mana'omia e uiga i 10 sekone o fa'atatauga faifai pea. I le taimi lea, o le fesoʻotaʻiga ma nodes uma e mafai ona motusia. Na tonu e ave lenei fa'atatau i se filo e ese mai.

Faaiuga:

O le mea moni, e le fou a matou suʻesuʻega, ae mo nisi mafuaaga e galo ai le tele o tagata atamamai pe a atiaʻe.

  • O le fa'aaogaina o Polokalama Fa'atino nai lo Polokalama Fa'atatau i Fa'atatau e fa'aleleia ai le gaosiga.
  • O le monolith e sili atu le leaga nai lo se faʻataʻitaʻiga auaunaga mo se faiga NodeJS aoga.
  • O le fa'aogaina o le 'worker_threads' mo fa'atusatusaga mamafa e fa'aleleia ai le tali atu o le tino, aemaise pe a feagai ma fa'agaioiga i/o.
  • unix socket e sili atu ona mautu ma vave nai lo talosaga http.
  • Afai e te manaʻomia le faʻafeiloaʻi vave o faʻamatalaga tetele i luga o le fesoʻotaʻiga, e sili atu le faʻaogaina o websockets ma auina atu faʻamaumauga binary, vaevaeina i ni pusi, lea e mafai ona tuʻuina atu pe a latou le taunuu, ona tuʻufaʻatasia lea i se savali e tasi.

Matou te valaaulia oe e asiasi mai GitHub poloketi: https://github.com/opporty-com/Plasma-Cash/tree/new-version

O le tala na tusia faatasi e Alexander Nashivan, atina'e sinia Clever Solution Inc.

puna: www.habr.com

Faaopoopo i ai se faamatalaga