人é¡ã®æŽå²å šäœã¯ãéãåãé€ãããã匷åãªæ°ããéãäœæããç¶ç¶çãªããã»ã¹ã§ãã ïŒå¿åã®èè ïŒ
å€æ°ã®ãããã¯ãã§ãŒã³ ãããžã§ã¯ã (BitsharesãHyperledgerãExonumãEthereumãBitcoin ãªã©) ãåæãããšãæè¡çãªèŠ³ç¹ããããããã¯ãã¹ãŠåãåçã«åºã¥ããŠæ§ç¯ãããŠããããšãããããŸããã ãããã¯ãã§ãŒã³ã¯ãããŸããŸãªãã¶ã€ã³ãè£ é£Ÿãç®çã«ãããããããåºç€ãå£ãå±æ ¹ãçªããã¢ãç¹å®ã®æ¹æ³ã§äºãã«æ¥ç¶ãããŠãã家ãæãåºãããŸãã ãããŠã建ç¯èšèšã®åºæ¬ååãç解ãã䜿çšãããææã®ç¹æ§ãç¥ã£ãŠããã°ãç¹å®ã®å®¶ã®æå³ãããç®çã決å®ããããšãã§ããŸãã çŸåšããããã¯ãã§ãŒã³ã«ã€ããŠã¯èª°ããèããããšããããã®ã®ããã®ã¢ãŒããã¯ãã£ãåäœåçãç解ããŠãã人ã¯ã»ãšãã©ããªããšããç¶æ³ãçããŠããŸãã ãããã£ãŠããããã¯ãã§ãŒã³æè¡ã䜿çšããããšããªãããŸãã©ã®ããã«æå³ãããã®ãââã«ã€ããŠèª€è§£ãçããŠããŸãã
ãã®èšäºã§ã¯ããã¹ãŠã®ãããã¯ãã§ãŒã³ã«å ±éããç¹æ§ãšååãåæããŸãã 次ã«ããããã¯ãã§ãŒã³ã䜿çšããŠè§£æ±ºã§ããåé¡ãèŠãŠãå 容ãè£åŒ·ããããã«ãä»®æ³ãµã€ãäžã«å°ãããªãããæ¬ç©ã®ãããã¯ãã§ãŒã³ãæ§ç¯ããŠã¿ãŸãããã
ããã§ã¯ããããã¯ãã§ãŒã³ãæåã«ã©ã®ãããªåé¡ã解決ããããæãåºããŠã¿ãŸãããã
å€ãã®äººããåæ£åãééäžåããããªãã¯ã§äžå€ã®ããŒã¿ããŒã¹ã«ã€ããŠèšãã§ãããã ãããããªãããã ãã®ããšãå¿
èŠã ã£ãã®ã§ãããã?
ç 究察象ã®ãããã¯ã«é¢ãããã¹ãŠã®èšäºãæžç±ã¯èŠæ Œã«åºã¥ããŠãããããç§ã¯èŠæ Œãèªãããšãããã¯ãããžãŒã®å匷ãå§ããããšã奜ã¿ãŸãã ããããçŸæç¹ã§ã¯ãããã¯ãã§ãŒã³æšæºã¯ååšãããISO ãäœæããã ãã§ãã
ãããã¯ãã§ãŒã³ãã£ã¬ã³ãž
ãããã£ãŠããããã³ã€ã³ã®ãã€ãªãã¢ãããã¯ãŒã¯ã§ãããã¯ãã§ãŒã³ã解決ãã課é¡ã¯ãä¿¡é Œã§ããªãç°å¢ã§ä»²ä»è ãªãã§ããžã¿ã«è³ç£ïŒè³ç£ïŒã®æææš©ã®ä¿¡é Œã§ãã移転ãå®è¡ããããšã§ãã ããšãã°ããããã³ã€ã³ ãããã¯ãŒã¯ã§ã¯ãããžã¿ã«è³ç£ã¯ãããã³ã€ã³ ããžã¿ã« ã³ã€ã³ã§ãã ãããŠããããã³ã€ã³ããã®ä»ã®ãããã¯ãã§ãŒã³ã®ãã¹ãŠã®æè¡çãœãªã¥ãŒã·ã§ã³ã¯ãçµå±ã®ãšããããã®åé¡ã解決ããããšã«åž°çããŸãã
ãããã¯ãã§ãŒã³ã解決ããåé¡
ããéèæ©é¢ããäžçäžã«ãããã¯ãŒã¯ãæ§ç¯ãããã®ãããã¯ãŒã¯ãå©çšããŠèª°ã«ã§ãééã§ãããšäž»åŒµãããšããŸãã 圌女ãä¿¡ããŸããïŒ ãã®çµç¹ã Visa ãŸã㯠MasterCard ã§ããã°ãã»ãšãã©ã®å Žåä¿¡ããããã§ãããããçžå¯Ÿçã«èšãã°ãAnonymousWorldMoney ã§ããã°ãããããä¿¡ããªãã§ãããã ãªãïŒ ããããç§ãã¡ã¯åæ£ã·ã¹ãã ãæ°éäŒæ¥ã«ãã£ãŠã©ã®ããã«äœãããã©ã®ãããªç®çã§äœããããããäœãããããå¯èœæ§ãããããããç¥ã£ãŠããããã§ãã ãã®ãããªã·ã¹ãã ã®åé¡ãšããããã¯ãã§ãŒã³æè¡ã䜿çšããŠããããã©ã®ããã«è§£æ±ºã§ãããã詳ããèŠãŠã¿ãŸãããã
æ¡ä»¶ä»ãã® AnonymousWorldMoney ã«ããŒã¿ããŒã¹ãåãããµãŒããŒãããããããã®ãµãŒããŒãè€æ°ã®ç°ãªãããŒã¿ ã»ã³ã¿ãŒã«ãããšãããšããŸãã éä¿¡è ãééãããšãã©ã³ã¶ã¯ã·ã§ã³ãç»é²ããããã¹ãŠã®ãµãŒããŒã«è€è£œãããééãåä¿¡è ã«å±ããŸãã
çæ³çãªäžçã§ã¯ããã®ã¹ããŒã ã¯ããŸãæ©èœããŸãããç§ãã¡ã®äžçã§ã¯æ¬¡ã®åé¡ãçºçããŸãã
- äžæ¹ã§ã¯åå è ãç¹å®ãããšããåé¡ããããä»æ¹ã§ã¯ååŒã®å¿åæ§ã®å¿ èŠæ§ããããŸãã ãããã®ã ååŒã®åå è 以å€ã«ã¯èª°ããã®ååŒã«ã€ããŠç¥ãããªããããªæ¹æ³ã§ãç¹å®ã®åå人ã«ééããå¿ èŠããããŸãã éè¡ã¯ç¹å®ã®å人ãŸãã¯æ³äººã«é¢é£ä»ããããå£åº§çªå·ãšéè¡ã«ãŒããæã£ãŠãããååŒæ å ±ã¯éè¡ç§å¯ã«ãã£ãŠä¿è·ãããŠããŸãã ãããŠãæ¡ä»¶ä»ãã® AnonymousWorldMoney ãå人ããŒã¿ãååŒæ å ±ãç¬èªã®ç®çã§äœ¿çšããªãããšã誰ãä¿èšŒããŸãã?
- åå人ãééãããéé¡ãæ£ç¢ºã«åãåã£ãããšã確èªããã«ã¯ã©ãããã°ããã§ãããã? çžå¯Ÿçã«èšãã°ãéä¿¡è 㯠100 ãã«ãééããåä¿¡è 㯠10 ãã«ãåãåããŸããã éãäž»ãé åæžãæã£ãŠAnonymousWorldMoneyã®ãªãã£ã¹ã«æ¥ããšãäºåå¡ãé åæžãèŠããŸãããããã«ã¯éãäž»ã10ãã«ã ããééãããšæžãããŠããŸãã
- ä¿¡é Œã§ããªãç°å¢ã®åé¡ (äºéæ¯æããšåŒã°ããè©æ¬ºãªã©)ã æªæã®ããåå è
ã¯ãæ¯æãããã¹ãŠã®ãµãŒããŒã«è€è£œããããŸã§ãæ®é«ãäœåºŠã䜿ãåãå¯èœæ§ããããŸãã
CAPå®ç ããã¡ããã誰ããã£ã³ã»ã«ãããæçµçã«åæã¯éæãããŸãããæäŸããããµãŒãã¹ãååã®å¯ŸäŸ¡ãšããŠèª°ãããéãåãåãããšã¯ãããŸããã ãããã£ãŠã決æžæ©é¢ãååŒåå è ã«å®å šãªä¿¡é Œããªãå Žåã¯ãä¿¡é Œã§ã¯ãªãæå·ã«åºã¥ããŠãããã¯ãŒã¯ãæ§ç¯ããå¿ èŠããããŸãã - æ¡ä»¶ä»ã AnonymousWorldMoney ã«ã¯ãæå³ããããŸãã¯æªæãåå ã§å©çšã§ããªããªãå¯èœæ§ã®ãããµãŒããŒã®æ°ãæéã§ãã
- AnonymousWorldMoney ã¯ç¬èªã®å ·äœçãªææ°æãåãåããŸãã
- ã³ã³ãããŒã«ã®å¯èœæ§ã ãããã³ã€ã³ã®éçšã«ãããŠã人ã ã¯ã³ã€ã³ãçžäºã«ééããã ãã§ãªããååŒã®ããŸããŸãªæ¡ä»¶ã確èªããããäœæ¥ã·ããªãªãããã°ã©ã ããããæ¡ä»¶ã«å¿ããŠã¢ã¯ã·ã§ã³ãèªåçã«å®è¡ãããããããšãªã©ãæãã§ããããšãå€æããŸããã
ãããã¯ãã§ãŒã³ããããã®åé¡ãã©ã®ããã«è§£æ±ºããã
- åå è ã®èå¥ã¯ãç§å¯éµãšå ¬ééµã®ãã¢ã䜿çšããŠå®è¡ãããããžã¿ã«çœ²åã¢ã«ãŽãªãºã ã«ããéä¿¡è ãšåä¿¡è ãäžæã«èå¥ãããã®èº«å ã¯å¿åã®ãŸãŸã«ãªããŸãã
- ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãããã¯ã«åéããããããã¯ã®ããã·ã¥ãèšç®ãããŠæ¬¡ã®ãããã¯ã«æžã蟌ãŸããŸãã ããã·ã¥ããããã¯ã«èšé²ãããã®ã·ãŒã±ã³ã¹ã«ããããããã¯ãã§ãŒã³æè¡ã«ãã®ååãä»ãããããããã¯ããããã¯ããã®åã ã®ãã©ã³ã¶ã¯ã·ã§ã³ã人ç®ã«ã€ããªãããã«å€æŽ/åé€ããããšãäžå¯èœã«ãªããŸãã ãããã£ãŠããã©ã³ã¶ã¯ã·ã§ã³ããããã¯ãã§ãŒã³ã«å«ãŸããŠããå Žåããã®ããŒã¿ã¯å€æŽãããªãããšãä¿èšŒãããŸãã
- ã©ã®ããŒã¿ãæå¹ãšã¿ãªããã©ã®ããŒã¿ãç Žæ£ãããã«ã€ããŠãããã¯ãŒã¯ã®åæã«éããããšã§ãäºéæ¯åºè©æ¬ºãé²æ¢ããŸãã ãããã³ã€ã³ ãããã¯ãŒã¯ã§ã¯ããã«ãŒã ãªã ã¯ãŒã¯ (PoW) ã«ãã£ãŠåæãåŸãããŸãã
- ãããã¯ãŒã¯ã®ä¿¡é Œæ§ã¯ããããã¯ãã§ãŒã³ããããªãã¯ã§ãããšããäºå®ã«ãã£ãŠå®çŸãããååå è ã¯èªåã®ããŒããå®è¡ãããããã¯ãã§ãŒã³ã®å®å šãªã³ããŒãåãåããããã«ç¬ç«ããŠãã©ã³ã¶ã¯ã·ã§ã³ã®æ£ããã®ãã§ãã¯ãéå§ã§ããŸãã ææ°ã®ãããã¯ãã§ãŒã³ã§ã¯ããããªã㯠(ãªãŒãã³) ãããã¯ãã§ãŒã³ã ãã§ãªãããã©ã€ããŒã (ã¯ããŒãºã) ãããã¯ãã§ãŒã³ã®æ§ç¯ããçµã¿åãããã¹ããŒã ã®äœ¿çšãå¯èœã§ããããšã«æ³šæããŠãã ããã
- ãããã¯ãã§ãŒã³ã«ãã£ãŠææ°æãå®å šã«ãªããªãããã§ã¯ãããŸããããªããªã... ãããã¯ãŒã¯ããµããŒããã人ã ã«æéãæ¯æããªããã°ãªããŸãããããããã¯ãã§ãŒã³ã§ã¯ææ°æã®å¿ èŠæ§ã説åŸåãæã£ãŠèšŒæãããŠããããããã®å¿ èŠæ§ã«ã€ããŠã¯çãã®äœå°ããããŸããã
- ææ°ã®ãããã¯ãã§ãŒã³ã«ã¯ããããã¯ãã§ãŒã³å ã§ã¹ããŒã ã³ã³ãã©ã¯ããšåŒã°ããããžãã¹ ããžãã¯ãå®è£ ããæ©èœããããŸãã ã¹ããŒã ã³ã³ãã©ã¯ãã®ããžãã¯ã¯ãããŸããŸãªé«çŽèšèªã§å®è£ ãããŠããŸãã
次ã«ããããã®è§£æ±ºçãããã«è©³ããæ€èšããŸãã
ãããã¯ãã§ãŒã³ã¢ãŒããã¯ãã£
ãããã¯ãã§ãŒã³ã³ã³ããŒãã³ã
ååå è
ã¯ããããã¯ãã§ãŒã³ã®å®å
šãªã³ã㌠(ãã«ããŒã) ã䜿çšããŠç¬èªã®ããŒããèµ·åã§ããŸãã ãããã¯ãã§ãŒã³äžã«ãã©ã³ã¶ã¯ã·ã§ã³ãèšé²ã§ãããã«ããŒããåŒã³ãŸãã ã³ã³ã»ã³ãµã¹ããŒã ïŒèšŒäººïŒãŸãã¯é±å€«ïŒé±å€«ïŒã ãã©ã³ã¶ã¯ã·ã§ã³ã®æ£ããããã§ãã¯ããã ãã®å®å
šãªããŒããåŒã³åºãããŸãã ç£æ»ããŒã ïŒç£æ»ïŒã ã©ã€ãã¯ã©ã€ã¢ã³ã (ã©ã€ãã¯ã©ã€ã¢ã³ã) ã¯ãããã¯ãã§ãŒã³ã®å®å
šãªã³ããŒãä¿åããŸããããå®å
šãªããŒãã䜿çšããŠãããã¯ãŒã¯ãšå¯Ÿè©±ããŸãã
ã»ãšãã©ã®ãŠãŒã¶ãŒã¯ããã©ã³ã¶ã¯ã·ã§ã³ãè¡ãããã«ã©ã€ãã¯ã©ã€ã¢ã³ããŸãã¯ãŠã§ããŠã©ã¬ããã䜿çšããŸãã ãã¹ãŠã®ããŒãã¯çžäºã«æ¥ç¶ãããŠããŸãã ãã®äžé£ã®èŠçŽ ã«ããããããã¯ãŒã¯ ã¢ãŒããã¯ãã£ã¯ããå®å®ããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ã®ã©ã€ããµã€ã¯ã«
ãã©ã³ã¶ã¯ã·ã§ã³ã®ã©ã€ããµã€ã¯ã«ãèŠãŠãéšåçã«å解ããŠã¿ãŸãããã
ãããã¯ãã§ãŒã³æè¡
æè¡çãªãœãªã¥ãŒã·ã§ã³ãšãã®çžäºã®é¢ä¿ã«ã€ããŠè©³ããèŠãŠã¿ãŸãããã
èå¥
ãã¹ãŠã®ãããã¯ãã§ãŒã³ãã©ã³ã¶ã¯ã·ã§ã³ã¯ããžã¿ã«çœ²åãããå¿ èŠããããŸãã ãããã£ãŠããã©ã³ã¶ã¯ã·ã§ã³ãå®äºããã«ã¯ãååå è ãç§å¯éµãšå ¬ééµã®ãã¢ãæã£ãŠããå¿ èŠããããŸãã éµã®ãã¢ã¯ãŠã©ã¬ãããšåŒã°ããããšããããŸãã ããŒã¯åå è ã®åºæã®ããžã¿ã« ã¢ãã¬ã¹ãšæ®é«ã«äžæã«é¢é£ä»ããããŸãã å®éã«ã¯ãããŒãšã¢ãã¬ã¹ã¯ãç°ãªãçªå·äœç³»ã®åãªãæ°åã®æååã§ãã ããŒãšãŠã©ã¬ããã®ã¢ãã¬ã¹ã®äŸ:
Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V
ãããã¯ãã§ãŒã³ã§ããžã¿ã«çœ²åãäœæããã«ã¯ãæ¥åæ²ç·ã«åºã¥ãã¢ã«ãŽãªãºã ãæ¥åæ²ç·ããžã¿ã«çœ²åã¢ã«ãŽãªãºã (ECDSA) ã䜿çšãããŸãã ãããæ©èœããããã«ã¯ãéåžžãç§å¯ã㌠(256 ãããã®æ°å€) ãã©ã³ãã ã«ååŸãããŸãã ããŒã®ãªãã·ã§ã³ã®æ°ã¯ 2 ã® 256 ä¹ã§ãããããç§å¯ããŒã®å€ãäžèŽãããããšã¯äºå®äžäžå¯èœã§ãããšèšããŸãã
次ã«ãå ¬ééµã¯ããã®å€ã«æ¥åæ²ç·äžã®ç¹ã®åº§æšãä¹ç®ããããšã«ãã£ãŠç§å¯éµããååŸããããã®çµæãåãæ²ç·äžã®æ°ããç¹ã®åº§æšãåŸãããŸãã ãã®ã¢ã¯ã·ã§ã³ã«ããããã©ã³ã¶ã¯ã·ã§ã³ã®ããžã¿ã«çœ²åã«é©ããã㌠ãã¢ã確å®ã«ååŸã§ããŸãã æåŸã«ããŠã©ã¬ãã ã¢ãã¬ã¹ã¯å ¬éããŒããäžæã«å°åºãããŸãã
ãããã¯ãã§ãŒã³ã§äœ¿çšãããæå·åã«ã€ããŠè©³ãã説æããèšäºã¯ãããããããŸããããšãã°ã次ã®ãšããã§ãã
ç§å¯ããŒã¯å³éã«æ©å¯ã«ããå®å šã«ä¿ç®¡ããå¿ èŠããããŸãã å ¬ééµã¯èª°ããç¥ã£ãŠããŸãã ç§å¯ããŒã倱ããããšãè³ç£ (ã³ã€ã³) ãžã®ã¢ã¯ã»ã¹ã¯åŸ©å ã§ããããéã¯æ°žä¹ ã«å€±ãããŸãã ãããã£ãŠãç§å¯éµãå®å šã«ä¿ç®¡ããã¿ã¹ã¯ã¯éåžžã«éèŠã§ãã ããã¯ãã¹ããŒããæã£ãŠãã€ã§ãæ¥ãŠå£åº§ã埩å ã§ããéè¡ã§ã¯ãããŸããã æ¥çå šäœãããã©ãã·ã¥ ãã©ã€ãã«äŒŒããããããã³ãŒã«ãæå·ãŠã©ã¬ããã補é ããŠããŸãã
ãŸãã¯ãããŒã¯ã³ã«ç§å¯ããŒã®å€ãã¹ã¿ã³ããããªã©ãããä¿¡é Œæ§ã®é«ãæ¹æ³ã䜿çšããããšãã§ããŸãã
ååŒ
ãã©ã³ã¶ã¯ã·ã§ã³æ§é ã®è©³çŽ°ã«ã€ããŠã¯ãèšäºãåç
§ããŠãã ããã
From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - ÑОÑÑПвПй аЎÑÐµÑ ÐŸÑпÑавОÑелÑ
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - ÑОÑÑПвПй аЎÑÐµÑ Ð¿ÐŸÐ»ÑÑаÑелÑ
Value: 0.0001 - ÑÑЌЌа ÑÑаМзакÑОО
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - Ñ
ÑÑ ÑÑаМзакÑОО
次ã«ããã©ã³ã¶ã¯ã·ã§ã³ã¯ç§å¯éµã§çœ²åãããéä¿¡ãããŸã (ãããã³ã«ã®åäœã®è©³çŽ°ãåç
§)
ãã©ã³ã¶ã¯ã·ã§ã³ãããã¯
ãã©ã³ã¶ã¯ã·ã§ã³ã®æå¹æ§ããã§ãã¯ããåŸãããŒãã¯ãã©ã³ã¶ã¯ã·ã§ã³ãããããã¯ã圢æããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ã«å ããŠãåã®ãããã¯ã®ããã·ã¥ãšæ°å€ (Nonce ã«ãŠã³ã¿) ããããã¯ã«æžã蟌ãŸããçŸåšã®ãããã¯ã®ããã·ã¥ã SHA-256 ã¢ã«ãŽãªãºã ã䜿çšããŠèšç®ãããŸãã ããã·ã¥ã«ã¯è€éãã®æ¡ä»¶ã確ç«ãããŠããå¿ èŠããããŸãã ããšãã°ããããã³ã€ã³ãããã¯ãŒã¯ã§ã¯ããããã¯ãŒã¯ã®èœåã«å¿ããŠããã·ã¥ã®é£æ床ã2é±éããšã«èªåçã«å€æŽãããçŽ10åã«1åãããã¯ãçæãããŸãã è€éãã¯ã次ã®æ¡ä»¶ã«ãã£ãŠæ±ºå®ãããŸããèŠã€ãã£ãããã·ã¥ã¯ãæå®ã®æ°æªæºã§ããå¿ èŠããããŸãã ãã®æ¡ä»¶ãæºããããªãå Žåã¯ãNonce ã« XNUMX ãè¿œå ãããããã·ã¥ãèšç®ããäœæ¥ãç¹°ãè¿ãããŸãã ããã·ã¥ãéžæããã«ã¯ãNonce ãã£ãŒã«ãã䜿çšãããŸãã ãããã¯å ã®å€æŽã§ããããŒã¿ã¯ããã ãã§ãããæ®ãã¯å€æŽããªãã§ãã ããã æå¹ãªããã·ã¥ã«ã¯ãå®éã®ããã·ã¥ã® XNUMX ã€ãªã©ãç¹å®ã®æ°ã®å é ã®ãŒããå¿ èŠã§ãã
000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91
ããã·ã¥ã®æ€åºã«æåãããšããããã³ã€ã³ãŸãã¯ã€ãŒãµãªã¢ã ãããã¯ãŒã¯ã®äœæ¥å®äºã®èšŒæ (Proof-of-WorkãPoW) ã«ãªããŸãã ããã·ã¥ãèŠã€ããããã»ã¹ã¯ãéã®æ¡æãšåæ§ã«ãã€ãã³ã°ãšåŒã°ããŸãã ãã®ååã¯ããã»ã¹ã®æ¬è³ªãéåžžã«æ£ç¢ºã«å®çŸ©ããŠããŸãã ãªãã·ã§ã³ãç°¡åã«æ€çŽ¢ããã ãã§ã誰ããé©åãªããã·ã¥ãèŠã€ããããã°ãããã¯æ¬åœã«å¹žéã§ãã ããã¯ã倧éã®å»ç³ã®äžããæ¬ç©ã®éå¡ãèŠã€ãããããªãã®ã§ãã ãããã¯å ±é ¬ã¯çŸåš 12.5 BTC ã§ãããã«çŸåšã®ãããã³ã€ã³ ã¬ãŒãã® 3900 ãã«ãæãããšãXNUMX ããã°ã©ã 以äžã®çŽéãåŸãããããšã«ãªããŸãã æŠãã¹ããã®ãããïŒ
ããã·ã¥ãæ£åžžã«èŠã€ãããšããããã¯ãšèŠã€ãã£ãããã·ã¥èªäœã次ã®ãããã¯ãšããŠãããã¯ãã§ãŒã³ã«æžã蟌ãŸããŸãã ãããã¯ã®æ§é ã®è©³çŽ°ã«ã€ããŠã¯ãèšäºãåç
§ããŠãã ããã
ãããã¯ãã§ãŒã³ã¯ãåã®ãããã¯ã®ããã·ã¥ããŸã æã£ãŠããªããããã¯ããå§ãŸããŸãã ãã®ãããªãããã¯ã¯ãããã¯ãã§ãŒã³å
ã« XNUMX ã€ã ãååšããç¬èªã®åå Genesis ãããã¯ãæã¡ãŸãã æ®ãã®ãããã¯ã¯åãæ§é ãæã¡ããã©ã³ã¶ã¯ã·ã§ã³ã®æ°ã ããç°ãªããŸãã ãããã³ã€ã³ãŸãã¯ã€ãŒãµãªã¢ã ã§çŸåšäœæãããŠããå®éã®ãã©ã³ã¶ã¯ã·ã§ã³ãšãããã¯ã¯ã次ã®å Žæã§è¡šç€ºã§ããŸãã
ãããã³ã€ã³ã®ãããã¯ã®ãµã€ãºã¯ 1MB ã«å¶éãããŠããããã©ã³ã¶ã¯ã·ã§ã³å ã®æå°æ å ±éãçŽ 200 ãã€ãã®å Žåããããã¯å ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®æ倧æ°ã¯çŽ 6000 ã«ãªããŸãã ã¡ãªã¿ã«ãããããã¯èª°ããç¬ããããã³ã€ã³ã®ããã©ãŒãã³ã¹ã«åŸããŸãããããã¯ã¯çŽ 10 å * 60 ç§ = 600 ç§ã« 10 åçæãããæ£åŒãªããã©ãŒãã³ã¹ã¯çŽ 15 TPS ã«ãªããŸãã å®éã«ã¯ãããã¯çç£æ§ã§ã¯ãªããæå³çã«å®è£ ãããäœæ¥ã¢ã«ãŽãªãºã ã§ãã ã€ãŒãµãªã¢ã ã§ã¯ã競äºã®ããã«ããããã¯ã®çææéãåçŽã« XNUMX ç§ã«ããŸããã ãããŠçç£æ§ã¯æ£åŒã«åäžããŸããã ãããã£ãŠãã³ã³ã»ã³ãµã¹ãšã㊠PoW ã䜿çšãããããã¯ãã§ãŒã³ã§ã¯ãããã©ãŒãã³ã¹ãæ¯èŒããããšã¯ãŸã£ããæå³ããããŸããã ããã¯ãã£ãã·ã¥èšç®ã®è€éãã«çŽæ¥äŸåããä»»æã®å€ãå²ãåœãŠãããšãã§ããŸãã
ãã©ãŒã¯
ããšãã°ãè€æ°ã®ããŒããè€éãã®æ¡ä»¶ãæºããããå€ãç°ãªãããã·ã¥ãèŠã€ã㊠(èšãæããã°ãç°ãªãåæã«éãã)ããããã¯ããããã¯ãã§ãŒã³ã«æžã蟌ãã å Žåã¯ã©ããªãã§ãããã? ãããã¯ãã§ãŒã³ããã®ç¶æ³ããã©ã®ããã«ä¿è·ãããããèŠãŠã¿ãŸãããã ãã®å Žåããããããã©ãŒã¯ãçºçãããããã¯ãã§ãŒã³ã«ã¯ XNUMX ã€ã®ããŒãžã§ã³ã®ãã§ãŒã³ãååšããŸãã
次ã¯äœãèµ·ããïŒ æ¬¡ã«ããããã¯ãŒã¯ã®äžéšã 2 ã€ã®ãã§ãŒã³ã®ããã㯠N+XNUMX ã§åäœãå§ããå¥ã®ãã§ãŒã³ã®äžéšãåäœãå§ããŸãã
ãããã®ãããã¯ã® XNUMX ã€ãããæ©ãæ€åºããããããã¯ãã§ãŒã³ã«éä¿¡ãããŸãããã®åŸãã«ãŒã«ã«åŸã£ãŠããããã¯ãã§ãŒã³ã¯ããé·ããã§ãŒã³ã«åãæ¿ããŠã代æ¿ãããã¯ããã®ãã¹ãŠã®ãã©ã³ã¶ã¯ã·ã§ã³ããã£ã³ã»ã«ããå¿
èŠããããŸãã
åæã«ãåå è
ã®ãã©ã³ã¶ã¯ã·ã§ã³ããã©ãŒã¯ ãããã¯ã® 2 ã€ã«ã®ã¿ååšããããããã£ã³ã»ã«ããããšããç¶æ³ãçºçããå¯èœæ§ããããŸãã ãããã£ãŠãç®çã®ãã©ã³ã¶ã¯ã·ã§ã³ããããã¯ãã§ãŒã³ã«èšé²ãããŠããããšã確èªããã«ã¯ããã©ã³ã¶ã¯ã·ã§ã³ãä¿¡é Œããåã«ã次ã®ããã€ãã®ãããã¯ããããã¯ãã§ãŒã³ã«è¿œå ããããŸã§åŸ
ã€å¿
èŠããããšããäžè¬çãªæšå¥šäºé
ããããŸãã ãããã¯ãã§ãŒã³ããšã«åŸ
æ©ãããããã¯æ°ã®æšå¥šäºé
ã¯ç°ãªããŸãã ããšãã°ããããã³ã€ã³ ãããã¯ãŒã¯ã®å Žåãæå°ã¯ 6 ãããã¯ãæ倧㯠XNUMX ãããã¯ã§ãã
ããã㯠ãã©ãŒã¯ã«é¢ããåãç¶æ³ã¯ããããã 51% æ»æã§ã芳å¯ãããŸããããã¯ããã€ããŒã®ã°ã«ãŒãããäžæ£ãªãã©ã³ã¶ã¯ã·ã§ã³ã§ãã§ãŒã³ããã£ã³ã»ã«ããããšããŠã代æ¿ããã㯠ãã§ãŒã³ãæé·ãããããšãããšãã§ãã ãã ããçŸæç¹ã§ã¯ãè©æ¬ºè¡çºã§ã¯ãªããæ£çŽãªãã€ãã³ã°ã«åãè²»ãããæ¹ãåçæ§ãé«ããªããŸãã
ã³ã³ã»ã³ãµã¹
ãããã¯ãã§ãŒã³äžã«ãããã¯ãèšé²ããã«ã¯ããããã¯ãŒã¯ãã³ã³ã»ã³ãµã¹ã«éããå¿
èŠããããŸãã ã³ã³ãã¥ãŒã¿éä¿¡ãããã¯ãŒã¯ã§åæãéæãããšããã¿ã¹ã¯ãæãåºããŠã¿ãŸãããã ãã®åé¡ã¯ãã¶ã³ãã³ã®å°è» BFT ã®ä»»åãšããŠå®åŒåãããŸã (
- BFT ã¯å°èŠæš¡ãªåºå®ããŒã ã»ããã§ã¯ããŸãæ©èœããŸããããããªã㯠ãããã¯ãã§ãŒã³ã§ã¯ããŒãã®æ°ã¯äºæž¬ã§ãããããã«ããŒããã©ã³ãã ã«ãªã³ãŸãã¯ãªãã«ãªãå¯èœæ§ããããŸãã
- 人ã ã«ãããã¯ãã§ãŒã³ããŒããç«ã¡äžããåæ©ãäžããããšãå¿ èŠã§ãã ãã®ããã«ã¯äººã ã«å ±é ¬ãäžããããªããã°ãªããŸããã BFT ã§ã¯åœ¢åŒçã«ã¯å ±é ¬ãåãåããã®ã¯äœããããŸããããPoW ã§ã¯äœã«å¯ŸããŠå ±é ¬ããããã¯çŽæçãªã¬ãã«ã§èª°ã«ãšã£ãŠãæããã§ããã€ãŸããããã㯠ããã·ã¥ãèŠã€ããããã»ã¹ã§ããã»ããµã«ãã£ãŠæ¶è²»ãããé»åã§ãã
PoW ã«å ããŠãææ°ã®ãããã¯ãã§ãŒã³ã§äœ¿çšãããã³ã³ã»ã³ãµã¹ãä»ã«ãããã€ããããŸããããšãã°ã次ã®ãšããã§ãã
- PoS (ãã«ãŒãã»ãªãã»ã¹ããŒã¯) - ãããã¯ãã§ãŒã³äž
ãã€ããŒã«ã¬ãŒ - DPoS (Delegated Proof-of-Stake) - ãããã¯ãã§ãŒã³äž
BitShares - BFT ã®ä¿®æ£: SBFT (ç°¡æ BFT) ããã³ PBFT (å®çš BFT)ãããšãã°ãããã¯ãã§ãŒã³
ãšã¯ãœãã
PoS ã®ã³ã³ã»ã³ãµã¹ã«ã€ããŠå°ã詳ããèŠãŠã¿ãŸãããã ãã©ã€ããŒããããã¯ãã§ãŒã³ã§æãæ®åããŠããã®ã¯ãPoS ãšãã®çš®é¡ã§ãã ãªããã©ã€ããŒãã§ïŒ äžæ¹ã§ãPoS ã®ç¹æ§ã¯ PoW ã«æ¯ã¹ãŠåªããŠããŸãã ã³ã³ã»ã³ãµã¹ãéæããã«ã¯ãå¿ èŠãªã³ã³ãã¥ãŒãã£ã³ã° ãªãœãŒã¹ãå°ãªããªããŸããããã¯ããããã¯ãã§ãŒã³ãžã®ããŒã¿ã®æžã蟌ã¿é床ãåäžããããšãæå³ããŸãã ããããã®äžæ¹ã§ãPoS ã§ã¯äžæ£è¡çºã®æ©äŒãå¢ããããããããç¡ååããã«ã¯ãããã¯ãã§ãŒã³ã®ãã¹ãŠã®åå è ãææ¡ããå¿ èŠããããŸãã
PoS ã³ã³ã»ã³ãµã¹ã¯ãå£åº§å ã®è³éããŸãã¯ãããå£åº§å ã§ã¯ãªãæ ä¿å ã®è³ééã«å¿ããŠããããã¯ãã§ãŒã³ã«ãã©ã³ã¶ã¯ã·ã§ã³ãå«ããããã¯ãæžã蟌ãããšãã§ããããŒãã®éžæã«åºã¥ããŠããŸãã æ ä¿ãšããŠæã£ãŠããè³éãå€ããã°å€ãã»ã©ããããã¯ãŒã¯ããããã¯ãæžã蟌ãããŒããéžæããå¯èœæ§ãé«ããªããŸãã ãããã¯ãç¡å¹ãªå Žåããããžããã¯è¿éãããŸããã ããã«ãããè©æ¬ºã«å¯Ÿããä¿è·ãæäŸãããŸãã PoS ã«ã¯æ¬¡ã®ããªãšãŒã·ã§ã³ããããŸãã
- Delegated PoS (DPoS) ã³ã³ã»ã³ãµã¹ã¯ãåå è ããæ祚è ããšãæ€èšŒè ãã«åå²ããŸãã ã³ã€ã³ææè ïŒæ祚åå è ïŒã¯ããããã¯ãã§ãŒã³äžã®ãã©ã³ã¶ã¯ã·ã§ã³ãæ€èšŒããã³èšé²ããæš©éãä»ã®åå è ã«å§ä»»ããŸãã ãããã£ãŠãããªããŒã¿ãŒã¯ãã¹ãŠã®èšç®äœæ¥ãå®è¡ããããã«å¯Ÿããå ±é ¬ãåãåããŸãããŸããæ祚åå è ã®ååšã«ãã£ãŠããªããŒã¿ãŒã®èª å®ããä¿èšŒãããŸãã ãããã¯ãã€ã§ãå€æŽã§ããŸãã
- LPoS (Leased Proof-of-Stake) ã³ã³ã»ã³ãµã¹ã䜿çšãããšããããã¯ãæ€èšŒããå¯èœæ§ãé«ããªãããã«ãä»ã®ããŒãã«è³éããªãŒã¹ããããšãã§ããŸãã ããã å®éã®ååŒæ€èšŒããããã¯ãã€ãã³ã°ã«åå ããªããŠããååŒææ°æãåãåãããšãã§ããŸãã
ãŸã æ®åããŠããªãã³ã³ã»ã³ãµã¹ãå€æ°ãããŸããæ
å ±ãšããŠããã«ãªã¹ãããŸããã³ã³ã»ã³ãµã¹ ã¢ã«ãŽãªãºã èªäœã®æŠèŠã¯ãããšãã°æ¬¡ã®èšäºã«ãããŸãã
- PoET (çµéæéã®èšŒæ)
- PoC (èœå蚌æ)
- PoB (æžã蟌ã¿èšŒæ)
- PoWeight (éé蚌æ)
- PoA (掻å蚌æ) â PoW + PoS
- PoI (éèŠäºé ã®èšŒæ)
ãããã¯ãã§ãŒã³ã®ä¿¡é Œæ§ãšå°å ¥ã¢ãã«
ãããªãã¯ãããã¯ãã§ãŒã³
å®å®æ§ å ¬å ± ãŸãã¯å¥ã®åå ç¡èš±å¯ã®ãããã¯ãã§ãŒã³ ããã¯ã誰ã§ãæ¥ç¶ããŠæ å ±ã衚瀺ããããèªåã®ããŒãã«æ¥ç¶ãããã§ããããã«ããããšã§å®çŸãããä¿¡é Œã¯ PoW ã®ã³ã³ã»ã³ãµã¹ã«åºã¥ããŠæ§ç¯ãããŸãã
ãã©ã€ããŒããããã¯ãã§ãŒã³
ãã©ã€ããŒã ãŸã㯠ãã©ã€ããŒãèš±å¯åãããã¯ãã§ãŒã³ã ãããã®ãããã¯ãã§ãŒã³ã§ã¯ãç¹å®ã®åå è ã°ã«ãŒã (çµç¹ãŸãã¯äººã ) ã®ã¿ãæ å ±ã«ã¢ã¯ã»ã¹ã§ããŸãã ãã®ãããªãããã¯ãã§ãŒã³ã¯ãå šäœçãªå©çãå¹çãåäžãããããšãç®çãšããŠçµç¹ã«ãã£ãŠæ§ç¯ãããŠããŸãã ãã®ä¿¡é Œæ§ã¯ãåå è ã®å ±éã®ç®æšãšãPoS ããã³ BFT ã³ã³ã»ã³ãµã¹ ã¢ã«ãŽãªãºã ã«ãã£ãŠä¿èšŒãããŸãã
ãããã¯ãã§ãŒã³ã³ã³ãœãŒã·ã¢ã
ãã ã³ã³ãœãŒã·ã¢ã ãŸã㯠ãããªãã¯èš±å¯åãããã¯ãã§ãŒã³ã ãããã¯èª°ã§ãæ¥ç¶ããŠè¡šç€ºã§ãããããã¯ãã§ãŒã³ã§ãããåå è ã¯ä»ã®åå è ã®èš±å¯ãããå Žåã«ã®ã¿æ å ±ãè¿œå ããããèªåã®ããŒãã«æ¥ç¶ãããã§ããŸãã ãã®ãããªãããã¯ãã§ãŒã³ã¯ã顧客ã補åã®æ¶è²»è ããŸãã¯ç€ŸäŒå šäœã®ä¿¡é Œãé«ããããã«çµç¹ã«ãã£ãŠæ§ç¯ãããŸãã ããã§ãä¿¡é Œæ§ã¯ãåå è ãšåã PoS ããã³ BFT ã³ã³ã»ã³ãµã¹ ã¢ã«ãŽãªãºã éã®ä¿¡é Œã®ååšã«ãã£ãŠãå®çŸãããŸãã
ã¹ããŒãå¥çŽ
ãããã³ã€ã³ã®åŸã«å®è£ ããããããã¯ãã§ãŒã³ã«ã¯ãçšåºŠã®å·®ãããããã¹ããŒã ã³ã³ãã©ã¯ããå®è¡ããæ©èœãè¿œå ãããŸããã åºæ¬çã«ãã¹ããŒã ã³ã³ãã©ã¯ãã¯ãããã°ã©ã ã³ãŒããå®è¡ã®ããã«é 眮ããããã©ã³ã¶ã¯ã·ã§ã³ã§ãã ã€ãŒãµãªã¢ã ãããã¯ãŒã¯äžã®ã¹ããŒãã³ã³ãã©ã¯ãã¯EVMïŒã€ãŒãµãªã¢ã ä»®æ³ãã·ã³ïŒã§å®è¡ãããŸãã ã¹ããŒã ã³ã³ãã©ã¯ãã®å®è¡ãéå§ããã«ã¯ãå¥ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ãã£ãŠæ瀺çã«éå§ãããããå®è¡ã®åææ¡ä»¶ãæºããããå¿ èŠããããŸãã ã¹ããŒãã³ã³ãã©ã¯ãã®å®è¡çµæããããã¯ãã§ãŒã³ã«èšé²ãããŸãã ãããã¯ãã§ãŒã³ã®å€éšããããŒã¿ãåä¿¡ããããšã¯å¯èœã§ãããéåžžã«å¶éãããŠããŸãã
ã¹ããŒã ã³ã³ãã©ã¯ãã䜿çšããŠã©ã®ãããªããžãã¹ ããžãã¯ãå®è£ ã§ããŸãã? å®éã«ã¯ããããã¯ãã§ãŒã³ã®ããŒã¿ã䜿ã£ãŠæ¡ä»¶ã確èªãããããã®æ¡ä»¶ã«å¿ããŠããžã¿ã«è³ç£ã®ææè ãå€æŽãããããããã¯ãã§ãŒã³å ã®æ°žç¶çãªã¹ãã¬ãŒãžã«ããŒã¿ãèšé²ãããããããšã¯ããŸããããŸããã ããžãã¯ã¯ç¹å¥ãªé«çŽèšèª Solidity ã§å®è£ ãããŸãã
ã¹ããŒã ã³ã³ãã©ã¯ãã䜿çšããŠå®è£
ãããæ©èœã®å
žåçãªäŸã¯ãICO ã®ããŒã¯ã³ã®çºè¡ã§ãã ããšãã°ãç§ã¯ã¹ããŒã ã³ã³ãã©ã¯ããå®è£
ããŠãæ§ãã㪠500 AlexToken ãçºè¡ããŸããã ã«ãã
Solidityèšèªã«ããã¹ããŒãã³ã³ãã©ã¯ãã®ãœãŒã¹ã³ãŒã
pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart,
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance);
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}
ãããã¯ãŒã¯ãèªèãããã€ããªè¡šçŸ
60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029
ã¹ããŒã ã³ã³ãã©ã¯ãã®è©³çŽ°ã«ã€ããŠã¯ã次ã®èšäºãåç
§ããŠãã ããã
ãŸãšã
ææ°ã®ãããã¯ãã§ãŒã³ãæ§ç¯ãããŠãããã¯ãããžãŒãšãããããã©ã®ããã«çžäºã«æ¥ç¶ãããŠãããããªã¹ãããŸããã 次ã«ããããã¯ãã§ãŒã³ã䜿çšããŠã©ã®åé¡ã解決ã§ãããããããŠã©ã®è§£æ±ºçãããããå¹æããªãããå®åŒåããŠã¿ãŸãããã ãããã£ãŠã次ã®å Žåã«ã¯ãããã¯ãã§ãŒã³ã䜿çšããå¿ èŠã¯ãããŸããã
- ãã©ã³ã¶ã¯ã·ã§ã³ã¯ä¿¡é Œã§ããç°å¢ã§å®è¡ãããŸãã
- 仲ä»å§å¡äŒã®ååšã¯åå è ã®ç掻ãæªåããããã®ã§ã¯ãããŸããã
- åå è ã¯ããžã¿ã«è³ç£ãšããŠè¡šçŸã§ãã財ç£ãæã£ãŠããŸããã
- ããžã¿ã«è³ç£ã«ã¯é åžã¯ãããŸããã å€ã¯ XNUMX 人ã®åå è ã ããææãŸãã¯æäŸããŸãã
ãããã¯ãã§ãŒã³ã®å°æ¥ã¯ã©ããªãã§ãããã? çŸåšããããã¯ãã§ãŒã³æè¡ã®éçºã®å¯èœãªæ¹æ³ã«ã€ããŠæšæž¬ããããšããã§ããŸããã
- ãããã¯ãã§ãŒã³ã¯ãç¹å®ã®ç¯å²ã®åé¡ã解決ããããã«ãããšãã° SQL ã NoSQL ãšåãäžè¬çãªããŒã¿ããŒã¹ ãã¯ãããžã«ãªãã§ãããã
- ãããã¯ãã§ãŒã³ã¯ãã€ã³ã¿ãŒãããã«ããã HTTP ãšåæ§ã«ãåºãæ®åãããããã³ã«ã«ãªãã§ãããã
- ãããã¯ãã§ãŒã³ã¯ãå°çäžã®æ°ããéèããã³æ¿æ²»ã·ã¹ãã ã®åºç€ãšãªãã§ãããã
次ã®ããŒãã§ã¯ãçŸåšã©ã®ãããªãããã¯ãã§ãŒã³ãååšãããªããããããŸããŸãªæ¥çã§äœ¿çšãããŠããã®ããèŠãŠãããŸãã
ããã¯å§ãŸãã«ãããªãïŒ
åºæïŒ habr.com