ãããã¯ãã§ãŒã³ã®è©±é¡ã¯ãããããçš®é¡ã®èªå€§å®£äŒã®æºã§ããã ãã§ãªããæè¡çãªèŠ³ç¹ããéåžžã«è²Žéãªã¢ã€ãã¢ã®æºã§ããããŸãã ãããã£ãŠã圌女ã¯æŽããéœåžã®äœæ°ãè¿åããŸããã§ããã 人ã ã¯æ³šææ·±ã芳å¯ããç 究ããåŸæ¥ã®æ å ±ããŒã¹ã®å°éç¥èããããã¯ãã§ãŒã³ ã·ã¹ãã ã«ç§»è¡ããããšããŠããŸãã ãããŸã§ã®ãšããããã€ã³ãçã«ã¯ãRostelecom-Solar ã®éçºã® 2 ã€ã¯ããããã¯ãã§ãŒã³ã«åºã¥ããŠãœãããŠã§ã¢ã®ã»ãã¥ãªãã£ããã§ãã¯ã§ããããšã§ãã ãããŠãã®éçšã§ããããã¯ãã§ãŒã³ã³ãã¥ããã£ã®å¿çšåé¡ã®è§£æ±ºã«ã€ããŠããã€ãã®èããçãŸããŸãã ãããã®ã©ã€ãããã¯ã® XNUMX ã€ã§ãããCREATEXNUMX ã䜿çšããŠå±éåã«ã¹ããŒã ã³ã³ãã©ã¯ãã®ã¢ãã¬ã¹ã決å®ããæ¹æ³ããä»æ¥ã¯äžéšæç²ããŠå ±æããããšæããŸãã
CREATE2 ãªãã³ãŒãã¯ãä»å¹Ž 28 æ XNUMX æ¥ã«ã³ã³ã¹ã¿ã³ãã£ããŒãã«ã®ããŒã ãã©ãŒã¯ã«è¿œå ãããŸããã EIP ã«èšèŒãããŠããããã«ããã®ãªãã³ãŒãã¯äž»ã«ç¶æ
ãã£ãã«ã®ããã«å°å
¥ãããŸããã ãã ããç§ãã¡ã¯ãããå¥ã®åé¡ã解決ããããã«äœ¿çšããŸããã
ååŒæã«æ®é«ããããŠãŒã¶ãŒãããŸãã åãŠãŒã¶ãŒã«ã€ãŒãµãªã¢ã ã¢ãã¬ã¹ãæäŸããå¿ èŠããããŸããã€ãŒãµãªã¢ã ã¢ãã¬ã¹ã«ã¯èª°ã§ãããŒã¯ã³ãéä¿¡ã§ããããã«ãã£ãŠã¢ã«ãŠã³ããè£å ãããŸãã ãããã®ã¢ãã¬ã¹ãããŠã©ã¬ããããšåŒã³ãŸãã ããŒã¯ã³ããŠã©ã¬ããã«å°çããããåäžã®ãŠã©ã¬ãã (ããããŠã©ã¬ãã) ã«ããŒã¯ã³ãéä¿¡ããå¿ èŠããããŸãã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ãCREATE2 ã䜿çšããã«ãã®åé¡ã解決ããããã®ãªãã·ã§ã³ãåæããããããæŸæ£ããçç±ã説æããŸãã æçµçµæã®ã¿ã«èå³ãããå Žåã¯ããæçµãœãªã¥ãŒã·ã§ã³ãã»ã¯ã·ã§ã³ã§èŠã€ããããšãã§ããŸãã
ã€ãŒãµãªã¢ã ã¢ãã¬ã¹
æãç°¡åãªè§£æ±ºçã¯ãæ°ãããŠãŒã¶ãŒçšã«æ°ããã€ãŒãµãªã¢ã ã¢ãã¬ã¹ãçæããããšã§ãã ãããã®ã¢ãã¬ã¹ããŠã©ã¬ããã«ãªããŸãã ããŒã¯ã³ããŠã©ã¬ããããããããŠã©ã¬ããã«è»¢éããã«ã¯ãé¢æ°ãåŒã³åºããŠãã©ã³ã¶ã¯ã·ã§ã³ã«çœ²åããå¿ èŠããããŸãã 転éïŒïŒ ããã¯ãšã³ããããŠã©ã¬ããã®ç§å¯ããŒã䜿çšããŠã
ãã®ã¢ãããŒãã«ã¯æ¬¡ã®å©ç¹ããããŸãã
- ããã ãã§ã
- ãŠã©ã¬ããããããããŠã©ã¬ããã«ããŒã¯ã³ã転éããã³ã¹ãã¯ãé¢æ°ãåŒã³åºãã³ã¹ããšåãã§ãã 転éïŒïŒ
ãã ãããã®ã¢ãããŒãã«ã¯é倧ãªæ¬ ç¹ã XNUMX ã€ãããããç§ãã¡ã¯ãã®ã¢ãããŒããæŸæ£ããŸãããç§å¯ããŒãã©ããã«ä¿åããå¿ èŠããããšããããšã§ãã ãŸããçŽå€±ããå¯èœæ§ãããã ãã§ãªãããããã®ããŒãžã®ã¢ã¯ã»ã¹ãæ éã«ç®¡çããå¿ èŠããããŸãã å°ãªããšã XNUMX ã€ã䟵害ãããå Žåãç¹å®ã®ãŠãŒã¶ãŒã®ããŒã¯ã³ã¯ããã ãŠã©ã¬ããã«å°éã§ããªããªããŸãã
ãŠãŒã¶ãŒããšã«åå¥ã®ã¹ããŒã ã³ã³ãã©ã¯ããäœæãã
ãŠãŒã¶ãŒããšã«åå¥ã®ã¹ããŒã ã³ã³ãã©ã¯ãããããã€ãããšããŠã©ã¬ããã®ç§å¯ããŒããµãŒããŒã«ä¿åããªããŠãæžã¿ãŸãã ååŒæã¯ãã®ã¹ããŒã ã³ã³ãã©ã¯ããåŒã³åºããŠãããŒã¯ã³ãããããŠã©ã¬ããã«è»¢éããŸãã
ãŸããã¹ããŒã ã³ã³ãã©ã¯ããå±éããªããšãŠãŒã¶ãŒã«èªåã®ãŠã©ã¬ãã ã¢ãã¬ã¹ã衚瀺ã§ããªãããããã®ãœãªã¥ãŒã·ã§ã³ãæŸæ£ããŸãã (ããã¯å®éã«ã¯å¯èœã§ãããããªãè€éãªæ¹æ³ã§ãããããã§ã¯èª¬æããªãä»ã®æ¬ ç¹ããããŸã)ã ååŒæã§ã¯ããŠãŒã¶ãŒã¯å¿ èŠãªã ãã¢ã«ãŠã³ããäœæã§ãã誰ããèªåã®ãŠã©ã¬ãããå¿ èŠãšããŸãã ããã¯ããŠãŒã¶ãŒããã®ã¢ã«ãŠã³ãã䜿çšãããã©ããããåãããªããŸãŸãã³ã³ãã©ã¯ãã®å±éã«è²»çšãè²»ããå¿ èŠãããããšãæå³ããŸãã
ãªãã³ãŒã CREATE2
åã®æ¹æ³ã®åé¡ã解決ããããã«ãCREATE2 ãªãã³ãŒãã䜿çšããããšã«ããŸããã CREATE2 ã䜿çšãããšãã¹ããŒã ã³ã³ãã©ã¯ããå±éããã¢ãã¬ã¹ãäºåã«æ±ºå®ã§ããŸãã ã¢ãã¬ã¹ã¯æ¬¡ã®åŒã䜿çšããŠèšç®ãããŸãã
keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]
ããã§ã
- äœæ â CREATE2ãåŒã³åºãã¹ããŒãã³ã³ãã©ã¯ãã®ã¢ãã¬ã¹
- å¡© - ã©ã³ãã ãªå€
- åæåã³ãŒã - ãããã€ã¡ã³ãçšã®ã¹ããŒã ã³ã³ãã©ã¯ã ãã€ãã³ãŒã
ããã«ããããŠãŒã¶ãŒã«æäŸããã¢ãã¬ã¹ã«å®éã«å¿
èŠãªãã€ãã³ãŒããå«ãŸããããšãä¿èšŒãããŸãã ãŸãããã®ã¹ããŒã ã³ã³ãã©ã¯ãã¯ãå¿
èŠãªãšãã«ãã€ã§ãå±éã§ããŸãã ããšãã°ããŠãŒã¶ãŒãåããŠãŠã©ã¬ããã䜿çšããããšã決ãããšãã
ããã«ã次ã®çç±ã«ãããã¹ããŒã ã³ã³ãã©ã¯ã ã¢ãã¬ã¹ãä¿åãã代ããã«ãæ¯åèšç®ããããšãã§ããŸãã
- äœæ åŒå ã®ã¯ãŠã©ã¬ãããã¡ã¯ããªãŒã®ã¢ãã¬ã¹ã§ããããå®æ°ã§ã
- å¡© - user_id ããã·ã¥
- åæåã³ãŒã åããŠã©ã¬ããã䜿çšããŠããããæ°žç¶çã§ã
ãããªãæ¹å
以åã®ãœãªã¥ãŒã·ã§ã³ã«ã¯äŸç¶ãšã㊠XNUMX ã€ã®æ¬ ç¹ããããŸããããã¯ãã¹ããŒã ã³ã³ãã©ã¯ãã®å°å ¥ã«æéãæ¯æãå¿ èŠãããããšã§ãã ãã ãããããåãé€ãããšã¯ã§ããŸãã ãã®ããã«ãé¢æ°ãåŒã³åºãããšãã§ããŸã 転éïŒïŒãã㊠èªå·±ç Žå£ïŒïŒ ãŠã©ã¬ããã³ã³ã¹ãã©ã¯ã¿ãŒå ã§ã ãããŠãã¹ããŒãã³ã³ãã©ã¯ããå±éããããã®ã¬ã¹ãè¿ãããŸãã
äžè¬çãªèãã«åããŠãCREATE2 ãªãã³ãŒãã䜿çšãããšãã¹ããŒã ã³ã³ãã©ã¯ããåãã¢ãã¬ã¹ã«è€æ°åãããã€ã§ããŸãã ããã¯ãCREATE2 ãã¿ãŒã²ãã ã¢ãã¬ã¹ã®ãã³ã¹ããŒãã§ããããšããã§ãã¯ããããã§ã (ã³ã³ã¹ãã©ã¯ã¿ãŒã®å é ã§å€ "1" ãå²ãåœãŠãããŸã)ã åæã«æ©èœã¯ã èªå·±ç Žå£ïŒïŒ æ¯å nonce ã¢ãã¬ã¹ããªã»ããããŸãã ãããã£ãŠãåãåŒæ°ã䜿çšã㊠CREATE2 ãå床åŒã³åºããšãnonce ãã§ãã¯ã«åæ ŒããŸãã
ãã®ãœãªã¥ãŒã·ã§ã³ã¯ã€ãŒãµãªã¢ã ã¢ãã¬ã¹ ãœãªã¥ãŒã·ã§ã³ã«äŒŒãŠããŸãããç§å¯ããŒãä¿åããå¿ èŠããªãããšã«æ³šæããŠãã ããã ãŠã©ã¬ããããããããŠã©ã¬ããã«ééããã³ã¹ãã¯ãé¢æ°ãåŒã³åºãã³ã¹ããšã»ãŒåãã§ã 転éïŒïŒãã¹ããŒãã³ã³ãã©ã¯ãã®å±éã«æéãæ¯æããªãããã§ãã
æçµæ±ºå®
æåã«æºåãããã®:
- å¡©ãååŸããé¢æ° USER_ID
- é©åãªãœã«ãïŒã€ãŸãããŠã©ã¬ãããã¡ã¯ããªãŒïŒã䜿çšããŠCREATE2ãªãã³ãŒããåŒã³åºãã¹ããŒãã³ã³ãã©ã¯ã
- 次ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãšã®ã³ã³ãã©ã¯ãã«å¯Ÿå¿ãããŠã©ã¬ããã®ãã€ãã³ãŒã:
constructor () {
address hotWallet = 0xâŠ;
address token = 0xâŠ;
token.transfer (hotWallet, token.balanceOf (address (this)));
selfdestruct (address (0));
}
æ°ãããŠãŒã¶ãŒããšã«ãèšç®ã«ãã£ãŠãã®ãŠãŒã¶ãŒã®ãŠã©ã¬ãã ã¢ãã¬ã¹ã衚瀺ãããŸãã
keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]
ãŠãŒã¶ãŒã察å¿ãããŠã©ã¬ãã ã¢ãã¬ã¹ã«ããŒã¯ã³ã転éãããšãããã¯ãšã³ãã¯ãã©ã¡ãŒã¿ãæ〠Transfer ã€ãã³ãã確èªããŸãã _ã«ãŠã©ã¬ããã¢ãã¬ã¹ãšåãã§ãã ãã®æç¹ã§ããŠã©ã¬ãããå±éããåã«ååŒæã§ãŠãŒã¶ãŒã®æ®é«ãå¢ããããšããã§ã«å¯èœã§ãã
ååãªããŒã¯ã³ããŠã©ã¬ãã ã¢ãã¬ã¹ã«èç©ããããããããããã¹ãŠäžåºŠã«ããããŠã©ã¬ããã«è»¢éã§ããŸãã ãããè¡ãããã«ãããã¯ãšã³ãã¯ã¹ããŒã ã³ã³ãã©ã¯ã ãã¡ã¯ããªé¢æ°ãåŒã³åºãã次ã®ã¢ã¯ã·ã§ã³ãå®è¡ããŸãã
function deployWallet (ÑÐŸÐ»Ñ uint256) {
bytes memory walletBytecode =âŠ;
// invoke CREATE2 with wallet bytecode and salt
}
ãããã£ãŠããŠã©ã¬ãã ã¹ããŒã ã³ã³ãã©ã¯ã ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããããã¹ãŠã®ããŒã¯ã³ãããããŠã©ã¬ãã ã¢ãã¬ã¹ã«è»¢éãããŠããèªå·±ç Žå£ãããŸãã
å®å
šãªã³ãŒããèŠã€ãããŸã
èè
Pavel Kondratenkovãã€ãŒãµãªã¢ã ã¹ãã·ã£ãªã¹ã
åºæïŒ habr.com