Tlhahlobo ea Sechaba: Tharollo ea Boinotši le Scalability ho Ethereum

Thibelo ke theknoloji e ncha e tšepisang ho ntlafatsa likarolo tse ngata tsa bophelo ba motho. E fetisetsa lits'ebetso le lihlahisoa tsa 'nete sebakeng sa dijithale, e netefatsa lebelo le ts'epahalo ea litšebelisano tsa lichelete, e fokotsa litšenyehelo tsa bona, hape e u lumella ho etsa lits'ebetso tsa morao-rao tsa DAPP u sebelisa likonteraka tse bohlale ho marang-rang a arotsoeng.

Ka lebaka la melemo e mengata le likopo tse fapaneng tsa blockchain, ho ka 'na ha bonahala ho makatsa hore ebe theknoloji ena e tšepisang ha e e-s'o kene indastering e' ngoe le e 'ngoe. Bothata ke hore li-blockchains tsa mehleng ea kajeno ha li na scalability. Ethereum e sebetsa ka litšebelisano tsa 20 ka motsotsoana, e leng se sa lekaneng ho finyella litlhoko tsa likhoebo tse matla tsa kajeno. Ka nako e ts'oanang, lik'hamphani tse sebelisang theknoloji ea blockchain li tsilatsila ho lahla Ethereum ka lebaka la tšireletso e phahameng ea ho senya le ho hlōleha ha marang-rang.

Ho etsa bonnete ba ho aroloa, ts'ireletso le scalability ho blockchain, ka hona ho rarolla Scalability Trilemma, sehlopha sa nts'etsopele. Monyetla e thehile Plasma Cash, ketane ea tlatsetso e nang le konteraka e bohlale le marang-rang a ikemetseng a thehiloeng ho Node.js, eo nako le nako e fetisetsang boemo ba eona ho ketane ea metso (Ethereum).

Tlhahlobo ea Sechaba: Tharollo ea Boinotši le Scalability ho Ethereum

Mekhoa ea bohlokoa ho Plasma Cash

1. Mosebelisi o bitsa mosebetsi oa konteraka o bohlale `deposit`, o fetisetsa ho eona chelete ea ETH eo a batlang ho e kenya ka har'a token ea Plasma Cash. Mosebetsi oa konteraka o bohlale o etsa letšoao mme o hlahisa ketsahalo ka eona.

2. Li-node tsa Plasma Cash tse ngolisitsoeng ho liketsahalo tsa konteraka tse bohlale li fumana ketsahalo e mabapi le ho theha depositi le ho eketsa transaction mabapi le ho theha letšoao ho letamo.

3. Nako le nako, li-node tse khethehileng tsa Plasma Cash li nka litšebelisano tsohle ho tloha letamong (ho fihlela ho limilione tse 1) 'me li theha sekoahelo ho tsona, li bala sefate sa Merkle mme, ka hona, hash. Sebaka sena se romelloa ho li-node tse ling bakeng sa ho netefatsa. Li-node li hlahloba hore na hash ea Merkle e nepahetse le hore na litšebelisano li nepahetse (mohlala, hore na motho ea romelang letšoao ke mong'a lona). Kamora ho netefatsa boloko, node e bitsa `submitBlock` mosebetsi oa konteraka e bohlale, e bolokang nomoro ea block le Merkle hash ho ketane ea moeli. Konteraka e bohlale e hlahisa ketsahalo e bontšang katleho e eketsehileng ea thibela. Litšebelisano li tlosoa letamong.

4. Li-node tse amohelang ketsahalo ea ho fana ka li-block li qala ho sebelisa litšebelisano tse kentsoeng ho thibela.

5. Ka nako e 'ngoe, mong'a (kapa eo e seng mong'a) oa letšoao o batla ho e tlosa ho Plasma Cash. Ho etsa sena, o bitsa mosebetsi oa `startExit`, o fetisetsa ho eona tlhahisoleseding e mabapi le litšebelisano tsa ho qetela tsa 2 ho letšoao, tse tiisang hore ke mong'a letšoao. Konteraka e bohlale, e sebelisang hash ea Merkle, e hlahloba boteng ba litšebelisano ka li-blocks ebe e romela letšoao la ho tlosoa, le tla etsahala ka libeke tse peli.

6. Haeba ts'ebetso ea ho tlosa letšoao e etsahetse ka tlōlo ea molao (letšoao le sebelisitsoe ka mor'a hore mokhoa oa ho tlohela o qale kapa letšoao le ne le se le ntse le le motho e mong pele ho tlosoa), mong'a letšoao a ka hana ho tlosoa ha libeke tse peli.

Tlhahlobo ea Sechaba: Tharollo ea Boinotši le Scalability ho Ethereum

Boinotši bo finyelloa ka litsela tse peli

1. Motso oa ketane ha o tsebe letho ka litšebelisano tse hlahisoang le ho fetisoa ka har'a ketane ea bana. Tlhahisoleseding e mabapi le hore na ke mang ea kentseng le ho ntša ETH ho Plasma Cash e ntse e le phatlalatsa.

2. Ketane ea bana e lumella litšebelisano tse sa tsejoeng tse sebelisang zk-SNARKs.

Sekhahla sa theknoloji

  • NodeJS
  • Redis
  • etherium
  • Sild

Teko

Ha re ntse re nts'etsapele Plasma Cash, re ile ra leka lebelo la sistimi mme ra fumana liphetho tse latelang:

  • ho fihlela ho 35 litšebelisano ka motsotsoana li eketsoa letamong;
  • ho fihlela ho 1 transactions e ka bolokoa ka bolokong.

Liteko li entsoe ho li-server tse 3 tse latelang:

1. Intel Core i7-6700 Quad-Core Skylake incl. NVMe SSD - 512 GB, 64 GB DDR4 RAM
Li-node tse 3 tse netefatsang Plasma Cash li ile tsa phahamisoa.

2. AMD Ryzen 7 1700X Octa-Core "Summit Ridge" (Zen), SATA SSD - 500 GB, 64 GB DDR4 RAM
Ropsten testnet ETH node e ile ea phahamisoa.
Li-node tse 3 tse netefatsang Plasma Cash li ile tsa phahamisoa.

3. Intel Core i9-9900K Octa-Core incl. NVMe SSD - 1 TB, 64 GB DDR4 RAM
Ho ile ha phahamisoa node ea 1 ea Plasma Cash.
Li-node tse 3 tse netefatsang Plasma Cash li ile tsa phahamisoa.
Ho ile ha qalisoa teko ea ho kenya tšebetsong marang-rang a Plasma Cash.

Kakaretso: Li-node tse 10 tsa Plasma Cash marang-rang a ikemetseng.

Teko ea 1

Ho na le moeli oa litšebelisano tsa limilione tse 1 ka block. Ka hona, litšebelisano tsa limilione tse 1 li oela ka har'a li-blocks tsa 2 (kaha tsamaiso e khona ho nka karolo ea litšebelisano le ho romella ha e ntse e romeloa).


Boemo ba pele: thibela ea ho qetela #7; Litšebelisano le li-tokens tse limilione tse 1 li bolokiloe polokelong ea litaba.

00:00 - ho qala ha mongolo oa tlhahiso ea transaction
01:37 - Litšebelisano tse limilione tse 1 li ile tsa thehoa 'me tsa romeloa sebakeng sa marang-rang
01:46 - node ea ho romella e nkile 240k transactions ho tloha letamong le liforomo block #8. Hape rea bona hore litšebelisano tsa 320k li eketsoa letamong ka metsotsoana e 10
01:58 - thibela #8 e saennoe 'me e romelloa hore e netefatsoe
02:03 - block #8 e tiisitsoe mme mosebetsi oa `submitBlock` oa konteraka e bohlale o bitsoa ka Merkle hash le nomoro ea block.
02:10 - script ea demo e qetile ho sebetsa, e rometseng litšebelisano tse limilione tse 1 ka metsotsoana e 32
02:33 - li-node li ile tsa qala ho fumana boitsebiso bo thibelang #8 e kenyelelitsoe mokokotlong oa metso, 'me ea qala ho etsa litšebelisano tsa 240k.
02:40 - 240k transactions e ile ea tlosoa letamong, e seng e ntse e le thibela #8
02:56 - node ea ho romella e nkile litšebelisano tse setseng tsa 760k ho tloha letamong mme ea qala ho bala Merkle hash le ho saena block #9.
03:20 - li-node tsohle li na le litšebelisano le li-tokens tse limilione tse 1 tsa 240k
03:35 - block #9 e saennoe 'me e romelloa ho netefatsoa ho li-node tse ling
03:41 - phoso ea marang-rang e etsahetse
04:40 - ho emetse block #9 netefatso e felile
04:54 - node ea ho romella e nkile litšebelisano tse setseng tsa 760k ho tloha letamong mme ea qala ho bala Merkle hash le ho saena block #9.
05:32 - block #9 e saennoe 'me e romelloa ho netefatsoa ho li-node tse ling
05:53 - block #9 e netefalitsoe mme e romelloa ho ketane ea metso
06:17 - li-node li ile tsa qala ho fumana boitsebiso bo thibelang #9 e kenyelelitsoe mokokotlong oa metso 'me ea qala ho etsa litšebelisano tsa 760k.
06:47 - letamo le tlositse litšebelisano tse ka har'a boloko ba #9
09:06 - li-node tsohle li na le litšebelisano le li-tokens tse limilione tse 2

Teko ea 2

Ho na le moeli oa 350k bolokong ka 'ngoe. Ka lebaka leo, re na le li-blocks tse 3.


Boemo ba pele: thibela ea ho qetela #9; Litšebelisano le li-tokens tse limilione tse 2 li bolokiloe polokelong ea litaba

00:00 - sengoloa sa tlhahiso ea transaction se se se qalile
00:44 - Litšebelisano tse limilione tse 1 li ile tsa thehoa 'me tsa romeloa sebakeng sa marang-rang
00:56 - node ea ho romella e nkile 320k transactions ho tloha letamong le liforomo block #10. Hape rea bona hore litšebelisano tsa 320k li eketsoa letamong ka metsotsoana e 10
01:12 - block #10 e saennoe mme e romelloa ho li-node tse ling bakeng sa ho netefatsoa
01:18 - script ea demo e qetile ho sebetsa, e rometseng litšebelisano tse limilione tse 1 ka metsotsoana e 34
01:20 - block #10 e netefalitsoe mme e romelloa ho ketane ea metso
01:51 - li-node tsohle li fumane leseli ho tsoa ho ketane ea metso e thibelang # 10 e kentsoe mme e qala ho sebelisa 320k transactions.
02:01 - letamo le hlakotsoe bakeng sa litšebelisano tsa 320k tse kentsoeng ho thibela #10
02:15 - node ea ho romella e nkile 350k transactions ho tsoa letamong le liforomo block #11
02:34 - thibela #11 e saennoe mme e romelloa ho li-node tse ling bakeng sa ho netefatsoa
02:51 - block #11 e netefalitsoe mme e romelloa ho ketane ea metso
02:55 - node ea ho qetela e phethile litšebelisano ho tloha bolokong #10
10:59 - ts'ebetso e nang le tlhahiso ea "block #9" e nkile nako e telele haholo ka har'a ketane ea metso, empa e ile ea phethoa 'me li-node tsohle li ile tsa fumana boitsebiso ka eona' me tsa qala ho etsa 350k transactions.
11:05 - letamo le hlakotsoe bakeng sa litšebelisano tsa 320k tse kentsoeng ho thibela #11
12:10 - li-node tsohle li na le litšebelisano le li-tokens tse limilione tse 1 670k
12:17 - node ea ho fana e nkile 330k transactions ho tsoa letamong le liforomo block #12
12:32 - thibela #12 e saennoe mme e romelloa ho li-node tse ling bakeng sa ho netefatsoa
12:39 - block #12 e netefalitsoe mme e romelloa ho ketane ea metso
13:44 - li-node tsohle li fumane leseli ho tsoa ho ketane ea metso e thibelang #12 e kentsoe mme e qala ho sebelisa 330k transactions.
14:50 - li-node tsohle li na le litšebelisano le li-tokens tse limilione tse 2

Teko ea 3

Ho li-server tsa pele le tsa bobeli, node e le 'ngoe e netefatsang e ile ea nkeloa sebaka ke node e romellang.


Boemo ba pele: thibela ea ho qetela #84; 0 transactions le tokens tse bolokiloeng polokelong ea litaba

00:00 - Lingoliloeng tse 3 li se li hlahisitsoe tse hlahisang le ho romella lipapatso tse milione e le 'ngoe.
01:38 - Litšebelisano tse limilione tse 1 li entsoe 'me li romelloa ho fana ka node #3 e qalile
01:50 - romela node #3 e nkile 330k transactions ho tloha letamong le liforomo thibela #85 (f21). Hape rea bona hore 350k transactions e eketsoa letamong ka metsotsoana e 10
01:53 - Litšebelisano tse limilione tse 1 li entsoe 'me li romelloa ho fana ka node #1 e qalile
01:50 - romela node #3 e nkile 330k transactions ho tloha letamong le liforomo thibela #85 (f21). Hape rea bona hore 350k transactions e eketsoa letamong ka metsotsoana e 10
02:01 - fana ka node #1 e nkile 250k transactions ho tloha letamong le liforomo block #85 (65e)
02:06 - thibela #85 (f21) e saennoe mme e romelloa ho li-node tse ling bakeng sa ho netefatsoa
02:08 - script ea demo ea seva #3, e rometseng litšebelisano tse limilione tse 1 ka metsotsoana e 30, e qetile ho sebetsa
02:14 - thibela #85 (f21) e tiisitsoe mme e romelloa ho ketane ea metso
02:19 - thibela #85 (65e) e saennoe mme e romelloa ho li-node tse ling bakeng sa ho netefatsa
02:22 - Litšebelisano tse limilione tse 1 li entsoe 'me li romelloa ho fana ka node #2 e qalile
02:27 - thibela #85 (65e) e tiisitsoe mme e rometsoe ho ketane ea metso
02:29 - romella node #2 e nkile litšebelisano tsa 111855 ho tloha letamong le liforomo thibela #85 (256).
02:36 - thibela #85 (256) e saennoe mme e romelloa ho li-node tse ling bakeng sa ho netefatsa
02:36 - script ea demo ea seva #1, e rometseng litšebelisano tse limilione tse 1 ka metsotsoana e 42.5, e qetile ho sebetsa
02:38 - thibela #85 (256) e tiisitsoe mme e romelloa ho ketane ea metso
03:08 - script ea seva #2 e qetile ho sebetsa, e rometseng litšebelisano tse limilione tse 1 ka metsotsoana e 47
03:38 - li-node tsohle li fumane boitsebiso ho tsoa ho ketane ea metso e thibelang #85 (f21), #86 (65e), #87 (256) e kenyelelitsoe 'me ea qala ho sebelisa 330k, 250k, 111855 transactions.
03:49 - letamo le ile la hloekisoa ho 330k, 250k, 111855 transactions tse kentsoeng li-blocks #85 (f21), #86 (65e), #87 (256)
03:59 - romela node #1 e nkile 888145 transactions ho tloha letamong le liforomo thibela #88 (214), romella node #2 e nkile 750k transactions ho tloha letamong le liforomo thibela #88 (50a), fana ka node #3 e nkile 670k transactions ho tloha letamo le liforomo block #88 (d3b)
04:44 - thibela #88 (d3b) e saennoe 'me e romelloa ho li-node tse ling bakeng sa ho netefatsoa
04:58 - thibela #88 (214) e saennoe mme e romelloa ho li-node tse ling bakeng sa ho netefatsa
05:11 - thibela #88 (50a) e saennoe mme e romelloa ho li-node tse ling bakeng sa ho netefatsoa
05:11 - block #85 (d3b) e netefalitsoe mme e romelloa ho ketane ea metso
05:36 - thibela #85 (214) e tiisitsoe mme e romelloa ho ketane ea metso
05:43 - li-node tsohle li fumane leseli ho tsoa ho ketane ea metso e thibelang #88 (d3b), #89(214) e kentsoe mme e se e qala ho sebelisa 670k, 750k transactions.
06:50 - ka lebaka la ho hlōleha ha puisano, thibela #85 (50a) ha ea ka ea tiisoa
06:55 - romela node #2 e nkile 888145 transactions ho tloha letamong le liforomo block #90 (50a)
08:14 - thibela #90 (50a) e saennoe mme e romelloa ho li-node tse ling bakeng sa ho netefatsoa
09:04 - thibela #90 (50a) e tiisitsoe mme e romelloa ho ketane ea metso
11:23 - li-node tsohle li fumane boitsebiso bo tsoang ho ketane ea metso e thibelang #90 (50a) e kenyelitsoeng, 'me e qala ho sebelisa 888145 transactions. Ka nako e ts'oanang, seva #3 e se e sebelisitse litšebelisano ho tloha ho li-blocks #88 (d3b), #89 (214)
12:11 - matamo 'ohle ha a na letho
13:41 - li-node tsohle tsa seva #3 li na le litšebelisano le li-tokens tse limilione tse 3
14:35 - li-node tsohle tsa seva #1 li na le litšebelisano le li-tokens tse limilione tse 3
19:24 - li-node tsohle tsa seva #2 li na le litšebelisano le li-tokens tse limilione tse 3

Litšitiso

Nakong ea nts'etsopele ea Plasma Cash, re ile ra kopana le mathata a latelang, ao re ileng ra a rarolla butle-butle le ho a rarolla:

1. Khohlano tšebelisanong ea mesebetsi e fapaneng ea sistimi. Ka mohlala, mosebetsi oa ho eketsa litšebelisano le letamo o thibetse mosebetsi oa ho romela le ho netefatsa li-blocks, 'me ka tsela e fapaneng, e leng se ileng sa etsa hore lebelo le theohe.

2. Ha hoa ka ha hlaka hang-hang hore na u ka romela palo e kholo ea litšebelisano joang ha u ntse u fokotsa litšenyehelo tsa ho fetisetsa data.

3. Ho ne ho sa hlaka hore na u ka boloka data joang le hore na u ka boloka data hokae e le hore u fumane liphello tse phahameng.

4. Ho ne ho sa hlaka mokhoa oa ho hlophisa marang-rang pakeng tsa li-node, kaha boholo ba thibela e nang le litšebelisano tsa limilione tse 1 e nka hoo e ka bang 100 MB.

5. Ho sebetsa ka mokhoa o nang le khoele e le 'ngoe ho senya kamano pakeng tsa li-node ha lipalo tse telele li etsahala (mohlala, ho haha ​​​​sefate sa Merkle le ho bala hashe ea sona).

Re ile ra sebetsana joang le see sohle?

Phetolelo ea pele ea node ea Plasma Cash e ne e le mofuta oa motsoako o ka etsang ntho e 'ngoe le e' ngoe ka nako e le 'ngoe: amohela litšebelisano, ho fana le ho netefatsa li-blocks, le ho fana ka API bakeng sa ho fumana data. Kaha NodeJS e na le khoele e le 'ngoe, mosebetsi o boima oa ho bala sefate sa Merkle o thibetse mosebetsi oa ho eketsa transaction. Re bone mekhoa e 'meli ea ho rarolla bothata bona:

1. Qala mekhoa e mengata ea NodeJS, e 'ngoe le e' ngoe e etsa mesebetsi e itseng.

2. Sebelisa worker_threads 'me u tsamaise ts'ebetso ea karolo ea khoutu hore e be likhoele.

Ka lebaka leo, re sebelisitse likhetho ka bobeli ka nako e le 'ngoe: re arola node e le' ngoe ka likarolo tse 3 tse ka sebetsang ka thoko, empa ka nako e ts'oanang.

1. Node ea ho fana, e amohelang litšebelisano ka har'a letamo mme e theha li-blocks.

2. Node e netefatsang e lekola bonnete ba li-node.

3. API node - e fana ka API bakeng sa ho fihlella data.

Tabeng ena, o ka hokela node ka 'ngoe ka sokete ea unix o sebelisa cli.

Re ile ra tsamaisa opereishene e boima, joalo ka ho bala sefate sa Merkle, ka khoele e arohaneng.

Kahoo, re fihletse ts'ebetso e tloaelehileng ea mesebetsi eohle ea Plasma Cash ka nako e le 'ngoe ntle le liphoso.

Hang ha tsamaiso e ntse e sebetsa, re ile ra qala ho hlahloba lebelo 'me, ka bomalimabe, re fumana liphello tse sa khotsofalang: litšebelisano tsa 5 ka motsotsoana le ho fihlela ho 000 ka ho thibela. Ke ile ka tlameha ho fumana hore na ke eng e kentsoeng tšebetsong ka phoso.

Ho qala, re ile ra qala ho leka mochine oa puisano le Plasma Cash ho fumana bokhoni ba tlhōrō ea tsamaiso. Re ngotse pejana hore node ea Plasma Cash e fana ka sebopeho sa sokete sa unix. Qalong e ne e theiloe ka mongolo. lintho tsa json li rometsoe ho sebelisoa `JSON.parse()` le `JSON.stringify()`.

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

Re lekanya lebelo la phetisetso ea lintho tse joalo mme ra fumana ~ 130k motsotsoana. Re lekile ho fetola mesebetsi e tloaelehileng ea ho sebetsa le json, empa ts'ebetso ha ea ka ea ntlafala. Enjene ea V8 e tlameha ho ntlafatsoa hantle bakeng sa ts'ebetso ena.

Re ne re sebetsa ka li-transactions, tokens, le li-blocks ka lihlopha. Ha ho etsoa lihlopha tse joalo, ts'ebetso e theohile ka makhetlo a 2, e leng se bontšang hore OOP ha e tšoanelehe bakeng sa rona. Ke ile ka tlameha ho ngola ntho e 'ngoe le e' ngoe hape ka mokhoa o sebetsang hantle.

Ho rekota polokelong ea litaba

Qalong, Redis e ile ea khethoa bakeng sa polokelo ea data e le e 'ngoe ea litharollo tse hlahisang litholoana tse khotsofatsang litlhoko tsa rona: polokelo ea bohlokoa-boleng, ho sebetsa ka litafole tsa hash, li-sete. Re tsebisitse redis-benchmark mme ra fumana ~ 80k ts'ebetso ka motsotsoana ka mokhoa o le mong oa lipeipi.

Bakeng sa ts'ebetso e phahameng, re hlophisitse Redis hantle haholoanyane:

  • Khokahano ea sokete ea unix e se e thehiloe.
  • Re holofalitse ho boloka mmuso ho disk (bakeng sa ho ts'epahala, o ka theha replica mme oa e boloka ho disk ka Redis e arohaneng).

Ho Redis, letamo ke tafole ea hash hobane re hloka ho khona ho fumana litšebelisano tsohle ka potso e le 'ngoe le ho hlakola litšebelisano ka bonngoe. Re lekile ho sebelisa lethathamo le tloaelehileng, empa le lieha ha le laolla lenane lohle.

Ha u sebelisa NodeJS e tloaelehileng, lilaebrari tsa Redis li fihletse ts'ebetso ea 18k ea litšebelisano ka motsotsoana. Lebelo le theohile ka makhetlo a 9.

Kaha benchmark e re bonts'itse menyetla e hlakile ka makhetlo a 5, re ile ra qala ho ntlafatsa. Re fetotse laeborari ho ioredis mme ra fumana ts'ebetso ea 25k motsotsoana. Re kentse litšebelisano ka bonngoe re sebelisa taelo ea `hset`. Kahoo re ne re hlahisa lipotso tse ngata ho Redis. Ho ile ha hlaha mohopolo oa ho kopanya litšebelisano ho li-batches le ho li romella ka taelo e le 'ngoe `hmset`. Sephetho ke 32k motsotsoana.

Ka mabaka a 'maloa, ao re tla a hlalosa ka tlase, re sebetsa ka data re sebelisa `Buffer` 'me, ha e le hantle, haeba u e fetolela ho mongolo (`buffer.toString('hex')`) pele u ngola, u ka fumana tlatsetso. tshebetso. Kahoo, lebelo le ile la eketseha ho 35k ka motsotsoana. Hajoale, re nkile qeto ea ho emisa ntlafatso e eketsehileng.

Re ile ra tlameha ho fetohela ho protocol ea binary hobane:

1. Hangata tsamaiso e bala li-hashes, li-signature, joalo-joalo, 'me bakeng sa sena e hloka data ho `Buffer.

2. Ha e romelloa lipakeng tsa litšebeletso, data ea binary e boima ho feta mongolo. Ka mohlala, ha u romela sebaka se nang le litšebelisano tsa limilione tse 1, data e ngotsoeng e ka nka ho feta 300 megabytes.

3. Ho fetola data kamehla ho ama ts'ebetso.

Ka hona, re ile ra nka e le motheo oa rona oa binary protocol bakeng sa ho boloka le ho fetisa data, e ntlafalitsoeng motheong oa laebrari e ntle ea `binary-data`.

Ka lebaka leo, re fumane libopeho tse latelang tsa data:

- Ts'ebetso

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

— Letshwao

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

— Thibelo

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

Ka litaelo tse tloaelehileng `BD.encode(block, Protocol).slice();` le `BD.decode(buffer, Protocol)` re fetolela data ho `Buffer` bakeng sa ho boloka Redis kapa ho fetisetsa ho node e 'ngoe le ho khutlisa data morao.

Re boetse re na le li-protocol tsa 2 tsa binary bakeng sa ho fetisetsa data lipakeng tsa lits'ebeletso:

- Protocol ea ho sebelisana le Plasma Node ka sokete ea 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)
  }
  ```

moo:

  • `mofuta` - ketso e lokelang ho etsoa, ​​mohlala, 1 - sendTransaction, 2 - getTransaction;
  • `Moroalo oa moputso` - data e lokelang ho fetisetsoa mosebetsing o nepahetseng;
  • `MolaetsaId` — ID ea molaetsa e le hore karabelo e ka tsejoa.

- Protocol bakeng sa tšebelisano lipakeng tsa li-node

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

moo:

  • `khoutu` — khoutu ea molaetsa, mohlala 6 - PREPARE_NEW_BLOCK, 7 - BLOCK_VALID, 8 - BLOCK_COMMIT;
  • `versionProtocol` - mofuta oa protocol, kaha li-node tse nang le mefuta e fapaneng li ka phahamisoa marang-rang mme li ka sebetsa ka tsela e fapaneng;
  • `seq` — sekhetho sa molaetsa;
  • `countChunk` и `palo ea palo` e hlokahalang bakeng sa ho arola melaetsa e meholo;
  • `bolelele` и `Moroalo oa moputso` bolelele le data ka boeona.

Kaha re thaepile data esale pele, sistimi ea ho qetela e potlakile haholo ho feta laeborari ea Ethereum `rlp`. Ka bomalimabe, ha re e-s'o khone ho e hana, kaha ho hlokahala ho phethela konteraka e bohlale, eo re rerileng ho e etsa nakong e tlang.

Haeba re khonne ho fihla lebelong 35 000 Litšebelisano ka motsotsoana, re boetse re hloka ho li sebetsa ka nako e nepahetseng. Kaha hoo e ka bang nako ea ho etsa li-block e nka metsotsoana ea 30, re hloka ho kenyelletsa ho thibela 1 000 000 transactions, ho bolelang ho romela ho feta 100 MB ea data.

Qalong, re ne re sebelisa laeborari ea `ethereumjs-devp2p` ho buisana lipakeng tsa li-node, empa e ne e sa khone ho sebetsana le data e ngata hakana. Ka lebaka leo, re sebelisitse laeborari ea `ws` mme ra hlophisa ho romella data ea binary ka websocket. Ha e le hantle, re ile ra boela ra kopana le mathata ha re romela lipakete tse kholo tsa data, empa re li arola ka likotoana 'me joale mathata ana a felile.

Hape ho etsa sefate sa Merkle le ho bala hash 1 000 000 ditransekshene hloka ka 10 metsotswana ya ho bala ho sa feleng. Nakong ena, ho kopana le li-node tsohle ho khona ho senya. Ho ile ha etsoa qeto ea ho fetisetsa palo ena khoeleng e fapaneng.

Qeto:

Ha e le hantle, liphuputso tsa rona ha li ncha, empa ka mabaka a itseng litsebi tse ngata lia lebala ka tsona ha li ntse li tsoela pele.

  • Ho sebelisa Functional Programming ho fapana le Object-Oriented Programming ho ntlafatsa tlhahiso.
  • Monolith e mpe ho feta meralo ea litšebeletso bakeng sa sistimi e hlahisang ea NodeJS.
  • Ho sebelisa `worker_threads` bakeng sa khomphutha e boima ho ntlafatsa karabelo ea sistimi, haholo ha e sebetsana le ts'ebetso ea i/o.
  • unix socket e tsitsitse ebile e potlakile ho feta likopo tsa http.
  • Haeba o hloka ho fetisetsa data e kholo ka potlako holim'a marang-rang, ho molemo ho sebelisa li-websockets le ho romela lintlha tsa binary, tse arotsoeng ka likotoana, tse ka fetisetsoang haeba li sa fihle, ebe li kopantsoe molaetsa o le mong.

Re u mema hore u etele GitHub morero: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Sengoliloeng se ngotsoe ke Alexander Nashivan, mohlahisi ea phahameng Litlhaloso tsa likarolo tsa Clever Solution Inc.

Source: www.habr.com

Eketsa ka tlhaloso