Pej xeem xeem: Kev daws rau kev ceev ntiag tug thiab Scalability ntawm Ethereum

Blockchain yog ib lub tshuab tshiab uas cog lus tias yuav txhim kho ntau qhov chaw ntawm tib neeg lub neej. Nws hloov cov txheej txheem tiag tiag thiab cov khoom lag luam mus rau hauv qhov chaw digital, ua kom ceev thiab kev ntseeg siab ntawm kev lag luam nyiaj txiag, txo lawv cov nqi, thiab tseem tso cai rau koj los tsim DAPP cov ntawv thov niaj hnub siv cov ntawv cog lus ntse hauv kev sib koom tes.

Muab ntau cov txiaj ntsig thiab kev siv ntau yam ntawm blockchain, nws yuav zoo li xav tsis thoob tias qhov kev cog lus thev naus laus zis no tseem tsis tau ua nws txoj hauv kev rau txhua qhov kev lag luam. Qhov teeb meem yog tias niaj hnub decentralized blockchains tsis muaj scalability. Ethereum txheej txheem txog 20 kev lag luam ib ob, uas tsis txaus los ua kom tau raws li qhov xav tau ntawm kev lag luam niaj hnub no. Nyob rau tib lub sijhawm, cov tuam txhab uas siv blockchain thev naus laus zis tsis kam tso tseg Ethereum vim nws qib siab tiv thaiv kev nyiag nkas thiab network tsis ua haujlwm.

Txhawm rau kom ntseeg tau tias kev faib tawm, kev nyab xeeb thiab kev ua kom muaj peev xwm nyob hauv blockchain, yog li daws qhov Scalability Trilemma, pab pawg txhim kho Muaj peev xwm tsim Plasma Cash, cov saw hlau uas muaj cov ntawv cog lus ntse thiab kev sib koom tes ntiag tug raws li Node.js, uas hloov nws lub xeev mus rau hauv paus saw (Ethereum).

Pej xeem xeem: Kev daws rau kev ceev ntiag tug thiab Scalability ntawm Ethereum

Cov txheej txheem tseem ceeb hauv Plasma Nyiaj

1. Tus neeg siv hu rau daim ntawv cog lus ntse ua haujlwm 'pab nyiaj', dhau mus rau nws tus nqi ETH uas nws xav tso rau hauv Plasma Cash token. Qhov kev cog lus ntse ua haujlwm tsim lub token thiab tsim ib qho kev tshwm sim txog nws.

2. Plasma Cash nodes tau sau npe rau cov ntawv cog lus ntse tau txais ib qho kev tshwm sim txog kev tsim cov nyiaj tso nyiaj thiab ntxiv kev sib pauv txog kev tsim lub token rau lub pas dej.

3. Ib ntus, tshwj xeeb Plasma Cash nodes coj tag nrho cov kev lag luam los ntawm lub pas dej ua ke (txog 1 lab) thiab tsim ib qho thaiv los ntawm lawv, suav cov ntoo Merkle thiab, raws li, tus hash. Qhov thaiv no raug xa mus rau lwm cov nodes rau kev txheeb xyuas. Cov nodes tshawb xyuas seb Merkle hash puas siv tau thiab seb cov kev lag luam puas siv tau (piv txwv li, seb tus xa ntawm lub token yog nws tus tswv). Tom qab tshawb xyuas qhov thaiv, cov node hu rau 'submitBlock' ua haujlwm ntawm daim ntawv cog lus ntse, uas txuag tus lej thaiv thiab Merkle hash mus rau cov saw hlau. Daim ntawv cog lus ntse tsim ib qho kev tshwm sim uas qhia txog qhov ua tiav ntawm qhov thaiv. Kev lag luam raug tshem tawm ntawm lub pas dej.

4. Cov nodes uas tau txais qhov kev tshwm sim thaiv kev xa tawm pib siv cov kev hloov pauv uas tau ntxiv rau qhov thaiv.

5. Qee lub sij hawm, tus tswv (lossis tsis yog tus tswv) ntawm lub token xav thim nws ntawm Plasma Nyiaj. Txhawm rau ua qhov no, nws hu rau 'startExit' ua haujlwm, dhau mus rau nws cov ntaub ntawv hais txog 2 qhov kev hloov pauv kawg ntawm lub token, uas paub meej tias nws yog tus tswv ntawm lub token. Daim ntawv cog lus ntse, siv Merkle hash, tshawb xyuas qhov muaj kev hloov pauv hauv cov blocks thiab xa cov token rau kev rho tawm, uas yuav tshwm sim hauv ob lub lis piam.

6. Yog tias qhov kev tshem tawm token tau tshwm sim nrog kev ua txhaum cai (tus token tau siv tom qab qhov kev tshem tawm tau pib lossis lub token twb yog lwm tus ua ntej rho tawm), tus tswv ntawm lub token tuaj yeem thim qhov kev tshem tawm hauv ob lub lis piam.

Pej xeem xeem: Kev daws rau kev ceev ntiag tug thiab Scalability ntawm Ethereum

Kev ceev ntiag tug yog ua tiav ob txoj hauv kev

1. Lub hauv paus saw tsis paub dab tsi txog kev hloov pauv uas tau tsim thiab xa mus rau hauv cov menyuam saw. Cov ntaub ntawv hais txog leej twg tso thiab rho tawm ETH los ntawm Plasma Cash tseem yog pej xeem.

2. Cov saw me nyuam tso cai rau kev hloov pauv tsis qhia npe siv zk-SNARKs.

Technology pawg

  • NodeJS
  • Redis
  • etherium
  • Av

Kev Ntsuam Xyuas

Thaum tsim Plasma Nyiaj Ntsuab, peb tau sim qhov ceev ntawm lub kaw lus thiab tau txais cov txiaj ntsig hauv qab no:

  • mus txog 35 kev hloov pauv ib ob yog ntxiv rau lub pas dej;
  • mus txog 1 kev lag luam tuaj yeem khaws cia hauv ib qho thaiv.

Kev ntsuam xyuas tau ua tiav ntawm 3 servers hauv qab no:

1. Intel Core i7-6700 Quad-Core Skylake incl. NVMe SSD - 512 GB, 64 GB DDR4 RAM
3 validating Plasma Cash nodes tau tsa.

2. AMD Ryzen 7 1700X Octa-Core "Summit Ridge" (Zen), SATA SSD - 500 GB, 64 GB DDR4 RAM
Ropsten testnet ETH node tau tsa.
3 validating Plasma Cash nodes tau tsa.

3. Intel Core i9-9900K Octa-Core incl. NVMe SSD - 1 TB, 64 GB DDR4 RAM
1 Plasma Cash xa node tau tsa.
3 validating Plasma Cash nodes tau tsa.
Ib qho kev sim tau tsim los ntxiv kev lag luam rau Plasma Cash network.

Tag nrho: 10 Plasma Cash nodes hauv ib lub network ntiag tug.

Test 1

Muaj qhov txwv ntawm 1 lab kev lag luam ib qho thaiv. Yog li ntawd, 1 lab kev lag luam poob rau hauv 2 blocks (vim tias lub kaw lus tswj hwm los ua ib feem ntawm kev hloov pauv thiab xa tawm thaum lawv raug xa mus).


Thawj lub xeev: qhov kawg thaiv #7; 1 lab kev lag luam thiab cov tokens tau khaws cia hauv cov ntaub ntawv.

00:00 - pib ntawm kev hloov pauv tiam ntawv
01: 37 - 1 lab kev hloov pauv tau tsim thiab xa mus rau ntawm qhov pib
01: 46 - xa node coj 240k kev lag luam los ntawm lub pas dej thiab cov ntawv thaiv #8. Peb kuj pom tias 320k kev hloov pauv tau ntxiv rau hauv pas dej ua ke hauv 10 vib nas this
01: 58 - thaiv #8 tau kos npe thiab xa mus rau kev lees paub
02: 03 - thaiv #8 tau lees paub thiab 'submitBlock' ua haujlwm ntawm daim ntawv cog lus ntse raug hu nrog Merkle hash thiab thaiv tus lej
02:10 - demo tsab ntawv tiav ua haujlwm, uas xa 1 lab kev hloov pauv hauv 32 vib nas this
02: 33 - nodes pib tau txais cov ntaub ntawv uas thaiv #8 tau ntxiv rau hauv cov saw hlau, thiab pib ua 240k kev lag luam
02: 40 - 240k kev lag luam raug tshem tawm ntawm lub pas dej, uas twb tau nyob hauv thaiv # 8
02: 56 - xa cov node coj qhov seem 760k kev lag luam los ntawm lub pas dej thiab pib xam Merkle hash thiab kos npe thaiv # 9
03: 20 - tag nrho cov nodes muaj 1 lab 240k kev pauv thiab tokens
03: 35 - thaiv # 9 tau kos npe thiab xa mus rau kev lees paub rau lwm cov nodes
03:41 - network yuam kev tshwm sim
04:40 - tos thaiv #9 validation tau tas sij hawm
04: 54 - xa cov node coj qhov seem 760k kev lag luam los ntawm lub pas dej thiab pib xam Merkle hash thiab kos npe thaiv # 9
05: 32 - thaiv # 9 tau kos npe thiab xa mus rau kev lees paub rau lwm cov nodes
05:53 - block #9 yog validated thiab xa mus rau hauv paus saw
06:17 - nodes pib tau txais cov ntaub ntawv uas thaiv #9 tau ntxiv rau hauv cov saw hlau thiab pib ua 760k kev lag luam
06:47 - lub pas dej tauv tshem tawm ntawm kev lag luam uas nyob hauv thaiv # 9
09:06 - tag nrho cov nodes muaj 2 lab kev pauv thiab tokens

Test 2

Muaj qhov txwv ntawm 350k rau ib qho. Yog li ntawd, peb muaj 3 blocks.


Thawj lub xeev: qhov kawg thaiv #9; 2 lab kev lag luam thiab tokens khaws cia hauv cov ntaub ntawv

00:00 - kev hloov pauv tiam ntawv tau raug tso tawm lawm
00: 44 - 1 lab kev hloov pauv tau tsim thiab xa mus rau ntawm qhov pib
00: 56 - xa node coj 320k kev lag luam los ntawm lub pas dej thiab cov ntawv thaiv #10. Peb kuj pom tias 320k kev hloov pauv tau ntxiv rau hauv pas dej ua ke hauv 10 vib nas this
01: 12 - thaiv # 10 tau kos npe thiab xa mus rau lwm qhov rau kev siv tau
01:18 - demo tsab ntawv tiav ua haujlwm, uas xa 1 lab kev hloov pauv hauv 34 vib nas this
01:20 - block #10 yog validated thiab xa mus rau hauv paus saw
01: 51 - tag nrho cov nodes tau txais cov ntaub ntawv los ntawm cov hauv paus saw uas thaiv #10 tau ntxiv thiab pib siv 320k kev lag luam
02:01 - lub pas dej tauv rau 320k kev lag luam uas tau ntxiv rau thaiv #10
02:15 - xa node coj 350k kev lag luam los ntawm lub pas dej thiab cov ntawv thaiv #11
02: 34 - thaiv # 11 tau kos npe thiab xa mus rau lwm qhov rau kev siv tau
02: 51 - block #11 yog validated thiab xa mus rau hauv paus saw
02:55 - qhov kawg ntawm kev ua tiav kev lag luam los ntawm thaiv #10
10:59 - kev lag luam nrog kev xa tawm ntawm thaiv # 9 tau siv sijhawm ntev heev hauv cov saw hlau, tab sis nws tau ua tiav thiab tag nrho cov nodes tau txais cov ntaub ntawv hais txog nws thiab pib ua 350k kev lag luam
11:05 - lub pas dej tauv rau 320k kev lag luam uas tau ntxiv rau thaiv #11
12:10 - tag nrho cov nodes muaj 1 lab 670k pauv thiab tokens
12:17 - xa cov node coj 330k kev lag luam los ntawm lub pas dej thiab cov ntawv thaiv # 12
12: 32 - thaiv # 12 tau kos npe thiab xa mus rau lwm qhov rau kev siv tau
12:39 - block #12 yog validated thiab xa mus rau hauv paus saw
13:44 - tag nrho cov nodes tau txais cov ntaub ntawv los ntawm cov hauv paus saw uas thaiv #12 tau ntxiv thiab pib siv 330k kev lag luam
14:50 - tag nrho cov nodes muaj 2 lab kev pauv thiab tokens

Test 3

Hauv thawj thiab thib ob servers, ib qho kev lees paub tau raug hloov los ntawm qhov xa tawm.


Thawj lub xeev: qhov kawg thaiv #84; 0 kev hloov pauv thiab tokens khaws cia hauv cov ntaub ntawv

00:00 - 3 scripts tau launched uas tsim thiab xa 1 lab muas txhua
01: 38 - 1 lab kev hloov pauv tau tsim thiab xa mus xa cov node # 3 tau pib
01: 50 - xa node #3 coj 330k kev lag luam los ntawm lub pas dej thiab cov ntawv thaiv #85 (f21). Peb kuj pom tias 350k kev hloov pauv tau ntxiv rau hauv pas dej ua ke hauv 10 vib nas this
01: 53 - 1 lab kev hloov pauv tau tsim thiab xa mus xa cov node # 1 tau pib
01: 50 - xa node #3 coj 330k kev lag luam los ntawm lub pas dej thiab cov ntawv thaiv #85 (f21). Peb kuj pom tias 350k kev hloov pauv tau ntxiv rau hauv pas dej ua ke hauv 10 vib nas this
02: 01 - xa node #1 coj 250k kev lag luam los ntawm lub pas dej thiab cov ntawv thaiv #85 (65e)
02: 06 - thaiv #85 (f21) tau kos npe thiab xa mus rau lwm qhov rau kev siv tau
02: 08 - demo tsab ntawv ntawm server # 3, uas xa 1 lab kev hloov pauv hauv 30 vib nas this, ua haujlwm tiav
02:14 - thaiv #85 (f21) tau siv tau thiab xa mus rau cov saw hauv paus
02: 19 - thaiv #85 (65e) tau kos npe thiab xa mus rau lwm qhov rau kev siv tau
02: 22 - 1 lab kev hloov pauv tau tsim thiab xa mus xa cov node # 2 tau pib
02:27 β€” thaiv #85 (65e) validated thiab xa mus rau hauv paus saw
02:29 - xa node #2 coj 111855 kev hloov pauv ntawm lub pas dej thiab cov ntawv thaiv #85 (256).
02: 36 - thaiv #85 (256) tau kos npe thiab xa mus rau lwm qhov rau kev siv tau
02: 36 - demo tsab ntawv ntawm server # 1, uas xa 1 lab kev hloov pauv hauv 42.5 vib nas this, ua haujlwm tiav
02:38 - thaiv #85 (256) tau raug lees paub thiab xa mus rau cov saw hauv paus
03: 08 - server # 2 tsab ntawv ua haujlwm tiav, uas xa 1 lab kev hloov pauv hauv 47 vib nas this
03: 38 - tag nrho cov nodes tau txais cov ntaub ntawv los ntawm cov hauv paus saw uas thaiv # 85 (f21), # 86 (65e), # 87 (256) tau ntxiv thiab pib siv 330k, 250k, 111855 kev lag luam
03: 49 - lub pas dej tau raug tshem tawm ntawm 330k, 250k, 111855 kev hloov pauv uas tau ntxiv rau cov blocks #85 (f21), #86(65e), #87(256)
03: 59 - xa node #1 coj 888145 kev lag luam los ntawm lub pas dej thiab cov ntawv thaiv #88 (214), xa ntawm #2 coj 750k kev lag luam los ntawm lub pas dej thiab cov ntawv thaiv # 88 (50a), xa ntawm #3 tau 670k kev lag luam los ntawm lub pas dej thiab cov ntawv thaiv #88 (d3b)
04: 44 - thaiv #88 (d3b) tau kos npe thiab xa mus rau lwm qhov rau kev siv tau
04: 58 - thaiv #88 (214) tau kos npe thiab xa mus rau lwm qhov rau kev siv tau
05:11 - thaiv #88 (50a) tau kos npe thiab xa mus rau lwm qhov rau kev siv tau
05:11 - thaiv #85 (d3b) tau siv tau thiab xa mus rau cov saw hauv paus
05:36 - thaiv #85 (214) tau raug lees paub thiab xa mus rau cov saw hauv paus
05: 43 - tag nrho cov nodes tau txais cov ntaub ntawv los ntawm cov hauv paus saw uas thaiv #88 (d3b), # 89 (214) tau ntxiv thiab tab tom pib siv 670k, 750k kev lag luam
06: 50 - vim muaj kev sib txuas lus tsis ua haujlwm, thaiv #85 (50a) tsis raug cai
06:55 - xa node #2 coj 888145 kev hloov pauv ntawm lub pas dej thiab cov ntawv thaiv #90 (50a)
08:14 - thaiv #90 (50a) tau kos npe thiab xa mus rau lwm qhov rau kev siv tau
09: 04 - block #90 (50a) tau siv tau thiab xa mus rau cov saw hauv paus
11:23 - tag nrho cov nodes tau txais cov ntaub ntawv los ntawm cov hauv paus saw uas thaiv #90 (50a) tau ntxiv, thiab pib siv 888145 kev hloov pauv. Tib lub sijhawm, tus neeg rau zaub mov # 3 twb tau thov kev lag luam los ntawm cov blocks # 88 (d3b), # 89 (214)
12:11 - Tag nrho cov pas dej yog khoob
13:41 β€” tag nrho cov nodes ntawm server #3 muaj 3 lab muas thiab tokens
14:35 β€” tag nrho cov nodes ntawm server #1 muaj 3 lab muas thiab tokens
19:24 β€” tag nrho cov nodes ntawm server #2 muaj 3 lab muas thiab tokens

Cov Teeb Meem

Thaum lub sij hawm txhim kho Plasma Nyiaj Ntsuab, peb ntsib cov teeb meem hauv qab no, uas peb maj mam daws thiab daws tau:

1. Kev tsis sib haum xeeb hauv kev sib cuam tshuam ntawm ntau yam kev ua haujlwm. Piv txwv li, kev ua haujlwm ntawm kev ntxiv kev lag luam rau lub pas dej ua ke thaiv kev ua haujlwm ntawm kev xa thiab kev lees paub cov blocks, thiab rov ua dua, uas ua rau poob qis.

2. Nws tsis tau meej tam sim ntawd yuav xa ntau npaum li cas ntawm kev hloov pauv thaum txo cov nqi hloov pauv cov ntaub ntawv.

3. Nws tsis paub meej tias yuav khaws cov ntaub ntawv li cas thiab qhov twg thiaj li ua tiav cov txiaj ntsig siab.

4. Nws tsis tau paub meej tias yuav ua li cas npaj lub network ntawm cov nodes, txij li qhov loj ntawm qhov thaiv nrog 1 lab kev lag luam yuav siv li 100 MB.

5. Ua haujlwm nyob rau hauv ib leeg-threaded hom lov cov kev sib txuas ntawm cov nodes thaum xam ntev tshwm sim (piv txwv li, tsim ib tsob ntoo Merkle thiab xam nws hash).

Peb ua li cas nrog tag nrho cov no?

Thawj version ntawm Plasma Cash node yog ib hom kev sib txuas uas tuaj yeem ua txhua yam tib lub sijhawm: lees txais kev hloov pauv, xa thiab siv tau cov blocks, thiab muab API rau kev nkag mus rau cov ntaub ntawv. Txij li NodeJS yog ib txwm nyob ib leeg-xov, qhov hnyav Merkle tsob ntoo suav ua haujlwm thaiv qhov ntxiv kev ua lag luam. Peb pom ob txoj hauv kev los daws qhov teeb meem no:

1. Tua tawm ntau cov txheej txheem NodeJS, txhua qhov ua haujlwm tshwj xeeb.

2. Siv worker_threads thiab txav mus rau qhov ua tiav ntawm ib feem ntawm cov lej rau hauv xov.

Raws li qhov tshwm sim, peb siv ob qho kev xaiv nyob rau tib lub sijhawm: peb qhov laj thawj muab faib ib lub rau hauv 3 qhov chaw uas tuaj yeem ua haujlwm sib cais, tab sis tib lub sijhawm synchronously.

1. Xa cov node, uas lees txais kev hloov pauv hauv lub pas dej thiab tsim cov blocks.

2. Lub validating node uas kuaj xyuas qhov siv tau ntawm cov nodes.

3. API node - muab API rau kev nkag mus rau cov ntaub ntawv.

Hauv qhov no, koj tuaj yeem txuas mus rau txhua qhov ntawm lub qhov (socket) unix siv cli.

Peb tau txav kev ua haujlwm hnyav, xws li suav cov ntoo Merkle, rau hauv ib txoj xov sib cais.

Yog li, peb tau ua tiav ib txwm ua haujlwm ntawm txhua qhov Plasma Cash ua haujlwm ib txhij thiab tsis muaj kev ua haujlwm.

Thaum lub kaw lus ua haujlwm tau zoo, peb pib sim qhov nrawm thiab, hmoov tsis, tau txais cov txiaj ntsig tsis txaus siab: 5 kev hloov pauv ib ob thiab txog 000 kev lag luam ib ntus. Kuv yuav tsum txiav txim siab seb qhov twg yog siv tsis raug.

Pib nrog, peb pib sim cov txheej txheem ntawm kev sib txuas lus nrog Plasma Cash kom paub txog qhov muaj peev xwm siab tshaj plaws ntawm qhov system. Peb tau sau ua ntej tias Plasma Cash node muab lub qhov (socket) unix interface. Thaum xub thawj nws yog cov ntawv nyeem. json cov khoom raug xa mus siv 'JSON.parse()' thiab 'JSON.stringify()'.

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

Peb ntsuas qhov hloov ceev ntawm cov khoom no thiab pom ~ 130k ib ob. Peb sim hloov cov qauv kev ua haujlwm rau kev ua haujlwm nrog json, tab sis kev ua haujlwm tsis zoo. Lub cav V8 yuav tsum tau ua kom zoo rau cov haujlwm no.

Peb tau ua haujlwm nrog kev lag luam, tokens, thiab thaiv los ntawm cov chav kawm. Thaum tsim cov chav kawm zoo li no, qhov kev ua tau zoo poob los ntawm 2 zaug, uas qhia tias OOP tsis haum rau peb. Kuv yuav tsum rov sau txhua yam mus rau txoj kev ua haujlwm zoo.

Kev sau ntawv hauv database

Thaum pib, Redis tau xaiv rau cov ntaub ntawv khaws cia ua ib qho kev daws teeb meem zoo tshaj plaws uas ua tau raws li peb cov kev xav tau: qhov tseem ceeb-nqi khaws cia, ua haujlwm nrog cov lus hash, teeb tsa. Peb tau pib redis-benchmark thiab tau txais ~ 80k kev ua haujlwm ib ob hauv 1 hom kev xa dej.

Rau kev ua haujlwm siab, peb kho Redis zoo dua:

  • Lub unix qhov (socket) txuas tau tsim.
  • Peb ua tsis taus kev txuag lub xeev rau disk (rau kev ntseeg siab, koj tuaj yeem teeb tsa ib lub replica thiab txuag rau disk hauv ib qho Redis cais).

Hauv Redis, lub pas dej ua ke yog lub rooj hash vim tias peb yuav tsum tuaj yeem khaws tag nrho cov kev lag luam hauv ib qho lus nug thiab tshem tawm cov kev hloov pauv ib los ntawm ib qho. Peb sim siv cov npe tsis tu ncua, tab sis nws qeeb dua thaum tshem tag nrho cov npe.

Thaum siv tus qauv NodeJS, Redis cov tsev qiv ntawv tau ua tiav ntawm 18k kev lag luam ib ob. Qhov ceev poob 9 zaug.

Txij li thaum lub ntsuas ntsuas tau qhia peb tias muaj peev xwm ua tau kom meej meej 5 npaug ntau dua, peb pib ua kom zoo dua. Peb hloov lub tsev qiv ntawv rau ioredis thiab tau txais kev ua tau zoo ntawm 25k ib ob. Peb ntxiv kev hloov pauv ib los ntawm ib qho siv 'hset' hais kom ua. Yog li peb tau tsim ntau cov lus nug hauv Redis. Lub tswv yim tau tshwm sim los ua ke kev lag luam rau hauv cov khoom siv thiab xa lawv nrog ib qho lus txib 'hmset'. Qhov tshwm sim yog 32k ib ob.

Rau ob peb lub laj thawj, uas peb yuav piav qhia hauv qab no, peb ua haujlwm nrog cov ntaub ntawv siv 'Buffer' thiab, raws li nws hloov tawm, yog tias koj hloov nws mus rau cov ntawv nyeem (`buffer.toString('hex')`) ua ntej sau, koj tuaj yeem tau txais ntxiv kev ua tau zoo. Yog li, qhov ceev tau nce mus rau 35k ib ob. Lub sijhawm no, peb txiav txim siab ncua kev ua kom zoo ntxiv.

Peb yuav tsum hloov mus rau binary raws tu qauv vim:

1. Lub kaw lus feem ntau suav hashes, kos npe, thiab lwm yam, thiab rau qhov no nws xav tau cov ntaub ntawv hauv 'Buffer.

2. Thaum xa ntawm cov kev pabcuam, cov ntaub ntawv binary hnyav dua cov ntawv nyeem. Piv txwv li, thaum xa ib qho thaiv nrog 1 lab kev lag luam, cov ntaub ntawv hauv cov ntawv tuaj yeem siv ntau dua 300 megabytes.

3. Kev hloov cov ntaub ntawv tsis tu ncua cuam tshuam rau kev ua haujlwm.

Yog li ntawd, peb tau ua lub hauv paus peb tus kheej binary raws tu qauv rau khaws cia thiab xa cov ntaub ntawv, tsim los ntawm lub hauv paus ntawm lub tsev qiv ntawv zoo 'binary-data'.

Yog li ntawd, peb tau txais cov ntaub ntawv hauv qab no:

-Kev lag luam

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

- Token

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

- Thaiv

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

Nrog rau cov lus txib ib txwm 'BD.encode(block, Protocol).slice();' thiab 'BD.decode(buffer, raws tu qauv)' peb hloov cov ntaub ntawv rau hauv 'Buffer' rau txuag hauv Redis lossis xa mus rau lwm qhov ntawm thiab rov qab cov ntaub ntawv. cov ntaub ntawv rov qab.

Peb kuj muaj 2 binary raws tu qauv rau kev hloov cov ntaub ntawv ntawm cov kev pab cuam:

- Cov txheej txheem rau kev cuam tshuam nrog Plasma Node ntawm lub qhov (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)
  }
  ```

qhov twg:

  • 'type' - qhov kev txiav txim yuav tsum tau ua, piv txwv li, 1 β€” sendTransaction, 2 β€” getTransaction;
  • 'payload' - cov ntaub ntawv uas yuav tsum tau kis mus rau qhov tsim nyog muaj nuj nqi;
  • 'messageId' - message id kom cov lus teb tuaj yeem txheeb xyuas.

- Cov txheej txheem rau kev sib cuam tshuam ntawm cov 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)
  }
  ```

qhov twg:

  • 'code' β€” lus code, piv txwv li 6 β€” PREPARE_NEW_BLOCK, 7 β€” BLOCK_VALID, 8 β€” BLOCK_COMMIT;
  • 'versionProtocol' - raws tu qauv version, txij li cov nodes nrog txawv versions yuav raug tsa nyob rau hauv lub network thiab lawv muaj peev xwm ua hauj lwm txawv;
  • 'qib' - tus lej xov tooj;
  • ' suavChunk' ΠΈ 'khoom Number' tsim nyog rau kev faib cov lus loj;
  • 'ntev' ΠΈ 'payload' ntev thiab cov ntaub ntawv nws tus kheej.

Txij li thaum peb tau sau cov ntaub ntawv ua ntej, qhov kawg system tau nrawm dua li Ethereum lub tsev qiv ntawv 'rlp'. Hmoov tsis zoo, peb tseem tsis tau tuaj yeem tsis lees paub, vim tias nws yuav tsum ua kom tiav daim ntawv cog lus ntse, uas peb npaj yuav ua yav tom ntej.

Yog tias peb tswj kom ncav cuag qhov nrawm 35 000 muas ib ob, peb kuj yuav tsum tau ua lawv nyob rau hauv lub optimum sij hawm. Txij li lub sijhawm kwv yees tsim thaiv yuav siv sijhawm 30 vib nas this, peb yuav tsum suav nrog hauv qhov thaiv 1 000 000 kev lag luam, uas txhais tau tias xa ntau dua 100 MB cov ntaub ntawv.

Thaum pib, peb siv 'ethereumjs-devp2p' lub tsev qiv ntawv los sib txuas lus ntawm cov nodes, tab sis nws tsis tuaj yeem lis cov ntaub ntawv ntau heev. Yog li ntawd, peb siv 'ws' lub tsev qiv ntawv thiab teeb tsa xa cov ntaub ntawv binary ntawm websocket. Tau kawg, peb kuj tau ntsib teeb meem thaum xa cov ntaub ntawv loj, tab sis peb muab faib ua chunks thiab tam sim no cov teeb meem no ploj mus.

Kuj tsim ib tsob ntoo Merkle thiab suav cov hash 1 000 000 kev lag luam xav tau txog 10 vib nas this ntawm nruam xam. Lub sijhawm no, kev sib txuas nrog tag nrho cov nodes tswj kom tawg. Nws tau txiav txim siab los hloov qhov kev suav no mus rau ib qho kev sib cais.

Cov lus xaus:

Qhov tseeb, peb qhov kev tshawb pom tsis yog tshiab, tab sis rau qee qhov laj thawj ntau tus kws tshaj lij tsis nco qab txog lawv thaum txhim kho.

  • Siv Functional Programming es tsis txhob Object-Oriented Programming txhim kho cov khoom tsim tau.
  • Lub monolith yog qhov phem tshaj qhov kev pabcuam architecture rau qhov tsim tau NodeJS system.
  • Siv 'worker_threads' rau kev suav hnyav txhim kho lub cev ua haujlwm, tshwj xeeb tshaj yog thaum ua haujlwm nrog i / o.
  • unix qhov (socket) ruaj khov thiab nrawm dua li http thov.
  • Yog tias koj xav tau kom ceev cov ntaub ntawv loj hauv lub network, nws yog qhov zoo dua los siv websockets thiab xa cov ntaub ntawv binary, muab faib ua cov chunks, uas tuaj yeem xa mus yog tias lawv tsis tuaj txog, thiab tom qab ntawd muab tso rau hauv ib qho lus.

Peb caw koj tuaj xyuas GitHub qhov project: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Tsab ntawv tau sau los ntawm Alexander Nashivan, senior developer Clever Solution Inc.

Tau qhov twg los: www.hab.com

Ntxiv ib saib