Publica Test: A Solutio pro Secreto et Scalability in Ethereum

Blockchain technicae artis novatio est quae promittit multas regiones vitae humanae emendare. Processus reales et productos in spatium digitalis transfert, celeritatem et constantiam negotiorum nummariorum praestat, eorum sumptus minuit, et etiam permittit ut recentes applicationes DAPP utentes contractus in decentralized retiaculas callidos.

Cum multa beneficia et varia impedimenti applicationes, mirum videri potest hanc promissionem technologiam nondum in omnem industriam suam penetrasse. Problema est quod moderni impedimenta decentralized scalability carent. Processus ethereum circiter XX negotiorum secundo, qui non sufficit ad necessitates occurrendas in negotiis dynamicis hodiernae. Eodem tempore, societates technologiae technologiae utentes timide sunt Deserere Ethereum propter eminentiam tutelae ne defectibus caesis et retis.

Ut decentralizationem, securitatem et scalability in clausura, sic solvendo Scalability Trilemma, quadrigis evolutionis. Opporty Plasma Cash creavit, catena subsidiaria constans contractu acri et retis privatis in Node.js fundata, quae periodice statum suum ad catenam radicis transfert (Ethereum).

Publica Test: A Solutio pro Secreto et Scalability in Ethereum

Processus key in Plasma Cash

1. Usor vocat munus contractum captiosus `deposit', in eam transiens moles ETH quam in tessera Cash in Plasma deponere vult. Munus captiosus contractus signum creat et rem de eo generat.

2. Plasma Nummi nodi subscripti ad res captiosas contractus eventus accipimus eventum de deposito creando et transactionem addendo de signo ad piscinam creando.

3. Periodice, speciales Nodi Nummi Plasma omnes transactiones e stagno (usque ad 1 decies centena) accipiunt et truncum ex eis faciunt, arborem Merkle computa et, proinde Nullam. Hic clausus mittitur aliis nodis ad verificationem. Nodi inspicias num Merkle Nullam validus sit et an transactiones validae sint (exempli gratia, an missor tesserae dominus eius est). Post examinans clausuram, nodi munus `submitBlock` contractus captiosus vocat, qui numerum stipitem servat et ad oram catenae detrahet Merkle. Dolor contractus rem generat significantes prospere addito stipitem. Trans- ponuntur a stagno.

4. Nodi, qui recipiunt impedimentum submissionis eventus, incipiunt applicare transactions quae ad scandalum additae sunt.

5. In aliquo loco dominus (vel non-dominus) signum a Plasma Cash eam retrahere vult. Ad hoc faciendum, vocat munus `startExit', quod informationem de rebus ultimis 2 negotiorum in eo transiens in signo, quod se esse dominum tesseram confirmant. Dolor contractus, utens Merkle Nullam, praesentiam transactionum in caudices coercet et signum detractionis mittit, quod in duabus septimanis fiet.

6. Si signum recessionis operationis cum violationibus facta est (signum peracto post recessum processum incepit vel signum iam alienum erat ante recessum), dominus rei refutare potest recessum intra duas septimanas.

Publica Test: A Solutio pro Secreto et Scalability in Ethereum

Secretum duobus modis fit

1. Radix catena nihil scit de rebus quae generantur et transmittuntur intra puerum catenam. Informationes de quis deposuit et recessit ETH ex Plasma Cash publici reliquiae.

2. Puer catena permittit transactions anonyma utens zk-SNARKs.

Technology acervus

  • NodeJS
  • redis
  • etherium
  • Sild

temptationis

Dum Plasma Cash elaborat, celeritatem systematis probavimus et sequentes eventus consecuti sumus:

  • ad 35 transactiones secundae piscinae adduntur;
  • usque ad 1 transactions in stipitem condi possunt.

Probat peractae sunt in sequentibus 3 servientibus:

1. Intel Core i7-6700 Quad-Core Skylake incl. NVMe SSD – 512 GB, 64 GB DDR4 RAM
3 Plasma nummorum nodi in certis quibusdam suscitatis.

2. AMD Ryzen 7 1700X Octa-Core "Summit Ridge" (Zen), SATA SSD – 500 GB, 64 GB DDR4 RAM
Ropsten testnet ETH node evectus est.
3 Plasma nummorum nodis convalidantibus excitatae sunt.

3. Intel Core i9-9900K Octa-Core incl. NVMe SSD – 1 TB, 64 GB DDR4 RAM
1 Plasma Cash nodi submissio evectus est.
3 Plasma nummorum nodis convalidantibus excitatae sunt.
Testa deductae sunt ut res ad Plasma Cash retis add.

summa 10 Plasma Nummi nodi in retis privatis.

Test 1

Terminus 1 decies centena millia transactionum per scandalum est. Ideo 1 decies centena milia negotiorum in 2 caudices cadunt (quia ratio procurat ut partem rerum gerat et dum mittuntur subiciat).


Initialis status: ultimus clausus #7; 1 decies centena milia transactionum et signa in datorum reposita sunt.

00:00 - initium transactionis generation scriptum
01:37 - 1 decies centena milia rerum creatarum sunt et ad nodo mittendo inceperunt
01:46 β€” submittere nodes transactiones 240k e lacu et formarum clausurarum #8 suscepit. Videmus etiam quod 320k transactions additae sunt piscinae in 10 secundis
01:58 - obstructionum # VIII signatum et misit ad sanationem
02:03 - scandalum #8 convalescit et munus `submitBlock` doloris contractus appellatur cum numerus Merkle Nullam et scandalum
02:10 - demo scriptorum perfecti laboris, qui 1 decies centena millia transactions in 32 secundis misit
02:33 - Nodi informari coeperunt quod clausus #8 catenae radicis apposita erat, et negotia 240k conficere coepit.
02:40 - 240k negotiis e stagno remoti sunt, quae iam in scandalo #8 . sunt
02:56 - submittere node reliquas res e gurgite 760k cepit et computare coepit Nullam Merkle et subscribens obstructionum # IX
03:20 - omnes nodos continet I decies centena 1k transactions et signa
03:35 - scandalum # IX signatur et misit ad sanationem ad alias nodos
03:41 - retis error occurrit
04:40 - expectantes obstructionum # IX sanatio opportuno
04:54 - submittere node reliquas res e gurgite 760k cepit et computare coepit Nullam Merkle et subscribens obstructionum # IX
05:32 - scandalum # IX signatur et misit ad sanationem ad alias nodos
05:53 - scandalum convalescit #9 et ad catenam radicem mittitur
06:17 - Nodi informationes recipere coeperunt, quod clausus #9 catenae radicis apposita erat et res conficere coepit 760k
06:47 - stagnum purgavit transactions qui sunt in scandalum # IX "
09:06 - omnes lymphaticorum continet transactions et signa II decies

Test 2

Est modus 350k per scandalum. Quam ob rem nos 3 impedit.


Initialis status: ultimus clausus #9; II decies transactions et signa reponuntur in database

00:00 - transaction generation script iam deductae sunt
00:44 - 1 decies centena milia rerum creatarum sunt et ad nodo mittendo inceperunt
00:56 β€” submittere nodes transactiones 320k e lacu et formarum clausurarum #10 suscepit. Videmus etiam quod 320k transactions additae sunt piscinae in 10 secundis
01:12 - impedimentum #10 signatum est et ad alias nodos pro sanatione mittitur
01:18 - demo scriptorum perfecti laboris, qui 1 decies centena millia transactions in 34 secundis misit
01:20 - obstructionum # X convalescit et ad radicem torquem misit
01:51 - omnes nodi informationes acceperunt ex catena radicis quae clausurae #10 adiecta est et incipiunt adhibere 320k transactions
02:01 - piscinam purgavit pro 320k transactionibus quae additae sunt ad impedimentum #10
02:15 - submittere nodi tulit 350k transactions ex stagnum et formae angustos # XI "
02:34 - truncus # 11 signatur et mittitur ad alias nodos pro sanatione
02:51 - scandalum convalescit #11 et ad catenam radicem mittitur
02:55 - ultimum nodi perficitur transactions ab obstructionum # X "
10:59 - negotium cum submissione scandali #9 diutissime in cathena radicis sumpsit, sed completa est et omnes nodos nuntios de eo receperunt et 350k transactiones exercere coeperunt.
11:05 - piscinam purgavit pro 320k transactionibus quae additae sunt ad impedimentum #11
12:10 - omnes nodos continentes I decies centena 1k transactions et signa
12:17 - submittere nodi acceperunt 330k transactions e stagno et formae clausurae # 12
12:32 - truncus # 12 signatur et mittitur ad alias nodos pro sanatione
12:39 - obstructionum # X convalescit et ad radicem torquem misit
13:44 - Nodi omnes informationes acceperunt ex catena radicis quae truncus #12 adiecta est et incipiunt adhibere 330k transactions
14:50 - omnes lymphaticorum continet transactions et signa II decies

Test 3

In servientibus primo et secundo, unus nodi validing substitutus est per nodi submittentem.


Initialis status: ultimus clausus #84; 0 transactions et signa servata est in database

00:00 - 3 scriptae deductae sunt quae generant et mittent 1 decies centenis rebus singulis
01:38 - 1 decies centies res creatae sunt et mittendo submittere nodi # 3 coeperunt
01:50 β€” submit nodi #3 took 330k transactions from the stagno and forms block #85 (f21). Videmus etiam quod 350k transactiones adduntur piscinae in 10 secundis
01:53 - 1 decies centies res creatae sunt et mittendo submittere nodi # 1 coeperunt
01:50 β€” submit nodi #3 took 330k transactions from the stagno and forms block #85 (f21). Videmus etiam quod 350k transactiones adduntur piscinae in 10 secundis
02:01 - submittere nodi # I suscepit 1k transactions e stagno et formae angustos # 250 (85e)
02:06 - impedimentum #85 (f21) signatur et mittitur ad alias nodos ad sanationem
02:08 - demo scriptum servo #3, quod 1 decies centena millia transactions in 30 secundis misit, opus perfectum est
02:14 β€” scandalum # 85 (f21) convalescit et ad catenam radicis mittitur
02:19 - obsita #85 (65e) signatur et mittitur ad alias nodos ad sanationem
02:22 - 1 decies centies res creatae sunt et mittendo submittere nodi # 2 coeperunt
02:27 β€” scandalum # 85 (65e) convalescit et ad catenam radicis mittitur
02:29 β€” submit node #2 took 111855 transactions from the pool and forms block #85 (256).
02:36 - impedimentum # 85 (256) signatum est et aliis nodis ad sanationem mittitur
02:36 - demo scriptum servo #1, quod 1 decies centena millia transactions in 42.5 secundis misit, opus perfectum est
02:38 β€” scandalum # 85 (256) convalescit et ad catenam radicis mittitur
03:08 - server #2 scriptor operis perfecti, qui I decies centena millia transactions in 1 secundis misit
03:38 - omnes nodi informationes acceperunt ex catena radicis quae caudices #85 (f21), #86(65e), #87(256) adiectae sunt, ac adhibere coeperunt 330k, 250k, 111855 transactiones.
03:49 - stagnum purgatum in 330k, 250k, 111855 negotiis quae ad stipites adiectae sunt # 85 (f21), #86(65e), #87(256)
03:59 β€” submittere nodi # 1 cepit 888145 transactiones e stagno et formae clausurae #88 (214), submittere node #2 tulit transactiones e gurgite 750k et formas clausurae #88 (50a), submittere node #3 tulit 670k transactions e stagnum ac formae angustos # LXXXVIII (d88b)
04:44 - obstructionum # 88 (d3b) signatur et mittitur ad alias nodos pro sanatione
04:58 - impedimentum # 88 (214) signatum est et aliis nodis ad sanationem mittitur
05:11 - impedimentum #88 (50a) signatum et missum ad alias nodos pro sanatione
05:11 - scandalum # 85 (d3b) convalescit et ad radicem catenam misit
05:36 β€” scandalum # 85 (214) convalescit et ad catenam radicis mittitur
05:43 - omnes nodi informationes acceperunt e catena radicis quae caudices #88 (d3b), #89(214) additae sunt et initium adhibere 670k, 750k transactionum
06:50 - propter defectum communicationis, # LXXXV scandalum (85a) non convalescit
06:55 - submittere nodi # 2 888145 sumpsit transactions e stagno et formae angustos # 90 (50a)
08:14 - impedimentum #90 (50a) signatum et missum ad alias nodos pro sanatione
09:04 - scandalum # 90 (50a) convalescit et ad radicem catenam misit
11:23 - omnes nodi informationes acceperunt ex catena radicis quae clausurae #90 (50a) addita est et incipiunt transactiones adhibere 888145. Eodem tempore, servo #3, transactiones e caudices #88 (d3b), #89(214) iam applicaverunt.
12:11 Omnes paludes vacuae sunt
13:41 - omnes nodos servo # III continent III decies transactions et signa
14:35 - omnes nodos servo # III continent III decies transactions et signa
19:24 - omnes nodos servo # III continent III decies transactions et signa

Impedimenta

Per evolutionem Plasmatis Cash, sequentia problemata invenimus, quae paulatim solvimus ac solvemus:

1. Conflictatio in commercio variarum rationum functionum. Exempli gratia, munus negotiorum augendi ad piscinam opus obstruit submittendi et firmandi caudices, et vice versa, quae in celeritate guttae adducuntur.

2. Non statim liquet quomodo ingentem numerum rerum gerendarum mitteret, dum notitias translationis costs obscurat.

3. Non liquet quomodo et ubi copia notitiarum ad summos proventus consequendos.

4. Non liquet quomodo retis inter nodi ordinare, cum magnitudo scandali cum 1 decies centena millia negotiorum circiter 100 MB capiat.

5. Modus operandi in uno filo rumpit nexum inter nodos cum longi calculi occurrunt (exempli gratia, arborem Merkle aedificantem et de Nullam computantem).

Quomodo hoc totum agimus?

Prima versio nodi Plasma Cash erat genus quoddam iungendum quod omnia simul agere posset: transactiones accipere, caudices submittere et convalidare, et API data accessione praebere. Cum NodeJS est paternus-filamatus, gravis Merkle arboris calculi munus obstruxit, functionis transactionis addendi. Duas optiones solvendas vidimus hoc problema:

1. Plures processuum NodeJS deduc, quarum singulae proprias functiones exercet.

2. Threads utere et exsecutionem partis codicis in fila movere.

Quo fit, utrasque optiones simul usi sumus: logice unum nodi in 3 partes divisimus quae separatim operari possunt, sed simul synchrone.

1. Nodi submissio, quae transactions in piscinam accipit et caudices gignit.

2. Nodus invalidans validitatem nodis coercet.

3. API nodi - praebet API accessu data.

In hoc casu, nodi cuilibet nodo coniungere potes per cli nervum unix utens.

Operationes graves, ut Merkle, computando, in filum separatum movimus.

Ita normalem operationem universi Plasma Cash functionum simul et sine defectibus adepti sumus.

Postquam systema functionis erat, celeritatem probare coepimus et, proh dolor, eventus inconveniens accepit: 5 negotiorum secundorum et usque ad 000 transactionum per scandalum. Debebam figurari quod male effectum est.

Incipere coepimus experiri mechanismum communicationis cum Plasma Cash ad apicem facultatem systematis investigandi. Antea scripsimus Plasma nodi Cash nodi unix nervum praebet. Initio erat textus-fundatur. json objecta `JSON.parse()` et `JSON.stringify() missae sunt.

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

Nos celeritas rerum talium translationem metiri et in secundo per ~ 130k reperimus. Vexillum functionum cum json operando reponere conati sumus, sed effectus non emendavit. V8 machinam ad has operationes bene optimized.

Cum transactionibus, signis, et caudices per classes laboravimus. Cum tales classes creant, exsecutio per 2 tempora omissa est, quae indicat OOP nobis non esse idoneam. Mihi omnia rescribere ad accessum mere functionis.

Recordatio in database

Initio, Redis electa est ad notitias repositionis ut una ex uberrimis solutionibus quae nostris requisitis satisfaciunt: key-reponendi valoris, tabulae detrahendae operando, ponit. Propositum redis-inducti sumus per secundam operationes 80k ~ in modum 1 pipelining obtinuit.

Ad alta observantia, Redis suavius ​​Nos suaviter;

  • A nexu nervum unix constitutum est.
  • Nos debiles salva re publica ad disci (pro firmitate, imaginem erigere potes et nisi in Redis separato disco).

In Redis, piscina mensa detrahenda est quia necesse est ut omnes res in interrogatione una restituere et transactiones singillatim delere possimus. Conati sumus in indice iusto uti, sed tardius est cum totum album exoneramus.

Cum vexillum NodeJS utens, bibliothecae Redis effectum 18k transactionum per alterum consecutus est. Celeritas omissa 9 temporibus.

Cum possibilitates Probatio nobis ostendit 5 tempora evidenter maiora, coepimus optimize. Bibliothecam in ioredis mutavimus et vicesimae vicesimae secundae consecuti sumus. Res singulas per `hset` mandatum utens addimus. Ita multum queries in Redis generabamus. Idea orta est res in batches componendas easque uno mandato `hmset' mittere. Consequens est 25k secundo.

Pluribus de causis, quas infra describemus, notitia utendo `Buffer` laboramus et, ut evenit, si illud ad textum (`buffer.toString('hex')') converteris, ante scribendo licebit adiectis. perficiendi. Ita celeritas ad 35k per alterum aucta est. In momento, ipsum ulterius suspendere decrevimus.

Habuimus mutes rationem binarii protocollo quod:

1. Ratio saepe hashes, subscriptiones, etc. computat, eoque indiget notitia in `Buffer'.

2. Cum inter officia missum, notitia binaria minus quam textus ponderat. Exempli gratia, cum scandalum mittens cum 1 miliones negotiorum, notitia in textu plus quam 300 megabytarum capere potest.

3. Constanter immutans notitias effectus afficit.

Itaque protocollo binarii nostri fundamentum cepimus pro notitia recondendi et tradendi, elaboratum est ex bibliotheca `binarii-data` mirabilis.

Quam ob rem sequentis notitiae structurae assecuti sumus;

-Transaction

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

-Block

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

Mandatis usitatis `BD.encode (obstructionum, Protocollum).slice();` et `BD.decode(buffer, Protocollum) `notitias convertimus in `Buffer` salvis in Redis vel ad aliud nodi transmittentes et restituendo. data tergo.

Nos quoque habemus 2 binaria protocolla pro notitia inter officia transferendi:

- Protocollum commercium cum Plasma Node per unix nervum

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

ubi:

  • `type` β€” actio fienda, exempli gratia, 1 β€” transmissio, 2 β€” getTransactio;
  • `payload` β€” notitia ad munus opportunum transeundum;
  • ` messageId` - nuntius id ut responsio inveniretur.

- Protocollum ad commercium lymphaticorum

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

ubi:

  • `code` β€” codicem relatum, e.g. 6 β€” PREPARE_NEW_BLOCK, 7 β€” BLOCK_VALID, 8 β€” BLOCK_COMMIT;
  • `versionProtocol` β€” protocollum versionis, quoniam nodi cum uaria scriptione elevari possunt in retiaculis et aliter operari possunt;
  • `seq` - nuntius identifier;
  • `countChunk` ΠΈ `chunkNumber` necesse est magna nuntia scindendi;
  • `Longitudinem' ΠΈ `payload` longitudo et notitia ipsa.

Cum nos prae-typeded notitias, ratio finalis multo velocior est quam bibliotheca Etherei `rlp`. Infeliciter, id negare nondum potuimus, cum contractus callidior sit necesse est, quod in futuro facere cogitamus.

Si celeritas pervenire potuimus 35 000 transactions per alterum, nos etiam in meliore tempore eas processuras postulo. Cum accessus ad tempus formationis obstructionum 30 secundis accipit, necesse est ut in clausura comprehendamus 1 000 000 rebus id missis magis 100 MB of data.

Initio bibliothecam `ethereumjs-devp2p` ad communicandum inter nodos usi sumus, sed tantas notitias tractare non potuimus. Quam ob rem bibliothecam `ws` usi sumus et mittens binaria notitias per websocket conformes. Utique etiam difficultates invenimus cum magnas rerum notitias mittens, sed eas in chunks divisimus et nunc hae difficultates discesserunt.

Item arbor Merkle et Nullam colligentem formans 1 000 000 transactions requirit circuitum 10 secundis continui calculi. Hoc tempore nexus cum omnibus nodis frangere procurat. Placuit hunc calculum ad filum separatum movere.

conclusiones:

Re quidem vera, nostrae inventiones non sunt novae, sed propter aliquam causam, multi periti obliviscuntur de illis in evolutione.

  • Munus programmandi pro obiectio-Orientata programmatio usus fructus melioris facit.
  • Monolith peior est quam architecturae serviendi ad rationem productivam NodeJS.
  • Usura `operatoris_threads` propter gravem supputationem systematis alacritatem emendat, praesertim cum de operationibus i/o agitur.
  • Unix nervus stabilior et velocior est quam http petitiones.
  • Si necesse est ut magnas notitias in retiaculis cito transferas, melius est utere schedulis ac notitias binarias, divisas in chunks, quae transmittantur si non perveniant, et deinde in unum nuntium coniciantur.

Invitamus te ad visitandum GitHub exstare: https://github.com/opporty-com/Plasma-Cash/tree/new-version

Articulus co-scriptus by Alexander Nashivan, senior elit Solutio callidi Inc.

Source: www.habr.com