{"id":467245,"date":"2025-07-17T09:00:16","date_gmt":"2025-07-17T09:00:16","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=467245"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=467245","title":{"rendered":"<span>\u0421\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0435\u0449\u0451 \u043d\u0435\u0442, \u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c: \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d CREATE2 (EIP-1014)<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9a7\/96e\/0c5\/9a796e0c54b5649012b6ff7e84bd16fd.png\" width=\"1536\" height=\"1024\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/9a7\/96e\/0c5\/9a796e0c54b5649012b6ff7e84bd16fd.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9a7\/96e\/0c5\/9a796e0c54b5649012b6ff7e84bd16fd.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 CREATE2, \u0447\u0435\u043c \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 CREATE, \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 state channels \u0438 ERC-4337, \u0438 \u043a\u0430\u043a \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u2014 \u043e\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 Uniswap V2 \u0434\u043e \u0432\u0437\u043b\u043e\u043c\u0430 Tornado Cash \u043d\u0430 $1M. \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430 Solidity \u0438 Assembly, \u0430 \u0435\u0449\u0451 \u2014 \u043a\u0430\u043a \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438 \u0442\u043e\u043c \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430. \u0414\u0430, \u0438 \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<h3>\u041e\u043f\u043a\u043e\u0434 CREATE<\/h3>\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u0431\u044b\u043b\u043e \u043b\u0443\u0447\u0448\u0435 \u2014 \u043d\u0443 \u0438\u043b\u0438, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043d\u0430\u0434\u0435\u0436\u043d\u0435\u0435. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043e\u043f\u043a\u043e\u0434\u00a0<code>CREATE<\/code>, \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430\u00a0<code>CREATE2<\/code>. \u041e\u043d \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442 \u0438 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439).<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043e\u043f\u043a\u043e\u0434\u00a0<code>CREATE<\/code>\u00a0\u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0441\u044f \u2014 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u00a0<code>new<\/code>:<\/p>\n<pre><code class=\"javascript\">contract Bar {     \/\/ @notice \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 create \u0431\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 ETH \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441     function createFoo() external returns (address) {         Foo foo = new Foo();          return address(foo);     }      \/\/ @notice \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 create \u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 ETH \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441     function createBaz() external payable returns (address) {         Baz baz = new Baz{value: msg.value}();          return address(baz);     } }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u00a0<a href=\"https:\/\/github.com\/fullstack-development\/blockchain-wiki\/blob\/main\/EIPs\/erc-1014\/contracts\/CreateWithNew.sol\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041e\u043f\u043a\u043e\u0434\u00a0<code>CREATE<\/code>\u00a0\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0440\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<p><strong>\u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (Stack input):<\/strong><\/p>\n<ul>\n<li>\n<p><code>value<\/code>\u00a0\u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0432\u0430\u043b\u044e\u0442\u044b \u0432 wei, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<\/li>\n<li>\n<p><code>offset<\/code>\u00a0\u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><code>size<\/code>\u00a0\u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (Stack output):<\/strong><\/p>\n<ul>\n<li>\n<p><code>address<\/code>\u00a0\u2014 \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043b\u0438\u0431\u043e\u00a0<code>0<\/code>, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 assembly \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0435\u0435:<\/p>\n<pre><code class=\"javascript\">contract Deployer {     \/\/ @notice \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 create \u0431\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 wei \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441     function deployFoo() public returns (address) {         address foo;         bytes memory initCode = type(Foo).creationCode;          assembly {             \/\/ \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c             let codeSize := mload(initCode)  \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438             let codeOffset := add(initCode, 0x20)  \/\/ \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c 32 \u0431\u0430\u0439\u0442\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0434\u043b\u0438\u043d\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 initCode              \/\/ \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c CREATE \u0431\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 msg.value             foo := create(0, codeOffset, codeSize)             \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0431\u044b\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d             if iszero(foo) { revert(0, 0) }         }          return foo;     } }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0447\u0435\u0440\u0435\u0437 assembly \u2014\u00a0<a href=\"https:\/\/github.com\/fullstack-development\/blockchain-wiki\/blob\/main\/EIPs\/erc-1014\/contracts\/CreateWithAssembly.sol\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h4>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u043f\u043a\u043e\u0434\u043e\u043c CREATE (0xf0)<\/h4>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u043f\u043a\u043e\u0434\u00a0<code>CREATE<\/code>\u00a0\u043c\u043e\u0433 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430, \u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0430\u0434\u0440\u0435\u0441 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b (<code>msg.sender<\/code>) \u0438 \u0435\u0435\u00a0<code>nonce<\/code>:<\/p>\n<p>\u0412 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">address = hash(sender, nonce)<\/code><\/pre>\n<p>\u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043b\u043e\u0436\u043d\u0435\u0435:<\/p>\n<pre><code class=\"javascript\">address = keccak256(rlp([sender_address, sender_nonce]))[12:]<\/code><\/pre>\n<p>\u0413\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>sender_address<\/code>\u00a0\u2014 \u0430\u0434\u0440\u0435\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442.<\/p>\n<\/li>\n<li>\n<p><code>sender_nonce<\/code>\u00a0\u2014 nonce \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441 \u044d\u0442\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430).<\/p>\n<\/li>\n<li>\n<p><code>rlp<\/code>\u00a0\u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f RLP-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. RLP (Recursive Length Prefix) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Ethereum, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0435 \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><code>keccak256<\/code>\u00a0\u2014 \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f Keccak-256.<\/p>\n<\/li>\n<li>\n<p><code>[12:]<\/code>\u00a0\u2014 \u043f\u0435\u0440\u0432\u044b\u0435 12 \u0431\u0430\u0439\u0442 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443\u00a0<code>keccak256<\/code>\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 32 \u0431\u0430\u0439\u0442\u0430, \u0430 \u0430\u0434\u0440\u0435\u0441 \u0432 Ethereum \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 20 \u0431\u0430\u0439\u0442 \u0445\u0435\u0448\u0430 (32 &#8212; 20 = 12).<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442\u00a0<code>nonce<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f,\u00a0<code>nonce<\/code>\u00a0\u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f, \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f RLP \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 Solidity \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"javascript\">function computeAddressWithCreate(uint256 _nonce) public view returns (address) {     address _origin = address(this);     bytes memory data;      if (_nonce == 0x00) {         data = abi.encodePacked(bytes1(0xd6), bytes1(0x94), _origin, bytes1(0x80));     } else if (_nonce &lt;= 0x7f) {         data = abi.encodePacked(bytes1(0xd6), bytes1(0x94), _origin, uint8(_nonce));     } else if (_nonce &lt;= 0xff) {         data = abi.encodePacked(bytes1(0xd7), bytes1(0x94), _origin, bytes1(0x81), uint8(_nonce));     } else if (_nonce &lt;= 0xffff) {         data = abi.encodePacked(bytes1(0xd8), bytes1(0x94), _origin, bytes1(0x82), uint16(_nonce));     } else if (_nonce &lt;= 0xffffff) {         data = abi.encodePacked(bytes1(0xd9), bytes1(0x94), _origin, bytes1(0x83), uint24(_nonce));     } else {         data = abi.encodePacked(bytes1(0xda), bytes1(0x94), _origin, bytes1(0x84), uint32(_nonce));     }     return address(uint160(uint256(keccak256(data)))); }<\/code><\/pre>\n<p>\u0414\u043b\u0438\u043d\u0430 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00a0<code>nonce<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u0430\u0434\u0440\u0435\u0441 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 20 \u0431\u0430\u0439\u0442, \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043c\u043d\u043e\u0433\u043e\u00a0<code>if<\/code>.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 nonce 0, \u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u043d\u0430\u0447\u0430\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\n<p><code>0xd6<\/code>\u00a0&#8212; \u0434\u043b\u0438\u043d\u0430 \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b 22 \u0431\u0430\u0439\u0442\u0430 (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u00a0<code>nonce<\/code>\u00a0\u0440\u0430\u0432\u043d\u044b\u043c 0).<\/p>\n<\/li>\n<li>\n<p><code>bytes1(0x94)<\/code>\u00a0&#8212; \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u0442 \u043f\u043e\u043b\u0435 \u0434\u043b\u0438\u043d\u043e\u0439 \u0432 20 \u0431\u0430\u0439\u0442.<\/p>\n<\/li>\n<li>\n<p><code>_origin<\/code>\u00a0&#8212; \u043f\u043e\u043b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<\/li>\n<li>\n<p><code>bytes1(0x80)<\/code>\u00a0\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0<code>nonce<\/code>\u00a0\u0440\u0430\u0432\u0435\u043d 0, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e RLP.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0<code>nonce<\/code>, \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 RLP \u0432\u0430\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434 \u0441\u0430\u043c\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>\u042f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0443\u00a0<a href=\"https:\/\/github.com\/fullstack-development\/blockchain-wiki\/blob\/main\/EIPs\/erc-1014\/contracts\/CreateWithAssembly.sol\" rel=\"noopener noreferrer nofollow\">Deployer<\/a>\u00a0\u2014 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 Remix.<\/p>\n<blockquote>\n<p>\u041c\u044b \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0438\u0448\u0435\u043c \u0432 \u043d\u0430\u0448\u0435\u043c<a href=\"https:\/\/t.me\/+8p2iaLV6_tBmNTZi\" rel=\"noopener noreferrer nofollow\"> Telegram<\/a>-\u043a\u0430\u043d\u0430\u043b\u0435. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u044b\u0441\u043b\u0438 \u0432\u0441\u043b\u0443\u0445, \u0438\u043d\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u041d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0441\u0451 \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0435\u043c \u0432 \u0441\u0442\u0430\u0442\u044c\u0438, \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0441\u0442 \u0432 \u0442\u0435\u043b\u0435\u0433\u0443. \u0422\u0430\u043a \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438 \u0447\u0442\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c, \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c.<\/p>\n<\/blockquote>\n<h3>\u041f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f CREATE2<\/h3>\n<p>\u0412 2018 \u0433\u043e\u0434\u0443 \u0412\u0438\u0442\u0430\u043b\u0438\u043a \u0411\u0443\u0442\u0435\u0440\u0438\u043d \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u00a0<a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-1014\" rel=\"noopener noreferrer nofollow\">EIP-1014: Skinny CREATE2<\/a>\u00a0\u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u0435\u0439:<\/p>\n<blockquote>\n<p><em>&#171;\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043a\u0430\u043d\u0430\u043b\u0430\u0445) \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0449\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u0430 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044f, \u0447\u0442\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u043e\u0434, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u0441 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430\u043c\u0438.&#187;<\/em><\/p>\n<\/blockquote>\n<p>\u0417\u0432\u0443\u0447\u0438\u0442 \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c. \u0414\u0435\u043b\u043e \u0432\u00a0<a href=\"https:\/\/ethereum.org\/en\/developers\/docs\/scaling\/state-channels\/\" rel=\"noopener noreferrer nofollow\">state channels<\/a>. \u0414\u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f rollups \u043e\u043d\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u0441\u043f\u043e\u0441\u043e\u0431 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Ethereum.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u0432 \u043a\u0430\u043d\u0430\u043b\u0430\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0<em>counterfactual instantiation<\/em>. \u0421\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043c\u043e\u0433 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c, \u043d\u043e \u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441 \u0431\u044b\u043b \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0437\u0430\u0440\u0430\u043d\u0435\u0435.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043c\u043e\u0433 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 \u043e\u043d\u0447\u0435\u0439\u043d \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u043a\u0430\u043d\u0430\u043b\u0430 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0444\u0444-\u0447\u0435\u0439\u043d \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430:<\/p>\n<blockquote>\n<p><em>&#171;\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0410\u043b\u0438\u0441\u043e\u0439 \u0438 \u0411\u043e\u0431\u043e\u043c. \u0410\u043b\u0438\u0441\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0411\u043e\u0431\u0443 4 ETH \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043d\u0430\u043b, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e. \u042d\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u0430 \u043e\u043d\u0447\u0435\u0439\u043d \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043d\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c: &#8216;\u041a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0410\u043b\u0438\u0441\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0411\u043e\u0431\u0443 4 ETH&#8217;. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0443\u0436\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430\u0441\u044c \u2014 \u043e\u043d\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0443\u0433\u0440\u043e\u0437.&#187;<\/em><\/p>\n<\/blockquote>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, \u043f\u043e \u0442\u0435\u043e\u0440\u0438\u0438 \u0438\u0433\u0440, \u0437\u043d\u0430\u044f, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0430\u043a\u0430\u044f &#171;\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430&#187;, \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430, \u0430 \u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c\u00a0<a href=\"https:\/\/medium.com\/statechannels\/counterfactual-generalized-state-channels-on-ethereum-d38a36d25fc6\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>\u00a0\u0438\u00a0<a href=\"https:\/\/medium.com\/spankchain\/a-state-channels-adventure-with-counterfactual-rick-part-1-ce68e16252ea\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u043d\u043e \u0442\u0435\u043c\u0430 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u0430\u044f \u2014 \u044f \u0432\u0430\u0441 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u043b.<\/p>\n<h3>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043f\u043a\u043e\u0434 CREATE2 (0xf5)<\/h3>\n<p>\u041e\u043f\u043a\u043e\u0434\u00a0<code>CREATE2<\/code>\u00a0\u0431\u044b\u043b \u0432\u0432\u0435\u0434\u0435\u043d \u0432 \u0445\u0430\u0440\u0434\u0444\u043e\u0440\u043a\u0435\u00a0<em>\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u043e\u043f\u043e\u043b\u044c<\/em>\u00a0\u043a\u0430\u043a \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430\u00a0<code>CREATE<\/code>. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430. \u0412\u043c\u0435\u0441\u0442\u043e\u00a0<code>nonce<\/code>\u00a0\u0434\u0435\u043f\u043b\u043e\u0439\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (<code>creationCode<\/code>) \u0438\u00a0<em>\u0441\u043e\u043b\u044c<\/em>\u00a0(<code>salt<\/code>).<\/p>\n<p>\u041d\u043e\u0432\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430:<\/p>\n<pre><code class=\"javascript\">address = keccak256(0xff + sender_address + salt + keccak256(initialisation_code))[12:]<\/code><\/pre>\n<ul>\n<li>\n<p><code>0xff<\/code>\u00a0\u2014 \u043f\u0440\u0435\u0444\u0438\u043a\u0441, \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0447\u0435\u0440\u0435\u0437\u00a0<code>CREATE<\/code>. \u0412 RLP-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435\u00a0<code>0xff<\/code>\u00a0\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0442\u0430\u0431\u0430\u0439\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0447\u0442\u043e \u043d\u0435\u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e \u0432 EVM. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u00a0<code>keccak256<\/code>\u00a0\u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043e\u0442 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><code>sender_address<\/code>\u00a0\u2014 \u0430\u0434\u0440\u0435\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442.<\/p>\n<\/li>\n<li>\n<p><code>salt<\/code>\u00a0\u2014 32-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u0431\u044b\u0447\u043d\u043e\u00a0<code>keccak256<\/code>\u00a0\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u0441\u043e\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p><code>initialisation_code<\/code>\u00a0\u2014 \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><em>\u0412\u0430\u0436\u043d\u043e!<\/em>\u00a0\u0415\u0441\u043b\u0438\u00a0<code>CREATE<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>CREATE2<\/code>\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0<strong>\u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f<\/strong>\u00a0\u0438 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439\u00a0<code>nonce<\/code>\u00a0\u0438\u043b\u0438 \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439\u00a0<code>code<\/code>, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f (revert), \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442\u00a0<code>initialisation_code<\/code>\u00a0\u2014 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u043f\u043a\u043e\u0434.<\/p>\n<p>\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0441 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u043c \u0447\u0435\u0440\u0435\u0437\u00a0<code>CREATE<\/code>), \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442\u00a0<code>revert<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0<code>nonce<\/code>\u00a0\u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u0436\u0435 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439. \u042d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u00a0<strong>\u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u0436\u0435 \u0447\u0435\u0440\u0435\u0437\u00a0<\/strong><code><strong>SELFDESTRUCT<\/strong><\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043d\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u00a0<code>nonce<\/code>\u00a0\u0432 \u0442\u043e\u0439 \u0436\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441\u00a0<code>CREATE<\/code>,\u00a0<code>CREATE2<\/code>\u00a0\u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u2014\u00a0<code>salt<\/code>.<\/p>\n<p><strong>\u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (Stack input):<\/strong><\/p>\n<ul>\n<li>\n<p><code>value<\/code>\u00a0\u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0432\u0430\u043b\u044e\u0442\u044b (wei) \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<\/li>\n<li>\n<p><code>offset<\/code>\u00a0\u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><code>size<\/code>\u00a0\u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><code>salt<\/code>\u00a0\u2014 32-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (Stack output):<\/strong><\/p>\n<ul>\n<li>\n<p><code>address<\/code>\u00a0\u2014 \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0438\u043b\u0438\u00a0<code>0<\/code>, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CREATE2 \u0432 Solidity<\/h4>\n<p>\u0412 Solidity\u00a0<code>CREATE2<\/code>\u00a0\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a\u00a0<code>CREATE<\/code>, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432\u00a0<code>salt<\/code>:<\/p>\n<pre><code class=\"javascript\">contract DeployerCreate2 {     \/\/\/ @notice \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 create2 \u0431\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 wei     function create2Foo(bytes32 _salt) external returns (address) {         Foo foo = new Foo{salt: _salt}();         return address(foo);     }      \/\/\/ @notice \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 create2 \u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 wei     function create2Bar(bytes32 _salt) external payable returns (address) {         Bar bar = new Bar{value: msg.value, salt: _salt}();         return address(bar);     } }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430\u00a0<a href=\"https:\/\/github.com\/fullstack-development\/blockchain-wiki\/blob\/main\/EIPs\/erc-1014\/contracts\/Create2WithNew.sol\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p><em>\u0412\u0430\u0436\u043d\u043e!<\/em>\u00a0\u041e\u043f\u043a\u043e\u0434\u044b\u00a0<code>CREATE<\/code>\u00a0\u0438\u00a0<code>CREATE2<\/code>\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432. \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0432\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u043d\u0430\u0447\u0435 &#8212; \u0432 \u043f\u043e\u043b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438\u00a0<code>to<\/code>\u00a0\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<code>nil<\/code>\u00a0(\u0430\u043d\u0430\u043b\u043e\u0433\u00a0<code>null<\/code>), \u0430 \u0435\u0433\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u043a\u043e\u0434\u043e\u043c\u00a0<code>RETURN<\/code>\u00a0\u0432\u00a0<code>creationCode<\/code>, \u0430 \u043d\u0435\u00a0<code>CREATE<\/code>.<\/p>\n<h4>CREATE2 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Assembly<\/h4>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043d\u0430\u00a0<em>Assembly<\/em>\u00a0(\u0432\u0437\u044f\u0442\u043e \u0438\u0437\u00a0<a href=\"https:\/\/www.cyfrin.io\/glossary\/precompute-contract-address-with-create2-solidity-code-example\" rel=\"noopener noreferrer nofollow\">Cyfrin<\/a>):<\/p>\n<pre><code class=\"javascript\">function deploy(bytes memory bytecode, uint256 _salt) public payable {     address addr;      \/*     NOTE: \u041a\u0430\u043a \u0432\u044b\u0437\u0432\u0430\u0442\u044c create2      create2(v, p, n, s)     \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0441 \u043a\u043e\u0434\u043e\u043c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442 p \u0434\u043e p + n     \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 v wei     \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441     \u0433\u0434\u0435 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 = \u043f\u0435\u0440\u0432\u044b\u0435 20 \u0431\u0430\u0439\u0442 keccak256(0xff + address(this) + s + keccak256(mem[p\u2026(p+n)]))           s = big-endian 256-\u0431\u0438\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435     *\/     assembly {         addr :=             create2(                 callvalue(),       \/\/ wei, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c                 add(bytecode, 0x20),  \/\/ \u041a\u043e\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u044b\u0445 32 \u0431\u0430\u0439\u0442 (\u0434\u043b\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430)                 mload(bytecode),   \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 (\u043f\u0435\u0440\u0432\u044b\u0435 32 \u0431\u0430\u0439\u0442\u0430)                 _salt              \/\/ \u0421\u043e\u043b\u044c             )          if iszero(extcodesize(addr)) { revert(0, 0) }     }      emit Deployed(addr, _salt); }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430\u00a0<a href=\"https:\/\/github.com\/fullstack-development\/blockchain-wiki\/blob\/main\/EIPs\/erc-1014\/contracts\/Create2WithAssembly.sol\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h3>\u0422\u0440\u0430\u0442\u044b \u043d\u0430 \u0433\u0430\u0437<\/h3>\n<p>\u0420\u0430\u043d\u0435\u0435, \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0447\u0435\u0440\u0435\u0437\u00a0<code>CREATE<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e\u00a0<code>address<\/code>\u00a0\u0438\u00a0<code>nonce<\/code>, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 64 \u0431\u0430\u0439\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u043b\u0430\u0442\u0430 \u0437\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0435 \u0432\u0437\u0438\u043c\u0430\u043b\u0430\u0441\u044c (<a href=\"https:\/\/www.evm.codes\/?fork=cancun#f0\" rel=\"noopener noreferrer nofollow\">\u0441\u043c. <\/a><a href=\"http:\/\/evm.codes\" rel=\"noopener noreferrer nofollow\">evm.codes<\/a>).<\/p>\n<p>\u0412\u00a0<code>CREATE2<\/code>\u00a0\u0434\u043e\u0431\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0445\u0435\u0448\u0430 \u043e\u0442 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (<code>hash_cost<\/code>), \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u042d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0433\u0430\u0437\u0430:<\/p>\n<pre><code class=\"javascript\">minimum_word_size = (size + 31) \/ 32 init_code_cost = 2 * minimum_word_size hash_cost = 6 * minimum_word_size code_deposit_cost = 200 * deployed_code_size  static_gas = 32000 dynamic_gas = init_code_cost + hash_cost + memory_expansion_cost + deployment_code_execution_cost + code_deposit_cost<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u00a0<code>CREATE2<\/code>\u00a0\u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e\u0440\u043e\u0436\u0435\u00a0<code>CREATE<\/code>, \u043d\u043e \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0434\u043e \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h3>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 CREATE2<\/h3>\n<p>\u0427\u0442\u043e \u0434\u0430\u043b\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u043f\u043a\u043e\u0434\u0430?<\/p>\n<ol>\n<li>\n<p><strong>\u041a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/strong><br \/><code>CREATE2<\/code>\u00a0\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0434\u043e \u0438\u0445 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u043a\u0430\u043d\u0430\u043b\u0430\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u0440\u0430\u043d\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u0423\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/strong><br \/>\u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u043a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u044b \u043e\u0444\u0444\u0447\u0435\u0439\u043d \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u043b\u0430\u0447\u0435\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043b\u0435\u0439\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u00a0<em>\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430<\/em>\u00a0\u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 EOA.<\/p>\n<p>\u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f\u00a0<code>CREATE2<\/code>\u00a0\u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043b\u0438\u0448\u044c \u0438\u0434\u0435\u0435\u0439, \u043d\u043e \u0441\u043f\u0443\u0441\u0442\u044f \u0442\u0440\u0438 \u0433\u043e\u0434\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432\u00a0<a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-4337#first-time-account-creation\" rel=\"noopener noreferrer nofollow\">ERC-4337<\/a>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0437\u043e\u0432\u00a0<code>entryPoint.getSenderAddress(bytes initCode)<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u0448\u0435\u043b\u044c\u043a\u0430 \u0434\u043e \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Vanity-\u0430\u0434\u0440\u0435\u0441\u0430<\/strong><br \/>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c &#171;\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439&#187; \u0430\u0434\u0440\u0435\u0441, \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044f\u00a0<code>salt<\/code>, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0441\u044f \u0438\u043b\u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b:\u00a0<code>0xC0FFEE...<\/code>,\u00a0<code>0xDEADBEEF...<\/code>\u00a0\u0438 \u0442. \u0434.<\/p>\n<\/li>\n<li>\n<p><strong>\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430<\/strong><br \/>\u0412 EVM \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0438 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0431\u0430\u0439\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f. \u0417\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0431\u0430\u0439\u0442\u00a0<code>calldata<\/code>\u00a0\u0432\u0437\u0438\u043c\u0430\u0435\u0442\u0441\u044f\u00a0<code>G_txdatanonzero<\/code>\u00a0(16 \u0433\u0430\u0437\u0430), \u0430 \u0437\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u2014\u00a0<code>G_txdatazero<\/code>\u00a0(4 \u0433\u0430\u0437\u0430). \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0443\u043b\u0435\u0439, \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0448\u0435\u0432\u043b\u0435.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d \u044d\u0442\u043e\u0442 \u0430\u0441\u043f\u0435\u043a\u0442:\u00a0<a href=\"https:\/\/medium.com\/coinmonks\/on-efficient-ethereum-addresses-3fef0596e263\" rel=\"noopener noreferrer nofollow\">On Efficient Ethereum Addresses<\/a>\u00a0(\u0445\u043e\u0442\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u043f\u043e \u0433\u0430\u0437\u0443 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438 \u0438\u0437-\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438\u00a0<code>calldata<\/code>).<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0435\u0442\u0430\u043c\u043e\u0440\u0444\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b<\/strong><br \/>\u0421\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437\u00a0<code>CREATE2<\/code>, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442\u0441\u044f (<code>SELFDESTRUCT<\/code>) \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e \u0441 \u0442\u0435\u043c \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u043e\u043c, \u043d\u043e \u0441 \u043d\u043e\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e \u043d\u0435 \u043f\u0440\u0438\u043d\u044f\u043b\u043e \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u00a0<a href=\"https:\/\/0age.medium.com\/the-promise-and-the-peril-of-metamorphic-contracts-9eb8b8413c5e\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>\u00a0\u0435\u0433\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u00a0<em>&#171;\u0443\u0440\u043e\u0434\u043b\u0438\u0432\u044b\u043c \u0441\u0432\u043e\u0434\u043d\u044b\u043c \u0431\u0440\u0430\u0442\u043e\u043c Transparent Proxy&#187;<\/em>.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u00a0<a href=\"https:\/\/github.com\/0age\/metamorphic\/blob\/master\/README.md\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f<\/strong><br \/>\u0412 \u0440\u044f\u0434\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043f\u0440\u043e\u0449\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437\u00a0<code>CREATE2<\/code>, \u0447\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e. \u042f\u0440\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014\u00a0<em>Uniswap v2<\/em>.<\/p>\n<p><strong>\u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?<\/strong><\/p>\n<ul>\n<li>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0430\u0440 \u0447\u0435\u0440\u0435\u0437\u00a0<a href=\"https:\/\/github.com\/Uniswap\/v2-core\/blob\/ee547b17853e71ed4e0101ccfd52e70d5acded58\/contracts\/UniswapV2Factory.sol#L23\" rel=\"noopener noreferrer nofollow\">UniswapV2Factory<\/a>\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f\u00a0<code>CREATE2<\/code>, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043e\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u0432\u0443\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0432 \u043f\u0430\u0440\u0435. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043f\u0430\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u00a0<code>initialize<\/code>\u00a0\u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<pre><code class=\"javascript\">function createPair(address tokenA, address tokenB) external returns (address pair) {     \/\/\/ ...     bytes memory bytecode = type(UniswapV2Pair).creationCode;     bytes32 salt = keccak256(abi.encodePacked(token0, token1));     assembly {         pair := create2(0, add(bytecode, 32), mload(bytecode), salt)     }     IUniswapV2Pair(pair).initialize(token0, token1);     \/\/\/ ... }<\/code><\/pre>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u00a0<code>UniswapV2Library<\/code>\u00a0\u043c\u043e\u0436\u0435\u0442\u00a0<strong>\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c<\/strong>\u00a0\u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u0440\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439\u00a0<code>init code hash<\/code>\u00a0\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pairFor. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 (\u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f\u00a0<code>initialize<\/code>):<\/p>\n<pre><code class=\"javascript\">function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {     (address token0, address token1) = sortTokens(tokenA, tokenB);     pair = address(uint(keccak256(abi.encodePacked(         hex'ff',         factory,         keccak256(abi.encodePacked(token0, token1)),         hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' \/\/ init code hash     )))); }<\/code><\/pre>\n<p>\u26a0\ufe0f\u00a0<em>\u0415\u0441\u043b\u0438 \u0444\u043e\u0440\u043a\u0430\u0435\u0442\u0435 Uniswap v2, \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c\u00a0<\/em><code><em>init code hash<\/em><\/code><em>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 (<\/em><code><em>factory<\/em><\/code><em>), \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u0430\u0440\u044b.<\/em><\/p>\n<\/li>\n<li>\n<p>\u041d\u0443 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u043c\u0435\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u00a0<code>pairFor<\/code>\u00a0\u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u00a0<a href=\"https:\/\/github.com\/Uniswap\/v2-periphery\/blob\/master\/contracts\/UniswapV2Router01.sol\" rel=\"noopener noreferrer nofollow\">UniswapV2Router01<\/a>. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u0438\u043a\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"javascript\">function addLiquidity(     address tokenA,     address tokenB,     uint amountADesired,     uint amountBDesired,     uint amountAMin,     uint amountBMin,     address to,     uint deadline ) external override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {     (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);     address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);     \/\/\/... }<\/code><\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e,\u00a0<code>CREATE2<\/code>\u00a0\u043e\u0442\u043a\u0440\u044b\u043b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u0445\u043e\u0442\u044f \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438.<\/p>\n<h3>\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c CREATE2<\/h3>\n<p>\u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Solidity \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435:<\/p>\n<blockquote>\n<p>&#171;<em>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u043b\u0435\u0439 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438. \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d \u0431\u044b\u043b \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043d\u043e\u0432\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0439 \u0431\u0430\u0439\u0442\u043a\u043e\u0434, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u044b\u043b \u0442\u0435\u043c \u0436\u0435 \u0441\u0430\u043c\u044b\u043c (\u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u0434\u0440\u0435\u0441 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0431\u044b). \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0433\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f\u043c\u0438, \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0439 \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d.&#187;<\/em><\/p>\n<\/blockquote>\n<p>\u0420\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438: \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f\u00a0<code>CREATE<\/code>\u00a0\u0438\u00a0<code>CREATE2<\/code>\u00a0\u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441\u00a0<code>SELFDESTRUCT<\/code>\u00a0\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438 \u0442\u043e\u043c \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0435\u00a0<strong>\u0440\u0430\u0437\u043d\u044b\u0435<\/strong>\u00a0\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u0438\u00a0<a href=\"https:\/\/coinsbench.com\/understanding-soliditys-create-create2-with-tornado-cash-1m-hack-01f8c147e5c7\" rel=\"noopener noreferrer nofollow\">\u0432\u0437\u043b\u043e\u043c\u0435 Tornado Cash<\/a>, \u043a\u043e\u0433\u0434\u0430 \u0431\u044b\u043b \u0443\u043a\u0440\u0430\u0434\u0435\u043d $1M.<\/p>\n<p>\u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f\u00a0<strong>\u043c\u0435\u0442\u0430\u043c\u043e\u0440\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432<\/strong>.<\/p>\n<h4>\u0414\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0430\u0442\u0430\u043a\u0438<\/h4>\n<p>\u0415\u0441\u0442\u044c\u00a0<a href=\"https:\/\/github.com\/ManaanAnsari\/solidity-metamorphic-contracts-example\/blob\/main\/test\/MetamorphicContract.t.sol\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0430\u0442\u0430\u043a\u0430. \u042f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b \u044d\u0442\u043e\u0442 \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e \u0432 Remix, \u043d\u0438\u0436\u0435 \u043c\u044b \u0435\u0433\u043e \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<p>\u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0444\u0430\u0431\u0440\u0438\u043a\u0438:<\/p>\n<pre><code class=\"javascript\">contract Factory {     function createFirst() public returns (address) {         return address(new First());     }      function createSecond(uint256 _number) public returns (address) {         return address(new Second(_number));     }      function kill() public {         selfdestruct(payable(address(0)));     } }<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b\u00a0<strong>\u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438, \u043d\u043e \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c<\/strong>. \ud83d\ude08<\/p>\n<p>\u0428\u0430\u0433 1. \u0414\u0435\u043f\u043b\u043e\u0438\u043c\u00a0<code>MetamorphicContract<\/code>\u00a0\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u00a0<code>firstDeploy<\/code>:<\/p>\n<pre><code class=\"javascript\">function firstDeploy() external {     factory = new Factory{salt: keccak256(abi.encode(\"evil\"))}();     first = First(factory.createFirst());      emit FirstDeploy(address(factory), address(first));      first.kill();     factory.kill(); }<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>\u0414\u0435\u043f\u043b\u043e\u0438\u0442 \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0438 \u043f\u0435\u0440\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442 \u0438\u0445 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041b\u043e\u0433\u0438\u0440\u0443\u0435\u0442 \u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442 \u043e\u0431\u0430 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 Remix:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4e1\/6a1\/53f\/4e16a153f894b475e3b0e773ce7efdb3.png\" alt=\"Remix logs\" title=\"Remix logs\" width=\"1700\" height=\"416\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4e1\/6a1\/53f\/4e16a153f894b475e3b0e773ce7efdb3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4e1\/6a1\/53f\/4e16a153f894b475e3b0e773ce7efdb3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Remix logs<\/figcaption><\/div>\n<\/figure>\n<p>\u0428\u0430\u0433 2. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e\u00a0<code>secondDeploy<\/code>:<\/p>\n<pre><code class=\"javascript\">function secondDeploy() external {     \/\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u0443\u0434\u0430\u043b\u0435\u043d\u044b     emit CodeLength(address(factory).code.length, address(first).code.length);      \/\/\/ \u0414\u0435\u043f\u043b\u043e\u0438\u043c \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u043d\u0430 \u0442\u043e\u0442 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441     factory = new Factory{salt: keccak256(abi.encode(\"evil\"))}();      \/\/\/ \u0414\u0435\u043f\u043b\u043e\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043d\u0430 \u0442\u043e\u0442 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441, \u0447\u0442\u043e \u0438 \u043f\u0435\u0440\u0432\u044b\u0439     second = Second(factory.createSecond(42));      \/\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442     require(address(first) == address(second));      \/\/\/ \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430     second.setNumber(21);      \/\/\/ \u041b\u043e\u0433\u0438\u0440\u0443\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u0430     emit SecondDeploy(address(factory), address(second)); }<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 Remix:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/55f\/011\/90b\/55f01190b319a6afbb1293972abe19ec.png\" alt=\"Remix logs\" title=\"Remix logs\" width=\"1930\" height=\"1240\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/55f\/011\/90b\/55f01190b319a6afbb1293972abe19ec.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/55f\/011\/90b\/55f01190b319a6afbb1293972abe19ec.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Remix logs<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e?<\/strong><\/p>\n<ol>\n<li>\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0447\u0435\u0440\u0435\u0437\u00a0<code>CREATE2<\/code>\u00a0\u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u043e\u043b\u044c\u044e.<\/p>\n<\/li>\n<li>\n<p>\u0424\u0430\u0431\u0440\u0438\u043a\u0430 \u0447\u0435\u0440\u0435\u0437\u00a0<code>CREATE<\/code>\u00a0\u0441\u043e\u0437\u0434\u0430\u043b\u0430 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442-\u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e. \u0415\u0435 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0438\u00a0<code>nonce<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u043b\u0438 \u043e\u0431\u0430 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 (<code>SELFDESTRUCT<\/code>). \u042d\u0442\u043e\u00a0<strong>\u043e\u0431\u043d\u0443\u043b\u0438\u043b\u043e nonce<\/strong>\u00a0\u0444\u0430\u0431\u0440\u0438\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438 \u0442\u0443 \u0436\u0435 \u0444\u0430\u0431\u0440\u0438\u043a\u0443\u00a0<strong>\u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443<\/strong>\u00a0(\u0442\u0430\u043a \u043a\u0430\u043a \u0441\u043e\u043b\u044c \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c).<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u0438\u00a0<strong>\u0434\u0440\u0443\u0433\u0443\u044e<\/strong>\u00a0\u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e\u00a0<strong>\u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443<\/strong>, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0<code>nonce<\/code>\u00a0\u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0441\u043d\u043e\u0432\u0430\u00a0<code>0<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438 \u0442\u043e\u043c \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0435 \u2014 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u0434!<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430\u00a0<a href=\"https:\/\/github.com\/fullstack-development\/blockchain-wiki\/blob\/main\/EIPs\/erc-1014\/contracts\/MetamorphicContract.sol\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c\u00a0<strong>\u0440\u0430\u0437\u043d\u044b\u0435<\/strong>\u00a0\u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u043d\u0430\u00a0<strong>\u043e\u0434\u043d\u043e\u043c<\/strong>\u00a0\u0430\u0434\u0440\u0435\u0441\u0435. \ud83d\udea8<\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-1014\" rel=\"noopener noreferrer nofollow\">EIP-1014: Skinny CREATE2<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.soliditylang.org\/en\/latest\/control-structures.html#salted-contract-creations-create2\" rel=\"noopener noreferrer nofollow\">Docs: Salted contract creations \/ create2<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.cyfrin.io\/glossary\/precompute-contract-address-with-create2-solidity-code-example\" rel=\"noopener noreferrer nofollow\">Blog: Precompute Contract Address with Create2<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/blog.openzeppelin.com\/getting-the-most-out-of-create2\" rel=\"noopener noreferrer nofollow\">Blog: Getting the most out of CREATE2<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/medium.com\/spankchain\/a-state-channels-adventure-with-counterfactual-rick-part-1-ce68e16252ea\" rel=\"noopener noreferrer nofollow\">Blog: A State Channels Adventure with Counterfactual Rick! (Part 1)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/medium.com\/statechannels\/counterfactual-generalized-state-channels-on-ethereum-d38a36d25fc6\" rel=\"noopener noreferrer nofollow\">Blog: Counterfactual: Generalized State Channels on Ethereum<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/coinsbench.com\/understanding-soliditys-create-create2-with-tornado-cash-1m-hack-01f8c147e5c7\" rel=\"noopener noreferrer nofollow\">Blog: Understanding Solidity\u2019s create &amp; create2 with Tornado Cash $1M Hack<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/medium.com\/coinmonks\/on-efficient-ethereum-addresses-3fef0596e263\" rel=\"noopener noreferrer nofollow\">Blog: On Efficient Ethereum Addresses<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/928464\/\"> https:\/\/habr.com\/ru\/articles\/928464\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 CREATE2, \u0447\u0435\u043c \u043e\u043d \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 CREATE, \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 state channels \u0438 ERC-4337, \u0438 \u043a\u0430\u043a \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u2014 \u043e\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 Uniswap V2 \u0434\u043e \u0432\u0437\u043b\u043e\u043c\u0430 Tornado Cash \u043d\u0430 $1M. \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430 Solidity \u0438 Assembly, \u0430 \u0435\u0449\u0451 \u2014 \u043a\u0430\u043a \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438 \u0442\u043e\u043c \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430. \u0414\u0430, \u0438 \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<h3>\u041e\u043f\u043a\u043e\u0434 CREATE<\/h3>\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u0431\u044b\u043b\u043e \u043b\u0443\u0447\u0448\u0435 \u2014 \u043d\u0443 \u0438\u043b\u0438, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043d\u0430\u0434\u0435\u0436\u043d\u0435\u0435. \u0422\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043e\u043f\u043a\u043e\u0434\u00a0<code>CREATE<\/code>, \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430\u00a0<code>CREATE2<\/code>. \u041e\u043d \u0431\u044b\u043b \u043f\u0440\u043e\u0441\u0442 \u0438 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u043f\u0440\u043e\u0431\u043b\u0435\u043c (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439).<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043e\u043f\u043a\u043e\u0434\u00a0<code>CREATE<\/code>\u00a0\u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0441\u044f \u2014 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e\u00a0<code>new<\/code>:<\/p>\n<pre><code class=\"javascript\">contract Bar {     \/\/ @notice \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 create \u0431\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 ETH \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441     function createFoo() external returns (address) {         Foo foo = new Foo();          return address(foo);     }      \/\/ @notice \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 create \u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 ETH \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441     function createBaz() external payable returns (address) {         Baz baz = new Baz{value: msg.value}();          return address(baz);     } }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u00a0<a href=\"https:\/\/github.com\/fullstack-development\/blockchain-wiki\/blob\/main\/EIPs\/erc-1014\/contracts\/CreateWithNew.sol\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u041e\u043f\u043a\u043e\u0434\u00a0<code>CREATE<\/code>\u00a0\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0440\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<p><strong>\u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (Stack input):<\/strong><\/p>\n<ul>\n<li>\n<p><code>value<\/code>\u00a0\u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0432\u0430\u043b\u044e\u0442\u044b \u0432 wei, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<\/li>\n<li>\n<p><code>offset<\/code>\u00a0\u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><code>size<\/code>\u00a0\u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (Stack output):<\/strong><\/p>\n<ul>\n<li>\n<p><code>address<\/code>\u00a0\u2014 \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043b\u0438\u0431\u043e\u00a0<code>0<\/code>, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 assembly \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u0435\u0435:<\/p>\n<pre><code class=\"javascript\">contract Deployer {     \/\/ @notice \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 create \u0431\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 wei \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441     function deployFoo() public returns (address) {         address foo;         bytes memory initCode = type(Foo).creationCode;          assembly {             \/\/ \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c             let codeSize := mload(initCode)  \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438             let codeOffset := add(initCode, 0x20)  \/\/ \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c 32 \u0431\u0430\u0439\u0442\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0434\u043b\u0438\u043d\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 initCode              \/\/ \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c CREATE \u0431\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 msg.value             foo := create(0, codeOffset, codeSize)             \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0431\u044b\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d             if iszero(foo) { revert(0, 0) }         }          return foo;     } }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0447\u0435\u0440\u0435\u0437 assembly \u2014\u00a0<a href=\"https:\/\/github.com\/fullstack-development\/blockchain-wiki\/blob\/main\/EIPs\/erc-1014\/contracts\/CreateWithAssembly.sol\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h4>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u043f\u043a\u043e\u0434\u043e\u043c CREATE (0xf0)<\/h4>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u043f\u043a\u043e\u0434\u00a0<code>CREATE<\/code>\u00a0\u043c\u043e\u0433 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430, \u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0430\u0434\u0440\u0435\u0441 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b (<code>msg.sender<\/code>) \u0438 \u0435\u0435\u00a0<code>nonce<\/code>:<\/p>\n<p>\u0412 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">address = hash(sender, nonce)<\/code><\/pre>\n<p>\u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043b\u043e\u0436\u043d\u0435\u0435:<\/p>\n<pre><code class=\"javascript\">address = keccak256(rlp([sender_address, sender_nonce]))[12:]<\/code><\/pre>\n<p>\u0413\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>sender_address<\/code>\u00a0\u2014 \u0430\u0434\u0440\u0435\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442.<\/p>\n<\/li>\n<li>\n<p><code>sender_nonce<\/code>\u00a0\u2014 nonce \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441 \u044d\u0442\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430).<\/p>\n<\/li>\n<li>\n<p><code>rlp<\/code>\u00a0\u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044f RLP-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. RLP (Recursive Length Prefix) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Ethereum, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044f \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0435 \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0435 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p><code>keccak256<\/code>\u00a0\u2014 \u0445\u0435\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u044f Keccak-256.<\/p>\n<\/li>\n<li>\n<p><code>[12:]<\/code>\u00a0\u2014 \u043f\u0435\u0440\u0432\u044b\u0435 12 \u0431\u0430\u0439\u0442 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443\u00a0<code>keccak256<\/code>\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 32 \u0431\u0430\u0439\u0442\u0430, \u0430 \u0430\u0434\u0440\u0435\u0441 \u0432 Ethereum \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 20 \u0431\u0430\u0439\u0442 \u0445\u0435\u0448\u0430 (32 &#8212; 20 = 12).<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442\u00a0<code>nonce<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f,\u00a0<code>nonce<\/code>\u00a0\u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f, \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c.<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f RLP \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 Solidity \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"javascript\">function computeAddressWithCreate(uint256 _nonce) public view returns (address) {     address _origin = address(this);     bytes memory data;      if (_nonce == 0x00) {         data = abi.encodePacked(bytes1(0xd6), bytes1(0x94), _origin, bytes1(0x80));     } else if (_nonce &lt;= 0x7f) {         data = abi.encodePacked(bytes1(0xd6), bytes1(0x94), _origin, uint8(_nonce));     } else if (_nonce &lt;= 0xff) {         data = abi.encodePacked(bytes1(0xd7), bytes1(0x94), _origin, bytes1(0x81), uint8(_nonce));     } else if (_nonce &lt;= 0xffff) {         data = abi.encodePacked(bytes1(0xd8), bytes1(0x94), _origin, bytes1(0x82), uint16(_nonce));     } else if (_nonce &lt;= 0xffffff) {         data = abi.encodePacked(bytes1(0xd9), bytes1(0x94), _origin, bytes1(0x83), uint24(_nonce));     } else {         data = abi.encodePacked(bytes1(0xda), bytes1(0x94), _origin, bytes1(0x84), uint32(_nonce));     }     return address(uint160(uint256(keccak256(data)))); }<\/code><\/pre>\n<p>\u0414\u043b\u0438\u043d\u0430 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00a0<code>nonce<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u0430\u0434\u0440\u0435\u0441 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443 20 \u0431\u0430\u0439\u0442, \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043c\u043d\u043e\u0433\u043e\u00a0<code>if<\/code>.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 nonce 0, \u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u043d\u0430\u0447\u0430\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\n<p><code>0xd6<\/code>\u00a0&#8212; \u0434\u043b\u0438\u043d\u0430 \u0432\u0441\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b 22 \u0431\u0430\u0439\u0442\u0430 (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u00a0<code>nonce<\/code>\u00a0\u0440\u0430\u0432\u043d\u044b\u043c 0).<\/p>\n<\/li>\n<li>\n<p><code>bytes1(0x94)<\/code>\u00a0&#8212; \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u0434\u0435\u0442 \u043f\u043e\u043b\u0435 \u0434\u043b\u0438\u043d\u043e\u0439 \u0432 20 \u0431\u0430\u0439\u0442.<\/p>\n<\/li>\n<li>\n<p><code>_origin<\/code>\u00a0&#8212; \u043f\u043e\u043b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<\/li>\n<li>\n<p><code>bytes1(0x80)<\/code>\u00a0\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0<code>nonce<\/code>\u00a0\u0440\u0430\u0432\u0435\u043d 0, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e RLP.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0<code>nonce<\/code>, \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435 RLP \u0432\u0430\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434 \u0441\u0430\u043c\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>\u042f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0443\u00a0<a href=\"https:\/\/github.com\/fullstack-development\/blockchain-wiki\/blob\/main\/EIPs\/erc-1014\/contracts\/CreateWithAssembly.sol\" rel=\"noopener noreferrer nofollow\">Deployer<\/a>\u00a0\u2014 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 Remix.<\/p>\n<blockquote>\n<p>\u041c\u044b \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0438\u0448\u0435\u043c \u0432 \u043d\u0430\u0448\u0435\u043c<a href=\"https:\/\/t.me\/+8p2iaLV6_tBmNTZi\" rel=\"noopener noreferrer nofollow\"> Telegram<\/a>-\u043a\u0430\u043d\u0430\u043b\u0435. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u044b\u0441\u043b\u0438 \u0432\u0441\u043b\u0443\u0445, \u0438\u043d\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438. \u041d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u0441\u0451 \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u0435\u043c \u0432 \u0441\u0442\u0430\u0442\u044c\u0438, \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0449\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u0441\u0442 \u0432 \u0442\u0435\u043b\u0435\u0433\u0443. \u0422\u0430\u043a \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438 \u0447\u0442\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c, \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0433\u043b\u044f\u043d\u0443\u0442\u044c.<\/p>\n<\/blockquote>\n<h3>\u041f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f CREATE2<\/h3>\n<p>\u0412 2018 \u0433\u043e\u0434\u0443 \u0412\u0438\u0442\u0430\u043b\u0438\u043a \u0411\u0443\u0442\u0435\u0440\u0438\u043d \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u00a0<a href=\"https:\/\/eips.ethereum.org\/EIPS\/eip-1014\" rel=\"noopener noreferrer nofollow\">EIP-1014: Skinny CREATE2<\/a>\u00a0\u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u0435\u0439:<\/p>\n<blockquote>\n<p><em>&#171;\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043a\u0430\u043d\u0430\u043b\u0430\u0445) \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0449\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u0430 \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0435, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044f, \u0447\u0442\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u043e\u0434, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u0441 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430\u043c\u0438.&#187;<\/em><\/p>\n<\/blockquote>\n<p>\u0417\u0432\u0443\u0447\u0438\u0442 \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u044e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c. \u0414\u0435\u043b\u043e \u0432\u00a0<a href=\"https:\/\/ethereum.org\/en\/developers\/docs\/scaling\/state-channels\/\" rel=\"noopener noreferrer nofollow\">state channels<\/a>. \u0414\u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f rollups \u043e\u043d\u0438 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u0441\u043f\u043e\u0441\u043e\u0431 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Ethereum.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u0432 \u043a\u0430\u043d\u0430\u043b\u0430\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e\u00a0<em>counterfactual instantiation<\/em>. \u0421\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043c\u043e\u0433 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c, \u043d\u043e \u0435\u0433\u043e \u0430\u0434\u0440\u0435\u0441 \u0431\u044b\u043b \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0437\u0430\u0440\u0430\u043d\u0435\u0435.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043c\u043e\u0433 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 \u043e\u043d\u0447\u0435\u0439\u043d \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u043a\u0430\u043d\u0430\u043b\u0430 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0444\u0444-\u0447\u0435\u0439\u043d \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430:<\/p>\n<blockquote>\n<p><em>&#171;\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u043b\u0430\u0442\u0435\u0436\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043c\u0435\u0436\u0434\u0443 \u0410\u043b\u0438\u0441\u043e\u0439 \u0438 \u0411\u043e\u0431\u043e\u043c. \u0410\u043b\u0438\u0441\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0411\u043e\u0431\u0443 4 ETH \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u043d\u0430\u043b, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e. \u042d\u0442\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u0430 \u043e\u043d\u0447\u0435\u0439\u043d \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043d\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c: &#8216;\u041a\u043e\u043d\u0442\u0440\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0410\u043b\u0438\u0441\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0411\u043e\u0431\u0443 4 ETH&#8217;. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0443\u0436\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430\u0441\u044c \u2014 \u043e\u043d\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0443\u0433\u0440\u043e\u0437.&#187;<\/em><\/p>\n<\/blockquote>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, \u043f\u043e \u0442\u0435\u043e\u0440\u0438\u0438 \u0438\u0433\u0440, \u0437\u043d\u0430\u044f, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0430\u043a\u0430\u044f &#171;\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430&#187;, \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430, \u0430 \u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c\u00a0<a href=\"https:\/\/medium.com\/statechannels\/counterfactual-generalized-state-channels-on-ethereum-d38a36d25fc6\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>\u00a0\u0438\u00a0<a href=\"https:\/\/medium.com\/spankchain\/a-state-channels-adventure-with-counterfactual-rick-part-1-ce68e16252ea\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u043d\u043e \u0442\u0435\u043c\u0430 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u0430\u044f \u2014 \u044f \u0432\u0430\u0441 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u043b.<\/p>\n<h3>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043f\u043a\u043e\u0434 CREATE2 (0xf5)<\/h3>\n<p>\u041e\u043f\u043a\u043e\u0434\u00a0<code>CREATE2<\/code>\u00a0\u0431\u044b\u043b \u0432\u0432\u0435\u0434\u0435\u043d \u0432 \u0445\u0430\u0440\u0434\u0444\u043e\u0440\u043a\u0435\u00a0<em>\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0438\u043d\u043e\u043f\u043e\u043b\u044c<\/em>\u00a0\u043a\u0430\u043a \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430\u00a0<code>CREATE<\/code>. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430. \u0412\u043c\u0435\u0441\u0442\u043e\u00a0<code>nonce<\/code>\u00a0\u0434\u0435\u043f\u043b\u043e\u0439\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (<code>creationCode<\/code>) \u0438\u00a0<em>\u0441\u043e\u043b\u044c<\/em>\u00a0(<code>salt<\/code>).<\/p>\n<p>\u041d\u043e\u0432\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430:<\/p>\n<pre><code class=\"javascript\">address = keccak256(0xff + sender_address + salt + keccak256(initialisation_code))[12:]<\/code><\/pre>\n<ul>\n<li>\n<p><code>0xff<\/code>\u00a0\u2014 \u043f\u0440\u0435\u0444\u0438\u043a\u0441, \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0447\u0435\u0440\u0435\u0437\u00a0<code>CREATE<\/code>. \u0412 RLP-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435\u00a0<code>0xff<\/code>\u00a0\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0442\u0430\u0431\u0430\u0439\u0442\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0447\u0442\u043e \u043d\u0435\u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e \u0432 EVM. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u00a0<code>keccak256<\/code>\u00a0\u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043e\u0442 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p><code>sender_address<\/code>\u00a0\u2014 \u0430\u0434\u0440\u0435\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442.<\/p>\n<\/li>\n<li>\n<p><code>salt<\/code>\u00a0\u2014 32-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u0431\u044b\u0447\u043d\u043e\u00a0<code>keccak256<\/code>\u00a0\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u0441\u043e\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p><code>initialisation_code<\/code>\u00a0\u2014 \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><em>\u0412\u0430\u0436\u043d\u043e!<\/em>\u00a0\u0415\u0441\u043b\u0438\u00a0<code>CREATE<\/code>\u00a0\u0438\u043b\u0438\u00a0<code>CREATE2<\/code>\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u00a0<strong>\u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f<\/strong>\u00a0\u0438 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439\u00a0<code>nonce<\/code>\u00a0\u0438\u043b\u0438 \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439\u00a0<code>code<\/code>, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f (revert), \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442\u00a0<code>initialisation_code<\/code>\u00a0\u2014 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u043f\u043a\u043e\u0434.<\/p>\n<p>\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u0434\u0435\u043f\u043b\u043e\u0435 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0441 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u043c \u0447\u0435\u0440\u0435\u0437\u00a0<code>CREATE<\/code>), \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442\u00a0<code>revert<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0<code>nonce<\/code>\u00a0\u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u0436\u0435 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439. \u042d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u00a0<strong>\u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u0436\u0435 \u0447\u0435\u0440\u0435\u0437\u00a0<\/strong><code><strong>SELFDESTRUCT<\/strong><\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043d\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u00a0<code>nonce<\/code>\u00a0\u0432 \u0442\u043e\u0439 \u0436\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438.<\/p>\n<p>\u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441\u00a0<code>CREATE<\/code>,\u00a0<code>CREATE2<\/code>\u00a0\u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u2014\u00a0<code>salt<\/code>.<\/p>\n<p><strong>\u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (Stack input):<\/strong><\/p>\n<ul>\n<li>\n<p><code>value<\/code>\u00a0\u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0432\u0430\u043b\u044e\u0442\u044b (wei) \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<\/li>\n<li>\n<p><code>offset<\/code>\u00a0\u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043e\u0432, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><code>size<\/code>\u00a0\u2014 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><code>salt<\/code>\u00a0\u2014 32-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0435 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (Stack output):<\/strong><\/p>\n<ul>\n<li>\n<p><code>address<\/code>\u00a0\u2014 \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0438\u043b\u0438\u00a0<code>0<\/code>, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CREATE2 \u0432 Solidity<\/h4>\n<p>\u0412 Solidity\u00a0<code>CREATE2<\/code>\u00a0\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a\u00a0<code>CREATE<\/code>, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432\u00a0<code>salt<\/code>:<\/p>\n<pre><code class=\"javascript\">contract DeployerCreate2 {     \/\/\/ @notice \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 create2 \u0431\u0435\u0437 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 wei     function create2Foo(bytes32 _salt) external returns (address) {         Foo foo = new Foo{salt: _salt}();         return address(foo);     }      \/\/\/ @notice \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 create2 \u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 wei     function create2Bar(bytes32 _salt) external payable returns (address) {         Bar bar = new Bar{value: msg.value, salt: _salt}();         return address(bar);     } }<\/code><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430\u00a0<a href=\"https:\/\/github.com\/fullstack-development\/blockchain-wiki\/blob\/main\/EIPs\/erc-1014\/contracts\/Create2WithNew.sol\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p><em>\u0412\u0430\u0436\u043d\u043e!<\/em>\u00a0\u041e\u043f\u043a\u043e\u0434\u044b\u00a0<code>CREATE<\/code>\u00a0\u0438\u00a0<code>CREATE2<\/code>\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432. \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u0432\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u0438\u043d\u0430\u0447\u0435 &#8212; \u0432 \u043f\u043e\u043b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438\u00a0<code>to<\/code>\u00a0\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<code>nil<\/code>\u00a0(\u0430\u043d\u0430\u043b\u043e\u0433\u00a0<code>null<\/code>), \u0430 \u0435\u0433\u043e<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-467245","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/467245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=467245"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/467245\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=467245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=467245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=467245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}