ã¯ããã«
åããŸããŠã
CryptoGamesãšãããããã¯ãã§ãŒã³ã²ãŒã äŒæ¥ã§ãšã³ãžãã¢ãããŠãã cardeneïŒããã§ãïŒ ã§ãïŒ
ã¹ããŒãã³ã³ãã©ã¯ããæžããããããã³ããšã³ãã»ããã¯ãšã³ãã»ã€ã³ãã©ãšå¹
åºãè§ŠããŠããŸãã
代衚çãªã²ãŒã ã¯ã¯ãªããã¹ãã«ãºãšãããããã¯ãã§ãŒã³ã²ãŒã ã§ãã
ä»åã¯ãã¢ããã°ã¬ãŒããã«ãªã³ã³ãã©ã¯ãã®èŠæ Œã®1ã€ã§ããããã€ã€ã¢ã³ããã¿ãŒã³ã®ææ¡ãããŠããERC2535ã«ã€ããŠãŸãšããŠãããŸãïŒ
以äžã«ãŸãšããããŠãããã®ã翻蚳ã»èŠçŽã»è£è¶³ããªãããŸãšããŠãããŸãã
æŠèŠ
ãã®èŠæ Œã§ã¯ãã¢ããã°ã¬ãŒããã«ãªã¹ããŒãã³ã³ãã©ã¯ããããæè»ã«ç®¡çããä»çµã¿ãææ¡ããŠããŸãã
ã³ã³ãã©ã¯ãã®ã¢ããã°ã¬ãŒãã«ã€ããŠã¯ä»¥äžã®èšäºãåèã«ããŠãã ããã
ãã®æ¹æ³ã¯ããã€ã€ã¢ã³ãããšåŒã°ããŠããŸãã
ãã€ã€ã¢ã³ãã䜿ãããšã§ãã¹ããŒãã³ã³ãã©ã¯ãããããã€ããåŸã§ãã³ã³ãã©ã¯ãã®æ©èœãã¢ããã°ã¬ãŒããããæ°ããªæ©èœã远å ã§ããŸãã
ããã«ããµã€ãºå¶éã«ãçžãããã«ã³ã³ãã©ã¯ããæ¡åŒµã§ãããã¢ãžã¥ãŒã«åŒã¹ããŒãã³ã³ãã©ã¯ãã·ã¹ãã ããšããç¹åŸŽãæã¡ãŸãã
ãã€ã€ã¢ã³ããšããã®ã¯ãå€éšããåŒã³åºãã颿°ãæã£ãã³ã³ãã©ã¯ãã§ãã
颿°ã®å®éã®åŠçã¯ããã¡ã»ãããšåŒã°ããå¥ã®ã³ã³ãã©ã¯ãã«ãã£ãŠæäŸãããŸãã
ãã®ãã¡ã»ããã¯ãããããç¬ç«ããŠååšããå
éšã®åŠçãã©ã€ãã©ãªãç¶æ
倿°ãå
±æããããšãã§ããä»çµã¿ã§ãã
ã€ã¡ãŒãžãšããŠã¯ããã€ã€ã¢ã³ããå®ç³ã®äžå¿éšåã§ããããã®åšãã«è€æ°ã®å°ããªãã¡ã»ãããåãä»ããããŠããŸãã
åãã¡ã»ããã¯ç°ãªãæ©èœãæäŸããå¿
èŠã«å¿ããŠè¿œå ããã亀æãããã§ããŸãã
ããã«ãã£ãŠãã¹ããŒãã³ã³ãã©ã¯ãå
šäœã®æ©èœãç°¡åã«ç®¡çã»æ¡åŒµã§ããã®ã§ãã
åæ©
ç¡å¶éãªã³ã³ãã©ã¯ãæ©èœã®åäžã¢ãã¬ã¹å
ãã€ã€ã¢ã³ããå©çšããå©ç¹ã®1ã€ã¯ãã³ã³ãã©ã¯ãã®æ©èœã1ã€ã®ã¢ãã¬ã¹ã§ç®¡çã§ããããšã§ãã
ããããã®æ©èœã¯åãã¡ã»ããã§ç®¡çãããŠããããããã€ã€ã¢ã³ãã«ã¢ã¯ã»ã¹ããããšã§ããããã®æ©èœã«ã¢ã¯ã»ã¹ã§ããŸãã
ããã«ãããã¹ããŒãã³ã³ãã©ã¯ãã®ãããã€ããã¹ããä»ã®ã¹ããŒãã³ã³ãã©ã¯ãããœãããŠã§ã¢ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãšã®çµ±åãã·ã³ãã«ã«ãªããŸãã
24KBã®æå€§ã³ã³ãã©ã¯ããµã€ãºãè¶ ããå Žå
ããã¹ããŒãã³ã³ãã©ã¯ããæå€§24KB
ã®å¶éãè¶
ããå Žåãé¢é£ããæ©èœã1ã€ã®ã³ã³ãã©ã¯ãå
ãŸãã¯åäžã®ã³ã³ãã©ã¯ãã¢ãã¬ã¹ã§ä¿æããã®ãè¯ãå ŽåããããŸãã
ãã€ã€ã¢ã³ãã䜿ãããšã§ãæå€§ã³ã³ãã©ã¯ããµã€ãºã®å¶éã«çžãããã«æ©èœã管çã§ããŸãã
ã³ã³ãã©ã¯ãã«ã¯ãµã€ãºå¶éããããæå€§çŽ24
KBãšãªã£ãŠããŸãã
ä»åææ¡ãããŠããææ³ã®å Žåãåæ©èœãå¥ã³ã³ãã©ã¯ãã«åãåºããŠèªã¿èŸŒãããšãã§ããããããµã€ãºå¶éã«å¯ŸåŠã§ããŸãã
ã³ã³ãã©ã¯ãã³ãŒããšããŒã¿ã®æŽç
è€æ°ã®æ©èœãæã€ã³ã³ãã©ã¯ãã·ã¹ãã ãæ§ç¯ããå Žåããã€ã€ã¢ã³ãã¯ç°ãªãæ©èœãåé¢ããŠçµã¿ç«ãŠãå¿
èŠã«å¿ããŠããŒã¿ãå
±æããææ®µãæäŸããŸãã
ããã«ãããã¬ã¹ã®å¹çãèæ
®ããªããæ©èœãçµã¿åãããããšãã§ããŸãã
æ©èœã®ã¢ããã°ã¬ãŒã
ã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ãã¯ãæ©èœã远å ã眮æãåé€ããããã«ã¢ããããŒãã§ããŸãã
ãã€ã€ã¢ã³ãã«ã¯æå€§ã³ã³ãã©ã¯ããµã€ãºã®å¶éããªããããæéã®çµéãšãšãã«æ°ããªæ©èœã远å ãç¶ããããšãã§ããŸãã
æ¢åã®æ©èœãåãããã€ããããšãªãã¢ããã°ã¬ãŒãã§ããäžéšã®æ©èœã ãã倿Žããããšãå¯èœã§ãã
ã€ãã¥ãŒã¿ãã«ãªãã€ã€ã¢ã³ã
ã€ãã¥ãŒã¿ãã«ïŒå€æŽäžå¯èœïŒãªãã€ã€ã¢ã³ãããããã€ããããã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ããåŸããã€ãã¥ãŒã¿ãã«ã«ããããšãã§ããŸãã
ããã«ãã£ãŠãã³ã³ãã©ã¯ãã®ç¶æ
ãä¿æãã€ã€ãã¢ããã°ã¬ãŒãã®ãªã¹ã¯ã軜æžã§ããŸãã
ã€ãã¥ãŒã¿ãã«ãšã¯å€æŽäžå¯èœãªã³ã³ãã©ã¯ãã®ããšã§ãã
ãã®å察ãã¢ããã°ã¬ãŒãã§ããã³ã³ãã©ã¯ãã§ãã
ãããã€æžã¿ã³ã³ãã©ã¯ãã®åå©çš
æ°ããªã³ã³ãã©ã¯ãããããã€ãã代ããã«ãæ¢åã®ãªã³ãã§ãŒã³ã³ã³ãã©ã¯ãã䜿çšããŠãã€ã€ã¢ã³ããäœæã§ããŸãã
ããã«ãã£ãŠãæ¢åã®ã³ã³ãã©ã¯ããåå©çšããŠã«ã¹ã¿ã ã®ãã€ã€ã¢ã³ããäœæããããšãã§ããŸãã
ããã¯ãæ°ããªã¹ããŒãã³ã³ãã©ã¯ããã©ãããã©ãŒã ãã©ã€ãã©ãªã®æ§ç¯ã«åœ¹ç«ã¡ãŸãã
æ¢åã®ã³ã³ãã©ã¯ããå©çšããããšã§ãä»ã«ã以äžã®ãããªã¡ãªããããããŸãã
ã³ã¹ãåæž
ã³ã³ãã©ã¯ãã®ãããã€ã«ã¯ã¬ã¹è²»çšãããããŸãã
æ¢ã«ãããã€ãããã³ã³ãã©ã¯ããåå©çšããããšã§ãæ°ãã«ã³ã³ãã©ã¯ãããããã€ããæã®ã¬ã¹ãåæžã§ããŸãã
æéççž®
ã³ã³ãã©ã¯ãã®ãããã€ã«ã¯æéãããããŸãã
æ¢åã®ã³ã³ãã©ã¯ããåå©çšããããšã§ãæ°ããªã³ã³ãã©ã¯ãããŒããããããã€ããæéãæéãçãããšãã§ããŸãã
ç¹ã«ãè€æ°ã®ãã€ã€ã¢ã³ããäœæããå Žåããäžè¬çãªæ©èœãæäŸããã©ã€ãã©ãªãå©çšããå Žåã«å¹æçã§ãã
ã³ãŒãä¿¡é Œæ§
æ¢åã®ã³ã³ãã©ã¯ãã¯ãã§ã«ãã¹ãããã³éçšãããŠããããã®ä¿¡é Œæ§ã確ç«ãããŠããŸãã
ã³ã³ãã©ã¯ãã®ç£æ»ãªã©ããããŠããã°ããä¿¡é Œæ§ã匷åºã«ãªããŸãã
åå©çšããããšã§ããããã®ã³ã³ãã©ã¯ããé©åã«åäœããããšãä¿èšŒãããŸãã
ã³ã³ãã©ã¯ãã®äºææ§
æ¢åã®ã³ã³ãã©ã¯ãã¯ããã§ã«ä»ã®ã³ã³ãã©ã¯ãããããžã§ã¯ããšã®çµ±åãè¡ãããŠããå¯èœæ§ããããŸãã
ãã®ã³ã³ãã©ã¯ããåå©çšããããšã§ãäºææ§ã®ããDappãªã©ãç°¡åã«äœæã§ããŸãã
ãã®èŠæ Œã¯ãEIP1538 ã®æ¹è¯çã§ãã
ãã¡ã»ããã®å ±æ
ãããã€æžã¿ã®ãã¡ã»ããã¯ãè€æ°ã®ãã€ã€ã¢ã³ãã§å
±æããŠå©çšã§ããŸãã
以äžã®å³ã§ã¯ãåããã¡ã»ãããç°ãªããã€ã€ã¢ã³ãã§äœ¿çšãããŠããæ§åã瀺ããŠããŸãã
- Diamond1ãFacetAã䜿çš
- Diamond2ãFacetAã䜿çš
- Diamond1ãFacetBã䜿çš
- Diamond2ãFacetBã䜿çš
- Diamond1ãFacetAãšFacetBã®ããŒã¿ã管ç
- Diamond2ãFacetAãšFacetBã®ããŒã¿ã管ç
ãã®ä»çµã¿ã«ããããªãœãŒã¹ã®æå¹ãªå ±æãå¯èœãšãªã£ãŠããŸãã
ã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ããšäžå€®éæš©çãªãã©ã€ããŒãããŒã¿ããŒã¹
ã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ããšäžå€®éæš©çãªãã©ã€ããŒãããŒã¿ããŒã¹ã®éãã«ã€ããŠèª¬æããŠãããŸãã
忣åèªæ²»çµç¹ïŒDAOïŒãšã¢ããã°ã¬ãŒã
ã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ãã䜿çšãããšã忣åèªæ²»çµç¹ïŒDAOïŒãªã©ã®ä»çµã¿ãä»ããŠã³ã³ãã©ã¯ããã¢ããã°ã¬ãŒãã§ããŸãã
ã€ãŸããã³ãã¥ããã£ã®åæã«åºã¥ããŠã³ã³ãã©ã¯ããã¢ããã°ã¬ãŒãã§ããã®ã§ããŸãã
Ethereumãšã³ã·ã¹ãã ãšã®é£æº
ã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ãã¯ãEthereumãšã³ã·ã¹ãã ãšã·ãŒã ã¬ã¹ã«é£æºã§ããŸãã
ããã«ãããä»ã®ã¹ããŒãã³ã³ãã©ã¯ããã¢ããªã±ãŒã·ã§ã³ãšã®é£æºã容æã§ãè€éãªæ©èœãæäŸã§ããŸãã
éææ§ãšæ€èšŒå¯èœãªå±¥æŽ
ã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ãã§ã¯ããªãŒãã³ãªã¹ãã¬ãŒãžããŒã¿ãšæ€èšŒæžã¿ã®ãœãŒã¹ã³ãŒãã䜿çšããããšã§ãã³ã³ãã©ã¯ãã®ä¿¡é Œæ§ã倿Žå±¥æŽã«éææ§ãæãããŸãã
ããã«ãããã³ã³ãã©ã¯ãã®ä¿¡é Œæ§ã蚌æããããšãå¯èœã§ãã
éææ§ã«ããåé¡ã®çºèŠ
ãªãŒãã³ãªããŒã¿ããŒã¹ã䜿çšããããšã§ãåé¡ãäžæ£è¡çºãçºçããå Žåã«æ©æã«çºèŠã察åŠã§ããŸãã
éææ§ã«ãã£ãŠãåé¡ãé ãããããšãªãã³ãã¥ããã£å
šäœã§ç£èŠã§ããŸãã
ã»ãã¥ãªãã£ãšå°éå®¶ã®ç£æ»
ã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ãã®å€æŽå±¥æŽãã»ãã¥ãªãã£ããã¡ã€ã³ã®å°éå®¶ãç£æ»ãããã®ä¿¡é Œæ§ãä¿èšŒã§ããŸãã
ããã«ãã£ãŠãã³ãŒãã®å®å
šæ§ãšä¿¡é Œæ§ãé«ããããšãã§ããŸãã
ã€ãã¥ãŒã¿ãã«ãªãã€ã€ã¢ã³ããžã®å€å
ã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ãã¯ãåŸã«ã€ãã¥ãŒã¿ãã«ã§ä¿¡é Œæ§ã®ããç¶æ
ã«å€æŽããããšãã§ããŸãã
ããã«ãããå®å®ããç¶æ
ã§ã³ã³ãã©ã¯ããç¶æããæ¹ãããé²ãããšãã§ããŸãã
ã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ãã¯ã忣æ§ãšéææ§ãåºã«ããæ¹åãšä¿¡é Œæ§åäžã®ã¡ãªãããæäŸããŸãã
äžæ¹ãäžå€®éæš©çãªãã©ã€ããŒãããŒã¿ããŒã¹ã¯ããããã®å©ç¹ãæããªãå Žåãå€ãã§ãã
ãã€ã€ã¢ã³ãã®ã¡ãªãã
1. 決ãŸã£ãã¢ãã¬ã¹ã§æ©èœæäŸ
ãã€ã€ã¢ã³ãã¯æ±ºãŸã£ãã¢ãã¬ã¹ã§å¿ èŠãªæ©èœãæäŸããŸãã
éåžžãã¹ããŒãã³ã³ãã©ã¯ãã¯ç¹å®ã®ã¢ãã¬ã¹ã«ãããã€ãããŸããããã®ã¢ãã¬ã¹ã¯äžåºŠæ±ºãŸããšå€æŽããããšãã§ããŸããã
ããããæ°ããªæ©èœã®è¿œå ãã¢ããã°ã¬ãŒããå¿
èŠãªå ŽåãåŸæ¥ã®ã¹ããŒãã³ã³ãã©ã¯ãã§ã¯æ°ããªã¢ãã¬ã¹ã§æ°ããã³ã³ãã©ã¯ãããããã€ããå¿
èŠããããŸãã
äžæ¹ããã€ã€ã¢ã³ãã¯ãäžã€ã®æ±ºãŸã£ãã¢ãã¬ã¹ã«ç°ãªãæ©èœãæ©èœã®ããŒãžã§ã³ïŒãã¡ã»ããïŒãçµ±åããŸãã
ããã«ããããŠãŒã¶ãŒãä»ã®ã³ã³ãã©ã¯ãã¯åžžã«åãã¢ãã¬ã¹ã䜿çšããŠãã€ã€ã¢ã³ãã®æ©èœã«ã¢ã¯ã»ã¹ã§ããŸãã
æ°ããªæ©èœã远å ããå Žåã§ããåãã¢ãã¬ã¹ã§æ°ãããã¡ã»ããã远å ããããšã§ãã¢ãã¬ã¹ã®å€æŽãé¿ããããšãã§ããŸãã
å
·äœçãªäŸã§èŠãŠã¿ãŸãããã
ããªãããããããžã§ã¯ãã§ã¹ããŒãã³ã³ãã©ã¯ããéçºããŠããããã®ã³ã³ãã©ã¯ãã«ã¯è€æ°ã®æ©èœãå«ãŸããŠããŸãã
åŸæ¥ã®ã¹ããŒãã³ã³ãã©ã¯ãã§ã¯ãæ°ããªæ©èœã远å ããããã«æ°ããã¢ãã¬ã¹ã§ã³ã³ãã©ã¯ãããããã€ããå¿
èŠããããŸãã
ãããããã€ã€ã¢ã³ãã䜿çšãããšãæ¢åã®ã¢ãã¬ã¹ã«æ°ããæ©èœã远å ããã ãã§æžã¿ãŸãã
ããã«ããããŠãŒã¶ãŒã¯åžžã«åãã¢ãã¬ã¹ã䜿çšããŠãæ°ããªæ©èœã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
ç°¡åã«èšãã°ããã€ã€ã¢ã³ãã¯1ã€ã®ã¢ãã¬ã¹ã§è€æ°ã®æ©èœãæäŸããããšã§ãã¢ãã¬ã¹ã®å®å®æ§ãšäœ¿ãããããäž¡ç«ãããä»çµã¿ã§ãã
以äžã®ã¢ããã°ã¬ãŒããã«ãªã³ã³ãã©ã¯ãã«ã€ããŠã®èšäºãåèã«ãªããŸãã
2. 倿©èœã®åäžã¢ãã¬ã¹
ãã€ã€ã¢ã³ãã¯è€æ°ã®ç¬ç«ããã³ã³ãã©ã¯ãïŒãã¡ã»ããïŒã®æ©èœã1ã€ã®ã¢ãã¬ã¹ã§çµ±åããŸãã
ããããã®æ©èœã¯ç¬ç«ããŠããŠãå
éšé¢æ°ãã©ã€ãã©ãªãç¶æ
倿°ãå
±æã§ããŸãã
3. åäžã¢ãã¬ã¹ããã®ã€ãã³ãçºè¡
ãã€ã€ã¢ã³ãã®åäžã¢ãã¬ã¹ããã€ãã³ããçºè¡ããããšã§ãã€ãã³ãåŠçãç°¡çŽ åãããŸãã
4. è€æ°é¢æ°ã®ã¢ãããã¯ãªå€æŽ
ãã€ã€ã¢ã³ãã¯1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§è€æ°ã®å€éšé¢æ°ãã¢ãããã¯ã«è¿œå ã眮æãåé€ã§ããŸãã
éåžžãã¹ããŒãã³ã³ãã©ã¯ãã®ã¢ããã°ã¬ãŒãã¯ãæ°ããããŒãžã§ã³ã®ã³ã³ãã©ã¯ãããããã€ããæ§ããŒãžã§ã³ããããŒã¿ãç§»è¡ãããªã©ã®æé ãå¿
èŠã§ãã
ãããããã®ããã»ã¹ã¯è€éã§ããã©ã³ã¶ã¯ã·ã§ã³ãè€æ°å¿
èŠãªããšããããŸãã
ãã€ã€ã¢ã³ãã¯ããã®ã¢ããã°ã¬ãŒãããã»ã¹ãç°¡çŽ åããããã®æ¹æ³ãæäŸããŸãã
äŸãã°ããããã€ã€ã¢ã³ãã«æ°ããªæ©èœã远å ããå ŽåãåŸæ¥ã®ã¹ããŒãã³ã³ãã©ã¯ãã§ã¯æ°ããããŒãžã§ã³ã®ã³ã³ãã©ã¯ãããããã€ãããã®ã¢ãã¬ã¹ãåãæ¿ããå¿
èŠããããŸããã
ãããããã€ã€ã¢ã³ãã䜿çšãããšã1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§æ°ããæ©èœãã¢ãããã¯ã«ãã€ã€ã¢ã³ãã«çµ±åããããšãã§ããŸãã
äŸãã°ãããªãããæ¯æãããšã転éãã®2ã€ã®æ©èœãæã€ãã€ã€ã¢ã³ããæã£ãŠãããšããŸãã
åŸããæ°ããªæ©èœãããŠã³ã¹ãã远å ãããå Žåããã€ã€ã¢ã³ãå
ã«ãããŠã³ã¹ãæ©èœã远å ãããã©ã³ã¶ã¯ã·ã§ã³ã1ã€ã ãéä¿¡ããã°è¯ãã§ãã
ãã®ãã©ã³ã¶ã¯ã·ã§ã³ãåŠçãããéãæ°ããæ©èœãã¢ãããã¯ã«ãã€ã€ã¢ã³ãã«è¿œå ãããŸãã
ããã«ãããæ°ããªæ©èœã远å ããããšåæã«ãä»ã®æ©èœã«åœ±é¿ãäžããããšãªã倿Žãè¡ãããŸãã
ãŸããæ¢åã®æ©èœã眮æãåé€ããå Žåãåãã§ãã
1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§æ©èœã®çœ®æãåé€ãè¡ãããšãã§ããããã«ãã£ãŠè€æ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ã䜿çšããå¿
èŠããªããªããŸãã
ã¢ãããã¯
ã¢ãããã¯ãªæäœãšã¯ããã®æäœãäžé£ã®ã¹ãããã§æ§æããããã®äžã§ã©ãã1ã€ã®ã¹ãããã倱æãããšãä»ã®ãã¹ãŠã®ã¹ããããåãæ¶ããããšããæ§è³ªãæããŸãã
ãã®ãããªæäœã¯ããã¹ãŠãæåããããã¹ãŠã倱æãããã®ã©ã¡ããã§å®äºããéäžã®ç¶æ
ã¯ååšããŸããã
ã¢ãããã¯ãªæäœã¯ãããŒã¿ããŒã¹ã®äžè²«æ§ããã©ã³ã¶ã¯ã·ã§ã³ã®ä¿¡é Œæ§ã確ä¿ããããã«éèŠã§ãã
ç¹ã«ãã¹ããŒãã³ã³ãã©ã¯ãã«ãããŠã¯ãè€æ°ã®æäœãæ£ç¢ºã«é çªéãã«å®è¡ãããå¿
èŠããããŸãã
ã¢ãããã¯ãªæäœã䜿çšããããšã§ããã®ãããªæäœã確å®ã«å®è¡ãããããšãä¿èšŒãããŸãã
ãã€ã€ã¢ã³ãã®ã³ã³ããã¹ãã§ "ã¢ãããã¯ã«è€æ°ã®å€éšé¢æ°ã远å ã眮æãåé€ãã" ãšãã衚çŸãèããŠã¿ãŸãããã
ããã¯ã1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³å
ã§ãè€æ°ã®ç°ãªãæäœïŒè¿œå ã眮æãåé€ïŒãè¡ãããšãæããŠããŸãã
ãã®ãã©ã³ã¶ã¯ã·ã§ã³ãã¢ãããã¯ã§ããå Žåãã©ãã1ã€ã®æäœã倱æãããšãä»ã®æäœãåãæ¶ãããŸãã
ã€ãŸãããã¹ãŠã®æäœãæ£åžžã«å®äºããããã©ããå®è¡ãããªããã®ã©ã¡ããã§ãã
ãã®ãããªã¢ãããã¯ãªæäœã¯ãããŒã¿ã®æŽåæ§ãšä¿¡é Œæ§ãä¿ã€ããã«éåžžã«éèŠã§ãã
5. 现ããªã¢ããã°ã¬ãŒã
ãã€ã€ã¢ã³ãã¯å¿ èŠãªéšåã ãã倿Žã§ããããã现ããªã¢ããã°ã¬ãŒããå¯èœã§ãã
6. 颿°ã®å¶åŸ¡
ãã€ã€ã¢ã³ãã¯é¢æ°ã®ååšãšã¿ã€ãã³ã°ã现ããå¶åŸ¡ã§ããŸãã
å
·äœçã«ã¯ããã€ã€ã¢ã³ããæ§æããè€æ°ã®ãã¡ã»ãããšããç¬ç«ããã³ã³ãã©ã¯ã矀ããããŸãã
ãããã®ãã¡ã»ããã¯ãããããç°ãªãæ©èœãæäŸããŸãã
ãã€ã€ã¢ã³ãã¯ãããã®ãã¡ã»ãããçµã¿åãããŠæ§ç¯ãããŸãã
颿°ã®å¶åŸ¡ã«é¢ããŠã以äžã®ãããªã±ãŒã¹ãèããŠã¿ãŸãããã
颿°ã®ååšãšå®è¡ã¿ã€ãã³ã°ã®å¶åŸ¡
ãã€ã€ã¢ã³ãå
ã®ç¹å®ã®ãã¡ã»ããã«ã¯ãå¿
èŠãªæ©èœãæäŸãã颿°ãå®è£
ãããŠããŸãã
ãã€ã€ã¢ã³ãã®ç®¡çè
ã¯ãã©ã®ãã¡ã»ãããã©ã®é¢æ°ãæäŸããããå¶åŸ¡ã§ããŸãã
ãŸããç¹å®ã®ã¿ã€ãã³ã°ã§ç¹å®ã®é¢æ°ãæå¹ã«ãããç¡å¹ã«ãããããããšãå¯èœã§ãã
æ©èœã®è¿œå ãšåé€
ãã€ã€ã¢ã³ãã¯ãæ°ãããã¡ã»ããã远å ããããšã§æ°ããæ©èœãå°å
¥ã§ããŸãã
åæ§ã«ãäžèŠãªæ©èœãæã€ãã¡ã»ãããåé€ããããšã§ããã€ã€ã¢ã³ãå
ã®æ©èœãå¶åŸ¡ã§ããŸãã
ã¿ã€ãã³ã°ã«åããã颿°ã®æå¹åã»ç¡å¹å
ç¹å®ã®ã€ãã³ããæ¡ä»¶ãçºçããéã«ãç¹å®ã®é¢æ°ãäžæçã«æå¹åãŸãã¯ç¡å¹åããããšãã§ããŸãã
ããã«ãããå¿
èŠã«å¿ããŠç¹å®ã®æ©èœãå©çšå¯èœã«ãããå¶éãããã§ããŸãã
æ©èœã®çµã¿åãã
ãã€ã€ã¢ã³ãã®ãã¡ã»ããã¯ç¬ç«ããŠãããç°ãªãæ©èœãæäŸããŸãã
ãã€ã€ã¢ã³ãã®ç®¡çè
ã¯ããããã®ãã¡ã»ãããçµã¿åãããŠãå¿
èŠãªæ©èœãæã€ãã€ã€ã¢ã³ããæ§ç¯ã§ããŸãã
ãã€ã€ã¢ã³ãã䜿çšããããšã§ãå¿ èŠãªæ©èœãæã¡ã€ã€ããããã®æ©èœã®ååšãšå®è¡ã¿ã€ãã³ã°ãæè»ã«å¶åŸ¡ã§ãããããã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã«åãããã«ã¹ã¿ãã€ãºãå¯èœã§ãã
7. DAOãã¬ããã³ã¹ã§ã®ã¢ããã°ã¬ãŒã
ãã€ã€ã¢ã³ãã¯åæ£èªæ²»çµç¹ïŒDAOïŒããã«ãã·ã°ã³ã³ãã©ã¯ããä»ããŠã¢ããã°ã¬ãŒãã§ããŸãã
åæ£èªæ²»çµç¹ïŒDAOïŒãä»ããã¢ããã°ã¬ãŒã
äŸãã°ããããããžã§ã¯ãããã€ã€ã¢ã³ãã䜿çšããŠã¹ããŒãã³ã³ãã©ã¯ããæ§ç¯ããŠããŸãã
ãããžã§ã¯ãã³ãã¥ããã£ã¯ãæ°ããæ©èœã远å ããããã°ãä¿®æ£ãããããããã«ãã€ã€ã¢ã³ããã¢ããã°ã¬ãŒãããããšèããŠããŸãã
ããã§ãåæ£èªæ²»çµç¹ïŒDAOïŒãç»å ŽããŸãã
-
æç¥šãšæ±ºå®
ãããžã§ã¯ãã®åå è ã¯ãDAOã®ãã©ãããã©ãŒã ãéããŠã¢ããã°ã¬ãŒãææ¡ãè¡ããŸãã
ææ¡å 容ã«ã¯ãæ°ããæ©èœã®è¿œå ã倿Žå 容ãå«ãŸããŸãã -
ã³ãã¥ããã£ã®åæ
DAOã®åå è ã¯ææ¡ã«å¯ŸããŠæç¥šãè¡ãããã®ææ¡ãåãå ¥ãããããã©ãããæ±ºå®ããŸãã
éåæ°ã®è³æãåŸãããå Žåãææ¡ã¯åãå ¥ããããŸãã -
ã¢ããã°ã¬ãŒãå®è¡
ææ¡ãæ¿èªãããããDAOã¯ãã€ã€ã¢ã³ãã®ã¢ããã°ã¬ãŒããã©ã³ã¶ã¯ã·ã§ã³ãå®è¡ããŸãã
ããã«ãããæ°ããæ©èœã远å ããããæ¢åã®æ©èœã倿ŽããããããŸãã
ãã«ãã·ã°ã³ã³ãã©ã¯ããä»ããã¢ããã°ã¬ãŒã
å¥ã®äŸãšããŠããããžã§ã¯ãããŒã ããã€ã€ã¢ã³ãã䜿çšããŠç¹å®ã®ãµãŒãã¹ãæäŸããŠããŸãã
ããŒã ã¯ããµãŒãã¹ã®æ¹åãã»ãã¥ãªãã£ã®åäžãç®æããŠããã€ã€ã¢ã³ãã®ã¢ããã°ã¬ãŒããè¡ããããšèããŠããŸãã
ããã§ããã«ãã·ã°ã³ã³ãã©ã¯ãã圹ç«ã¡ãŸãã
-
ãã«ãã·ã°ã³ã³ãã©ã¯ãã®èšå®
ãããžã§ã¯ãããŒã ã¯ãè€æ°ã®ããŒãã«ããŒãåæããŠã¢ããã°ã¬ãŒããè¡ãããã®ãã«ãã·ã°ã³ã³ãã©ã¯ããèšå®ããŸãã -
ã¢ããã°ã¬ãŒãææ¡
ããŒã ã¯ã¢ããã°ã¬ãŒãã®ææ¡ãäœæãããã«ãã·ã°ã³ã³ãã©ã¯ãã«ããæ¿èªããã»ã¹ãéå§ããŸãã
ææ¡ã«ã¯ã倿Žå 容ãã¢ããã°ã¬ãŒãã®çç±ãå«ãŸããŸãã -
ããŒãã«ããŒã®æ¿èª
ãã«ãã·ã°ã³ã³ãã©ã¯ãã®ããŒãã«ããŒãã¡ã¯ææ¡ãæ€èšããã¢ããã°ã¬ãŒãã®å¿ èŠæ§ã圱é¿ãè©äŸ¡ããŸãã
å¿ èŠãªæ°ã®ããŒãã«ããŒãææ¡ã«åæããããšã§ãã¢ããã°ã¬ãŒããæ¿èªãããŸãã -
ã¢ããã°ã¬ãŒãå®è¡
æ¿èªãåŸãããå Žåããã«ãã·ã°ã³ã³ãã©ã¯ãã¯ã¢ããã°ã¬ãŒããã©ã³ã¶ã¯ã·ã§ã³ãçºè¡ãããã€ã€ã¢ã³ãã®æ°ããããŒãžã§ã³ããããã€ãããŸãã
ãããã®äŸããåããããã«ãåæ£èªæ²»çµç¹ïŒDAOïŒããã«ãã·ã°ã³ã³ãã©ã¯ããéããŠããããžã§ã¯ãã³ãã¥ããã£ãããŒã ããã€ã€ã¢ã³ãã®ã¢ããã°ã¬ãŒããåæããå®è¡ããããšãå¯èœã§ãã
8. 倿Žã瀺ãã€ãã³ã
ãã€ã€ã¢ã³ãã¯é¢æ°ã®å€æŽã瀺ãã€ãã³ããæäŸããŸãã
9. 倿Žå±¥æŽã®è¡šç€º
ãã€ã€ã¢ã³ãã®å€æŽå±¥æŽã衚瀺ããããšã§ãä¿¡é Œæ§ãåäžãããŸãã
10. çŸåšã®ç¶æ ã®è¡šç€º
ãã€ã€ã¢ã³ãã®çŸåšã®ãã¡ã»ãããšé¢æ°ã確èªã§ããŸãã
11. ä¿¡é Œæ§ã®ãããã€ã€ã¢ã³ã
ãã€ã€ã¢ã³ãã¯åŸããã€ãã¥ãŒã¿ãã«ã«ããããšãã§ããŸãã
12. ã³ã³ãã©ã¯ããµã€ãºã®å¶éå æ
ãã€ã€ã¢ã³ãã¯ã³ã³ãã©ã¯ããµã€ãºå¶éãå æããä»»æã®ãµã€ãºãæã€ããšãã§ããŸãã
13. æ©èœã®åå²ãšçµ±å
ç°ãªããã¡ã»ããã«æ©èœãåå²ãããã€ã€ã¢ã³ãã§çµ±åã§ããŸãã
14. æ¢åã³ã³ãã©ã¯ãã®åå©çš
æ¢åã®ã³ã³ãã©ã¯ããããã€ã€ã¢ã³ããäœæã§ããŸãã
15. ã³ãŒãã®æŽç
ãã€ã€ã¢ã³ããšãã¡ã»ããã䜿çšããŠã³ãŒããæŽçã§ããŸãã
16. å€§èŠæš¡ãªã¢ãžã¥ãŒã«å
å€§èŠæš¡ãªãã€ã€ã¢ã³ãã§ãã¢ãžã¥ãŒã«åãããŠãããå¹ççãªç®¡çãå¯èœã§ãã
17. ã¬ã¹ç¯çŽ
è€æ°ã®ã³ã³ãã©ã¯ãã1ã€ã«ãŸãšããŠã¬ã¹ãç¯çŽã§ããŸãã
éåžžãè€æ°ã®ã³ã³ãã©ã¯ããæäœããå Žåãããããã®ã³ã³ãã©ã¯ããšã®ããåãã«ã¯ã¬ã¹ãããããŸãã
ãããããããã®ã³ã³ãã©ã¯ãã1ã€ã®ãã€ã€ã¢ã³ãã«çµ±åãããšã1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³å
ã§è€æ°ã®ã³ã³ãã©ã¯ããæäœã§ããŸãã
ã€ãŸããã³ã³ãã©ã¯ãéã®ããåãã«ãããã¬ã¹ã³ã¹ããåæžãããã®ã§ãã
ãã€ã€ã¢ã³ãå
ã®ã³ã³ãã©ã¯ãã¯ãåãã³ã³ãã©ã¯ãå
ã§ãããããå
éšé¢æ°ãç¶æ
倿°ãçŽæ¥ã¢ã¯ã»ã¹ããããšãã§ããŸãã
ããã«ãããã³ã³ãã©ã¯ãéã®ããŒã¿ã®ããåããç¶æ
ã®å€æŽãå¹ççã«è¡ããŸãã
ãã®çµæã1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§è€æ°ã®ã³ã³ãã©ã¯ããæäœããéã®ã¬ã¹ã³ã¹ããåæžããããã©ã³ã¶ã¯ã·ã§ã³ã®å®è¡ã³ã¹ããäœæžãããŸãã
å
·äœäŸãšããŠãè€æ°ã®ã³ã³ãã©ã¯ããåå¥ã«åŒã³åºãå Žåãšããããã1ã€ã®ãã€ã€ã¢ã³ãå
ã§ãŸãšããŠåŒã³åºãå ŽåãèããŠã¿ãŸãããã
åå¥ã«åŒã³åºãå Žåã¯ãããããã®åŒã³åºãã«ã¬ã¹ãããããŸããããã€ã€ã¢ã³ãå
ã§ãŸãšããŠåŒã³åºãå Žåã¯ã1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³å
ã§æžããããã¬ã¹ã³ã¹ããåæžãããããšãæåŸ
ãããŸãã
18. å€éšé¢æ°ã®æé©å
ãã¡ã»ããéã§å éšé¢æ°ãå ±æããã¬ã¹ãç¯çŽã§ããŸãã
19. ç¹å®ã®çšéã®æé©å
ã¬ã¹æé©åãããå€éšé¢æ°ãäœæããŠã¬ã¹ãç¯çŽã§ããŸãã
20. ããŒã«ãšãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹åã
ãã€ã€ã¢ã³ãã¯ããŒã«ãšãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®éçºã«é©ããŠããŸãã
ããã«ããããã€ã€ã¢ã³ãã¯ã¹ããŒãã³ã³ãã©ã¯ãã®èšèšãšéçºã广çã«ãµããŒãããŸãã
仿§
æ¡ä»¶
ãã€ã€ã¢ã³ãïŒDiamondïŒ
ãã€ã€ã¢ã³ãã¯ããŸãã§å®ç³ã®ãããªååã§ãããããã§ã¯ã¹ããŒãã³ã³ãã©ã¯ããæããŸãã
ãã®ã³ã³ãã©ã¯ãã¯ãèªèº«ã®å
éšã«è€æ°ã®ããã¡ã»ããããšåŒã°ããéšåã³ã³ãã©ã¯ããæã¡ãå¿
èŠã«å¿ããŠãããã®ãã¡ã»ãããåŒã³åºããŸãã
ãã€ã€ã¢ã³ãèªäœã¯ããŒã¿ãæã¡ãã³ã³ãã©ã¯ãã¹ãã¬ãŒãžã«ä¿åãããŸãã
ãã¡ã»ããïŒFacetïŒ
ãã¡ã»ããã¯ããã€ã€ã¢ã³ãã®äžéšã§ããã¹ããŒãã³ã³ãã©ã¯ããSolidityã©ã€ãã©ãªã§ãã
ãã¡ã»ããã¯ãå€éšé¢æ°ãæäŸããŸãã
ãã€ã€ã¢ã³ãã«ã¯è€æ°ã®ãã¡ã»ãããçµã¿åãããŠäœ¿ãããšãã§ããããããã®ãã¡ã»ãããç¬ç«ããŠæ©èœããŸãã
ãã¡ã»ããèªäœã¯ããŒã¿ãæããããã€ã€ã¢ã³ãã®ã³ã³ãã©ã¯ãã¹ãã¬ãŒãžã«ä¿åãããŸãã
ã«ãŒããã¡ã»ããïŒLoupe FacetïŒ
ã«ãŒããã¡ã»ããã¯ããã¡ã»ããã®äžçš®ã§ãintrospection
颿°ãæäŸããŸãã
introspection
颿°ã¯ãã³ã³ãã©ã¯ãã®å
éšç¶æ
ãæ
å ±ã調ã¹ãããã®æ
å ±ãæäŸããŸãã
ã€ãã¥ãŒã¿ãã«ãªé¢æ°ïŒImmutable FunctionïŒ
ã€ãã¥ãŒã¿ãã«ãªé¢æ°ã¯ããã€ã€ã¢ã³ãå
ã§å€æŽãã§ããªã颿°ãæããŸãã
ããã¯ãå€éšãã眮ãæãããåé€ãããã§ããªã颿°ã§ããããã€ã€ã¢ã³ãã®äžéšãšããŠç¢ºå®ãããæ©èœã§ãã
ãããã³ã°ïŒMappingïŒ
ãã®æèã§ã¯ããããã³ã°ãšã¯2ã€ã®èŠçŽ ã®é¢é£ä»ããæããŸãã
å
·äœçãªå®è£
ã«äŸåãããé¢é£æ§ã瀺ãäžè¬çãªæŠå¿µã§ãã
ã³ã³ãã©ã¯ãïŒContractïŒ
ããã§ã¯ãã¹ããŒãã³ã³ãã©ã¯ããSolidityã©ã€ãã©ãªã®ç·ç§°ãæããŸãã
ãã®è§£èª¬ã§é¢æ°ããinternal
ïŒå
éšïŒé¢æ°ãããexternal
ïŒå€éšïŒé¢æ°ããããããªãå Žåãããã¯ãexternal
ïŒå€éšïŒé¢æ°ããšããŠå€æããŸãã
ãŸãããã®æèã§ã¯external
ïŒå€éšïŒé¢æ°ã«é¢ããæ
å ±ã¯public
ïŒå
¬éïŒé¢æ°ã«ãé©çšãããŸãã
æŠèŠ
ãã€ã€ã¢ã³ãã®æŠèŠ
ãã€ã€ã¢ã³ãã¯ãå§ä»»åŒã³åºãïŒdelegatecall
ïŒãçšããŠããã®äžã«ããããã¡ã»ããããšåŒã°ããéšåã³ã³ãã©ã¯ãã®é¢æ°ãåŒã³åºããŸãã
å®ç³æ¥çã®æ¯å©:
å®ç³æ¥çã§ã¯ããã€ã€ã¢ã³ãã¯ååãããŠãã¡ã»ãããäœããããã®çµæåœ¢æãããŸãã
åæ§ã«ãã¹ããŒãã³ã³ãã©ã¯ãå
ã®ãã€ã€ã¢ã³ããããã¡ã»ããå
ã«ãã颿°ã远å ã眮æãåé€ããããšã§åœ¢æãããã®ã§ãã
ãã®æ¯å©ãéããŠãã¹ããŒãã³ã³ãã©ã¯ãã®ãã€ã€ã¢ã³ããšãã¡ã»ããã®é¢ä¿ãçè§£ãããããªããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ã¡ã¢
ã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£
ã«ã€ããŠã®æ³šæ
ãã€ã€ã¢ã³ãã¯ãç¹å®ã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããæ¹æ³ãšããŠã2ã€ã®éžæè¢ããããŸãã
1ã€ã¯ããã€ã€ã¢ã³ãèªäœã«ã€ã³ã¿ãŒãã§ãŒã¹ãçŽæ¥çµã³ã€ããæ¹æ³ã§ãïŒcontract Contract is InterfaceïŒã
ãã1ã€ã¯ããã€ã€ã¢ã³ãã®ãã¡ã»ããã«é¢æ°ã远å ããããšã§ãã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããæ¹æ³ã§ãã
ãã®ææ¡ã®æèã§ã¯ãã©ã¡ãã®æ¹æ³ã§ãã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããããšã蚱容ãããŠããŸãã
ãã©ãŒã«ããã¯é¢æ°
ãã€ã€ã¢ã³ãã®å€éšé¢æ°ãåŒã³åºãããéã«ã¯ããã®ãã€ã€ã¢ã³ãã®ãã©ãŒã«ããã¯é¢æ°ãèªåçã«å®è¡ãããŸãã
ãã®ãã©ãŒã«ããã¯é¢æ°ã¯ãåŒã³åºãããŒã¿ã®å
é ã«ãã4
ãã€ãã®é¢æ°ã»ã¬ã¯ã¿ïŒåŒã³åºã颿°ãèå¥ããããã®ãã®ïŒã«åºã¥ããŠãã©ã®ãã¡ã»ããã«å«ãŸãã颿°ãå®è¡ãããã倿ããŸãã
ãããŠããã®éžã°ãããã¡ã»ããã®äžã®é¢æ°ããdelegatecall
ãéããŠå®è¡ããŸãã
ãã€ã€ã¢ã³ãã®ãã©ãŒã«ããã¯é¢æ°ãšdelegatecall
ã«ãã£ãŠããã€ã€ã¢ã³ãã¯ããŸãã§ãã®ãã€ã€ã¢ã³ãèªäœããã®é¢æ°ãæã£ãŠãããã®ããã«ããã¡ã»ããå
ã®é¢æ°ãå®è¡ã§ããã®ã§ãã
ãã®éãmsg.sender
ïŒãã©ã³ã¶ã¯ã·ã§ã³ã®éä¿¡è
ïŒãmsg.value
ïŒãã©ã³ã¶ã¯ã·ã§ã³ã®ééé¡ïŒã¯å€æŽãããããã€ã€ã¢ã³ãã®ã¹ãã¬ãŒãžã ããèªã¿æžããããŸãã
å
·äœçãªäŸãèããŠã¿ãŸãããã
äŸãã°ããããã€ã€ã¢ã³ãã3ã€ã®ãã¡ã»ãããæã£ãŠãããããããã®ãã¡ã»ããã«ã¯ç°ãªã颿°ãå®è£
ãããŠããŸãã
å€éšãããã€ã€ã¢ã³ãã®é¢æ°ãåŒã³åºããšããã©ãŒã«ããã¯é¢æ°ã颿°ã»ã¬ã¯ã¿ã«åºã¥ããŠé©åãªãã¡ã»ãããéžã³ããã®ãã¡ã»ããå
ã®é¢æ°ãå®è¡ããŸãã
ãã®ä»çµã¿ã«ãã£ãŠããã€ã€ã¢ã³ãã¯æè»ã«æ©èœã远å ã眮æãåé€ã§ããäžã«ãå€éšããã®åŒã³åºãã«å¯ŸããŠãã¹ã ãŒãºã«å¯Ÿå¿ããããšãã§ããã®ã§ãã
ãã®ä»çµã¿ã«ãã£ãŠãã¹ããŒãã³ã³ãã©ã¯ãã®èšèšãšã¢ããã°ã¬ãŒãã广çã«è¡ããããã«ãªããŸãã
delegatecall
ãšdelegatecall
ã䜿çšããæã®åäœã«ã€ããŠã¯ã以äžã®èšäºãåèã«ãªããŸãã
// Find facet for function that is called and execute the
// function if a facet is found and return any value.
fallback() external payable {
// get facet from function selector
address facet = selectorTofacet[msg.sig];
require(facet != address(0));
// Execute external function from facet using delegatecall and return any value.
assembly {
// copy function selector and any arguments
calldatacopy(0, 0, calldatasize())
// execute function call using the facet
let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
// get any return value
returndatacopy(0, 0, returndatasize())
// return any return value or error back to the caller
switch result
case 0 {revert(0, returndatasize())}
default {return (0, returndatasize())}
}
}
以äžã®å³ã¯ãã€ã€ã¢ã³ãã®æ§é ã説æããŠããŸãã
å
ã»ã©èª¬æããããã«ãFacetA~CãååšããŠããŸãã
åFacetå
ã«ã¯1~7ã®é¢æ°ãå®çŸ©ãããŠããŠãDiamondå
ã«ã¯ãã®æ
å ±ãæ ŒçŽãããŠããŸãã
åŒã³åºããã颿°ã®é¢æ°ã»ã¬ã¯ã¿ãŒã確èªããŠãäžèŽãã颿°ãåŒã³åºããšããæ§æã«ãªã£ãŠããŸãã
颿°ã»ã¬ã¯ã¿ãŒ
颿°ã»ã¬ã¯ã¿ãŒãšã¯ã颿°åãããã·ã¥åããå
é 4
ãã€ãã䜿çšããŠé¢æ°ãèå¥ãããã®ã§ãã
ã§ã¯ãªã颿°åã®ããã·ã¥å€ãå
šãŠäœ¿ããã«å
é 4
ãã€ãã®ã¿ã䜿çšããŠããã®ã§ããããïŒ
ããã¯åçŽã«ã¬ã¹ä»£ç¯çŽã®ããã§ãã
詳ããã¯ä»¥äžã®èšäºãåèã«ããŠãã ããã
ã¹ãã¬ãŒãž
ãã¡ããã§ãã以äžã«å床ãäžèšã®å 容ãç°¡æœã«èª¬æããŸãã
ã¹ãã¬ãŒãž:
ãã€ã€ã¢ã³ãããããã·ã³ã³ãã©ã¯ãã®ããã«ãSolidityã®ããã©ã«ãã®ã¹ãã¬ãŒãžé
眮ã·ã¹ãã ã§ã¯å¯Ÿå¿ã§ããªãç¶æ
倿°ãã¹ãã¬ãŒãžã®é
眮ãå¿
èŠã§ãã
å
·äœçãªé
çœ®æ¹æ³ã¯ãã®ææ¡ã§ã¯å®çŸ©ãããŠããŸããããåŸã®ææ¡ã§å®çŸ©ãããå¯èœæ§ããããŸãã
ãã€ã€ã¢ã³ãã«é©ããã¹ãã¬ãŒãžé
眮ãã¿ãŒã³ã®äŸãšããŠãDiamond StorageãAppStorageãªã©ããããŸãã
Diamond Storage
Diamond Storageã¯ããã€ã€ã¢ã³ãã®ã¹ãã¬ãŒãžã广çã«ç®¡çããããã®äžè¬çãªãã¿ãŒã³ã§ãã
ãã®ãã¿ãŒã³ã§ã¯ãåãã¡ã»ãããç¹å®ã®ã¹ãã¬ãŒãžé åã䜿çšããããã«èšèšãããŸãã
ãã€ã€ã¢ã³ãå
šäœã®ã¹ãã¬ãŒãžé åãé©åã«åå²ãããåãã¡ã»ãããèªèº«ã®ããŒã¿ãä¿æã§ããããã«ãªããŸãã
ããã«ããããã¡ã»ããå士ã®ããŒã¿ã®å¹²æžãé²ãã€ã€ããã€ã€ã¢ã³ãå
šäœã§ã®ããŒã¿å
±æãå¯èœãšãªããŸãã
AppStorage
AppStorageããã€ã€ã¢ã³ãã®ã¹ãã¬ãŒãžç®¡çããµããŒããããã¿ãŒã³ã®1ã€ã§ãã
AppStorageã§ã¯ããã¡ã»ãããåå¥ã®ã¢ããªã±ãŒã·ã§ã³åºæã®ã¹ãã¬ãŒãžé åã䜿çšããããã«èšèšãããŸãã
åãã¡ã»ããã¯èªèº«ã®ã¢ããªã±ãŒã·ã§ã³ã«é¢é£ããããŒã¿ãä¿æãããã€ã€ã¢ã³ãå
šäœã§ã®ããŒã¿ã®å
±æãšåæã«ã¢ããªã±ãŒã·ã§ã³éã®ããŒã¿ã®éé¢ãå®çŸããŸãã
ãããã®ã¹ãã¬ãŒãžãã¿ãŒã³ã¯ããã€ã€ã¢ã³ãã®ãã¡ã»ããã广çã«ããŒã¿ã管çããã³ãŒãã®æŽçãšã¢ãžã¥ãŒã«åãæ¯æŽããããã«äœ¿çšãããŸãã
ã©ã¡ãã®ãã¿ãŒã³ãããã€ã€ã¢ã³ãã®èšèšã«åãããŠã«ã¹ã¿ãã€ãºã§ããæè»æ§ãæäŸããŸãã
ãã¡ã»ããã¯ãåãã¹ãã¬ãŒãžäœçœ®ã§åãæ§é äœã䜿çšããããšã§ãç¶æ
倿°ãå
±æã§ããŸãã
ãŸããåãã³ã³ãã©ã¯ããç¶æ¿ããããåãã©ã€ãã©ãªã䜿çšããããšã§ãå
éšé¢æ°ãã©ã€ãã©ãªãå
±æã§ããŸãã
ããã«ããããã¡ã»ããã¯ç¬ç«ãããŠãããã§ãããªãããç¶æ
ãšæ©èœãå
±æã§ããŸãã
以äžã®å³ã¯ãåãã¡ã»ãããç¬èªã®ããŒã¿ãšå ±æãããããŒã¿ãæã€æ§é ã瀺ããŠããŸãã
ãã®å³ã§ã¯ããã¹ãŠã®ããŒã¿ã¯ãã€ã€ã¢ã³ãã®ã¹ãã¬ãŒãžã«ä¿åãããŠããŸãããç°ãªããã¡ã»ããã¯ç°ãªãããŒã¿ãžã®ã¢ã¯ã»ã¹æš©ãæã£ãŠããŸãã
å ·äœçã«ã¯æ¬¡ã®ããã«ãªã£ãŠããŸãã
- ãã¡ã»ããAã ããDataAã«ã¢ã¯ã»ã¹ã§ããŸãã
- ãã¡ã»ããBã ããDataBã«ã¢ã¯ã»ã¹ã§ããŸãã
- ãã€ã€ã¢ã³ãèªäœã®ã³ãŒãã ããDataDã«ã¢ã¯ã»ã¹ã§ããŸãã
- ãã¡ã»ããAãšãã¡ã»ããBã¯DataABãžã®ã¢ã¯ã»ã¹ãå ±æããŸãã
- ãã€ã€ã¢ã³ãèªäœã®ã³ãŒããšãã¡ã»ããAããã¡ã»ããBã¯DataABDãžã®ã¢ã¯ã»ã¹ãå ±æããŸãã
ãã®ä»çµã¿ã«ãã£ãŠããã¡ã»ããå士ã§ããŒã¿ãå ±æããªãããããããããç¬ç«ããŠæ©èœãããã€ã€ã¢ã³ãã®èšèšãå¯èœãšãªããŸãã
ãã¡ã»ããSolidityã©ã€ãã©ãª
ã¹ããŒãã³ã³ãã©ã¯ãããããã€ãããSolidityã©ã€ãã©ãªã¯ããã€ã€ã¢ã³ãã®ãã¡ã»ãããšããŠæŽ»çšããããšãã§ããŸãã
ãã ããå°ãªããšã1ã€ä»¥äžã®å€éšé¢æ°ãæã€Solidityã©ã€ãã©ãªã®ã¿ãããããã¯ãã§ãŒã³ã«ãããã€ãããŠãã€ã€ã¢ã³ãã®ãã¡ã»ãããšãªãããšãã§ããŸãã
äžæ¹ã§ãå
éšé¢æ°ã ããå«ãSolidityã©ã€ãã©ãªã¯ãããã¯ãã§ãŒã³ã«ãããã€ã§ããããã€ã€ã¢ã³ãã®ãã¡ã»ããã«ããªããŸããã
ãã®ä»£ãããå
éšé¢æ°ãå«ãSolidityã©ã€ãã©ãªã¯ããããå©çšãããã¡ã»ãããã³ã³ãã©ã¯ãã®ãã€ãã³ãŒãå
ã«çµã¿èŸŒãŸããŸãã
ãã®ä»çµã¿ã«ãã£ãŠãå
éšé¢æ°ãå
±æããããšãå¯èœãšãªããŸãã
ãã ããå
éšé¢æ°ã ããæã€Solidityã©ã€ãã©ãªã¯ãã€ã€ã¢ã³ãã®ãã¡ã»ãããšããŠäœ¿çšããããšã¯ã§ããŸããã
Solidityã©ã€ãã©ãªãã¡ã»ããã«ã¯ããã¡ã»ãããšããŠã®ç¹æ§ãããã€ããããŸãã
- åé€ããããšã¯ã§ããŸããã
- æ°žç¶çã«ãã€ã€ã¢ã³ãã®äžéšãšããŠååšããŸãã
- ããŒã¿ãä¿æããŸããã
- ã€ãŸããã³ã³ãã©ã¯ãã¹ãã¬ãŒãžãå©çšããããšã¯ãããŸããã
- æ§æçã«ãDiamond Storageã®å€ã§ç¶æ 倿°ã宣èšããããšãã§ããŸããã
Solidityã©ã€ãã©ãªã¯ããã€ã€ã¢ã³ãã®ãã¡ã»ãããšããŠå©çšããéã«ãå éšé¢æ°ã®å ±æãã³ãŒãã®åå©çšããµããŒãããæçšãªããŒã«ã§ãã
颿°ã®è¿œå ã»çœ®æã»åé€
IDiamond ã€ã³ã¿ãŒãã§ãŒã¹
ãã€ã€ã¢ã³ãã䜿çšãããã¹ãŠã®ã¹ããŒãã³ã³ãã©ã¯ãã¯ãIDiamond
ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããå¿
èŠããããŸãã
ããã«ããããã€ã€ã¢ã³ãã®ç¹å®ã®æ©èœãæ¹æ³ã«ã¢ã¯ã»ã¹ã§ããããã«ãªããŸãã
ãã€ã€ã¢ã³ãã®ãããã€æ
ãã€ã€ã¢ã³ãããããã€ãããéããã®ãã€ã€ã¢ã³ãã«å«ãŸããã€ãã¥ãŒã¿ãã«ãªé¢æ°ïŒå€æŽäžå¯ã®é¢æ°ïŒãå€éšé¢æ°ããDiamondCut
ã€ãã³ãå
ã§éç¥ãããŸãã
ããã«ããããã€ã€ã¢ã³ããã©ã®ãããªé¢æ°ãæã€ããéæã«ãªããŸãã
颿°ã®è¿œå ã»çœ®æã»å逿
ãã€ã€ã¢ã³ãã®å€éšé¢æ°ã远å ãããããæ¢åã®é¢æ°ã眮æããããã颿°ãåé€ããããããéãDiamondCut
ã€ãã³ããå¿
ãçºçããŸãã
ããã¯ããã€ã€ã¢ã³ãã®ã¢ããã°ã¬ãŒãã颿°ã®å€æŽãè¡ããããã³ã«é©çšãããŸãã
ã€ãŸãããã€ã€ã¢ã³ãå
ã®æ©èœã倿Žããéã«ã¯ããã®å€æŽãDiamondCut
ã€ãã³ããéããŠå
¬éãããããšã«ãªããŸãã
ããã«ããããã€ã€ã¢ã³ãã®å€æŽå±¥æŽãã¢ããã°ã¬ãŒãæ
å ±ãéæã«ãªããä¿¡é Œæ§ãåäžããŸãã
ãã€ã€ã¢ã³ãå
ã®é¢æ°ããã€ã©ã®ããã«å€æŽããããã远跡ã§ããããããŠãŒã¶ãŒãéçºè
ã¯ãã€ã€ã¢ã³ãã®é²åã远ãããšãã§ããŸãã
interface IDiamond {
enum FacetCutAction {Add, Replace, Remove}
// Add=0, Replace=1, Remove=2
struct FacetCut {
address facetAddress;
FacetCutAction action;
bytes4[] functionSelectors;
}
event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}
FacetCutAction
ãã€ã€ã¢ã³ãå ã§é¢æ°ã倿Žããæã®ã¢ã¯ã·ã§ã³ã瀺ãåæåã
-
ADD
ïŒè¿œå ïŒ=0
-
Replace
ïŒçœ®æïŒ=1
-
Remove
ïŒåé€ïŒ=2
FacetCut
ãã€ã€ã¢ã³ãå ã®é¢æ°å€æŽã«é¢ããæ å ±ãæ ŒçŽããæ§é äœã
-
facetAddress
- 颿°ã远å ã眮æãåé€ãã察象ã®ãã¡ã»ããïŒã¹ããŒãã³ã³ãã©ã¯ããã©ã€ãã©ãªïŒã®ã¢ãã¬ã¹ã
-
action
- å®è¡ããã¢ã¯ã·ã§ã³ïŒè¿œå ã眮æãåé€ïŒã瀺ãã
-
functionSelectors
- 颿°ã»ã¬ã¯ã¿ïŒé¢æ°ã®äžæã®èå¥åïŒã®é åã
DiamondCut
ãã€ã€ã¢ã³ãå
ã§ã®é¢æ°ã®è¿œå ã眮æãåé€ãè¡ããããšãã«çºè¡ãããã€ãã³ãã
ãã€ã€ã¢ã³ãã«å¯Ÿãããã¹ãŠã®æ©èœå€æŽãèšé²ããŸãã
-
_diamondCut
- 颿°ã®å€æŽæ
å ±ãæã€
FacetCut
æ§é äœã®é åã
- 颿°ã®å€æŽæ
å ±ãæã€
-
_init
- åæåã³ãŒãã®ã¢ãã¬ã¹ã
-
_calldata
- åŒã³åºãããŒã¿ã
IDiamondCutã€ã³ã¿ãŒãã§ãŒã¹
ãã€ã€ã¢ã³ãå ã®é¢æ°ã»ã¬ã¯ã¿ãšãã¡ã»ããã¢ãã¬ã¹ã®ãããã³ã°
ãã€ã€ã¢ã³ãã¯ã颿°ã»ã¬ã¯ã¿ïŒé¢æ°ã®äžæã®èå¥åïŒãšãã¡ã»ããã¢ãã¬ã¹ã®ãããã³ã°ãå
éšã«æã£ãŠããŸãã
颿°ã®è¿œå ã眮æãåé€ã¯ããã®ãããã³ã°ã倿Žããããšã§è¡ãããŸãã
IDiamondCutã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£
ãã€ã€ã¢ã³ãã¯ããããã€åŸã«é¢æ°ã»ã¬ã¯ã¿ã®ãããã³ã°ã倿Žããå ŽåãIDiamondCut
ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããå¿
èŠããããŸãã
ãã®ã€ã³ã¿ãŒãã§ãŒã¹ã«ããã颿°ã®ã»ã¬ã¯ã¿ãšã¢ãã¬ã¹ã®ãããã³ã°ã®å€æŽã管çãããŸãã
diamondCut颿°ã®åœ¹å²
diamondCut
颿°ã¯ã1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³å
ã§ãè€æ°ã®ãã¡ã»ããããè€æ°ã®é¢æ°ãåæã«è¿œå ã眮æãåé€ãã圹å²ãæã¡ãŸãã
è€æ°ã®å€æŽã1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³å
ã§ãã¹ãŠå®è¡ããããšã§ãè€æ°ãã©ã³ã¶ã¯ã·ã§ã³ãè·šãã ã¢ããã°ã¬ãŒãã«ããããŒã¿ã®ç Žæãé²ãããšãã§ããŸãã
é¢é£ããä»ã®å€æŽãåæã«é©çšããããšãã§ããäžè²«æ§ã®ããç¶æ ãä¿ã€ããšãå¯èœã§ãã
diamondCutã®ç®ç
diamondCut
颿°ã¯ãçžäºéçšæ§ãå®çŸããããã«æå®ãããŠããŸãã
ãã€ã€ã¢ã³ãã®ããŒã«ããœãããŠã§ã¢ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã¯ãæšæºã®diamondCut
颿°ãæåŸ
ããå©çšãã¹ãã§ãã
ããã«ãããç°ãªãããŒã«ãã¢ããªã±ãŒã·ã§ã³éã§ãã€ã€ã¢ã³ãã®æäœãäžè²«ããŠè¡ããããã«ãªããŸãã
diamondCut
颿°ãéããŠã颿°ã»ã¬ã¯ã¿ãšãã¡ã»ããã¢ãã¬ã¹ã®ãããã³ã°ã®å€æŽã管çããããã€ã€ã¢ã³ãã®ã¢ããã°ã¬ãŒããæäœãã·ã³ãã«ãã€å®å
šã«è¡ããããã«ãªããŸãã
interface IDiamondCut is IDiamond {
/// @notice Add/replace/remove any number of functions and optionally execute
/// a function with delegatecall
/// @param _diamondCut Contains the facet addresses and function selectors
/// @param _init The address of the contract or facet to execute _calldata
/// @param _calldata A function call, including function selector and arguments
/// _calldata is executed with delegatecall on _init
function diamondCut(
FacetCut[] calldata _diamondCut,
address _init,
bytes calldata _calldata
) external;
}
diamondCut
ãã€ã€ã¢ã³ãã®ã¢ããã°ã¬ãŒãã倿Žãè¡ã颿°ã
1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³å
ã§è€æ°ã®ãã¡ã»ããããè€æ°ã®é¢æ°ã倿Žããå®å
šãã€å¹ççãªãã€ã€ã¢ã³ãã®ã¢ããã°ã¬ãŒããæäœãè¡ãããšãã§ããŸãã
-
_diamondCut
- ãã¡ã»ããã®ã¢ãã¬ã¹ãšé¢æ°ã»ã¬ã¯ã¿ïŒé¢æ°ã®äžæã®èå¥åïŒã®æ å ±ãå«ãé åã
- ãã®é åã«ã¯ã远å ã眮æãåé€ãã颿°ã®æ å ±ãå«ãŸããŸãã
-
_init
-
_calldata
ãå®è¡ããããã®ã³ã³ãã©ã¯ããŸãã¯ãã¡ã»ããã®ã¢ãã¬ã¹ã - ãã®ã¢ãã¬ã¹äžã§
_calldata
ã«å«ãŸãã颿°ãå®è¡ãããŸãã
-
-
_calldata
- 颿°ã»ã¬ã¯ã¿ãšåŒæ°ãå«ã颿°åŒã³åºãã®ããŒã¿ã
-
_init
äžã§_calldata
ã«å«ãŸãã颿°ã_delegatecall
ãçšããŠå®è¡ãããŸãã
_diamondCutåŒæ°ãšFacetCutæ§é äœ
_diamondCut
åŒæ°ã¯ãFacetCut
æ§é äœã®é
åã§ãã
åFacetCut
æ§é äœã«ã¯ããã¡ã»ããã®ã¢ãã¬ã¹ãšããã€ã€ã¢ã³ãå
ã§æŽæ°ããã颿°ã»ã¬ã¯ã¿ïŒé¢æ°ã®äžæã®èå¥åïŒã®é
åãå«ãŸããŸãã
åFacetCut
æ§é äœã«ã€ããŠ
-
Add
ã®å Žåã颿°ã»ã¬ã¯ã¿ãããã³ã°ã远å ããŸãã- ããæ¢ã«å¥ã®ãã¡ã»ããã«ããããããŠãã颿°ã»ã¬ã¯ã¿ãããå Žåã¯
revert
ããŸãã
- ããæ¢ã«å¥ã®ãã¡ã»ããã«ããããããŠãã颿°ã»ã¬ã¯ã¿ãããå Žåã¯
-
Replace
ã®å Žåã颿°ã»ã¬ã¯ã¿ãããã³ã°ã眮æããŸãã- ãã ããæ¢ã«åããã¡ã»ããã«ããããããŠããããæªèšå®ã®å Žåã¯
revert
ããŸãã
- ãã ããæ¢ã«åããã¡ã»ããã«ããããããŠããããæªèšå®ã®å Žåã¯
-
Remove
ã®å Žåã颿°ã»ã¬ã¯ã¿ãããã³ã°ãåé€ããŸãã- ãã ãã以åã«æªèšå®ã®å Žåã¯
revert
ããŸãã
- ãã ãã以åã«æªèšå®ã®å Žåã¯
- ã€ãã¥ãŒã¿ãã«ãªé¢æ°ã眮æãŸãã¯åé€ããããšãã詊ã¿ã¯ãå¿
ã
revert
ããŸãã
_calldataã®å®è¡
颿°ã®è¿œå /眮æ/åé€åŸã_calldata
åŒæ°ã¯_init
äžã§delegatecall
ã䜿ã£ãŠå®è¡ãããŸãã
ããã«ããã颿°ã®è¿œå ã眮æãåé€åŸã®åæåãããŒã¿ã®ã»ããã¢ãããäžèŠãªããŒã¿ã®åé€ãè¡ãããŸãã
ãã_init
ãaddress(0)
ã§ããã°ã_calldata
ã®å®è¡ã¯ã¹ããããããŸãã
ãã®å Žåã_calldata
ã¯0ãã€ããŸãã¯ã«ã¹ã¿ã æ
å ±ãå«ãããšãã§ããŸãã
_diamondCut
ãš_calldata
ã䜿çšããããšã§ããã€ã€ã¢ã³ãå
ã®é¢æ°ã®å€æŽãå®å
šãã€å¹ççã«è¡ããããã«ãªããŸãã
ãã¡ã»ãããšãã¡ã³ã¯ã·ã§ã³ã®æ€æ»
ã«ãŒãïŒLoupeïŒãšIDiamondLoupeã€ã³ã¿ãŒãã§ãŒã¹
ã«ãŒãã¯ããã€ã€ã¢ã³ããæ¡å€§ããŠèŠãããã«äœ¿çšãããå°ããªæ¡å€§é¡ã§ãã
IDiamondLoupeã€ã³ã¿ãŒãã§ãŒã¹ã®å®è£
ãã€ã€ã¢ã³ãã¯ããã¡ã»ãããšé¢æ°ã調æ»ã§ããããã«ããããã«ãIDiamondLoupe
ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£
ããå¿
èŠããããŸãã
ãã®ã€ã³ã¿ãŒãã§ãŒã¹ã«ããããã€ã€ã¢ã³ãå
ã®æ§é ã颿°ã詳ãã調ã¹ãããšãã§ããŸãã
ãã®ããã«ãIDiamondLoupe
ã€ã³ã¿ãŒãã§ãŒã¹ã¯ããã€ã€ã¢ã³ãã®å
éšãæ¡å€§ããŠç¢ºèªããããã®éå
·ãšããŠæ©èœããŸãã
IDiamondLoupeã€ã³ã¿ãŒãã§ãŒã¹
// A loupe is a small magnifying glass used to look at diamonds.
// These functions look at diamonds
interface IDiamondLoupe {
struct Facet {
address facetAddress;
bytes4[] functionSelectors;
}
/// @notice Gets all facet addresses and their four byte function selectors.
/// @return facets_ Facet
function facets() external view returns (Facet[] memory facets_);
/// @notice Gets all the function selectors supported by a specific facet.
/// @param _facet The facet address.
/// @return facetFunctionSelectors_
function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);
/// @notice Get all the facet addresses used by a diamond.
/// @return facetAddresses_
function facetAddresses() external view returns (address[] memory facetAddresses_);
/// @notice Gets the facet that supports the given selector.
/// @dev If facet is not found return address(0).
/// @param _functionSelector The function selector.
/// @return facetAddress_ The facet address.
function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);
}
Facet
æŠèŠ
ãã¡ã»ããã®ã¢ãã¬ã¹ãšãã®ãã¡ã»ããããµããŒããã颿°ã»ã¬ã¯ã¿ïŒé¢æ°ã®äžæã®èå¥åïŒã®äžèЧãä¿æããæ§é äœã
ãã©ã¡ãŒã¿
-
facetAddress
- ãã¡ã»ããã®ã¢ãã¬ã¹ã
-
functionSelectors
- ãã¡ã»ããããµããŒããã颿°ã»ã¬ã¯ã¿ã®é åã
facets
æŠèŠ
ãã¹ãŠã®ãã¡ã»ããã®ã¢ãã¬ã¹ãšãããã®ãã¡ã»ããããµããŒããã颿°ã»ã¬ã¯ã¿ãååŸãã颿°ã
åŒæ°
ãªã
æ»ãå€
-
facets_
- Facetæ§é äœã®é åã
- åæ§é äœã¯ãã¡ã»ããã®ã¢ãã¬ã¹ãšãã®ãã¡ã»ããããµããŒããã颿°ã»ã¬ã¯ã¿ã®äžèЧãæã¡ãŸãã
facetFunctionSelectors
æŠèŠ
ç¹å®ã®ãã¡ã»ããããµããŒããã颿°ã»ã¬ã¯ã¿ã®äžèЧãååŸãã颿°ã
åŒæ°
-
_facet
- ãã¡ã»ããã®ã¢ãã¬ã¹ã
æ»ãå€
-
facetFunctionSelectors_
-
bytes4
ã®é åã - æå®ããããã¡ã»ããããµããŒããã颿°ã»ã¬ã¯ã¿ã®äžèЧã§ãã
-
facetAddresses
æŠèŠ
ãã€ã€ã¢ã³ãå
ã§äœ¿çšãããŠãããã¹ãŠã®ãã¡ã»ããã®ã¢ãã¬ã¹ãååŸãã颿°ã
åŒæ°
ãªã
æ»ãå€
-
facetAddresses_
- ã¢ãã¬ã¹ã®é åã
- ãã€ã€ã¢ã³ãå ã§äœ¿çšãããŠãããã¡ã»ããã®ã¢ãã¬ã¹ã§ãã
facetAddress
æŠèŠ
æå®ããã颿°ã»ã¬ã¯ã¿ããµããŒããããã¡ã»ããã®ã¢ãã¬ã¹ãååŸãã颿°ã
åŒæ°
-
_functionSelector
- 颿°ã»ã¬ã¯ã¿ïŒ
bytes4
ïŒã
- 颿°ã»ã¬ã¯ã¿ïŒ
æ»ãå€
-
facetAddress_
- ãã¡ã»ããã®ã¢ãã¬ã¹ã
- æå®ããã颿°ã»ã¬ã¯ã¿ããµããŒããããã¡ã»ãããèŠã€ãããªãå Žåã¯ã
address(0)
ãè¿ãããŸãã
ãªãã¡ã¬ã³ã¹å®è£
ã®ç¢ºèª
ãªãã¡ã¬ã³ã¹å®è£
ã確èªããããšã§ãå
·äœçãªã³ãŒããæ¹æ³ãåèã«ããªãããIDiamondLoupe
ã€ã³ã¿ãŒãã§ãŒã¹ãã©ã®ããã«å®è£
ãããããçè§£ããããšãã§ããŸãã
ããã«ãããèªåã®ãããžã§ã¯ãã«é©çšããéã«åœ¹ç«ã€æ
å ±ãåŸãããšãã§ããŸãã
ã«ãŒã颿°ã®å©çš
ã«ãŒã颿°ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãœãããŠã§ã¢å
ã§å©çšãããããšããããŸãã
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã¯ããŠãŒã¶ãŒã«å¯ŸããŠãã€ã€ã¢ã³ãã®æ
å ±ããããããã衚瀺ãããã€ã€ã¢ã³ãã®æ§é ãæ©èœãèŠèŠåããããã«ãããã®é¢æ°ãåŒã³åºããŸãã
ããã«ããããŠãŒã¶ãŒã¯ãã€ã€ã¢ã³ãã®æ©èœãç¹æ§ã«ã€ããŠçè§£ãããããªããŸãã
ã«ãŒã颿°ã®å©çšç¯å²
ã«ãŒã颿°ã¯ããããã€ã¡ã³ãæ©èœãã¢ããã°ã¬ãŒãæ©èœãªã©ããã€ã€ã¢ã³ãã®éçšã管çã«é¢ããããŸããŸãªãœãããŠã§ã¢å
ã§äœ¿çšãããŸãã
äŸãã°ããã€ã€ã¢ã³ããã¢ããã°ã¬ãŒãããéã«ãã©ã®ãã¡ã»ãããã©ã®é¢æ°ã»ã¬ã¯ã¿ããµããŒãããŠãããã確èªããããã«ãããã®é¢æ°ãå©çšããããšãã§ããŸãã
ãŸãããã¹ãæã«ã颿°ã»ã¬ã¯ã¿ããã¡ã»ããã®æ
å ±ãååŸããŠããã¹ãã±ãŒã¹ãèšèšããéã®åèã«ããããšãã§ããŸãã
ããã«ããããã€ã€ã¢ã³ãã®æäœã管çãããã¹ã ãŒãºã«è¡ããããã«ãªãããã€ã€ã¢ã³ãã®æ©èœãæå€§éã«æŽ»çšããããã®æ¯æŽãæäŸãããŸãã
å®è£ ãã€ã³ã
ãã€ã€ã¢ã³ãã®èŠä»¶
- ãã€ã€ã¢ã³ãã¯ããã©ãŒã«ããã¯é¢æ°ãš
0
å以äžã®ã€ãã¥ãŒã¿ãã«ãªé¢æ°ãå«ãå¿ èŠããããŸãã- ãããã®é¢æ°ã¯ããã€ã€ã¢ã³ãå ã§çŽæ¥å®çŸ©ãããŸãã
- ãã€ã€ã¢ã³ãã¯ã颿°ã»ã¬ã¯ã¿ïŒé¢æ°ã®äžæã®èå¥åïŒããã¡ã»ãããšé¢é£ä»ããŸãã
- ããã«ããããã€ã€ã¢ã³ãã®é¢æ°ãã©ã®ãã¡ã»ããã«å±ãããã管çãããŸãã
- ãã€ã€ã¢ã³ãäžã§é¢æ°ãåŒã³åºããããšããŸããã€ãã¥ãŒã¿ãã«é¢æ°ãã§ãããã©ããããã§ãã¯ããŸãã
- ããã€ãã¥ãŒã¿ãã«é¢æ°ã§ããã°ãçŽã¡ã«ãã®é¢æ°ãå®è¡ãããŸãã
- ã€ãã¥ãŒã¿ãã«é¢æ°ã§ãªãå Žåããã€ã€ã¢ã³ãã®ãã©ãŒã«ããã¯é¢æ°ãå®è¡ãããŸãã
- ãã®ãã©ãŒã«ããã¯é¢æ°ã¯ãåŒã³åºããã颿°ã«é¢é£ä»ãããããã¡ã»ãããèŠã€ãã
delegatecall
ã䜿çšããŠé¢æ°ãå®è¡ããŸãã - ãã颿°ã®ãã¡ã»ãããååšããªãå Žåããªãã·ã§ã³ã§ããã©ã«ã颿°ãå®è¡ãããããšããããŸãã
- ããã«ã颿°ã®ãã¡ã»ãããããã©ã«ã颿°ãåŠçã§ããã¡ã«ããºã ãååšããªãå Žåã¯ãå®è¡ã
revert
ïŒç¡å¹åããŠå ã«æ»ãïŒãããŸãã
- 颿°ã远å ã眮æãåé€ããããã³ã«ã
DiamondCut
ã€ãã³ããçºçããŠå€æŽãèšé²ãããŸãã- ããã«ããã颿°ã®è¿œå ã倿Žãéæãã€è¿œè·¡å¯èœã«ãªããŸãã
- ãã€ã€ã¢ã³ãã¯
DiamondLoupe
ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ããå¿ èŠããããŸãã- ããã«ããããã€ã€ã¢ã³ãã®ãã¡ã»ããã颿°ã«é¢ããæ å ±ãååŸã§ããããã«ãªããŸãã
ã€ãã¥ãŒã¿ãã«ãªé¢æ°
- ã€ãã¥ãŒã¿ãã«ãªé¢æ°ã¯ã
DiamondCut
ã€ãã³ãå ã«æ°ãã颿°ãšããŠèšé²ãããŸãã - ãŸããã«ãŒã颿°ã¯ãã€ãã¥ãŒã¿ãã«ãªé¢æ°ã«é¢ããæ å ±ãæäŸããŸãã
- ã€ãã¥ãŒã¿ãã«ãªé¢æ°ã®ãã¡ã»ããã¢ãã¬ã¹ã¯ããã€ã€ã¢ã³ãã®ã¢ãã¬ã¹ãã®ãã®ã§ãã
- ã€ãã¥ãŒã¿ãã«ãªé¢æ°ãåé€ãŸãã¯çœ®æããããšãããšå¿
ã
revert
ãããŸãã
远å ã§ããå®è£
-
EIP165ã®
supportsInterface
ãå®è£ ããããšãã§ããŸãã - ãã®å®è£ ã«ããããã€ã€ã¢ã³ããç¹å®ã®ã€ã³ã¿ãŒãã§ãŒã¹ããµããŒãããŠãããã©ãããå€å¥ã§ããããã«ãªããŸãã
- äŸãã°ã
diamondCut
颿°ãæã€ãã€ã€ã¢ã³ãã¯ãIDiamondCut.diamondCut.selector
ãšããã€ã³ã¿ãŒãã§ãŒã¹IDããµããŒãããŠããããšã瀺ãããŸãã - åæ§ã«ããã€ã€ã¢ã³ãã«ãŒãã€ã³ã¿ãŒãã§ãŒã¹çšã®ã€ã³ã¿ãŒãã§ãŒã¹IDãå€å¥ã§ããŸãã
- ããã«ããããã€ã€ã¢ã³ãã®æ©èœãä»ã®ã³ã³ãã©ã¯ããããŒã«ãšã®é£æºã«å¯Ÿå¿ããããšãã§ããŸãã
ãããã®å®è£
ã«ããããã€ã€ã¢ã³ãã®æ©èœãæäœãæç¢ºã«å®çŸ©ãããéçšã管çãã¹ã ãŒãºã«è¡ããããã«ãªããŸãã
ãŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ããã¹ããã¢ããã°ã¬ãŒãæ©èœãªã©ã®å®è£
ã«ãããŠãå©çšããããæè»ã§å
ç¢ãªã¢ãŒããã¯ãã£ãæäŸãããŸãã
è£è¶³
颿°ã»ã¬ã¯ã¿ã®å©çš
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãœãããŠã§ã¢ã¯ããã€ã€ã¢ã³ããã颿°ã»ã¬ã¯ã¿ãšãã¡ã»ããã¢ãã¬ã¹ãååŸããŠããã€ã€ã¢ã³ããã©ã®ãããªé¢æ°ãæã£ãŠãããã衚瀺ããããã«äœ¿çšã§ããŸãã
ããã«ããããŠãŒã¶ãŒã¯ãã€ã€ã¢ã³ãã®æ©èœãçè§£ããæäœã§ããããã«ãªããŸãã
ã¬ã¹ã«é¢ããèæ ®äºé
delegatecall
ã䜿çšããŠé¢æ°ãå®è¡ããã®ã«ã¬ã¹ã®ãªãŒããŒãããããããŸããã以äžã®æ¹æ³ã§ç·©åã§ããŸãã
- ãã€ã€ã¢ã³ãã«ã¯ãµã€ãºå¶éããªããããç¹å®ã®äœ¿çšã±ãŒã¹ã«åãããŠã¬ã¹ç¯çŽã®é¢æ°ã远å ã§ããŸãã
- ããšãã°ãEIP721æšæºãå®è£ ããããã転é颿°ããã€ã€ã¢ã³ãå ã«è¿œå ããŠã¬ã¹ãåæžããããã転éã䟿å©ã«è¡ããããã«ã§ããŸãã
- äžéšã®ã³ã³ãã©ã¯ãã¢ãŒããã¯ãã£ã§ã¯ã1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³å
ã§è€æ°ã®ã³ã³ãã©ã¯ããåŒã³åºãå¿
èŠããããŸãã
- ãããã®ã³ã³ãã©ã¯ãã1ã€ã®ãã€ã€ã¢ã³ãã«ãŸãšããããšã§ãã³ã³ãã©ã¯ãã®åŒã³åºããšã³ã³ãã©ã¯ãã¹ãã¬ãŒãžãžã®ã¢ã¯ã»ã¹ãå¹ççã«è¡ããŸãã
- ãã¡ã»ããã«ã¯å°æ°ã®å€éšé¢æ°ãå«ãŸããããšãããã颿°ã®æ°ãå°ãªããã¡ã»ãããåŒã³åºãéã®ã¬ã¹ã³ã¹ããäœããªããŸãã
- å€ãã®é¢æ°ãæã€ãã¡ã»ãããåŒã³åºãå Žåã¯ã¬ã¹ã®æ¶è²»ãå€ããªããŸãã
- Solidityã®æé©åèšå®ãé«ããããšãçæããããã€ãã³ãŒããå¢ããŸããããã¡ã»ãããå®è¡ãããéã®ã¬ã¹æ¶è²»éãå°ãªããªããŸãã
颿°ã®ããŒãžã§ã³æ å ±ã®ååŸ
ãã€ã€ã¢ã³ãå
ã®é¢æ°ã®ããŒãžã§ã³æ
å ±ãç¥ãããå ŽåããœãããŠã§ã¢ããŠãŒã¶ãŒã¯ãã®é¢æ°ã®ãã¡ã»ããã¢ãã¬ã¹ãååŸããããšãã§ããŸãã
ããã¯ãIDiamondLoupe
ã€ã³ã¿ãŒãã§ãŒã¹å
ã®facetAddress
颿°ãåŒã³åºãããšã§è¡ããŸãã
ãã®é¢æ°ã¯ã颿°ã»ã¬ã¯ã¿ãåŒæ°ãšããŠåãåãããã®é¢æ°ãå®è£
ãããŠãããã¡ã»ããã¢ãã¬ã¹ãè¿ããŸãã
ããã©ã«ã颿°ã®èšå®
Solidityã§ã¯ãã³ã³ãã©ã¯ãå
ã«ååšããªã颿°ãåŒã³åºãããå Žåãç¹å®ã®æ©èœãå®è¡ããããã®ãã©ãŒã«ããã¯é¢æ°ãæäŸããŠããŸãã
åæ§ã®æ©èœããã€ã€ã¢ã³ãå
ã§ããªãã·ã§ã³ã§å®è£
ããããšãã§ããŸãã
ãããããã©ã«ã颿°ãšåŒã³ããã€ã€ã¢ã³ãå
ã«ååšããªã颿°ãåŒã³åºãããéã«å®è¡ããã颿°ã§ãã
ããã©ã«ã颿°ã¯ãæ§ã
ãªæ¹æ³ã§å®è£
ããããšãã§ããŸããããã®æšæºã§ã¯å
·äœçãªå®è£
æ¹æ³ã¯å®ããããŠããŸããã
ã€ãŸãããã€ã€ã¢ã³ãå
ã§ã©ã®ããã«ããã©ã«ã颿°ãèšå®ãããã¯ãéçºè
ã«ä»»ãããŠããŸãã
ã«ãŒã颿°ãšDiamondCutã€ãã³ã
éåžžã®ã³ã³ãã©ã¯ãã®å Žåããã®æ€èšŒæžã¿ã®ãœãŒã¹ã³ãŒããèŠãããšã§ãã©ã®ãããªé¢æ°ãã³ã³ãã©ã¯ãã«ååšããããããããŸãã
ãããããã€ã€ã¢ã³ãã®æ€èšŒæžã¿ã®ãœãŒã¹ã³ãŒãã«ã¯ãã©ã®ãããªé¢æ°ãååšãããã®æ
å ±ã¯å«ãŸããŠããŸããã
ãã®ããããã€ã€ã¢ã³ãã§ã¯ç°ãªãã¢ãããŒããå¿
èŠã§ãã
ãã€ã€ã¢ã³ãã¯ãã«ãŒã颿°ãšåŒã°ãã4ã€ã®æšæºé¢æ°ãæã£ãŠããããããã®é¢æ°ã䜿çšããŠããã€ã€ã¢ã³ããã©ã®ãããªé¢æ°ãæã£ãŠãããã瀺ãããšãã§ããŸãã
ã«ãŒã颿°ã¯ã以äžã®ãããªç®çã§å©çšãããŸãã
- ãã€ã€ã¢ã³ãã䜿çšããŠãããã¹ãŠã®é¢æ°ã衚瀺ããããã«å©çšãããŸãã
- Etherscanãªã©ã®ãµãŒãã¹ããã¡ã€ã«ãã¯ãšãªããŠããã€ã€ã¢ã³ãã䜿çšããŠãããã¹ãŠã®ãœãŒã¹ã³ãŒããååŸã衚瀺ããããã«å©çšãããŸãã
- Etherscanãªã©ã®ãµãŒãã¹ããã¡ã€ã«ãã¯ãšãªããŠããã€ã€ã¢ã³ãã®ABIæ å ±ãååŸããããã«å©çšãããŸãã
- ãã€ã€ã¢ã³ãã«é¢æ°ã®è¿œå ã眮æãåé€ãè¡ããã©ã³ã¶ã¯ã·ã§ã³ãæåãããããã¹ããæ€èšŒããããã«å©çšãããŸãã
- ãã€ã€ã¢ã³ãã®é¢æ°ãåŒã³åºãåã«ããã€ã€ã¢ã³ããã©ã®ãããªé¢æ°ãæã£ãŠãããã確èªããããã«å©çšãããŸãã
- ããŒã«ãããã°ã©ãã³ã°ã©ã€ãã©ãªããã€ã€ã¢ã³ãããããã€ãã¢ããã°ã¬ãŒãããéã«å©çšãããŸãã
- ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ããã€ã€ã¢ã³ãã«é¢ããæ å ±ã衚瀺ãããŠãŒã¶ãŒããã€ã€ã¢ã³ãäžã®é¢æ°ãåŒã³åºãããã«å©çšãããŸãã
ããã«ããããã€ã€ã¢ã³ãã®é¢æ°æ å ±ãååŸããæäœããããã®ææ®µãæäŸããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãéçºããŒã«ãã©ã€ãã©ãªã®æçšæ§ãåäžããŸãã
ãã€ã€ã¢ã³ãã¯ãéææ§ãæäŸããå¥ã®æ¹æ³ããµããŒãããŠããããã€ã€ã¢ã³ãäžã§è¡ããããã¹ãŠã®ã¢ããã°ã¬ãŒãã®å±¥æŽãèšé²ããŸãã
ããã¯ãDiamondCut
ã€ãã³ããéããŠå®çŸãããŸãã
ãã®ã€ãã³ãã¯ããã€ã€ã¢ã³ãã«é¢æ°ã远å ã眮æãåé€ãããéã«èšé²ããããã«äœ¿çšãããŸãã
ããã«ããããã€ã€ã¢ã³ãã®å€æŽå±¥æŽãç°¡åã«è¿œè·¡ã§ããããã«ãªããŸãã
ã¢ããã°ã¬ãŒãã倿Žã®éçšãéæã«ãªãããããã€ã€ã¢ã³ãã®å€æŽã«å¯Ÿããä¿¡é Œæ§ãåäžããŸãã
ãŸãããã®å±¥æŽæ
å ±ã¯ããã€ã€ã¢ã³ãã®éçšãã»ãã¥ãªãã£ã®è©äŸ¡ã«ã圹ç«ã¡ãŸãã
ãã¡ã»ããéã§é¢æ°å ±æ
ç°ãªããã¡ã»ããã§å®çŸ©ããã颿°ãåŒã³åºãå¿ èŠãçããå Žåã以äžã®æ¹æ³ã䜿ã£ãŠãã®åŠçãè¡ãããšãã§ããŸãã
1. å éšé¢æ°ã³ãŒãã®ã³ããŒ
1ã€ã®ãã¡ã»ããå
ã§å®çŸ©ãããå
éšé¢æ°ã³ãŒãããå¥ã®ãã¡ã»ããã«ã³ããŒããæ¹æ³ã§ãã
ããã«ããã颿°ã®å®è£
ãè€æ°ã®ãã¡ã»ããã§å
±æãããŸãããã³ãŒãã®éè€ãçºçããå¯èœæ§ããããŸãã
2. å ±éã³ã³ãã©ã¯ãã®ç¶æ¿
å
±éã®å
éšé¢æ°ãå«ãã³ã³ãã©ã¯ããäœæããè€æ°ã®ãã¡ã»ããããã®ã³ã³ãã©ã¯ããç¶æ¿ããæ¹æ³ã§ãã
ããã«ããã颿°ã®ã³ãŒãã¯äžç®æã«ãŸãšããããŸãããç¶æ¿ã®éå±€ãæ·±ããªãå¯èœæ§ããããŸãã
3. Solidityã©ã€ãã©ãªã®äœ¿çš
å
±éã®å
éšé¢æ°ãSolidityã©ã€ãã©ãªã«é
眮ããå¿
èŠãªãã¡ã»ããå
ã§ãã®ã©ã€ãã©ãªã䜿çšããæ¹æ³ã§ãã
ããã«ããã颿°ã®ã³ãŒããã©ã€ãã©ãªã«éçŽããããã¡ã»ããéã§å
±æãããŸãã
4. å¥ãã¡ã»ããã®é¢æ°ã®å®å šåŒã³åºã
å¥ã®ãã¡ã»ããã§å®çŸ©ãããå€éšé¢æ°ããå®å
šãªæ¹æ³ã§åŒã³åºãããšãã§ããŸãã
ãã®éããã¡ã»ããã®ã¢ãã¬ã¹ãæå®ããŠé¢æ°ãåŒã³åºãããšã§ãå¥ã®ãã¡ã»ããã®é¢æ°ãå©çšã§ããŸãã
5. delegatecallã®äœ¿çš
å¥ã®ãã¡ã»ããã§å®çŸ©ãããå€éšé¢æ°ããã¬ã¹å¹çã®è¯ãæ¹æ³ã§åŒã³åºãããšãã§ããŸãã
delegatecall
ã䜿çšãããšãä»ã®ã³ã³ãã©ã¯ãã®ã³ãŒãããã®ãŸãŸå®è¡ã§ããŸãã
DiamondStorage storage ds = diamondStorage();
bytes4 functionSelector = bytes4(keccak256("myFunction(uint256)"));
// get facet address of function
address facet = ds.selectorToFacet[functionSelector];
bytes memory myFunctionCall = abi.encodeWithSelector(functionSelector, 4);
(bool success, bytes memory result) = address(facet).delegatecall(myFunctionCall);
6. å éšé¢æ°ã®ããŒãžã§ã³äœæ
å¥ã®ãã¡ã»ããã§å®çŸ©ãããå€éšé¢æ°ã®ä»£ããã«ããã®é¢æ°ã®å
éšããŒãžã§ã³ãäœæããããšãã§ããŸãã
å¿
èŠãªãã¡ã»ããå
ã§å
éšé¢æ°ã远å ããããšã§ã颿°ããã¡ã»ããå
ã§å
±æã§ããŸãã
ãã¡ã»ããã¯åå©çšå¯èœã§åæå¯èœ
ãã¡ã»ããã¯ãéåžžã«æè»ãªæ¹æ³ã§æ©èœãåå©çšããçµã¿åãããããšãã§ããéèŠãªæŠå¿µã§ãã
1. åå©çšæ§ã®é«ããã¡ã»ãã
ãã¡ã»ããã¯äžåºŠãããã€ããããšãç°ãªããã€ã€ã¢ã³ãéã§åå©çšã§ããŸãã
ããã«ãããåãæ©èœãè€æ°ã®ãã€ã€ã¢ã³ãã§åå©çšããéçºã³ã¹ããšãããã€ã³ã¹ããç¯çŽã§ããŸãã
2. ç°ãªããã¡ã»ããã®çµã¿åãã
ç°ãªããã¡ã»ãããçµã¿åãããããšã§ãç°ãªããã€ã€ã¢ã³ãã«ç°ãªãæ©èœãæäŸããããšãã§ããŸãã
ããã¯ããã€ã€ã¢ã³ãããšã«é©åãªæ©èœã»ãããçµã¿åãããŠã«ã¹ã¿ãã€ãºã§ããããšãæå³ããŸãã
3. åå©çšå¯èœãªãã¡ã»ããã»ããã®äœæ
ç¹å®ã®æ©èœãæã€ãã¡ã»ããã»ãããäœæãããããç°ãªããã€ã€ã¢ã³ãéã§åå©çšã§ããŸãã
ããã«ãããæ°ãããã€ã€ã¢ã³ããå±éããéã«ãæ¢åã®ãã¡ã»ãããåå©çšããããšãã§ããæéãšã³ã¹ããç¯çŽã§ããŸãã
4. ãã¡ã»ããã®çµã¿åãã
ãã¡ã»ããã¯ä»ã®ãã¡ã»ãããšçµã¿åãããŠäœ¿çšããããšãã§ããŸãã
ããã«ãããç°ãªããã¡ã»ããå士ã®é£æºãçµ±åãå¯èœã«ãªããŸãã
ãŸããäžéšã®ãã¡ã»ããã¯ç¹å®ã®çµã¿åããã§ã¯äœ¿çšã§ããªãããã«å¶åŸ¡ããããšãã§ããŸãã
5. 颿°ã·ã°ããã£
颿°ã·ã°ããã£ã䜿çšããããšã§é¢æ°ã®ç¹å®ãè¡ãããšãã§ããŸãã
åãã·ã°ããã£ãæã€å€éšé¢æ°ãåããã€ã€ã¢ã³ãã«åæã«è¿œå ããããšã¯ã§ããŸããã
ããã«ããã颿°ã®äžææ§ãšãã€ã€ã¢ã³ãå
ã§ã®æ£ç¢ºãªé¢æ°ã®èå¥ãä¿èšŒãããŸãã
6. ãã¡ã»ããã®é¢æ°éžæ
ãã€ã€ã¢ã³ãã«ã¯ããã¡ã»ããå
ã®é¢æ°ã®äžéšã®ã¿ã远å ã§ããŸãã
å¿
èŠãªæ©èœã ããéžãã§è¿œå ããããšãã§ãããããäœèšãªæ©èœãæãããã«ãã€ã€ã¢ã³ããæ§ç¯ã§ããŸãã
åŸæ¹äºææ§
ãã®æšæºã¯ãã¢ããã°ã¬ãŒãå¯èœãªãã€ã€ã¢ã³ããå°æ¥ã®æšæºãæ©èœãšäºææ§ããããã®ã«ããŸãã
ãªããªããæ°ãã颿°ã远å ããããæ¢åã®é¢æ°ã眮æããããåé€ãããã§ããããã§ãã
æ°ããæ©èœãèŠä»¶ãå°å
¥ãããŠãããã€ã€ã¢ã³ãã®ã¢ããã°ã¬ãŒãã«ãã£ãŠããã«é©å¿ãããããšãã§ããŸãã
åèå®è£
以äžã«å®è£ ããŸãšããŠããŸãã
åŒçš: https://eips.ethereum.org/EIPS/eip-2535
ã»ãã¥ãªãã£èæ ®äºé
æææš©ãšèªèšŒ
â ïžæ³šèš
ãã€ã€ã¢ã³ãã®æææš©ãèªèšŒã®èšèšãšå®è£
ã¯ããã®æšæºã®äžéšã§ã¯ãããŸããã
ãã®æšæºããªãã¡ã¬ã³ã¹å®è£
ã§æäŸãããäŸã¯ãå®éã®å®è£
æ¹æ³ã®äžäŸã§ãã
ãã®ææ¡ã«ã¯ãããŸããŸãªèªèšŒãæææš©ã®ã¹ããŒã ãäœæããããšãã§ããŸãã
èªèšŒã¹ããŒã ã¯éåžžã«ã·ã³ãã«ãªãã®ããè€éãªãã®ãŸã§ã现ããå¶åŸ¡ããèãå¶åŸ¡ãŸã§å¯èœã§ãã
ãã®ææ¡ã¯ãã®æ¹æ³ãå¶éããŸããã
ããšãã°ãæææš©/èªèšŒã¯ã1ã€ã®ã¢ã«ãŠã³ãã¢ãã¬ã¹ã颿°ã®è¿œå /眮æ/åé€ã®æš©éãæã€ã ãã§ããããšããããŸãã
ãŸãã¯ã忣åèªæ²»çµç¹ãç¹å®ã®é¢æ°ã®ã¿ã远å /眮æ/åé€ããæš©éãæã€ããšãèããããŸãã
ã³ã³ã»ã³ãµã¹æ©èœãå®è£
ã§ããŸãã
è€æ°ã®ç°ãªã人ã
ã倿Žãæ¿èªããããã«diamondCut
颿°ãåŒã³åºãæ¿èªé¢æ°ãªã©ãèããããŸãã
ãããã¯ãããŸã§äŸã§ãã
ãã€ã€ã¢ã³ãã®æææš©ãå¶åŸ¡ãèªèšŒã«é¢ããæšæºãšå®è£ ã®éçºã奚å±ãããŠããŸãã
diamondCutã«ããä»»æã®å®è¡
diamondCut
颿°ã¯ããã€ã€ã¢ã³ãã®ã¹ãã¬ãŒãžãžã®ã¢ã¯ã»ã¹ãéããŠä»»æã®å®è¡ãå¯èœã§ãïŒdelegatecall
ãä»ããŠïŒã
ãã®é¢æ°ãžã®ã¢ã¯ã»ã¹ã¯æ
éã«å¶éãããå¿
èŠããããŸãã
selfdestructã®äœ¿çšçŠæ¢
facetå
ã§ã®selfdestruct
ã®äœ¿çšã¯åŒ·ãæšå¥šãããŸããã
誀çšãããšãã€ã€ã¢ã³ããfacetãåé€ãããå¯èœæ§ããããŸãã
颿°ã»ã¬ã¯ã¿ã®è¡çª
颿°ã»ã¬ã¯ã¿ã®è¡çªã¯ã2ã€ã®ç°ãªã颿°ã·ã°ããã£ãåã4
ãã€ãããã·ã¥ã«ããã·ã¥åãããå Žåã«çºçããŸã
ããã«ãããæ°ãã颿°ã远å ããããšããã®ã«æ¢åã®é¢æ°ã眮æãããŠããŸãunintended consequence
ãçããŸãã
é©åã«å®è£
ãããdiamondCut
颿°ã§ã¯ããã§ã«ååšãã颿°ã»ã¬ã¯ã¿ã远å ããããšãé²ãããããã®ã·ããªãªã¯çºçããŸããã
éææ§
ãã€ã€ã¢ã³ãã¯ã1ã€ä»¥äžã®é¢æ°ã远å ã眮æãåé€ããããã³ã«ã€ãã³ããçºè¡ããŸãã
ãã¹ãŠã®ãœãŒã¹ã³ãŒãã¯æ€èšŒå¯èœã§ãã
ããã«ããã人ã
ããœãããŠã§ã¢ãã³ã³ãã©ã¯ãã®å€æŽãç£èŠããããšãã§ããŸãã
ãããã€ã€ã¢ã³ãã«äžæ£ãªé¢æ°ã远å ãããå Žåãããã¯ç¢ºèªã§ããŸãã
ã»ãã¥ãªãã£ããã³ãã¡ã€ã³ã®å°éå®¶ã¯ããã€ã€ã¢ã³ãã®å€æŽå±¥æŽãã¬ãã¥ãŒããŠäžæ£ãªå±¥æŽãæ€åºããããšãã§ããŸãã
åŒçš
Nick Mudge (@mudgen), "ERC-2535: Diamonds, Multi-Facet Proxy," Ethereum Improvement Proposals, no. 2535, February 2020. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-2535.
æåŸã«
ä»åã¯ãã¢ããã°ã¬ãŒããã«ãªã³ã³ãã©ã¯ãã®èŠæ Œã®1ã€ã§ããããã€ã€ã¢ã³ããã¿ãŒã³ã®ææ¡ãããŠããERC2535ãã«ã€ããŠãŸãšããŠããŸããïŒ
ãããã ã£ãã§ããããïŒ
質åãªã©ãããæ¹ã¯ä»¥äžã®Twitterã®DMãªã©ãããæ°è»œã«è³ªåããŠãã ããïŒ