የህዝብ ሙከራ፡ የEthereum ግላዊነት እና የመጠን መለኪያ መፍትሄ

አግድ ብዙ የሰውን ልጅ ህይወት ለማሻሻል ቃል የገባ ፈጠራ ቴክኖሎጂ ነው። እውነተኛ ሂደቶችን እና ምርቶችን ወደ ዲጂታል ቦታ ያስተላልፋል, የፋይናንስ ግብይቶችን ፍጥነት እና አስተማማኝነት ያረጋግጣል, ዋጋቸውን ይቀንሳል, እና እንዲሁም ያልተማከለ አውታረ መረቦች ውስጥ ዘመናዊ ኮንትራቶችን በመጠቀም ዘመናዊ DAPP መተግበሪያዎችን እንዲፈጥሩ ያስችልዎታል.

የብሎክቼይን ብዙ ጥቅሞችን እና የተለያዩ አተገባበርን ከግምት ውስጥ በማስገባት ይህ ተስፋ ሰጪ ቴክኖሎጂ ወደ እያንዳንዱ ኢንዱስትሪ ገና መግባቱ የሚያስገርም ሊመስል ይችላል። ችግሩ ዘመናዊ ያልተማከለ blockchains scalability እጥረት ነው. Ethereum በሰከንድ ወደ 20 የሚደርሱ ግብይቶችን ያካሂዳል፣ ይህም የዛሬውን ተለዋዋጭ ንግዶች ፍላጎት ለማሟላት በቂ አይደለም። በተመሳሳይ ጊዜ የብሎክቼይን ቴክኖሎጂን የሚጠቀሙ ኩባንያዎች ከጠለፋ እና ከአውታረ መረብ ብልሽቶች ከፍተኛ ጥበቃ ስለሚያደርጉት ኤቲሬምን ለመተው ቸል ይላሉ።

በብሎክቼይን ውስጥ ያልተማከለ ፣ደህንነት እና መስፋፋትን ለማረጋገጥ ፣በዚህም የ Scalability Trilemma ፣የልማት ቡድንን መፍታት። ዕድል ፕላዝማ ጥሬ ገንዘብ ፈጠረ፣ ዘመናዊ ኮንትራት እና በ Node.js ላይ የተመሰረተ የግል አውታረ መረብ የያዘ ንዑስ ሰንሰለት፣ እሱም ግዛቱን በየጊዜው ወደ ሥር ሰንሰለት (Ethereum) ያስተላልፋል።

የህዝብ ሙከራ፡ የEthereum ግላዊነት እና የመጠን መለኪያ መፍትሄ

በፕላዝማ ጥሬ ገንዘብ ውስጥ ቁልፍ ሂደቶች

1. ተጠቃሚው ወደ ፕላዝማ ጥሬ ገንዘብ ማስመሰያ ማስገባት የሚፈልገውን የኢቲኤች መጠን በማስተላለፍ የስማርት ኮንትራቱን ተግባር 'ተቀማጭ' ይለዋል። የስማርት ኮንትራቱ ተግባር ቶከን ይፈጥራል እና ስለ እሱ ክስተት ይፈጥራል።

2. ለስማርት ኮንትራት ዝግጅቶች የተመዘገቡ የፕላዝማ ጥሬ ገንዘብ ኖዶች ተቀማጭ ገንዘብ ስለመፍጠር ክስተት ይቀበላሉ እና በገንዳው ላይ ማስመሰያ ስለመፍጠር ግብይት ይጨምራሉ።

3. በየጊዜው፣ ልዩ የፕላዝማ ጥሬ ገንዘብ ኖዶች ሁሉንም ግብይቶች ከመዋኛ ገንዳው (እስከ 1 ሚሊዮን) ወስደው ከነሱ አንድ ብሎክ ይመሰርታሉ፣ የመርክልን ዛፍ ያሰሉ እና በዚህ መሠረት ሃሽ። ይህ እገዳ ለማረጋገጫ ወደ ሌሎች አንጓዎች ይላካል። መስቀለኛ መንገዱ የመርክል ሃሽ ትክክለኛ መሆኑን እና ግብይቶቹ ትክክል መሆናቸውን ያረጋግጣሉ (ለምሳሌ የምልክቱ ላኪው ባለቤት መሆኑን)። እገዳውን ካረጋገጠ በኋላ መስቀለኛ መንገድ የስማርት ኮንትራቱን `submitBlock` ተግባር ይጠራል፣ ይህም የማገጃ ቁጥሩን እና Merkle hash ወደ ጠርዝ ሰንሰለት ይቆጥባል። ብልጥ ኮንትራቱ የብሎክን በተሳካ ሁኔታ መጨመርን የሚያመለክት ክስተት ይፈጥራል። ግብይቶች ከገንዳው ውስጥ ይወገዳሉ.

4. የማገጃ ማስረከቢያ ክስተት የሚቀበሉ አንጓዎች ወደ እገዳው የተጨመሩትን ግብይቶች መተግበር ይጀምራሉ።

5. በአንድ ወቅት፣ የማስመሰያው ባለቤት (ወይም ባለቤት ያልሆነው) ከፕላዝማ ጥሬ ገንዘብ ማውጣት ይፈልጋል። ይህንን ለማድረግ የ`startExit` ተግባርን ይጠራዋል፣ በቶከን ላይ ስላለፉት 2 ግብይቶች መረጃ ወደ እሱ ያስተላልፋል፣ ይህም የማስመሰያው ባለቤት መሆኑን ያረጋግጣል። ስማርት ኮንትራቱ የመርክል ሃሽን በመጠቀም በብሎኮች ውስጥ ያሉ ግብይቶች መኖራቸውን ያረጋግጣል እና የማስወገጃ ማስመሰያውን ይልካል ይህም በሁለት ሳምንታት ውስጥ ይከሰታል።

6. የማስመሰያ ማስወጣት ክዋኔው ከተፈጸሙ ጥሰቶች ጋር ከተከሰቱ (ምልክቱ የማስወገጃው ሂደት ከተጀመረ በኋላ ወይም ማስመሰያው ከመውጣቱ በፊት የሌላ ሰው ነበር) የማስመሰያው ባለቤት በሁለት ሳምንታት ውስጥ ማስወጣትን ውድቅ ማድረግ ይችላል።

የህዝብ ሙከራ፡ የEthereum ግላዊነት እና የመጠን መለኪያ መፍትሄ

ግላዊነት የሚገኘው በሁለት መንገዶች ነው።

1. የስር ሰንሰለቱ በልጁ ሰንሰለት ውስጥ ስለሚፈጠሩ እና ስለሚተላለፉ ግብይቶች ምንም የሚያውቀው ነገር የለም። ETHን ከፕላዝማ ጥሬ ገንዘብ ማን እንዳስቀመጠ እና እንዳወጣ የሚገልጽ መረጃ ይፋዊ ነው።

2. የልጅ ሰንሰለት zk-SNARKs በመጠቀም ስም-አልባ ግብይቶችን ይፈቅዳል።

የቴክኖሎጂ ቁልል

  • NodeJS
  • Redis
  • ኢቴሪየም
  • አፈር

ሙከራ

የፕላዝማ ጥሬ ገንዘብ በማዘጋጀት ላይ ሳለን የስርዓቱን ፍጥነት ፈትነን የሚከተሉትን ውጤቶች አግኝተናል።

  • በሰከንድ እስከ 35 የሚደርሱ ግብይቶች ወደ ገንዳው ይታከላሉ;
  • በብሎክ ውስጥ እስከ 1 የሚደርሱ ግብይቶች ሊቀመጡ ይችላሉ።

በሚከተሉት 3 አገልጋዮች ላይ ሙከራዎች ተካሂደዋል።

1. Intel Core i7-6700 Quad-Core Skylake ጨምሮ. NVMe SSD - 512 ጊባ፣ 64 ጊባ DDR4 ራም
3 የሚያረጋግጡ የፕላዝማ ገንዘብ ኖዶች ተነስተዋል።

2. AMD Ryzen 7 1700X Octa-Core "Summit Ridge" (ዜን)፣ SATA SSD - 500 ጊባ፣ 64 ጊባ DDR4 RAM
የRopsten testnet ETH ኖድ ተነስቷል።
3 የሚያረጋግጡ የፕላዝማ ገንዘብ ኖዶች ተነስተዋል።

3. ኢንቴል ኮር i9-9900K Octa-ኮር ጨምሮ. NVMe SSD - 1 ቴባ፣ 64 ጊባ DDR4 ራም
1 የፕላዝማ ገንዘብ ማስረከቢያ መስቀለኛ መንገድ ተነስቷል።
3 የሚያረጋግጡ የፕላዝማ ገንዘብ ኖዶች ተነስተዋል።
ወደ ፕላዝማ ካሽ ኔትወርክ ግብይቶችን ለመጨመር ሙከራ ተጀመረ።

ጠቅላላ: 10 የፕላዝማ ገንዘብ ኖዶች በግል አውታረመረብ ውስጥ።

ሙከራ 1

በብሎክ የ1 ሚሊዮን ግብይቶች ገደብ አለ። ስለዚህ, 1 ሚሊዮን ግብይቶች በ 2 ብሎኮች ውስጥ ይወድቃሉ (ሲስተሙ የግብይቱን አካል ወስዶ በሚላክበት ጊዜ ማስገባት ስለሚያስችለው).


የመጀመሪያ ሁኔታ: የመጨረሻው እገዳ #7; 1 ሚሊዮን ግብይቶች እና ቶከኖች በመረጃ ቋቱ ውስጥ ተከማችተዋል።

00:00 - የግብይት ማመንጨት ስክሪፕት መጀመሪያ
01:37 - 1 ሚሊዮን ግብይቶች ተፈጥረው ወደ መስቀለኛ መንገድ መላክ ተጀመረ
01:46 - መስቀለኛ መንገድ አስገባ 240k ግብይቶችን ከመዋኛ ወሰደ እና ቅጽ አግድ ቁጥር 8. በ320 ሰከንድ ውስጥ 10k ግብይቶች ወደ ገንዳው ሲጨመሩ እናያለን።
01:58 — እገዳ ቁጥር 8 ተፈርሟል እና ለማረጋገጥ ተልኳል።
02:03 — ብሎክ #8 የተረጋገጠ ሲሆን የስማርት ኮንትራቱ `submitBlock` ተግባር በመርክሌ ሃሽ እና በብሎክ ቁጥር ይባላል።
02:10 — በ1 ሰከንድ ውስጥ 32 ሚሊዮን ግብይቶችን የላከ የማሳያ ስክሪፕት ሥራውን አጠናቋል
02:33 - አንጓዎች ቁጥር 8 እገዳ ወደ ስርወ ሰንሰለት መጨመሩን እና 240k ግብይቶችን ማከናወን የጀመረውን መረጃ መቀበል ጀመሩ
02:40 - 240ሺህ ግብይቶች ከመዋኛ ገንዳው ተወግደዋል፣ እነዚህም ቀድሞውኑ በብሎክ # 8 ውስጥ ናቸው።
02:56 - መስቀለኛ መንገድ አስገባ የቀረውን 760ሺህ ግብይቶች ከገንዳው ላይ ወስዶ የመርክሌ ሃሽ በማስላት እና ብሎክ #9 መፈረም ጀመረ።
03:20 - ሁሉም አንጓዎች 1 ሚሊዮን 240k ግብይቶችን እና ቶከኖችን ይይዛሉ
03:35 — እገዳ #9 ተፈርሟል እና ለሌሎች አንጓዎች ማረጋገጫ ተልኳል።
03:41 - የአውታረ መረብ ስህተት ተከስቷል።
04:40 - እገዳ #9 ማረጋገጫ ጊዜ አልቋል
04:54 - መስቀለኛ መንገድ አስገባ የቀረውን 760ሺህ ግብይቶች ከገንዳው ላይ ወስዶ የመርክሌ ሃሽ በማስላት እና ብሎክ #9 መፈረም ጀመረ።
05:32 — እገዳ #9 ተፈርሟል እና ለሌሎች አንጓዎች ማረጋገጫ ተልኳል።
05:53 — እገዳ #9 ተረጋግጧል እና ወደ ስርወ ሰንሰለት ተልኳል።
06:17 - አንጓዎች ቁጥር 9 እገዳ ወደ ስርወ ሰንሰለት ተጨምሮ 760k ግብይቶችን ማከናወን እንደጀመረ መረጃ መቀበል ጀመሩ
06:47 - ገንዳው በአግድ ቁጥር 9 ውስጥ ካሉ ግብይቶች ጸድቷል።
09:06 - ሁሉም አንጓዎች 2 ሚሊዮን ግብይቶች እና ቶከኖች ይይዛሉ

ሙከራ 2

በብሎክ 350k ገደብ አለ። በውጤቱም, 3 ብሎኮች አሉን.


የመጀመሪያ ሁኔታ: የመጨረሻው እገዳ # 9; 2 ሚሊዮን ግብይቶች እና ቶከኖች በመረጃ ቋቱ ውስጥ ተከማችተዋል።

00:00 - የግብይት ማመንጨት ስክሪፕት ቀድሞውኑ ተጀምሯል።
00:44 - 1 ሚሊዮን ግብይቶች ተፈጥረው ወደ መስቀለኛ መንገድ መላክ ተጀመረ
00:56 - መስቀለኛ መንገድ አስገባ 320k ግብይቶችን ከመዋኛ ወሰደ እና ቅጽ አግድ ቁጥር 10. በ320 ሰከንድ ውስጥ 10k ግብይቶች ወደ ገንዳው ሲጨመሩ እናያለን።
01:12 — እገዳ # 10 ተፈርሟል እና ለማረጋገጫ ወደ ሌሎች አንጓዎች ተልኳል።
01:18 — በ1 ሰከንድ ውስጥ 34 ሚሊዮን ግብይቶችን የላከ የማሳያ ስክሪፕት ሥራውን አጠናቋል
01:20 - እገዳ # 10 ተረጋግጧል እና ወደ ስርወ ሰንሰለት ይላካል
01:51 - ሁሉም አንጓዎች ቁጥር 10 ታክሏል እና 320k ግብይቶችን መተግበር የጀመረው ከስር ሰንሰለት መረጃ ተቀብለዋል
02:01 - ገንዳው #320ን ለማገድ ለተጨመሩ 10k ግብይቶች ጸድቷል
02:15 - መስቀለኛ መንገድ አስረክብ 350k ግብይቶችን ከመዋኛ ገንዳ ወሰደ እና ቅጽ ቁጥር 11
02:34 — እገዳ ቁጥር 11 ተፈርሟል እና ለማረጋገጫ ወደ ሌሎች አንጓዎች ተልኳል።
02:51 - እገዳ # 11 ተረጋግጧል እና ወደ ስርወ ሰንሰለት ተልኳል
02:55 - የመጨረሻው መስቀለኛ መንገድ ከቁጥጥር # 10 የተጠናቀቁ ግብይቶች
10:59 - የብሎክ ቁጥር 9 የማስረከብ ግብይት በስር ሰንሰለት ውስጥ በጣም ረጅም ጊዜ ፈጅቷል ፣ ግን ተጠናቀቀ እና ሁሉም አንጓዎች ስለ እሱ መረጃ ተቀብለው 350k ግብይቶችን ማከናወን ጀመሩ።
11:05 - ገንዳው #320ን ለማገድ ለተጨመሩ 11k ግብይቶች ጸድቷል
12:10 - ሁሉም አንጓዎች 1 ሚሊዮን 670k ግብይቶች እና ቶከኖች ይይዛሉ
12:17 - መስቀለኛ መንገድ አስረክብ 330k ግብይቶችን ከመዋኛ ገንዳ ወሰደ እና ቅጽ ቁጥር 12
12:32 — እገዳ ቁጥር 12 ተፈርሟል እና ለማረጋገጫ ወደ ሌሎች አንጓዎች ተልኳል።
12:39 - እገዳ # 12 ተረጋግጧል እና ወደ ስርወ ሰንሰለት ይላካል
13:44 - ሁሉም አንጓዎች ቁጥር 12 ታክሏል እና 330k ግብይቶችን መተግበር የጀመረው ከስር ሰንሰለት መረጃ ተቀብለዋል
14:50 - ሁሉም አንጓዎች 2 ሚሊዮን ግብይቶች እና ቶከኖች ይይዛሉ

ሙከራ 3

በመጀመሪያው እና በሁለተኛው አገልጋዮች ውስጥ አንድ የሚያረጋግጥ መስቀለኛ መንገድ በማስረከቢያ መስቀለኛ መንገድ ተተክቷል።


የመጀመሪያ ሁኔታ: የመጨረሻው እገዳ # 84; በመረጃ ቋቱ ውስጥ የተቀመጡ 0 ግብይቶች እና ቶከኖች

00:00 — እያንዳንዳቸው 3 ሚሊዮን ግብይቶችን የሚያመነጩ እና የሚልኩ 1 ስክሪፕቶች ተጀምረዋል።
01:38 — 1 ሚሊዮን ግብይቶች ተፈጥረው መስቀለኛ መንገድ ቁጥር 3 ለማስገባት መላክ ተጀመረ
01:50 - መስቀለኛ መንገድ ቁጥር 3 አስገባ 330k ግብይቶችን ከገንዳው ወሰደ እና ቅጽ ቁጥር 85 (f21)። በ350 ሰከንድ ውስጥ 10k ግብይቶች ወደ ገንዳው ሲጨመሩ እናያለን።
01:53 — 1 ሚሊዮን ግብይቶች ተፈጥረው መስቀለኛ መንገድ ቁጥር 1 ለማስገባት መላክ ተጀመረ
01:50 - መስቀለኛ መንገድ ቁጥር 3 አስገባ 330k ግብይቶችን ከገንዳው ወሰደ እና ቅጽ ቁጥር 85 (f21)። በ350 ሰከንድ ውስጥ 10k ግብይቶች ወደ ገንዳው ሲጨመሩ እናያለን።
02:01 — መስቀለኛ መንገድ ቁጥር 1 አስገባ 250k ግብይቶችን ከገንዳው ወሰደ እና ቅጽ ቁጥር 85 (65e)
02:06 — እገዳ # 85 (f21) ተፈርሟል እና ለማረጋገጫ ወደ ሌሎች አንጓዎች ተልኳል።
02:08 — የአገልጋይ ቁጥር 3 ማሳያ ስክሪፕት፣ በ1 ሰከንድ 30 ሚሊዮን ግብይቶችን የላከ፣ ስራውን አጠናቋል።
02:14 - እገዳ # 85 (f21) የተረጋገጠ እና ወደ ስርወ ሰንሰለት ይላካል
02:19 - እገዳ #85 (65e) የተፈረመ እና ለማረጋገጫ ወደ ሌሎች አንጓዎች ተልኳል።
02:22 — 1 ሚሊዮን ግብይቶች ተፈጥረው መስቀለኛ መንገድ ቁጥር 2 ለማስገባት መላክ ተጀመረ
02:27 - እገዳ # 85 (65e) የተረጋገጠ እና ወደ ስርወ ሰንሰለት ተልኳል
02:29 - መስቀለኛ መንገድ ቁጥር 2 አስገባ 111855 ግብይቶችን ከመዋኛ ገንዳ ወሰደ እና ቅጽ ቁጥር 85 (256)።
02:36 - እገዳ # 85 (256) ተፈርሟል እና ለማረጋገጫ ወደ ሌሎች አንጓዎች ተልኳል።
02:36 — የአገልጋይ ቁጥር 1 ማሳያ ስክሪፕት፣ በ1 ሰከንድ 42.5 ሚሊዮን ግብይቶችን የላከ፣ ስራውን አጠናቋል።
02:38 - እገዳ # 85 (256) የተረጋገጠ እና ወደ ስርወ ሰንሰለት ይላካል
03:08 — አገልጋይ #2 ስክሪፕት ስራውን አጠናቀቀ፣ ይህም በ1 ሰከንድ ውስጥ 47 ሚሊየን ግብይቶችን ልኳል።
03:38 - ሁሉም አንጓዎች # 85 (f21) ፣ # 86 (65e) ፣ # 87 (256) የሚከለክለውን መረጃ ከስር ሰንሰለት ተቀብለው 330k ፣ 250k ፣ 111855 ግብይቶችን መተግበር ጀመሩ
03:49 - ገንዳው በ 330k, 250k, 111855 ወደ ብሎኮች የታከሉ ግብይቶች # 85 (f21), # 86 (65e), # 87 (256) ላይ ጸድቷል.
03:59 - መስቀለኛ መንገድ ቁጥር 1 ከገንዳው 888145 ግብይቶችን ወሰደ እና ቅጽ ቁጥር 88 (214) ፣ መስቀለኛ መንገድ #2 አስገባ 750k ግብይቶችን ከገንዳው ወሰደ እና ቅጽ ቁጥር 88 (50a) አግድ ፣ መስቀለኛ # 3 670k ግብይቶችን ወሰደ ከ ገንዳው እና ቅጾች እገዳ ቁጥር 88 (d3b)
04:44 - እገዳ # 88 (d3b) ተፈርሟል እና ለማረጋገጫ ወደ ሌሎች አንጓዎች ተልኳል።
04:58 - እገዳ # 88 (214) ተፈርሟል እና ለማረጋገጫ ወደ ሌሎች አንጓዎች ተልኳል።
05:11 - እገዳ #88 (50a) ተፈርሟል እና ለማረጋገጫ ወደ ሌሎች አንጓዎች ተልኳል።
05:11 - እገዳ # 85 (d3b) የተረጋገጠ እና ወደ ስርወ ሰንሰለት ይላካል
05:36 - እገዳ # 85 (214) የተረጋገጠ እና ወደ ስርወ ሰንሰለት ይላካል
05:43 - ሁሉም አንጓዎች #88 (d3b)፣ #89(214)ን የሚያግድ መረጃ ከስር ሰንሰለት ተቀብለዋል እና 670k፣ 750k ግብይቶችን መተግበር ጀምረዋል።
06:50 - በግንኙነት ውድቀት ምክንያት እገዳ #85 (50a) አልተረጋገጠም።
06:55 - መስቀለኛ መንገድ ቁጥር 2 አስገባ 888145 ግብይቶችን ከመዋኛ ገንዳ ወሰደ እና ቅጽ ቁጥር 90 (50a)
08:14 - እገዳ #90 (50a) ተፈርሟል እና ለማረጋገጫ ወደ ሌሎች አንጓዎች ተልኳል።
09:04 - እገዳ # 90 (50a) የተረጋገጠ እና ወደ ስርወ ሰንሰለት ይላካል
11:23 - ሁሉም አንጓዎች #90 (50a) የተጨመረበት ከስር ሰንሰለት መረጃ ተቀብለዋል እና 888145 ግብይቶችን መተግበር ጀመሩ። በተመሳሳይ ጊዜ አገልጋይ ቁጥር 3 ከብሎኮች #88 (d3b)፣ #89(214) ግብይቶችን አስቀድሞ ተግባራዊ አድርጓል።
12፡11 - ሁሉም ገንዳዎች ባዶ ናቸው።
13:41 - ሁሉም የአገልጋይ ቁጥር 3 ኖዶች 3 ሚሊዮን ግብይቶችን እና ምልክቶችን ይይዛሉ
14:35 - ሁሉም የአገልጋይ ቁጥር 1 ኖዶች 3 ሚሊዮን ግብይቶችን እና ምልክቶችን ይይዛሉ
19:24 - ሁሉም የአገልጋይ ቁጥር 2 ኖዶች 3 ሚሊዮን ግብይቶችን እና ምልክቶችን ይይዛሉ

እንቅፋቶች

በፕላዝማ ጥሬ ገንዘብ ልማት ወቅት የሚከተሉትን ችግሮች አጋጥሞናል፣ ቀስ በቀስ የፈታናቸው እና እየፈታናቸው ነው።

1. በተለያዩ የስርዓት ተግባራት መስተጋብር ውስጥ ግጭት. ለምሳሌ፣ በገንዳው ላይ ግብይቶችን የመጨመር ተግባር ብሎኮችን የማስረከብ እና የማረጋገጥ ስራን አግዶታል፣ በተቃራኒው ደግሞ ፍጥነት እንዲቀንስ አድርጓል።

2. የውሂብ ማስተላለፍ ወጪዎችን በሚቀንስበት ጊዜ እጅግ በጣም ብዙ ግብይቶችን እንዴት እንደሚልክ ወዲያውኑ ግልጽ አልነበረም።

3. ከፍተኛ ውጤት ለማግኘት መረጃን እንዴት እና የት ማከማቸት እንደሚቻል ግልጽ አልነበረም።

4. 1 ሚሊዮን ግብይቶች ያለው የማገጃ መጠን 100 ሜባ ያህል ስለሚወስድ በአንጓዎች መካከል አውታረ መረብን እንዴት ማደራጀት እንደሚቻል ግልፅ አልነበረም።

5. በነጠላ ክር ሁነታ መስራት ረጅም ስሌቶች ሲከሰቱ (ለምሳሌ የመርክል ዛፍ መገንባት እና ሃሽውን በማስላት) መካከል ያለውን ግንኙነት ያቋርጣል.

ይህን ሁሉ እንዴት ያዝነው?

የፕላዝማ ጥሬ ገንዘብ መስቀለኛ መንገድ የመጀመሪያው ስሪት ሁሉንም ነገር በተመሳሳይ ጊዜ ማድረግ የሚችል የማጣመር አይነት ነበር፡ ግብይቶችን መቀበል፣ ብሎኮችን ማስገባት እና ማረጋገጥ እና ውሂብን ለማግኘት ኤፒአይ ማቅረብ። NodeJS ቤተኛ ነጠላ-ክር ስለሆነ፣ ከባዱ የመርክል ዛፍ ስሌት ተግባር የተጨማሪ ግብይት ተግባሩን አግዶታል። ይህንን ችግር ለመፍታት ሁለት አማራጮችን አይተናል-

1. በርካታ የ NodeJS ሂደቶችን ያስጀምሩ, እያንዳንዳቸው የተወሰኑ ተግባራትን ያከናውናሉ.

2. Worker_threads ተጠቀም እና የኮዱን የተወሰነ ክፍል ወደ ክሮች አንቀሳቅስ።

በውጤቱም ፣ ሁለቱንም አማራጮች በአንድ ጊዜ ተጠቀምን-በአመክንዮ አንድ መስቀለኛ መንገድ በተናጥል ሊሠሩ በሚችሉ በ 3 ክፍሎች ከፋፍለናል ፣ ግን በተመሳሳይ ጊዜ በተመሳሳይ ጊዜ።

1. ወደ ገንዳው ውስጥ ግብይቶችን የሚቀበል እና ብሎኮችን የሚፈጥር የማስረከቢያ መስቀለኛ መንገድ።

2. የአንጓዎችን ትክክለኛነት የሚያረጋግጥ የተረጋገጠ መስቀለኛ መንገድ።

3. API node - ውሂብን ለመድረስ ኤፒአይ ያቀርባል።

በዚህ ሁኔታ, ክሊን በመጠቀም በእያንዳንዱ መስቀለኛ መንገድ በዩኒክስ ሶኬት በኩል መገናኘት ይችላሉ.

እንደ መርክል ዛፍን ማስላትን የመሳሰሉ ከባድ ስራዎችን ወደ ተለየ ክር ወሰድን።

ስለዚህ የፕላዝማ ጥሬ ገንዘብ ተግባራትን በአንድ ጊዜ እና ያለምንም ውድቀቶች መደበኛ ስራ አሳክተናል።

ስርዓቱ ሥራ ላይ ከዋለ በኋላ ፍጥነቱን መፈተሽ ጀመርን እና በሚያሳዝን ሁኔታ, አጥጋቢ ያልሆነ ውጤት አግኝተናል-በሴኮንድ 5 ግብይቶች እና በአንድ እገዳ እስከ 000 ግብይቶች. በስህተት የተተገበረውን ማወቅ ነበረብኝ።

ለመጀመር የስርዓቱን ከፍተኛ አቅም ለማወቅ ከፕላዝማ ጥሬ ገንዘብ ጋር የመገናኛ ዘዴን መሞከር ጀመርን. የፕላዝማ ጥሬ ገንዘብ ኖድ የዩኒክስ ሶኬት በይነገጽ እንደሚሰጥ ቀደም ብለን ጽፈናል። መጀመሪያ ላይ በጽሑፍ ላይ የተመሠረተ ነበር። json ነገሮች የተላኩት `JSON.parse()` እና `JSON.stringify()»ን በመጠቀም ነው።

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

የእንደዚህ አይነት ዕቃዎችን የማስተላለፊያ ፍጥነት ለካ እና ~ 130k በሰከንድ አግኝተናል። ከ json ጋር ለመስራት መደበኛ ተግባራትን ለመተካት ሞክረናል፣ አፈፃፀሙ ግን አልተሻሻለም። ለእነዚህ ስራዎች የ V8 ሞተር በደንብ ማመቻቸት አለበት.

ከግብይቶች፣ ቶከኖች እና ብሎኮች ጋር በክፍሎች ሰርተናል። እንደዚህ አይነት ክፍሎችን ሲፈጥሩ አፈፃፀሙ በ 2 ጊዜ ቀንሷል, ይህም OOP ለእኛ ተስማሚ እንዳልሆነ ያመለክታል. ሁሉንም ነገር ወደ ሙሉ ተግባራዊ አቀራረብ መፃፍ ነበረብኝ።

በመረጃ ቋቱ ውስጥ መቅዳት

መጀመሪያ ላይ Redis የእኛን መስፈርቶች የሚያሟሉ በጣም ውጤታማ ከሆኑ መፍትሄዎች አንዱ ሆኖ ለመረጃ ማከማቻ ተመርጧል-የቁልፍ እሴት ማከማቻ ፣ ከሃሽ ጠረጴዛዎች ጋር አብሮ መሥራት ፣ ስብስቦች። redis-benchmark አስጀመርን እና ~80k ስራዎችን በሰከንድ በ1 የፔፕፐሊንሊንግ ሁነታ አግኝተናል።

ለከፍተኛ አፈጻጸም፣ Redisን የበለጠ በደንብ አስተካክለነዋል፡-

  • የዩኒክስ ሶኬት ግንኙነት ተፈጥሯል።
  • ግዛቱን ወደ ዲስክ ማስቀመጥን አሰናክለናል (ለአስተማማኝነት, ቅጂ ማዘጋጀት እና በተለየ Redis ውስጥ ወደ ዲስክ ማስቀመጥ ይችላሉ).

በሬዲስ ውስጥ ገንዳ የሃሽ ጠረጴዛ ነው ምክንያቱም ሁሉንም ግብይቶች በአንድ ጥያቄ ሰርስሮ ማውጣት እና ግብይቶችን አንድ በአንድ መሰረዝ መቻል አለብን። መደበኛ ዝርዝር ለመጠቀም ሞክረን ነበር፣ ግን ሙሉውን ዝርዝር ስናወርድ ቀርፋፋ ነው።

መደበኛ NodeJS ሲጠቀሙ የሬዲስ ቤተ-ፍርግሞች በሰከንድ የ18k ግብይቶች አፈጻጸም አሳክተዋል። ፍጥነቱ 9 ጊዜ ቀንሷል።

ማመሳከሪያው ዕድሎች በግልጽ 5 እጥፍ እንደሚበልጡ ስላሳየን፣ ማመቻቸት ጀመርን። ቤተ መፃህፍቱን ወደ ioredis ቀይረን በሰከንድ 25k አፈጻጸም አግኝተናል። የ`hset` ትዕዛዝን በመጠቀም ግብይቶችን አንድ በአንድ ጨምረናል። ስለዚህ በሬዲስ ውስጥ ብዙ መጠይቆችን እየፈጠርን ነበር። ሃሳቡ የተነሳው ግብይቶችን ወደ ባች በማጣመር በአንድ ትዕዛዝ `hmset` ለመላክ ነው። ውጤቱ በሰከንድ 32k ነው.

ከዚህ በታች በምንገልፃቸው በብዙ ምክንያቶች ከውሂብ ጋር የምንሰራው `Buffer`ን በመጠቀም ነው እና እንደሚታየው፣ ከመፃፍዎ በፊት ወደ ጽሑፍ (`buffer.toString('hex')`) ከቀየሩት ተጨማሪ ማግኘት ይችላሉ። አፈጻጸም. ስለዚህ ፍጥነቱ በሰከንድ ወደ 35k ከፍ ብሏል። በአሁኑ ጊዜ, ተጨማሪ ማመቻቸትን ለማቆም ወስነናል.

ወደ ሁለትዮሽ ፕሮቶኮል መቀየር ነበረብን ምክንያቱም፡-

1. ስርዓቱ ብዙ ጊዜ ሃሽን፣ ፊርማዎችን፣ ወዘተ ያሰላል፣ እና ለዚህም በ `ቋት ውስጥ ውሂብ ያስፈልገዋል።

2. በአገልግሎቶች መካከል ሲላክ፣ ሁለትዮሽ ውሂብ ከጽሑፍ ያነሰ ይመዝናል። ለምሳሌ, ከ 1 ሚሊዮን ግብይቶች ጋር ብሎክ ሲልክ በጽሁፉ ውስጥ ያለው መረጃ ከ 300 ሜጋባይት በላይ ሊወስድ ይችላል.

3. ውሂብን ያለማቋረጥ መለወጥ በአፈፃፀም ላይ ተጽዕኖ ያሳድራል።

ስለዚህ፣ በአስደናቂው `ሁለትዮሽ-ዳታ` ቤተ-መጽሐፍት መሰረት የተገነባውን ውሂብ ለማከማቸት እና ለማስተላለፍ የራሳችንን ሁለትዮሽ ፕሮቶኮል እንደ መሰረት ወስደናል።

በውጤቱም, የሚከተሉትን የውሂብ አወቃቀሮች አግኝተናል.

- ግብይት

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

- ማስመሰያ

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

- አግድ

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

በተለመዱት ትዕዛዞች `BD.encode(block, Protocol).slice();` እና `BD.decode(buffer, Protocol)» በሬዲስ ውስጥ ለማስቀመጥ ወይም ወደ ሌላ መስቀለኛ መንገድ ለማስተላለፍ እና ውሂቡን ወደ «Buffer» እንለውጣለን ውሂብ ወደ ኋላ.

እንዲሁም በአገልግሎቶች መካከል ውሂብን ለማስተላለፍ 2 ሁለትዮሽ ፕሮቶኮሎች አሉን።

- ከፕላዝማ ኖድ ጋር በዩኒክስ ሶኬት በኩል ለመግባባት ፕሮቶኮል

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

የት

  • ‹type` - የሚፈጸመው ድርጊት, ለምሳሌ, 1 - sendTransaction, 2 - getTransaction;
  • 'ጭነት' - ወደ ተገቢው ተግባር ማስተላለፍ የሚያስፈልገው ውሂብ;
  • 'messageId' - የመልእክት መታወቂያ ምላሹን መለየት እንዲችል።

- በአንጓዎች መካከል መስተጋብር ፕሮቶኮል

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

የት

  • 'ኮድ' - የመልእክት ኮድ ፣ ለምሳሌ 6 - PREPARE_NEW_BLOCK ፣ 7 - BLOCK_VALID ፣ 8 - BLOCK_COMMIT;
  • `ስሪት ፕሮቶኮል' - የተለያዩ ስሪቶች ያላቸው አንጓዎች በአውታረ መረቡ ላይ ሊነሱ ስለሚችሉ እና በተለየ መንገድ ሊሠሩ ስለሚችሉ የፕሮቶኮል ሥሪት;
  • 'ሴክ' - የመልእክት መለያ;
  • 'countChunk' и 'ቸንክ ቁጥር' ትላልቅ መልዕክቶችን ለመከፋፈል አስፈላጊ;
  • 'ርዝመት' и 'ጭነት' ርዝመት እና ውሂቡ ልሹ.

ውሂቡን አስቀድመን ስለተየብነው የመጨረሻው ስርዓት ከEthereum `rlp` ቤተ-መጽሐፍት በጣም ፈጣን ነው። እንደ አለመታደል ሆኖ ለወደፊቱ ልንሰራው ያቀድነውን ብልጥ ውል ማጠናቀቅ አስፈላጊ ስለሆነ እስካሁን እምቢ ማለት አልቻልንም።

ፍጥነት ላይ መድረስ ከቻልን 35 000 በሴኮንድ ግብይቶች፣ እኛም በተመቻቸ ጊዜ ውስጥ እነሱን ማስኬድ አለብን። ግምታዊው የማገጃ ምስረታ ጊዜ 30 ሰከንድ ስለሚወስድ በብሎክ ውስጥ ማካተት አለብን 1 000 000 ግብይቶች, ይህም ማለት ተጨማሪ መላክ ማለት ነው 100 ሜባ ውሂብ።

መጀመሪያ ላይ `ehereumjs-devp2p` ላይብረሪውን ተጠቅመን በኖዶች መካከል ለመነጋገር ነበር፣ ነገር ግን ይህን ያህል ውሂብ ማስተናገድ አልቻለም። በዚህ ምክንያት የ‹ws› ቤተ-መጽሐፍትን ተጠቅመን ሁለትዮሽ ዳታ በዌብሶኬት መላክን አዋቀርን። እርግጥ ነው, ትላልቅ የውሂብ ፓኬቶችን ስንልክም ችግሮች አጋጥመውናል, ነገር ግን ወደ ክፍልፋዮች ከፋፍለን እና አሁን እነዚህ ችግሮች ጠፍተዋል.

እንዲሁም የመርክል ዛፍ በመፍጠር እና ሃሽውን በማስላት ላይ 1 000 000 ግብይቶች ስለ ይጠይቃል 10 ቀጣይነት ያለው ስሌት ሰከንዶች. በዚህ ጊዜ ከሁሉም አንጓዎች ጋር ያለው ግንኙነት መቋረጥን ይቆጣጠራል. ይህንን ስሌት ወደ የተለየ ክር ለማንቀሳቀስ ተወስኗል.

መደምደሚያ-

እንደ እውነቱ ከሆነ, ግኝቶቻችን አዲስ አይደሉም, ነገር ግን በሆነ ምክንያት ብዙ ባለሙያዎች በማደግ ላይ እያሉ ስለ እነርሱ ይረሳሉ.

  • በነገር ተኮር ፕሮግራሚንግ ፋንታ ተግባራዊ ፕሮግራሚንግ መጠቀም ምርታማነትን ያሻሽላል።
  • ሞኖሊት ለምርታማ NodeJS ስርዓት ከአገልግሎት አርክቴክቸር የከፋ ነው።
  • ለከባድ ስሌት `የሰራተኛ_ክሮች'ን መጠቀም የስርዓት ምላሽ ሰጪነትን ያሻሽላል፣በተለይ ከi/o ስራዎች ጋር ሲገናኝ።
  • ዩኒክስ ሶኬት ከ http ጥያቄዎች የበለጠ የተረጋጋ እና ፈጣን ነው።
  • በኔትወርኩ ላይ ትልቅ መረጃን በፍጥነት ማስተላለፍ ካስፈለገዎት ዌብሶኬቶችን መጠቀም እና ሁለትዮሽ መረጃዎችን መላክ ይሻላል ፣በክፍልፋዮች የተከፋፈሉ ፣ እነሱ ካልደረሱ ሊተላለፉ ይችላሉ ፣ እና ከዚያ ወደ አንድ መልእክት ይጣመራሉ።

እንድትጎበኙ እንጋብዝሃለን። የፊልሙ ፕሮጀክት https://github.com/opporty-com/Plasma-Cash/tree/new-version

ጽሑፉ በጋራ የተጻፈው በ አሌክሳንደር ናሺቫን፣ ከፍተኛ ገንቢ ብልህ መፍትሔ Inc.

ምንጭ: hab.com

አስተያየት ያክሉ