ãããã«ã€ã³ ã¯ã人éã®ç掻ã®å€ãã®åéãæ¹åããããšãçŽæããé©æ°çãªãã¯ãããžãŒã§ãã å®éã®ããã»ã¹ãšè£œåãããžã¿ã«ç©ºéã«è»¢éããéèååŒã®é床ãšä¿¡é Œæ§ã確ä¿ããã³ã¹ããåæžããã ãã§ãªããåæ£åãããã¯ãŒã¯ã§ã¹ããŒã ã³ã³ãã©ã¯ãã䜿çšããŠææ°ã® DAPP ã¢ããªã±ãŒã·ã§ã³ãäœæããããšãã§ããŸãã
ãããã¯ãã§ãŒã³ã®å€ãã®å©ç¹ãšå€æ§ãªå¿çšãèãããšããã®ææãªãã¯ãããžãŒããŸã ãã¹ãŠã®æ¥çã«æµžéããŠããªãããšã¯é©ãã¹ãããã«æãããããããŸããã åé¡ã¯ãçŸä»£ã®åæ£åãããã¯ãã§ãŒã³ã«ã¯ã¹ã±ãŒã©ããªãã£ãæ¬ ããŠããããšã§ãã ã€ãŒãµãªã¢ã 㯠20 ç§ãããçŽ XNUMX ãã©ã³ã¶ã¯ã·ã§ã³ãåŠçããŸãããããã§ã¯ä»æ¥ã®ãã€ãããã¯ãªããžãã¹ã®ããŒãºãæºããã«ã¯ååã§ã¯ãããŸããã åæã«ããããã¯ãã§ãŒã³æè¡ãå©çšããäŒæ¥ã¯ããããã³ã°ããããã¯ãŒã¯é害ã«å¯Ÿããé«åºŠãªä¿è·æ©èœãåããã€ãŒãµãªã¢ã ãæŸæ£ããããšã«èºèºããŠããŸãã
ãããã¯ãã§ãŒã³ã®åæ£åãã»ãã¥ãªãã£ãã¹ã±ãŒã©ããªãã£ã確ä¿ããã¹ã±ãŒã©ããªãã£ã®ããªã¬ã³ãã解決ããããã«ãéçºããŒã ã¯
Plasma Cash ã®äž»èŠãªããã»ã¹
1. ãŠãŒã¶ãŒã¯ã¹ããŒã ã³ã³ãã©ã¯ãé¢æ°ãdepositããåŒã³åºãããã©ãºã ãã£ãã·ã¥ ããŒã¯ã³ã«å ¥éããã ETH ã®éé¡ãããã«æž¡ããŸãã ã¹ããŒã ã³ã³ãã©ã¯ãæ©èœã¯ããŒã¯ã³ãäœæããããã«é¢ããã€ãã³ããçæããŸãã
2. ã¹ããŒã ã³ã³ãã©ã¯ã ã€ãã³ãã«ãµãã¹ã¯ã©ã€ãããã Plasma Cash ããŒãã¯ããããžããã®äœæã«é¢ããã€ãã³ããåä¿¡ããããŒã¯ã³ã®äœæã«é¢ãããã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ã«è¿œå ããŸãã
3. ç¹å¥ãªãã©ãºã ãã£ãã·ã¥ ããŒããå®æçã«ããŒã«ãããã¹ãŠã®ãã©ã³ã¶ã¯ã·ã§ã³ (æ倧 1 äžä»¶) ãååŸããããããããããã¯ã圢æããããŒã¯ã« ããªãŒãèšç®ããããã«å¿ããŠããã·ã¥ãèšç®ããŸãã ãã®ãããã¯ã¯æ€èšŒã®ããã«ä»ã®ããŒãã«éä¿¡ãããŸãã ããŒãã¯ãããŒã¯ã« ããã·ã¥ãæå¹ãã©ãããããã³ãã©ã³ã¶ã¯ã·ã§ã³ãæå¹ãã©ãã (ããšãã°ãããŒã¯ã³ã®éä¿¡è ããã®ææè ã§ãããã©ãã) ããã§ãã¯ããŸãã ãããã¯ãæ€èšŒããåŸãããŒãã¯ã¹ããŒã ã³ã³ãã©ã¯ãã®ãsubmitBlockãé¢æ°ãåŒã³åºãããããã¯çªå·ãšããŒã¯ã« ããã·ã¥ããšããž ãã§ãŒã³ã«ä¿åããŸãã ã¹ããŒã ã³ã³ãã©ã¯ãã¯ããããã¯ã®è¿œå ãæåããããšã瀺ãã€ãã³ããçæããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ã¯ããŒã«ããåé€ãããŸãã
4. ãããã¯éä¿¡ã€ãã³ããåä¿¡ããããŒãã¯ããããã¯ã«è¿œå ããããã©ã³ã¶ã¯ã·ã§ã³ã®é©çšãéå§ããŸãã
5. ããæç¹ã§ãããŒã¯ã³ã®ææè (ãŸãã¯éææè ) ããã©ãºã ãã£ãã·ã¥ããããŒã¯ã³ãåŒãåºããããšèããŸãã ãããè¡ãããã«ã圌ã¯ãstartExitãé¢æ°ãåŒã³åºããããŒã¯ã³ã®æåŸã® 2 ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«é¢ããæ å ±ãæž¡ããŸããããã«ããã圌ãããŒã¯ã³ã®ææè ã§ããããšã確èªãããŸãã ã¹ããŒã ã³ã³ãã©ã¯ãã¯ãããŒã¯ã« ããã·ã¥ã䜿çšããŠãããã¯å ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ååšã確èªããåŒãåºãçšã®ããŒã¯ã³ãéä¿¡ããŸããåŒãåºã㯠XNUMX é±éåŸã«è¡ãããŸãã
6. ããŒã¯ã³ã®åºéæäœã«éåããã£ãå ŽåïŒåºéæç¶ãã®éå§åŸã«ããŒã¯ã³ã䜿çšãããããåºéåã«ããŒã¯ã³ããã§ã«ä»äººã®ææç©ã§ãã£ãå ŽåïŒãããŒã¯ã³ã®ææè 㯠XNUMX é±é以å ã«åºéã«ç°è°ãå±ããããšãã§ããŸãã
ãã©ã€ãã·ãŒã¯ XNUMX ã€ã®æ¹æ³ã§å®çŸãããŸã
1. ã«ãŒã ãã§ãŒã³ã¯ãåãã§ãŒã³å ã§çæããã³è»¢éããããã©ã³ã¶ã¯ã·ã§ã³ã«ã€ããŠã¯äœãç¥ããŸããã 誰ããã©ãºã ãã£ãã·ã¥ã« ETH ãå ¥éããã³åŒãåºãããã«é¢ããæ å ±ã¯å ¬éããããŸãŸã§ãã
2. åãã§ãŒã³ã§ã¯ãzk-SNARK ã䜿çšããå¿åãã©ã³ã¶ã¯ã·ã§ã³ãå¯èœã«ãªããŸãã
æè¡ã¹ã¿ãã¯
- NodeJS
- Redisã®
- ãšãã¥ãªã¢ã
- åå£
ãã¹ã
Plasma Cash ã®éçºäžã«ãã·ã¹ãã ã®é床ããã¹ããã次ã®çµæãåŸãããŸããã
- 35 ç§ãããæ倧 000 ã®ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ã«è¿œå ãããŸãã
- 1 ã€ã®ãããã¯ã«ã¯æ倧 000 ã®ãã©ã³ã¶ã¯ã·ã§ã³ãä¿åã§ããŸãã
ãã¹ãã¯æ¬¡ã® 3 ã€ã®ãµãŒããŒã§å®è¡ãããŸããã
1. Intel Core i7-6700 ã¯ã¢ããã³ã¢ Skylake (å«ã) NVMe SSD â 512 GBã64 GB DDR4 RAM
3 ã€ã®æ€èšŒçšãã©ãºã ãã£ãã·ã¥ ããŒããçºçããŸããã
2. AMD Ryzen 7 1700X ãªã¯ã¿ã³ã¢ãSummit Ridgeã (Zen)ãSATA SSD â 500 GBã64 GB DDR4 RAM
Ropsten ãã¹ãããã ETH ããŒããç«ã¡äžãããŸããã
3 ã€ã®æ€èšŒçšãã©ãºã ãã£ãã·ã¥ ããŒããçºçããŸããã
3. Intel Core i9-9900K ãªã¯ã¿ã³ã¢ (å«ã) NVMe SSD â 1 TBã64 GB DDR4 RAM
1 ã€ã®ãã©ãºã ãã£ãã·ã¥æåºããŒããçºçããŸããã
3 ã€ã®æ€èšŒçšãã©ãºã ãã£ãã·ã¥ ããŒããçºçããŸããã
Plasma Cash ãããã¯ãŒã¯ã«ãã©ã³ã¶ã¯ã·ã§ã³ãè¿œå ãããã¹ããéå§ãããŸããã
åèšïŒ ãã©ã€ããŒã ãããã¯ãŒã¯å ã® 10 åã® Plasma Cash ããŒãã
ãã¹ã1
ãããã¯ããã 1 äžãã©ã³ã¶ã¯ã·ã§ã³ã®å¶éããããŸãã ãããã£ãŠã1 äžä»¶ã®ãã©ã³ã¶ã¯ã·ã§ã³ã¯ 2 ã€ã®ãããã¯ã«åé¡ãããŸã (ã·ã¹ãã ã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®äžéšãååŸããéä¿¡äžã«éä¿¡ã§ãããã)ã
åæç¶æ : æåŸã®ããã㯠#7; 1 äžä»¶ã®ãã©ã³ã¶ã¯ã·ã§ã³ãšããŒã¯ã³ãããŒã¿ããŒã¹ã«ä¿åãããŸãã
00:00 â ãã©ã³ã¶ã¯ã·ã§ã³çæã¹ã¯ãªããã®éå§
01:37 - 1 äžä»¶ã®ãã©ã³ã¶ã¯ã·ã§ã³ãäœæãããããŒããžã®éä¿¡ãéå§ãããŸãã
01:46 â éä¿¡ããŒãã¯ããŒã«ãã 240k ãã©ã³ã¶ã¯ã·ã§ã³ãååŸããããã㯠#8 ã圢æããŸãã ãŸãã320 ç§ä»¥å
ã« 10 ã®ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ã«è¿œå ãããããšãããããŸãã
01:58 â ããã㯠#8 ã眲åãããæ€èšŒã®ããã«éä¿¡ãããŸã
02:03 â ããã㯠#8 ãæ€èšŒãããããŒã¯ã« ããã·ã¥ãšãããã¯çªå·ã䜿çšããŠã¹ããŒã ã³ã³ãã©ã¯ãã® `submitBlock` é¢æ°ãåŒã³åºãããŸã
02:10 â ã㢠ã¹ã¯ãªããã®åäœãå®äºãã1 ç§ã§ 32 äžä»¶ã®ãã©ã³ã¶ã¯ã·ã§ã³ãéä¿¡ãããŸããã
02:33 - ããŒãã¯ããã㯠#8 ãã«ãŒã ãã§ãŒã³ã«è¿œå ããããšããæ
å ±ãåä¿¡ãå§ãã240k ãã©ã³ã¶ã¯ã·ã§ã³ãå®è¡ãå§ããŸããã
02:40 - 240k ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããåé€ãããŸããããããã¯ãã§ã«ããã㯠#8 ã«ãããŸã
02:56 â éä¿¡ããŒãã¯æ®ãã® 760k ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããååŸããããŒã¯ã« ããã·ã¥ãšçœ²åããã㯠#9 ã®èšç®ãéå§ããŸããã
03:20 - ãã¹ãŠã®ããŒãã«ã¯ 1 äž 240 ã®ãã©ã³ã¶ã¯ã·ã§ã³ãšããŒã¯ã³ãå«ãŸããŠããŸã
03:35 â ããã㯠#9 ã眲åãããæ€èšŒã®ããã«ä»ã®ããŒãã«éä¿¡ãããŸã
03:41 - ãããã¯ãŒã¯ãšã©ãŒãçºçããŸãã
04:40 â ããã㯠#9 ã®æ€èšŒã®åŸ
æ©ãã¿ã€ã ã¢ãŠãã«ãªããŸãã
04:54 â éä¿¡ããŒãã¯æ®ãã® 760k ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ããååŸããããŒã¯ã« ããã·ã¥ãšçœ²åããã㯠#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 ç§ä»¥å
ã« 10 ã®ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ã«è¿œå ãããããšãããããŸãã
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
XNUMX çªç®ãš XNUMX çªç®ã®ãµãŒããŒã§ã¯ãXNUMX ã€ã®æ€èšŒããŒããéä¿¡ããŒãã«çœ®ãæããããŸããã
åæç¶æ : æåŸã®ããã㯠#84; ããŒã¿ããŒã¹ã«ä¿åããããã©ã³ã¶ã¯ã·ã§ã³ãšããŒã¯ã³ã¯ 0 件ã§ã
00:00 â ãããã 3 äžä»¶ã®ãã©ã³ã¶ã¯ã·ã§ã³ãçæããã³éä¿¡ãã 1 ã€ã®ã¹ã¯ãªãããèµ·åãããŸãã
01:38 â 1 äžãã©ã³ã¶ã¯ã·ã§ã³ãäœæãããéä¿¡ããŒã #3 ãžã®éä¿¡ãéå§ãããŸãã
01:50 â éä¿¡ããŒã #3 ã¯ããŒã«ãã 330k ãã©ã³ã¶ã¯ã·ã§ã³ãååŸããããã㯠#85 (f21) ã圢æããŸãã ãŸãã350 ç§ä»¥å
ã« 10 ã®ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ã«è¿œå ãããããšãããããŸãã
01:53 â 1 äžãã©ã³ã¶ã¯ã·ã§ã³ãäœæãããéä¿¡ããŒã #1 ãžã®éä¿¡ãéå§ãããŸãã
01:50 â éä¿¡ããŒã #3 ã¯ããŒã«ãã 330k ãã©ã³ã¶ã¯ã·ã§ã³ãååŸããããã㯠#85 (f21) ã圢æããŸãã ãŸãã350 ç§ä»¥å
ã« 10 ã®ãã©ã³ã¶ã¯ã·ã§ã³ãããŒã«ã«è¿œå ãããããšãããããŸãã
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 - ããã㯠#330 (f250)ã#111855(85e)ã#21(86) ã«è¿œå ããã 65kã87kã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 äžã®ãã©ã³ã¶ã¯ã·ã§ã³ãšããŒã¯ã³ãå«ãŸããŠããŸã
é害ç©
Plasma Cash ã®éçºäžã«ã次ã®åé¡ãçºçããŸããããåŸã ã«è§£æ±ºããã解決ãããŠããŸãã
1. ããŸããŸãªã·ã¹ãã æ©èœã®çžäºäœçšã«ããã競åã ããšãã°ãããŒã«ã«ãã©ã³ã¶ã¯ã·ã§ã³ãè¿œå ããæ©èœã«ããããããã¯ã®éä¿¡ãšæ€èšŒã®äœæ¥ããããã¯ããããŸããã®éã®å Žåãåæ§ã§ãããé床ã®äœäžã«ã€ãªãããŸããã
2. ããŒã¿è»¢éã³ã¹ããæå°éã«æããªããèšå€§ãªæ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ãéä¿¡ããæ¹æ³ã¯ããã«ã¯ããããŸããã§ããã
3. é«ãçµæãéæããããã«ããŒã¿ãã©ãã«ã©ã®ããã«ä¿åããã°ãããã¯æ確ã§ã¯ãããŸããã§ããã
4. 1 äžãã©ã³ã¶ã¯ã·ã§ã³ãå«ããããã¯ã®ãµã€ãºã¯çŽ 100 MB ãå ãããããããŒãéã®ãããã¯ãŒã¯ãã©ã®ããã«æ§æãããã¯æ確ã§ã¯ãããŸããã§ããã
5. ã·ã³ã°ã«ã¹ã¬ãã ã¢ãŒãã§äœæ¥ãããšãé·ãèšç® (ããŒã¯ã« ããªãŒã®æ§ç¯ããã®ããã·ã¥ã®èšç®ãªã©) ãçºçãããšãã«ããŒãéã®æ¥ç¶ãåæãããŸãã
ç§ãã¡ã¯ããããã¹ãŠã«ã©ã®ããã«å¯ŸåŠããã®ã§ãããã?
Plasma Cash ããŒãã®æåã®ããŒãžã§ã³ã¯ããã©ã³ã¶ã¯ã·ã§ã³ã®åãå ¥ãããããã¯ã®éä¿¡ãšæ€èšŒãããŒã¿ã«ã¢ã¯ã»ã¹ããããã® API ã®æäŸãªã©ããã¹ãŠãåæã«å®è¡ã§ããäžçš®ã®çµã¿åããã§ããã NodeJS ã¯ãã€ãã£ãã«ã·ã³ã°ã«ã¹ã¬ããã§ãããããéãããŒã¯ã« ããªãŒèšç®é¢æ°ããã©ã³ã¶ã¯ã·ã§ã³è¿œå é¢æ°ããããã¯ããŠããŸããã ãã®åé¡ã解決ããã«ã¯ XNUMX ã€ã®ãªãã·ã§ã³ãããããšãããããŸããã
1. ãããããç¹å®ã®æ©èœãå®è¡ããè€æ°ã® NodeJS ããã»ã¹ãèµ·åããŸãã
2. worker_threads ã䜿çšããŠãã³ãŒãã®äžéšã®å®è¡ãã¹ã¬ããã«ç§»åããŸãã
ãã®çµæãäž¡æ¹ã®ãªãã·ã§ã³ãåæã«äœ¿çšããŸãããã€ãŸãã3 ã€ã®ããŒããè«ççã« XNUMX ã€ã®éšåã«åå²ããåå¥ã«åäœã§ãããšåæã«åæçã«åäœã§ããããã«ããŸããã
1. éä¿¡ããŒããããŒã«ãžã®ãã©ã³ã¶ã¯ã·ã§ã³ãåãå ¥ãããããã¯ãäœæããŸãã
2. ããŒãã®æå¹æ§ããã§ãã¯ããæ€èšŒããŒãã
3. API ããŒã - ããŒã¿ã«ã¢ã¯ã»ã¹ããããã® API ãæäŸããŸãã
ãã®å Žåãcli ã䜿çšã㊠Unix ãœã±ããçµç±ã§åããŒãã«æ¥ç¶ã§ããŸãã
ããŒã¯ã« ããªãŒã®èšç®ãªã©ã®éãæäœãå¥ã®ã¹ã¬ããã«ç§»åããŸããã
ãã®ããã«ããŠããã¹ãŠã®ãã©ãºã ãã£ãã·ã¥æ©èœãåæã«ãé害ãªãæ£åžžã«åäœãããããšãã§ããŸããã
ã·ã¹ãã ãæ©èœããããã«ãªã£ãããé床ã®ãã¹ããéå§ããŸããããæ®å¿µãªããšã«ã5 ç§ããã 000 ãã©ã³ã¶ã¯ã·ã§ã³ããããã¯ãããæ倧 50 ãã©ã³ã¶ã¯ã·ã§ã³ãšããæºè¶³ã®ããçµæã¯åŸãããŸããã§ããã äœãééã£ãŠå®è£ ãããã®ããææ¡ããå¿ èŠããããŸããã
ãŸããã·ã¹ãã ã®ããŒã¯èœåã調ã¹ãããã«ããã©ãºã ãã£ãã·ã¥ãšéä¿¡ããã¡ã«ããºã ã®ãã¹ããéå§ããŸããã Plasma Cash ããŒã㯠Unix ãœã±ãã ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸãããšä»¥åã«æžããŸããã åœåã¯ããã¹ãããŒã¹ã§ããã 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 åã® XNUMX ã«äœäžããŸãããããã¯ãOOP ãç§ãã¡ã«ã¯é©ããŠããªãããšã瀺ããŠããŸãã ãã¹ãŠãçŽç²ã«é¢æ°åã®ã¢ãããŒãã«æžãçŽãå¿ èŠããããŸããã
ããŒã¿ããŒã¹ãžã®èšé²
åœåãRedis ã¯ãããŒãšå€ã®ã¹ãã¬ãŒãžãããã·ã¥ ããŒãã«ãã»ããã®æäœãªã©ãç§ãã¡ã®èŠä»¶ãæºããæãçç£çãªãœãªã¥ãŒã·ã§ã³ã® 80 ã€ãšããŠããŒã¿ ã¹ãã¬ãŒãžã«éžã°ããŸããã redis-benchmark ãèµ·åãããšããã1 ãã€ãã©ã€ã³ ã¢ãŒã㧠XNUMX ç§ãããæ倧 XNUMX ã®æäœãåŸãããŸããã
é«ãããã©ãŒãã³ã¹ãå®çŸããããã«ãRedis ããã现ãã調æŽããŸããã
- UNIX ãœã±ããæ¥ç¶ã確ç«ãããŸããã
- ãã£ã¹ã¯ãžã®ç¶æ ã®ä¿åãç¡å¹ã«ããŸãã (ä¿¡é Œæ§ãé«ããããã«ãã¬ããªã«ãã»ããã¢ããããŠå¥ã® Redis ã§ãã£ã¹ã¯ã«ä¿åã§ããŸã)ã
Redis ã§ã¯ãXNUMX ã€ã®ã¯ãšãªã§ãã¹ãŠã®ãã©ã³ã¶ã¯ã·ã§ã³ãååŸãããã©ã³ã¶ã¯ã·ã§ã³ã XNUMX ã€ãã€åé€ã§ããå¿ èŠããããããããŒã«ã¯ããã·ã¥ ããŒãã«ã§ãã éåžžã®ãªã¹ãã䜿çšããŠã¿ãŸãããããªã¹ãå šäœãã¢ã³ããŒããããšé床ãé ããªããŸãã
æšæºã® NodeJS ã䜿çšãããšãRedis ã©ã€ãã©ãªã¯ 18 ç§ããã 9 ãã©ã³ã¶ã¯ã·ã§ã³ã®ããã©ãŒãã³ã¹ãéæããŸããã é床ã¯XNUMXåã«èœã¡ãŸããã
ãã³ãããŒã¯ã«ãã£ãŠå¯èœæ§ãæããã« 5 å倧ããããšã瀺ããããããæé©åãéå§ããŸããã ã©ã€ãã©ãªã ioredis ã«å€æŽãããšããã25 ç§ããã 32k ã®ããã©ãŒãã³ã¹ãåŸãããŸããã hset ã³ãã³ãã䜿çšããŠãã©ã³ã¶ã¯ã·ã§ã³ã XNUMX ã€ãã€è¿œå ããŸããã ãã®ãããRedis ã§å€§éã®ã¯ãšãªãçæããŠããŸããã ãã©ã³ã¶ã¯ã·ã§ã³ããããã«çµåãããããã XNUMX ã€ã®ã³ãã³ã `hmset` ã§éä¿¡ãããšããã¢ã€ãã¢ãçãŸããŸããã çµæã¯æ¯ç§ XNUMXk ã«ãªããŸãã
以äžã§èª¬æããããã€ãã®çç±ã«ããã`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)` ã䜿çšããŠãããŒã¿ã Redis ã«ä¿åããããå¥ã®ããŒãã«è»¢éããŠååŸãããããããã® `Buffer` ã«å€æããŸããããŒã¿ãæ»ããŸãã
ãµãŒãã¹éã§ããŒã¿ã転éããããã® 2 ã€ã®ãã€ã㪠ãããã³ã«ããããŸãã
â 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)
}
```
ããã§ïŒ
- `ã¿ã€ã` â å®è¡ãããã¢ã¯ã·ã§ã³ãããšãã°ã1 â sendTransactionã2 â getTransactionã
- ããã€ããŒãã â é©åãªé¢æ°ã«æž¡ãå¿ èŠãããããŒã¿ã
- `ã¡ãã»ãŒãžID` â å¿çãèå¥ã§ããã¡ãã»ãŒãž IDã
â ããŒãéã®å¯Ÿè©±ã®ããã®ãããã³ã«
```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ã
- `ããŒãžã§ã³ãããã³ã«` â ãããã³ã«ã®ããŒãžã§ã³ãç°ãªãããŒãžã§ã³ã®ããŒãããããã¯ãŒã¯äžã§èµ·åãããç°ãªãåäœãããå¯èœæ§ãããããã
- `ã·ãŒã±ã³ã¹` â ã¡ãã»ãŒãžèå¥åã
- `ã«ãŠã³ããã£ã³ã¯` О `ãã£ã³ã¯çªå·` 倧ããªã¡ãã»ãŒãžãåå²ããããã«å¿ èŠã§ãã
- ãé·ãã О ããã€ããŒãã é·ããšããŒã¿èªäœã
ããŒã¿ãäºåã«å ¥åãããããæçµçãªã·ã¹ãã ã¯ã€ãŒãµãªã¢ã ã®ãrlpãã©ã€ãã©ãªãããã¯ããã«é«éã§ãã æ®å¿µãªãããå°æ¥çã«ã¯ã¹ããŒãã³ã³ãã©ã¯ããå®æãããå¿ èŠãããããããŸã æåŠã§ããŸããã
ãªããšããã®ã¹ããŒãã«å°éã§ããã 35 000 30 ç§ãããã®ãã©ã³ã¶ã¯ã·ã§ã³ãæé©ãªæéã§åŠçããå¿ èŠããããŸãã ããããã®ãããã¯åœ¢ææé㯠XNUMX ç§ãããããããããã¯ã«å«ããå¿ èŠããããŸãã 1 000 000 ãã©ã³ã¶ã¯ã·ã§ã³ãã€ãŸãããå€ãã®éä¿¡ãæå³ããŸã 100 MB ã®ããŒã¿ã
åœåãããŒãéã®éä¿¡ã«ãethereumjs-devp2pãã©ã€ãã©ãªã䜿çšããŠããŸããããããã»ã©å€ãã®ããŒã¿ãåŠçã§ããŸããã§ããã ãã®çµæã`ws` ã©ã€ãã©ãªã䜿çšããWebSocket çµç±ã§ãã€ã㪠ããŒã¿ãéä¿¡ããããã«èšå®ããŸããã ãã¡ããã倧ããªããŒã¿ ãã±ãããéä¿¡ãããšãã«åé¡ãçºçããŸãããããã±ããããã£ã³ã¯ã«åå²ããããšã§ããããã®åé¡ã¯ãªããªããŸããã
ããŒã¯ã«ããªãŒã®åœ¢æãšããã·ã¥ã®èšç®ãè¡ã 1 000 000 ãã©ã³ã¶ã¯ã·ã§ã³ã«ã¯çŽãå¿ èŠã§ã 10 æ°ç§éã®é£ç¶èšç®ã ãã®éããã¹ãŠã®ããŒããšã®æ¥ç¶ã¯åæãããŸãã ãã®èšç®ãå¥ã®ã¹ã¬ããã«ç§»åããããšã決å®ãããŸããã
çµè«ïŒ
å®éãç§ãã¡ã®çºèŠã¯æ°ãããã®ã§ã¯ãããŸããããäœããã®çç±ã§å€ãã®å°é家ã¯éçºäžã«ããããå¿ããŠããŸããŸãã
- ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã®ä»£ããã«é¢æ°åããã°ã©ãã³ã°ã䜿çšãããšãçç£æ§ãåäžããŸãã
- ã¢ããªã¹ã¯ãçç£ç㪠NodeJS ã·ã¹ãã ã®ãµãŒãã¹ ã¢ãŒããã¯ãã£ãããæªãã§ãã
- 倧éã®èšç®ã«ãworker_threadsãã䜿çšãããšãç¹ã« I/O æäœãåŠçããå Žåã®ã·ã¹ãã ã®å¿çæ§ãåäžããŸãã
- unix ãœã±ãã㯠http ãªã¯ãšã¹ããããå®å®ããŠãããé«éã§ãã
- ãããã¯ãŒã¯çµç±ã§å€§èŠæš¡ãªããŒã¿ãè¿ éã«è»¢éããå¿ èŠãããå Žåã¯ãWebSocket ã䜿çšããŠãã€ã㪠ããŒã¿ããã£ã³ã¯ã«åå²ããŠéä¿¡ããå°çããªãå Žåã¯è»¢éããŠãXNUMX ã€ã®ã¡ãã»ãŒãžã«çµåããããšããå§ãããŸãã
ãã²ã蚪åãã ãã GitHubã® ãããžã§ã¯ãïŒ
ãã®èšäºã®å
±åå·çè
ã¯ã ã¢ã¬ã¯ãµã³ããŒã»ãã·ãã³ãã·ãã¢éçºè
åºæïŒ habr.com