ãã®èšäºã§ã¯ãICOã®æºåãšå®æœã®æè¡çåŽé¢ãæ€èšããŸãã ããã¯ãååã®èšäºã ICOã®æè¡çç¹åŸŽ ãã®ç¶ãã§ãã éå§ ããã芧ãã ãããããã§ã¯ãã€ãŒãµãªã¢ã ã®ã¹ããŒãã³ã³ãã©ã¯ãã«é¢é£ããæè¡çãªåé¡ã«ã€ããŠè©³ãã説æããŸãã
æè¡ãããžã§ã¯ãã®éçº
ã¹ããŒãã³ã³ãã©ã¯ããéçºããåã«ãæè¡ãããžã§ã¯ããäœæããŠãããšããã§ãããã ããã¯ãäž»èŠãªæè¡ç質åã«çããå¥çŽã·ã¹ãã ã®æŠç¥å³ã§ããããããžã§ã¯ãçµæžãšICOã·ããªãªã®å®çŸå¯èœæ§ã瀺ããŠããŸãã
éåžžãæè¡ãããžã§ã¯ãã«ã¯äœãå«ãŸããŸããïŒ ããã¯ãåæã®æ£åŒãªææžã§ããå¿ èŠã¯ãããŸããã4ã5ããŒãžã®ããŒãã€ã³ããš2ã3ã®å³ã§ååã§ãã ãããŠããããã®ããŒãžã§ãæææš©ã®ä»çµã¿ãæåã«èŠãŠãã ããã æãç°¡åãªãªãã·ã§ã³ïŒ1ã€ã®ããŒã¯ã³ãã«ããŒã販売ãããICO-ãã¹ãŠãé£ç¶ããŠããŸãã éåžžã¯ããããŸãã ããè€éãªãªãã·ã§ã³ã¯ããã«ã眲åã䜿çšããå Žåã§ãã ä¿¡é Œã§ãããŠã©ã¬ããã³ã³ãã©ã¯ããåºæ¬ãšããŠããããããã«ãã·ã°ããã£ãæœåºãããŠã©ã¬ããã«é©çšããŠãšãŒãã«ãä¿åããã ãã§ãªããICOèªäœãšããŒã¯ã³ã管çããããšãã§ããŸãã ããã§ã¯æ³ååã«å¶éã¯ãªããããŸããŸãªã·ããªãªãæ°åŠçã«ç°¡åã«å®è£ ã§ããŸãã
ICOãå解ããããšãã€ãŸããã¬ãŒããã«ãŠã³ãããŠããŒã¯ã³ãçºè¡ãããšãŒãã«ãåãåãã®ã¯1ã€ã®ã³ã³ãã©ã¯ãã§ã¯ãªããåã³ã³ãã©ã¯ããä»äºããããšãã®ã¹ããŒãã³ã³ãã©ã¯ãã®ã·ã¹ãã ã«ãªããŸãã ã€ãŸããICOã¹ããŒãžã§ãšãŒãã«ãåãå ¥ãããã®ããžãã¯ã«å¿ããŠãçºè¡ããå¿ èŠãããããŒã¯ã³ã®æ°ãç解ããŸãã ããŒã¯ã³ã®ææè ã§ããããŒã¯ã³ã³ã³ãã©ã¯ãã«é©åãªã³ãã³ããäžãããšåæã«ãã€ãŒãµãŒãèªåèªèº«ã«ä¿æããã«ãç¹å¥ãªã¹ãã¬ãŒãžïŒãããã³ã³ãã©ã¯ãïŒã«è»¢éããŸãã
æŸéãå¥çŽã«ä¿åããããšã§ç¯çœªãèŠãããšã¯ãããŸããã ããã©ããããå¥çŽãäœãããã®ããæãããªã®ã§ãããã¯ããã«éæã§ãã ICOãçµäºãããŸã§ç©ºæ°ãããã«ä¿ç®¡ãããŠããããšãç°¡åã«ããããŸãããéãéããªããã°ãæè³å®¶ã«ãã¹ãŠãè¿ãããšãä¿èšŒãããææè ã§ãããããæ¢ããããšã¯ã§ããŸããã
äžæ¹ããã®å䜵çã¯ç¡æã§ã¯ãããŸããã ããã¯ãå±é段éã§è¿œå ã®åé¡ãåŒãèµ·ãããšèšããŸãã ãããŠãã¯ãããããã®æ¥ç¶ãšèª²é¡ã¯ãè匱æ§ãå°å ¥ããå¥ã®æ¹æ³ã§ãã ããªãã®æš©å©ã泚ææ·±ãèŠãŠãã ããã
ããŒã¯ã³ã®æšæºãããã ERC20ãšåŒã°ããå¥çŽã§å®è£ ããå¿ èŠãããããã€ãã®ã¡ãœãããå®çŸ©ããŸãã ããŒã¯ã³ããã®æšæºãå®è£ ããŠããå Žåãå€ãã®ååŒæã§è¡šç€ºã§ããŸãã ããã«ãEthereum Wallet以å€ã®ä»ã®ãŠã©ã¬ããã¯ERC20ããµããŒãããŠããŸãã ãããã£ãŠãå¿ èŠãªæ©èœãå®è£ ããã ãã§ãããŒã¯ã³ãæäœããããã®æ¢è£œã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãååŸã§ããŸãã ããã«ãããŒã¯ã³ã®åºç€ãç¯ããããã«ERC20ãå®è£ ããã©ã€ãã©ãªããããŸãã äœããã®å éšãªãœãŒã¹ããŒã¯ã³ãããããŠãŒã¶ãŒãçžäºã«äº€æããããšãæ³å®ããŠããªãå Žåã¯ãæšæºãå®è£ ããå¿ èŠã¯ãããŸããã 圌ãããã®ããŒã¯ã³ã§ãã®éåå°ã«æ¥ãŠãã¢ãã©ã¯ã·ã§ã³ã®ãã±ãããè³Œå ¥ããå Žåãããããã圌ã¯ååŒæã«ãªã¹ããå¿ èŠãšããŸããã
ããã«ãåé¡ãå¥åŠãªã¢ã¯ãã£ããã£ãçºçããå Žåã«ãäžæåæ¢ç¶æ ãå¥çŽã«å«ããããšãã§ããŸãã ããšãã°ããšãŒãã«ã泚ãããããŒã¯ã³ãçºè¡ãããªãå Žåã 次ã«ãICOãäžæåæ¢ãããããææ¡ããŠæ±ºå®ãäžãå¿ èŠããããŸãã ãã®ç¶æ ãæè¡èšèšã«çµã¿èŸŒãããšã¯äŸ¡å€ããããŸãã æè¡ãããžã§ã¯ãã§ããŒã¯ã³ã®çºè¡ãæäŸããããšãã§ããŸãã ICOã®åã«ããã«ã€ããŠèããããšãéèŠã§ãããªããªãããããããŒã¯ã³ãšã©ã®ããã«äºææ§ãæã€ããç解ããå¿ èŠãããããã§ãã
å¿ ããã®ãããªã¹ããŒã ãæ€èšããŠãã ãã-ããã¯ICOã®ç¶æ ã°ã©ãã§ãã ããã¯æéç¶æ ãã·ã³ãã€ãŸãICOãå¯èœãªç¶æ ã§ãã ããã¯ã°ã©ãã§ãããç¶æ ã説æããããç¶æ ããå¥ã®ç¶æ ãžã®é·ç§»ãçºçããããšã瀺ããŸãã ICOã¯ãå·ãåã«è³é調éããã調éæåãã«å€æŽããã¹ãã§ã¯ãããŸããã ããããããã«åºããŸããããã ICOã®ç¶æ éã®é·ç§»ãç解ããå¿ èŠããããŸãã æè³å®¶ã¯ããã¹ãŠãå ¬æ£ã§ãããšèããŠããããããããç解ããå¿ èŠããããŸãã ãããŠãããã¯éçºè ãç解ããæ確ã«ããã°ã©ã ããå¿ èŠããããŸãã Solidityã«ã¯ãã®ããã®ãã¹ãŠã®æ段ããããŸãããããã転éãããããã®å©ããåããŠç¶æ ãèšè¿°ãããŸãã ããã«ãç¡å¹ãªé·ç§»ãçºçããªãããã«ãã³ãŒãã«ãã£ãŠå¶åŸ¡ãããç¶æ éã§é·ç§»ããããšããå§ãããŸãã
ã³ã³ãã©ã¯ãã®å€éšã§äœ¿çšå¯èœãªé¢æ°ã¯ãããããSolidityã¢ãã£ãã¡ã€ã¢ã䜿çšããŠç¶æ ãèšå®ã§ããŸãã ãã®ãããICOã®ç¶æ ã«ã®ã¿æè³ã§ããäžæåæ¢ããããšã¯ã§ããŸããã éã«ãææè ã¯ãæ£åžžã«å®äºããICOã§ã®ã¿ãéãåŒãåºãããšãã§ããŸãã
ã¹ããŒãã³ã³ãã©ã¯ãéçº
æè¡ãããžã§ã¯ãã®æºåãæŽãã顧客ãæºè¶³ããéçºè ãäœãããå¿ èŠãããããç解ããããéçºã«é²ã¿ãŸãã Ethereumã«ã¯ä»®æ³ãã·ã³ïŒEthereum Virtual MachineãEVMïŒããããããããšåãã³ã³ãã©ã¯ãããã°ã©ã ãå®è¡ããŸããã³ã³ãã©ã¯ãã¯ãä»®æ³ãã·ã³ã«ãã£ãŠå®è¡ããããããããã€ãã³ãŒãã§ãã ãã®ç¹ã§ãããã€ãã®èšèªã§å¥çŽãäœæããããšãå¯èœã«ãªããŸãã Solidityèšèªã¯ãã¹ããŒãã³ã³ãã©ã¯ãããŒãããéçºããããã«ç¹å¥ã«äœæããããã®ã§ãCã«äŒŒãæ§æãæã£ãŠããŸãã 圌以å€ã«ããä»ã®èšèªããããŸããJavaScriptã«äŒŒãèšèªãPythonã«äŒŒãèšèªããããŸãã
ç§ã®çŽæçãªæèŠã¯ãç¥çµççåŠçæ§è³ªã®çç±ã§ããããSolidityãéžæããæ¹ãè¯ããšãããã®ã§ãã éçºè ãPythonã«äŒŒãèšèªã䜿çšããå Žåãããã§ãã€ãŒãµãªã¢ã ã¹ããŒãã³ã³ãã©ã¯ããäœæããŸãã ãããåæã«ãPythonã«å žåçãªã»ãã³ãã£ã¯ã¹ãšãã¿ãŒã³ãé ã«æµ®ãã³å§ããBlockchainåãã«éçºãããšãã«ã¯æããã«æ©èœããŸããã
Solidityã«ã€ããŠé·ãé話ãããšãã§ããã®ã§ãã¬ã€ãã³ã¹ãå¿ èŠã§ãã ãŸãã Truffleãã¬ãŒã ã¯ãŒã¯ã®éçºãå€§å¹ ã«ä¿é²ããŸãã ã³ã³ãã©ã¯ãããã¹ãããã¡ã€ã³ã®ãã¹ãããŒã«ã«ãã§ãŒã³ã«ãããã€ããã®ã«åœ¹ç«ã¡ãŸãã ãŸããããã段éçã«è¡ãããšãã§ããŸããã€ãŸããå¥çŽã·ã¹ãã ãæ°ããå¥çŽã§è£å®ããããšãã§ããŸãã åæã«ããã¬ãŒã ã¯ãŒã¯ã¯å€ããã®ããã¹ãŠèšæ¶ããããããåé åžããŸããã
ã©ã€ãã©ãªãåå©çšããããã«åŒã³åºãã®ã¯ãªãã§ããïŒ ã³ãã¥ããã£ã¯éåžžã«è¥ããã³ãŒãã¯ã»ãšãã©ãããŸããããéå»30ã40幎ã«ããã£ãŠãœãããŠã§ã¢ã®éçºã§åŸããããã¹ãŠã®ååã¯ããããã¯ãã§ãŒã³ã®å Žåã§ãæå¹ã§ãã ãããŠãååã«ãã¹ããããã³ãŒãããããããèªäœãå¹ åºããããžã§ã¯ãã§åå©çšã䌎ãå Žåããããæ¡çšããè»èŒªãåçºæããªãã§ãã ããã
ãŸãã OpenZeppelin / zeppelin-solidity libraryã«æ³šç®ããŸã ã ã¹ããŒãã³ã³ãã©ã¯ããéçºãããšããããã¯äºå®äžã®æšæºã®å±æ©ã«onããŠããŸãã å€ãã®å¥çŽãã©ã€ãã©ãªã¯ãããŸããããæ¯èŒçå°ãããã®ã§ãã ãããããããã¯é »ç¹ãªã±ãŒã¹ãã«ããŒããå¥çŽæžãããã€ãã®ããŒã¯ã³ãäœæãæžã蟌ã¿å¯èœãªããŒã¯ã³ãããã€ãã®å žåçãªICOãã»ãã¥ãªãã£ã«é¢é£ããäœããäŸãã°åå ¥æ»æã«å¯Ÿããä¿è·ãä¿æãããªã©ãããã«äœ¿ãããã®ãæäŸããŸãã
å¥ã®ã©ã€ãã©ãªã¯SafeMathã§ãã Zeppelin-solidityã«æ¥ç¶ããããªãå Žåã§ã䜿çšããããšããå§ãããŸãã ããã¯å°ãããæåéãããã€ãã®ã¯ã³ã©ã€ããŒã§ãå¥çŽã«çŽæ¥ã³ããŒã§ããŸãã 圌女ã¯ããªããããµãããå®ããŸãã ããã¯éåžžã«ç·æ¥ã§æ·±å»ãªåé¡ã§ãã ããšãã°ãSolidityã§ç¬Šå·ãªãã®æ°å€ãåŠçããé倱ã«ãã3ã€ãã5ã€ãå·®ãåŒããšãå¥çŽã¯åŒãç¶ãæ©èœããŸããããã®çµæãèšå€§ãªæ°ã衚瀺ãããŸãã ããã¯ãªãŒããŒãããŒãåå ã§çºçããŸããã SafeMathã©ã€ãã©ãªã䜿çšãããšããšã©ãŒãçºçããŸããã€ãŸãããã©ã³ã¶ã¯ã·ã§ã³ã¯ãšã©ãŒã§å®äºããç¶æ ã¯å€æŽãããŸããã
å€ãã®æšå¥šäºé ããããŸãã ã¹ããŒããã·ã³ã«ã€ããŠèª¬æããŸãããããããå®è£ ããããšãæãŸããã§ããã¹ããŒããšä¿®é£Ÿåãç»é²ããŸãã ããã«ãããç¶æ ããå¥ã®ç¶æ ãžã®é·ç§»ãæéå ã«å®è£ ã§ããŸãã åæã«ãåé¢æ°ã«ä¿®é£Ÿåãè¿œå ãããŸãããæéãèŠãŠãããä»ICOã®å§ãŸãã§ããã°ãç¶æ ãICOã«å€æŽããŸããã
Solidityã®äžçãã¹ããŒãã³ã³ãã©ã¯ãã®äžçã§ã¯ãå žåçãªãã¿ãŒã³ã圢ã«ãªãå§ããŠãããã¿ãŒã³ããããŸãã ããšãã°ããœãããŠã§ã¢ãç¹ã«äžéšã®äŒæ¥ã·ã¹ãã ã®éçºã«ã¯å€ãã®ãã¿ãŒã³ããããšèããŸããã ããã§ã¯ãããšãã°ããŠãŒã¶ãŒã圌ã«ééããããšãããšãã§ã¯ãªãã圌èªèº«ã®ããã«è³éãåãåããšãã«ãããç¥ãããåŒãåºããã¿ãŒã³ãå«ããããšãã§ããŸãã ããšãã°ãICOã倱æããå Žåãæè³å®¶ã«ãéãè¿ãå¿ èŠããããšããèªåã§ããããšãããšãå€ãã®çç±ã§æåããªãå¯èœæ§ããããŸãã ãŸããã»ãã¥ãªãã£ã®åé¡ããããŸãã é©åãªå°åæãæã€ãŠãŒã¶ãŒã«ããè³éã®åŒãåºããšããŠæãæ»ããèšèšãããšãã¯ããã«ç°¡åã«ãªããŸãã
äžæåæ¢ã¢ãŒãã«ã€ããŠèª¬æããŸããã æè¿èŠãICOã§ã¯ããŸã䜿çšãããŸããããããã¯éåžžã«äŸ¿å©ãªã¡ã«ããºã ã§ãã ãã¡ããã圌ã¯åé¡ã®ç¶æ³ã®100ïŒ ã«å¯ŸããŠã¯ä¿èšŒããŠããŸããïŒäžæåæ¢ããŠããŠããšãŒãã«ãçãããšãã§ããŸãïŒããæ»æã®å¯èœæ§ãå€§å¹ ã«æžãããŸãã
ã³ã³ãã©ã¯ãã®çœ®æã«ã€ããŠã¯ãæåŸãŸã§è¡ã£ãŠå®å šã«åçãªã³ã³ãã©ã¯ããäœæããå¿ èŠã¯ãªããšèšããªããã°ãªããŸããããã®ã³ãŒãã¯ãããšãã°ãelegatecallãªã©ãåŒã³åºãããšã§ä»»æã«çœ®ãæããããšãã§ããŸããåé¡ãæ€åºãããå Žåãããžãã¯ã眮ãæããããšãã§ããŸãã ããã¯ãããŒã¯ã³ãšãéãå¥ã ã«æã£ãŠãããšããäºå®ã®ããã«å¯èœã§ããããéã¯å€ãããªããŸãŸã§ãã ååãšããŠããã®ããŒãã£ã¯ã«ã眮ãæããŠã2ã€ã®æ¢åã®ããŒãã«å®å šã«ééçã«é¢é£ä»ããããšãã§ããŸãã ããã€ãã®æ©èœããããŸãã ICOãããŒã¯ã³ãªã©ãåæåããå Žåã¯ã眮æäžã«2åç®ã®åæåãéå§ãããªãããã«ããŠãã ããã ãã®çµæãICOã«ã¯æ°ããäœæããããŸããããã¯æ°ããå¥çŽã§ãã 眮æã®å¯èœæ§ã¯å¥çŽã®ã³ãŒãã§èŠãããšãã§ããããã¯äžçš®ã®åŠ¥åã§ãããšããããšãç解ããå¿ èŠããããŸãã äžæ¹ã§ãç§ã¯ãã¹ãŠã絶察ã«å€ãããªãããšãæã¿ãŸãïŒããã¯ããªãã«å¯Ÿããä¿¡é Œãé«ããŸãïŒãä»æ¹ã§ã¯ããããå®å šã«ãã¬ã€ããããšã¯çŽ æŽãããããšã§ãã 劥åæ¡ãšããŠãå®å šã«å€æŽã§ããªãæ¡ä»¶ãã³ãŒãã«æå®ã§ããŸãã ããšãã°ãè³é調éã®æå°ãããå€ãååãšããŠå€æŽãããŠããªãããšããšãŒãã«ãªããžããªã«ç»é²ããŸãã ãããããæè³å®¶ã¯ã圌ãã10äžãéããããšãèµ·ãããªãããšãç¥ã£ãŠããã§ãããããããã1åãéããããšæã£ãããããã§ãäœããããã
å¯èœã§ããã°ãå¥çŽã®ã¡ãœãããå ¥åæã«åãåããã©ã¡ãŒã¿ãŒã®åŠ¥åœæ§ã確èªããå¿ èŠããããŸãã ããŒã¯ã³ãæŸåºããµããŒãããçââæãããããŒã¯ã³ã®æ°ããã©ã¡ãŒã¿ãŒã§æå®ãããŠããå Žåãããšãã°ãããŒã¯ã³ã®æ°ãããããŒã¯ã³ã®æ°ãå€ããã©ããã調ã¹ãããšã§ããã®æ°ã確èªã§ããŸãã ããã«ãããæåã§å ¥åãããã©ã¡ãŒã¿ã«ã¿ã€ããã¹ãããå Žåã«ç¢ºå®ã«ãªããŸãã ãŸãã¯ãããšãã°ãå€éšã€ã³ãã©ã¹ãã©ã¯ãã£ã§é害ãçºçãããšãã«å€éšã€ã³ãã©ã¹ãã©ã¯ãã£ã«ãã£ãŠçºè¡ãéå§ãããå Žåãæ°ååããæ°ååã®ããŒã¯ã³ãçºè¡ãããŸãã
GitHubãžã®ããã«3ã€ã®ãªã³ã¯ïŒ
以äžã«ãããã€ãã®ãœãªã¥ãŒã·ã§ã³ãå«ããªããžããªã®ã»ããã瀺ããŸãã ãããã¯å®éšçãªãã®ã§ãã®ã§ãæ éã«è©ŠããŠãã ãããéåžžããããã¯ã¢ã«ãã¡çã§ãã20ãã«ãè¶ ããŠä¿åããªãã§ãã ããããšæžãããŠããŸããããã¹ãŠã®è¯ãããšã¯å®éšããåŸãããããšã¯æããã§ãã èªåã§ãã¹ãŠãäžããæžãããããäœããåºç€ãšããŠæºåããæ¹ããããããããŸããã
å
ç¢æ§ã®éçºã«å¿
èŠãªIDE ç§ã¯ã³ãã³ãã©ã€ã³ã§ç©æ¥µçã«äœæ¥ããããšã«æ
£ããŠããŠãã³ãã³ãã©ã€ã³ããTruffleãå®è¡ããŸãããå®éã«ã¯ã test
ã compile
ã migrate
3ã€ã®ã³ãã³ãã®ã¿ãå¿
èŠã§ãã éçºç°å¢ã«ã€ããŠã¯ãPyCharmãéžæããŸãããSolidityçšã®ç¡æã®ãã©ã°ã€ã³ããããããã¯è¯ãããšã§ãã éçºç°å¢ã¯å€§ãã«åœ¹ç«ã¡ãPyCharm / Ideaã¯åªããIDEã§ãã競åä»ç€Ÿããã2ååªããŠãããšããèšããŸãã éçºç°å¢ã®å©ãã䜿çšããŠã銎æã¿ã®ãªãã³ãŒããæåéãæ°æéç解ããŠããå Žåãå¥çŽå
ã®å€æ°ãšãã®ãã¹ãŠã®äœ¿çšã匷調衚瀺ã§ããç£æ»ãè¡ããšãã«éåžžã«åœ¹ç«ã¡ãŸãã
ã¹ããŒãå¥çŽãå±¥è¡ããããã®ã³ã¹ãã«ã€ããŠå°ãã ãããã¯ãã§ãŒã³ãå€æŽãããã€ãŸããã©ã³ã¶ã¯ã·ã§ã³ã«åå ããèšç®ã®ã¿ã«ã³ã¹ããããããŸãã view
ãŸãã¯pure
修食åãæã€é¢æ°ãããããããã¯ç¶æ
ãå€æŽããããããã¯ãã§ãŒã³ã«ããŒã¿ãéä¿¡ããã«äœ¿çšã§ããŸãã ããŒã«ã«ã§åŒã³åºãããé¢æ°ãéçºããå Žåãè²»çšã¯äžåããããŸããã
ãããã¯ãã§ãŒã³ã§å®éã«å®è¡ãããç¶æ ãå€æŽããããŒã¿ãä¿åãŸãã¯éä¿¡ããã³ãŒãã¯ãã¹ãŠã䟡å€ããããŸãã ãã®ããŒãã«ã€ããŠæèå®éšãè¡ãã®ã¯ç°¡åã§ããããšãã°ãéåžžã«é·ãéæ©èœããå€ãã®ããšãç¯çŽããã³ãŒããèšè¿°ã§ããŸããã ã€ãŒãµãªã¢ã ãããã¯ãŒã¯ã®åå è ãåæã«ãããç¹°ãè¿ãå¿ èŠãããå Žåãã³ãŒãã¯äžçäžã®äœçŸäžå°ãã®ã³ã³ãã¥ãŒã¿ãŒã§åäœããŸãã ãããã£ãŠãã€ãŒãµãªã¢ã ã®éçºè ã¯ãããªãããããæ¯æãããã«ã©ããªæ¹æ³ã§ãæ°ã«ããçŸåšã®äŸ¡æ Œã§ã¯éåžžã«é«äŸ¡ã§ãã ãã1ã€ã®ããšã¯ãèšç®ãšè¡ããšã«ã³ã¹ããç°ãªãããšã§ãã åçŽãªç®è¡æŒç®ã®äŸ¡æ Œã¯3ã5åäœã®ã¬ã¹ã§ãããå·ã®å€æŽã«ã¯2äžåäœã®ã¬ã¹ãããããŸãã ãªãã§ïŒ ãããã¯ãã§ãŒã³ãå€æŽããããããããªãã®ããã«32ãã€ãå¢å ããŸããããããã®ãã€ãã¯äžçäžã®äœçŸäžãã®ã³ã³ãã¥ãŒã¿ãŒã«å°éããŸããã
ã¹ããŒãã³ã³ãã©ã¯ããã¹ã
ãã¹ãã¯å¿ èŠãªã¹ãããã§ãããœãããŠã§ã¢ã®50幎ã®æŽå²ã¯ãããæããŠãããŸãã ãããŠãICOã«ä»å±ãããããžã§ã¯ããªããžããªã«ãã¹ãã衚瀺ãããªãã®ã¯å¥åŠã§ãã ãã¶ãããããã¯å®æããæžãããŠããããåã«ã¬ã€ã¢ãŠããããŠããªãã ãããããããã«ããããã¹ããè¡ãå Žåãããããã¬ã€ã¢ãŠãããŠã¿ãŸãããïŒ ãããã£ãŠãæè³å®¶ã«å¯ŸããŠãããã§ãã¹ãŠãååã«ãã¹ããããŠããããšã瀺ããŸãã ããã¯ãšã©ãŒããªãããšãä¿èšŒãããã®ã§ã¯ãããŸããããå€ãã®åé¡ãåé¿ããã®ã«åœ¹ç«ã¡ãŸãã
ãã¹ãã¯SolidityãŸãã¯JavaScriptã§çŽæ¥èšè¿°ãããŸãã ãããã®å Žåã§ããTruffleã䜿çšãããšããã¹ãŠã®ãã¹ããäžåºŠã«å®è¡ããŠãèŠçŽã¬ããŒããååŸã§ããŸãã äžçªäžã§èšãå¿ èŠããããŸãïŒãã¹ãŠã®ãã¹ãã«åæ Œãã倱æã¯ãããŸããã ICOã®æãéèŠãªåŽé¢ïŒããŒã¯ã³ãã¯ã©ãŠãã»ãŒã«èªäœã貯éãããŒãã¹ãªã©ïŒããã¹ãããããšããICOã®ã客æ§ããŠãŒã¶ãŒãæè³å®¶ã®äž¡æ¹ã«ç€ºããŸãã ããŒãã¹ã¯éèŠãªãã®ã§ãã æè³å®¶ãããŒãã¹ãåãåãããšãç¥ãããšã¯éåžžã«éèŠã§ãã
åäœãã¹ãããããŸã-ãããã¯å°ããªå€ç«ããã³ãŒããã©ã°ã¡ã³ãããã¹ããããã®ãããªãã¹ãã¯Solidityã§æžãã®ã«äŸ¿å©ã§ãã
function testValidationOfDecrease() { Bonuses b = new Bonuses(); b.add(1000000000, 50); b.add(1000000010, 60); b.validate(false); assertInvalid(b, true); b = new Bonuses(); b.add(1000, 60); b.add(1000000000, 50); b.add(1000000010, 60); b.add(1000000020, 0); b.validate(false); assertInvalid(b, true); }
ã³ãŒãã¯Solidityã§ãããåçŽã«å¥çŽãäœæããŠããŒã¿ãéä¿¡ããå¥çŽãæåŸ ã©ããã«æ©èœããŠããããšã確èªããŸãã JavaScriptã§èšè¿°ããããã¹ãããããŸãã éåžžãè€æ°ã®å¥çŽãçžäºäœçšã«é¢ä¿ããŠããå Žåãããè€éãªã·ããªãªãããã§ãã§ãã¯ãããŸãã åè¿°ã®äžé£ã®å¥çŽãäœæãããšããŸãã ãã®åŸãè€æ°ã®å¥çŽãé¢ä¿ããè€æ°ã®ãŠãŒã¶ãŒãååšããå ŽåããããŸãã ç§ãã¡ã¯ãããããæè³å®¶ã®ãããªãã®ãããæè³å®¶ã®ãããªãã®ããšãåŒã³ãŸãã ãŸã ææè ãããŸããå šãæš©å©ã®ãªããŠãŒã¶ãŒãããŸãã ãããŠãããã§è€éãªçžäºäœçšãããã°ã©ã ããçžäºäœçšäžã«ããŒã¯ã³ãæ£ããçºè¡ãããããšã確èªã§ããŸãã ãŸãã¯ãããŒããã£ããã«éãããšãæè³å®¶ãå€æŽãåãåãããšã確èªããŸãã ãããã®ãã¹ãã¯çµ±åãã¹ããšåŒã°ããŸãã
JavaScriptãããããã¯ãã§ãŒã³ãžã®åŒã³åºãã¯éåæã§ã-ããã«ãããäœåãªã³ãŒããããããçš®é¡ã®çŽæãªã©ãè¿œå ãããããã await
ã async
æ§æèŠçŽ ã®èåŸã«ãããã¹ãŠã®éåææ§ãé ãäžçš®ã®JavaScriptã³ã³ãã€ã©ã§ããBabelã䜿çšããããšããå§ãããŸãã
it("test max cap", async function() { const role = getRoles(); const [crowdsale, token, funds] = await instantiate(); // +5% await crowdsale.setTime(1511913601, {from: role.owner1}); await crowdsale.sendTransaction({from: role.investor1, value: web3.toWei(20, 'finney')}); await assertBalances(crowdsale, token, funds, web3.toWei(20, 'finney')); const investor3initial = await web3.eth.getBalance(role.investor3); await crowdsale.sendTransaction({from: role.investor3, value: web3.toWei(1000, 'finney'), gasPrice: 0}); const investor3spent = investor3initial.sub(await web3.eth.getBalance(role.investor3)); assertBigNumberEqual(investor3spent, web3.toWei(378, 'finney'), 'change has to be sent'); assert.equal(await crowdsale.m_state(), 4); await assertBalances(crowdsale, token, funds, web3.toWei(398, 'finney')); assertBigNumberEqual(await token.balanceOf(role.investor1), STQ(2100)); assertBigNumberEqual(await token.balanceOf(role.investor3), STQ(39690)); await checkNoTransfers(crowdsale, token, funds); await checkNotInvesting(crowdsale, token, funds); await checkNotWithdrawing(crowdsale, token, funds); await checkNotSendingEther(crowdsale, token, funds); await crowdsale.distributeBonuses(10, {from: role.nobody}); assertBigNumberEqual(await token.balanceOf(role.investor1), STQ(2600)); assertBigNumberEqual(await token.balanceOf(role.investor3), STQ(49140)); await checkNotInvesting(crowdsale, token, funds); await checkNotWithdrawing(crowdsale, token, funds); });
äŸå€çãªç¶æ³ããã¹ãããããšãå¿ããªãã§ãã ããã ããšãã°ãææè ãICOã®æååŸã«ãéãåŒãåºãããšã確èªããŸããã ãŸãããããã®ä»²é-æè³å®¶2ãæè³å®¶3ãéãããå¿å-ããéãåŒãåºãããšãã§ããªãããšããã¹ãããå¿ èŠããããŸããã€ãŸãããéã®åŒãåºãã®ãªã¯ãšã¹ããéä¿¡ãããšãäŸå€çãªç¶æ³ãå€æããå¥çŽã¯ãªã¯ãšã¹ããåãå ¥ããŸããã
èŠçŽãããšããã¹ããã䟡å€ããããŸãããã¹ãŠã®æ段ããããŸãã ãšããã§ãããã°ã©ããŒã¯ãã¹ã¿ãŒã§ãã£ãŠã¯ãªããŸããã ãªãã§ïŒ ã¯ãªãšã€ã¿ãŒã¯èªåã®ééããããèŠãªãããã§ãã 圌ã¯ãã§ã«é ã®äžã«ããçš®ã®ã¢ãã«ãæã£ãŠããŠããããã³ãŒãã«ç§»ããŸããã ããã°ã©ããŒãèªåã®ã³ãŒãããã§ãã¯ããããšãããšãã¢ãã«ã¯å¿ ç¶çã«é ã«æµ®ãã³äžãããè³ã¯ããèšããŸãã ãã®ã¡ãœãããäœæããã®ã§...ãããŠããããèŠãã®ãæ¢ããŸãã ããè¯ãã¹ã ãŒãžãŒãæã£ãŠè¡ããŸããããã
ãã¹ãã«å ããŠãç£æ»ãå¿ èŠã§ãã ç£æ»ã¯ç¹å¥ã«èšç·Žããã人ã ã«ãã£ãŠå®æœãããŸãã ç£æ»äžã«è¿œå ã®ãã¹ããéçºãããå ŽåããããŸãããç£æ»ã¯ãŸã£ããç°ãªãç¶æ³ã§ãããã¹ãã«ããŸã£ããç°ãªããŸãã
ç£æ»ã«ã€ããŠè©±ããŠããå ŽåããŸããè匱æ§ãšã¯äœãããããŠãããã«å¯ŸããŠç£æ»äººã«æ¯æãéé¡ãç解ããå¿ èŠããããŸãã è©äŸ¡ããæ¹æ³ã¯ããã€ããããŸãã ããšãã°ãåªããOWASPæ¹æ³è«ã§ã¯ãéèŠæ§ãšç¢ºçãšãã2ã€ã®è匱æ§ã®åŽé¢ãå°å ¥ãããŸãã ãããžã§ã¯ãã«å¯Ÿããè匱æ§ã®åœ±é¿ã¯ãããã2ã€ã®éã®ç©ã§ãã ããã¯ããªã¹ã¯è©äŸ¡ãããªãã¯ã¹ãæãåºããããããããŸããã
å®éã«ã¯ãã¹ããŒãã³ã³ãã©ã¯ãã®ç£æ»ã¬ããŒãã§ã¯ãå€ãã®å Žåãè匱æ§ã®åœ±é¿ã®çšåºŠãšãã®éèŠæ§ãè³ã«æ¹ãããããšã確èªããå¿ èŠããããŸãã ãªããããèµ·ãã£ãŠããã®ãåãããŸããã ããã«ãããããããã¯ãªãã£ã«ã«ã¯ã¯ãªãã£ã«ã«ãªè匱æ§ã§ã¯ãããŸããã ãããã£ãŠãè匱æ§ãå®éã®ç掻ã«äžãã圱é¿ããããžã§ã¯ããšé¢é£ä»ããå¥ã®æ¹æ³è«ãææ¡ããŸãã ã¹ããŒãã³ã³ãã©ã¯ãã®å Žåããã®è匱æ§ãæªçšããçµæãšããŠéåžžã«ç解ãããããã®ããããŸãããšãŒãã«ãŸãã¯ããŒã¯ã³ãåºåã§ããŸãããããã¯éåžžã«æªãããšã§ãã æ¡ä»¶ã«ãã£ãŠã¯ãå¥çŽãããªãŒãºããããæ¡ä»¶ãå€§å¹ ã«æªåãããããå¥çŽã亀æããå¿ èŠããããŸãã ããã§ãç£æ»äººãšç£æ»ã¯ã©ã€ã¢ã³ãã«ã¯ãæå°éã®çŽäºãããå ŽåããããŸãã ç£æ»ã¬ããŒããžã®ãªã³ã¯ïŒ
- https://blog.zeppelin.solutions/fuel-token-audit-30cc02f257f5
- https://github.com/mixbytes/audits_public/blob/master/solidity/KickICO/README.md
ã¬ããŒãã¯ãçºèŠãããè匱æ§ãšïŒçæ³çã«ã¯ïŒæ¬¡ã«äœããã¹ããã«ã€ããŠèª¬æããææžã§ãã 西æŽã®ãµãŒã¯ã«ã®èª°ãã倧ããªã¬ããŒããæžããŠããŸãã圌ãã¯ããã®é¢æ°ãå¥ã®æ¹æ³ã§åŒã³åºãå¿ èŠããããšèšã£ãŠããŸããããã®ã³ãŒããã©ããå¥ã®å Žæã«è»¢éããæ¹ãè¯ããšèšã£ãŠããŸãã ãããã顧客ãã¹ããŒãã³ã³ãã©ã¯ãã®é£ç¶éçºã«åŸäºããŠããªãå ŽåãICOã1åå®æœããŠããšãŒãã«ãåéããŠãããã£ãªã¢ã§ç ãæœåºãç¶ããå¿ èŠãããå Žåããããè¡ãçç±ã¯ãããŸããã
ã¹ããŒãã³ã³ãã©ã¯ãã®ã»ãã¥ãªãã£åé¡
察åŠããå¿
èŠãããåé¡ã«ç§»ããŸãããã ããã¯ãã¹ããŒãã³ã³ãã©ã¯ãã®ã»ãã¥ãªãã£ã«é¢ããå¥ã®èšäºã®ãããã¯ã§ãã ããã€ã泚æç¹ããããŸãã éå§ããã«ã¯ãæ©èœãæ
éã«ç¢ºèªããæãå³ããå¶éã§ãå¿
èŠã«å¿ããŠæš©éã§ä¿è·ãããŠããããšã確èªããŠãã ããã ããšãã°ããããã¯ãã§ãŒã³å
ã§äœãå€æŽããªãé¢æ°ã¯ã view
ãšããŠå®£èšã§ãview
ã ãããã¯ãã§ãŒã³ããŸã£ããèªã¿èŸŒãŸãªãé¢æ°ã¯pure
ããpure
ã§ãã ãããã®å¶éã課ã䟡å€ããããŸãã ããã«ã管çæ©èœã¯ææè
ã確èªããå¿
èŠããããŸãã åœããåã®ããã«æããŸãããããªãã£ãæãåºããŠãã ããã
ããäžåºŠç¹°ãè¿ããŸãããããã¯ãã§ãŒã³å
ã®ãã¹ãŠã®ããŒã¿ã¯ãç¶æ
ã«å¯Ÿãã修食åãšã¢ã¯ã»ã¹æš©ã«ããããããããã¹ãŠã®äººã«å
¬éãããŠããŸãã ããã¯public
ãŠãããããããŸããããå®éã«ã¯ããã§ã¯ãªããããããŸããããå®éã«ã¯ããã¹ãŠãå¥çŽããèªã¿åãããšãã§ããŸãã æ¿èªã«tx.origin
ãªã©ã®ãã©ã³ã¶ã¯ã·ã§ã³ãã©ã¡ãŒã¿ã䜿çšããªãã§ãã ãããããã«ãããè匱æ§ãéããŸãã msg.sender
éžæãmsg.sender
ã
éèªæããã ãããããDAOããããã³ã°ããããããããªãšã³ãã©ã³ãæ»æã«ã€ããŠå€ãã®äººãèããããšãããã§ãããã åé¡ã¯ãã³ã³ãã©ã¯ãã¡ãœããããŸã æ©èœããŠãããšãã«ãå€éšåŒã³åºããè¡ãããšãã§ããããšã§ãã ããã¯å€éšåŒã³åºãã«ã®ã¿é©çšãããŸããå€éšåŒã³åºãã¯ãåãã¡ãœãããŸãã¯å¥ã®ã³ã³ãã©ã¯ãã¡ãœããã«ãã§ãŒã³ããã¯ããŠæ»ãããšãã§ããŸãã ãããŠãããã¯è匱æ§ãéããŸãïŒå¥çŽç¶æ ããŸã äžè²«ããŠããªãå¯èœæ§ããããã¡ãœããäžã®äžéšã®äžå€æ¡ä»¶ãäžæçã«éåããããŸã 埩å ãããŠããªãå¯èœæ§ããããŸãã
ããã«å¯ŸåŠããæ¹æ³ã¯ããã€ããããŸãã æãããŒãã³ã¢ãªæ¹æ³nonReentrant
ã©ã€ãã©ãªã³ã³ãã©ã¯ãã®nonReentrant
修食å-ã³ã³ãã©ã¯ãã®ãªãšã³ãã©ã³ããçŠæ¢ããŸãã 䜿ã£ãŠã¿ãŸãããïŒ äžå®éã®ã¬ã¹ãããããæ¡ä»¶ãèšè¿°ããŸãããå Žåã«ãã£ãŠã¯ãéå°ãªã¬ã¹æ¶è²»ãããå®å
šæ§ãéèŠã§ãã
ããšãã°ãããã³ãã©ã³ãã³ã°æ»æãæãåºããŠãã ããã äœããæå·åããŠãããã¯ãã§ãŒã³ã«å ¥ãããšã©ããªããŸããïŒ èª°ãé察称æå·åããã£ã³ã»ã«ããŠããªãããã解èªããããšã¯äžå¯èœã§ãã ãããããã¹ã¯ãŒãä»ãã®ãã©ã³ã¶ã¯ã·ã§ã³ãéä¿¡ããŠåæ³çã«ããã埩å·åããããšãããšããããèµ·ãããŸãã ãŸãããã¹ã¯ãŒãã¯ãããã¯ãã§ãŒã³ã«æµã蟌ãã ããã誰ããèŠãããšãã§ãããããäžåºŠéãã§ãã 第äºã«ããã©ã³ã¶ã¯ã·ã§ã³ãããªããé¢ãããããŸã ã¡ã€ã³ãã©ã³ãã®äžéšã«ãªã£ãŠããããããŒã¯ã³ãèšé²ããŠããªãå Žåããã®æç¹ã§èª°ããããªãã®ãã¹ã¯ãŒããèŠãŠãã©ã³ã¶ã¯ã·ã§ã³å ã§ã¹ãªããããããšãã§ããŸãã ã
å°ãåã«ãå¥ã®æ»æ-ã·ã§ãŒãã¢ãã¬ã¹æ»æã«é¢ããæ å ±ãç»å ŽããŸããã 圌女ã¯ããã€ãã®äº€æãåããŸããã ãããŠããã©ã³ã¶ã¯ã·ã§ã³ãã€ãŒãµãªã¢ã ã«éä¿¡ããã©ã€ãã©ãªã ã³ã¢Ethereum web3 APIã©ã€ãã©ãªã¯åœ±é¿ãåããŸãããããœãããŠã§ã¢äº€æã®åœ±é¿ãåããŸãã æ»æã¯ããŠãŒã¶ãŒã1ãã€ãççž®ããã¢ãã¬ã¹ã䜿çšããããšã§ããã ãã©ã¡ãŒã¿ãŒããã©ã³ã¶ã¯ã·ã§ã³ã«ãã©ã€ã³ããããå Žåããã®ã¢ãã¬ã¹ã«ç¶ããã©ã¡ãŒã¿ãŒã¯1ãã€ãã·ãããããŸããã ãŸããEthereumä»®æ³ãã·ã³ãããããã®ãã©ã¡ãŒã¿ãŒãžã®ã¢ããŒã«ããã£ãå Žåãcalldataã®æåŸã«EVMãæé»çã«ãŒããè¿œå ããŸããã çªå·ã¯1ãã€ãã·ããããããã®ãããªã·ããã¯256ã®ä¹ç®ã§ããã€ãŸãã亀æåŽã®ãã¹ãŠã®ã»ãã¥ãªãã£ãã§ãã¯ãæ¢ã«åæ Œãããšãã«ãŠãŒã¶ãŒã¯1ãŠãããã®ç©ºæ°ãé€å»ããŸããããå®éã«ã¯256ãŠãããã圌ã«è»¢éãããŸããã
誰ããèšããŸãïŒã亀æã¯ééã£ãŠããã°ã©ã ãããŸãããã ç§ã®æèŠã§ã¯ãæ¢åã®ãã©ã³ã¶ã¯ã·ã§ã³ãã©ã¡ãŒã¿ä»¥å€ã®ãã€ãã«ã¢ã¯ã»ã¹ããå Žåãå®éã«ã¯ãŒãã®æé»çãªçœ®æã§ã¯ãªãããšã©ãŒãäŸå€çãªç¶æ³ãããã¯ããªã®ã§ãã€ãŒãµãªã¢ã ä»®æ³ãã·ã³ã«åé¡ããããŸãã ãã®ãããã³ã³ãã¥ãŒã¿ãŒäžã®éåžžã®ã¢ããªã±ãŒã·ã§ã³ã®ã¢ãã¬ã¹ç©ºéã®ç®¡çã§çºçããŸãã
ãªãŒããŒãããŒã«ã€ããŠã¯ãã§ã«èšåããŸããã ããäžåºŠèšããŸãããããšãã°ã1ãã€ããå ããæ°å€ãªã©ã®çãããŒã¿åããããŸãã 笊å·ãªãã®å Žåã0ãã255ãŸã§ã§ãã ããããããµããªãããã«ããããšãéèŠã§ãã æé»çã«çºçããããšããããŸãããæ°ä»ããªãããšããããŸãã ããšãã°ãã«ãŒãããŒã¯ãŒãã®å Žåã var
ããŒã¯ãŒãã䜿çšããŠåã眮ãæããŸãã ã€ãŸãããã©ã¡ãŒã¿ããŒãã«åæåãããšãããã«ããåã¯æé»çã«ã·ã³ã°ã«ãã€ããšããŠéžæãããŸãã 256ã«éããããšã¯ãããŸããã ã€ãŸããç¡éã«ãŒããšããªãŒãºãããå¥çŽãããå¯èœæ§ããããŸãã åçµããããšã¯ãªããèœäžããŸããããµã€ã¯ã«ãéèŠãªå Žæã®ã©ããã«ããå Žåãå¥çŽã¯äžèœãè¶
ããããšã¯ãããŸããã
ããŸããŸãªç®è¡ã§ã¯ãæé»çãªã¿ã€ãã®åŒãååšããå ŽåããããŸãã ããšãã°ãäœãã环ä¹ããŠ2ãã€ãæ°ã«ããçµæã倧ããªæ°ã«å²ãåœãŠãå Žåãåãã£ã¹ããè¡ããªããšçµæãã€ããè¿ãããåã³ãªãŒããŒãããŒãçºçããŸãã
ãã°å ±å¥šé
ãã°å ±å¥šé-æåéã翻蚳ãããå Žåãããã¯ãã°ã«å¯Ÿããå ±é ¬ã§ãã ããã§ã¯ãç£æ»è©äŸ¡ãã€ãŸãè匱æ§è©äŸ¡ãšåãè©äŸ¡æ¹æ³ãé©çšãããŸãã 2çš®é¡ã®æ ¹æ¬çã«ç°ãªããã°ããŠã³ãã£ããã°ã©ã ãéžã³ãŸãã 1ã€ç®ã¯ãããããæåã®ãã°å ±å¥šéã§ãã ãã®ããžãã¹ãã©ã®ããã«åœ¢äœããããã«ã€ããŠã®è¯ããªã³ã¯ïŒ Aventus Token Sale Bug Bounty ã å®éãããã¯ããã®ãããªã³ãŒãã®è匱æ§ãæ¢ããŸãããããšãããªãã¡ãŒã®äžçš®ã§ããããšãã°ãæåã®ã³ãŒãã圌ã«ãšã£ãŠè¯ããšæã£ã人ã¯èª°ã§ãæ¡ä»¶ãå®ããããŠããŸãã ãããŠãäžè¬çã«ããã¹ãŠãããã«æåã«èšè¿°ãããŠãããã©ã®ãããã®ãéãã©ã®è匱æ§ã«äŸåããŠããã®ããèŠãŠãã ããã ä»çµã¿ã¯ããã§æããã§ãã ã»ãã¥ãªãã£ã®å°é家ãããã«ãŒã¯ããããããããèŠã€ãããšããªãã«æžããŸãã ããªãããã§ãã¯ãããããããªãã圌ãã¯å ±é ¬ãæ¯æãããŸãã
2çªç®ã®ãã¥ãŒããããŸãïŒèªåãã°å ±å¥šéã ããã«ãŒãšé¡§å®¢ã®äž¡æ¹ã«ãšã£ãŠé åçã§ãã ããã§ã¯ã亀æžããããã©ã®ãããªè匱æ§ã§ããããã©ã®ãããã®ãéãæ¯æããããã«ã€ããŠã®è°è«ããªãããšã䟿å©ã§ãã ããã¥ã¢ã«çã§ã¯ããã®åœ¢åŒã§æªçšãããããšã¯æ±ºããŠãªããšåœŒãã¯èšãã ããã¯ããã§ã¯ãããŸããã 2ã€ã®ã·ããªãªããããŸãã 1ã€ç®ã¯ããŠã©ã¬ãããã€ãŒãµã¹ãã¬ãŒãžããªããžããªãåçŽã«å±éãããã€ãŒãµããã®äžã«æ³šãããå Žåã«äŸ¿å©ã§ãããã®åŸãããã¬ã€ã¯ã€ãããã¿ããªãã ããã§è¿œå ã§ããå¯äžã®ããšã¯ããããã¯ãã°ã®æ©æµã§ããããã¹ãŠãå£ããŠåãå»ãããšãã§ããããããªããã°ãªããªãããšããã³ã¡ã³ãã§ãã ããããããŸãããããããè¡ãããšã§ãæ å ±ãžã®äžæ£ã¢ã¯ã»ã¹ã«é¢ããæœåšçãªè³ªåããããªãã®å©çã®ããã«ãããã³ã°ã«å¯ŸåŠããããã«ãŒããã®ç¯çœªèšäºãåé€ããŠããããã«èŠããŸãã èªåãã°å ±å¥šéã®2çªç®ã®ã·ããªãªã¯ãäžå€æ¡ä»¶ã®éåã§ãã éåžžãå¥çŽã«ã¯æ瀺çãŸãã¯æé»çãªäžå€åŒããããŸãã ããšãã°ãããŒã¯ã³ã«ã¯åèšããŒã¯ã³æ°ã瀺ãæ°åããããŸãã ãããŠããã®æ°ã¯ãããŒã¯ã³ä¿æè ã®æ®é«ã®åèšã«çãããªããã°ãªããŸããã ãŸãã¯ãããšãã°ãICOäžã«åäœãããšãŒãã«è²¯èµæœèšã¯ãåéããããšãŒãã«ã®éãä¿æã§ãã貯èµå¥çŽã®æ®é«ã¯ãã®é以äžã§ãªããã°ãªããŸããã ããã§ãªãå Žåãäžå€åŒã«éåããŸãã
ãã®ãã°å ±å¥šéã¯ã©ã®ããã«ç·šæãããŠããŸããïŒ å©å®³é¢ä¿è ã«äžå€åŒãšã®å¥çŽã®æ°ããã³ããŒãæäŸããå¥çŽãããã圌ãã¯äœããã®åœ¢ã§ãã®ã³ããŒã§éãã§äžå€åŒã«éåããããšããããšãã§ããŸãã ãããå£ãããšããéã¯èªåçã«åœŒãã«å°çãã圌ãã¯èŠªå¥çŽã«ãã£ãŠæ¯æãããŸãã ã¹ããŒãªãŒå šäœãèªåã§ãããããã«ãŒã¯æ°æéã§ä»äºã®å ±é ¬ãåãåãããšãã§ãããããããã¯äŸ¿å©ã§ãããã°ãå€ã顧客ã¯ã100ã®ãšãŒãã«ããããããã0ã«ãªã£ãããã圌ã®å¥çŽãã©ã®ããã«ãããã³ã°ããããã確èªã§ããŸãããããã¯ãã§ãŒã³ã§ã¯ãã¹ãŠãå ¬éãããŠãããããããã衚瀺ãããŸãã ãããŠãåæ¹ãè°è«ããæéãç¡é§ã«ããå¿ èŠã¯ãããŸããã
å¥çŽã®å±é
éçºããã¹ããç£æ»ãããã³ãã°å ±å¥šé-ããã§ãå±éãã€ãŸããããã¯ãã§ãŒã³ã«å¥çŽãç· çµããæãæ¥ãŸããã Truffle , â migrate
. , .
â , , - , . , , , 20 20 . . , . . , .
, , , -, . , , , , 1 . , 300 . , , â . , , , , . , Testnet â Ethereum, , . , , , .
, , . , - , . . .
. , : «, , . ». , . : , , . , , , , Truffle . , , . , . . Truffle , geth, , . , . â . , , , .
, , . , . , . . , . . . .
, , , , ICO , .
â . , ABI , , Etherscan. . , , .
- . , , . , , , , .
, . , , , . , , , , , .
, . ãã¹ãŠãéåžžã«ç°¡åã§ãã , . , . , .
ICO-, , , , , , , , , . , , .
: , . , . - . , Ethereum, Ethereum, , , , , , Intel AMD. AMD64 , , . RISC-, reduced instruction set. - , . , , , â . , - backdoor, . , , .
. , . : . Etherscan. , , , . , , . . , . , , . user friendly . .
, Etherscan, . : « , , Etherscan â ?» , . , , , , . , . , , white paper.
ãããã«
, . . , . , . 3 . ICO!