Momwe mungadziwire adilesi ya mgwirizano wanzeru musanatumizidwe: kugwiritsa ntchito CREATE2 pakusinthana kwa crypto

Mutu wa blockchain susiya kukhala gwero la mitundu yonse ya hype, komanso malingaliro omwe ali ofunikira kwambiri pamalingaliro aukadaulo. Choncho, sichinalambalale anthu okhala mumzinda wotenthawu. Anthu akuyang'ana mwatcheru, kuphunzira, kuyesera kusamutsa ukatswiri wawo mu chikhalidwe chitetezo zambiri machitidwe blockchain. Pakadali pano, ndizowona: imodzi mwazatukuko za Rostelecom-Solar imatha kuyang'ana chitetezo cha mapulogalamu ozikidwa pa blockchain. Ndipo m'njira, malingaliro ena amawuka pakuthana ndi mavuto omwe amagwiritsidwa ntchito pagulu la blockchain. Chimodzi mwazinthu izi - momwe mungadziwire adilesi ya mgwirizano wanzeru musanatumizidwe pogwiritsa ntchito CREATE2 - lero ndikufuna kugawana nanu podula.

Momwe mungadziwire adilesi ya mgwirizano wanzeru musanatumizidwe: kugwiritsa ntchito CREATE2 pakusinthana kwa crypto
Opcode ya CREATE2 idawonjezedwa mu foloko yolimba ya Constantinople pa February 28th chaka chino. Monga tanenera mu EIP, opcode iyi idayambitsidwa makamaka pamayendedwe aboma. Komabe, tinaigwiritsa ntchito kuthetsa vuto lina.

Pali ogwiritsa ntchito omwe ali ndi miyeso pakusinthana. Tiyenera kupatsa aliyense wogwiritsa ntchito adilesi ya Ethereum komwe aliyense angatumize zizindikiro, potero akubwezeretsanso akaunti yawo. Tiyeni titchule maadiresi awa "wallets". Zizindikiro zikafika m'zikwama, tiyenera kuzitumiza ku chikwama chimodzi (hotwallet).

M'magawo otsatirawa, ndikusanthula njira zothetsera vutoli popanda CREATE2 ndikukuwuzani chifukwa chomwe tidazisiya. Ngati mumangokonda zotsatira zomaliza, mukhoza kuzipeza mu gawo la "Final Solution".

Ma adilesi a Ethereum

Njira yosavuta ndiyo kupanga maadiresi atsopano a Ethereum kwa ogwiritsa ntchito atsopano. Maadiresi awa adzakhala ma wallet. Kusamutsa ma tokeni kuchokera ku chikwama kupita ku hotwallet, muyenera kusaina malondawo poyitana ntchitoyi transfer() ndi kiyi yachinsinsi ya chikwama kuchokera kumbuyo.

Njirayi ili ndi zabwino izi:

  • ndi zophweka
  • mtengo wotumizira ma tokeni kuchokera pachikwama kupita ku hotwallet ndi wofanana ndi mtengo wakuyimbira foni transfer()

Komabe, tidaganiza zotsutsana ndi njirayi chifukwa ili ndi vuto limodzi lalikulu: muyenera kusunga makiyi achinsinsi penapake. Osati kokha kuti atayike, komanso muyenera kusamalira mosamala makiyi awa. Ngati chimodzi mwa izo chikusokonekera, ndiye kuti zizindikiro za wogwiritsa ntchito sizidzafika pachikwama chotentha.

Momwe mungadziwire adilesi ya mgwirizano wanzeru musanatumizidwe: kugwiritsa ntchito CREATE2 pakusinthana kwa crypto

Pangani mgwirizano wosiyana wanzeru kwa aliyense wogwiritsa ntchito

Kutumiza mgwirizano wosiyana wanzeru kwa aliyense wogwiritsa ntchito kumakupatsani mwayi wopewa kusunga makiyi achinsinsi a wallet pa seva. Kusinthanitsa kudzayitana mgwirizano wanzeru uwu kuti usamutsire zizindikiro ku hotwallet.

Tidasiyanso yankho ili, popeza wogwiritsa ntchito sangawonetse adilesi yake yachikwama popanda kugwiritsa ntchito mgwirizano wanzeru (izi ndizotheka, koma m'njira yovuta kwambiri ndi zovuta zina zomwe sitidzakambirana pano). Pakusinthana, wogwiritsa ntchito amatha kupanga maakaunti ambiri momwe amafunikira, ndipo aliyense amafunikira chikwama chake. Izi zikutanthauza kuti tiyenera kugwiritsa ntchito ndalama potumiza mgwirizano popanda ngakhale kutsimikiza kuti wogwiritsa ntchitoyo agwiritse ntchito akauntiyi.

Opcode CREATE2

Kuti tikonze vuto la njira yapitayi, tidaganiza zogwiritsa ntchito CREATE2 opcode. CREATE2 imakupatsani mwayi wodziwiratu adilesi yomwe mgwirizano wanzeru udzatumizidwa. Adilesi imawerengedwa pogwiritsa ntchito njira iyi:

keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]


,ku:

  • adiresi - adilesi ya mgwirizano wanzeru womwe udzayitanire CREATE2
  • mchere - mtengo wachisawawa
  • init_kodi - smart contract bytecode kuti atumizidwe

Izi zimatsimikizira kuti adilesi yomwe timapereka kwa wogwiritsa ntchito ili ndi bytecode yomwe mukufuna. Komanso, mgwirizano wanzeru uwu ukhoza kutumizidwa nthawi iliyonse yomwe tikufuna. Mwachitsanzo, wogwiritsa ntchito akaganiza zogwiritsa ntchito chikwama chake koyamba.
Momwe mungadziwire adilesi ya mgwirizano wanzeru musanatumizidwe: kugwiritsa ntchito CREATE2 pakusinthana kwa crypto
Komanso, mutha kuwerengera adilesi yanzeru nthawi iliyonse m'malo moisunga chifukwa:

  • adiresi mu chilinganizo nthawi zonse, popeza iyi ndi adilesi ya fakitale yathu ya chikwama
  • mchere - user_id hash
  • init_kodi ndizokhazikika chifukwa timagwiritsa ntchito chikwama chomwecho

Zowonjezera zambiri

Yankho lapitalo likadali ndi drawback imodzi: muyenera kulipira kuti mutumize mgwirizano wanzeru. Komabe, mukhoza kuchichotsa. Kuti muchite izi, mutha kuyimba ntchitoyo transfer()kenako kudziwononga () mu wopanga chikwama. Kenako mpweya wotumizira mgwirizano wanzeru udzabwezedwa.

Mosiyana ndi zomwe anthu ambiri amakhulupirira, mutha kugwiritsa ntchito mgwirizano wanzeru ku adilesi yomweyo kangapo ndi CREATE2 opcode. Izi ndichifukwa choti CREATE2 imayang'ana kuti nambala yomwe adilesi yomwe mukufuna ndi ziro (yapatsidwa mtengo "1" koyambirira kwa wopanga). Pankhaniyi, ntchito kudziwononga () imakonzanso ma adilesi osakhalitsa nthawi zonse. Chifukwa chake ngati muyimbiranso CREATE2 ndi mikangano yomweyi, cheke cha nonce chidzadutsa.

Chonde dziwani kuti yankho ili likufanana ndi njira ya adiresi ya Ethereum, koma popanda kufunikira kusunga makiyi apadera. Mtengo wosamutsa ndalama kuchokera ku chikwama kupita ku hotwallet ndi pafupifupi wofanana ndi mtengo woyimbira ntchito transfer(), popeza sitilipira ndalama zotumizira ma contract anzeru.

Chosankha chomaliza

Momwe mungadziwire adilesi ya mgwirizano wanzeru musanatumizidwe: kugwiritsa ntchito CREATE2 pakusinthana kwa crypto

Adakonzedwa koyambirira ndi:

  • ntchito kupeza mchere Dzina Lolowera
  • mgwirizano wanzeru womwe udzayimbira CREATE2 opcode ndi mchere woyenerera (ie fakitale ya chikwama)
  • wallet bytecode yogwirizana ndi mgwirizano ndi womanga wotsatira:

constructor () {
    address hotWallet = 0x…;
    address token = 0x…;
    token.transfer (hotWallet, token.balanceOf (address (this)));
    selfdestruct (address (0));
}


Kwa wogwiritsa ntchito watsopano aliyense timawonetsa adilesi yake yachikwama powerengera

keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]


Wogwiritsa ntchito akasamutsa ma tokeni ku adilesi yofananira ya chikwama, kumbuyo kwathu kumawona Chochitika Chosamutsa ndi parameter. _ku, yofanana ndi adilesi yachikwama. Panthawiyi, ndizotheka kale kuonjezera kuchuluka kwa wogwiritsa ntchito pakusinthana musanayambe kutumiza chikwama.

Pamene adiresi ya chikwama ipeza zizindikiro zokwanira, tikhoza kusamutsa zonse mwakamodzi ku hotwallet. Kuti muchite izi, backend imayitanitsa ntchito ya fakitale yanzeru, yomwe imachita izi:

function deployWallet (соль uint256) {
    bytes memory walletBytecode =…;
    // invoke CREATE2 with wallet bytecode and salt
}


Chifukwa chake, womanga wa chikwama wanzeru amatchedwa, yemwe amasamutsa zizindikiro zake zonse ku adilesi ya hotwallet ndiyeno kudziwononga.

Khodi yonse ingapezeke apa. Chonde dziwani kuti iyi si nambala yathu yopanga, popeza tidaganiza zokulitsa chikwama cha bytecode ndikuchilemba mu ma opcode.

Wolemba Pavel Kondratenkov, katswiri wa Ethereum

Source: www.habr.com

Kuwonjezera ndemanga