Maitiro ekuona kero yekontrakiti yakangwara isati yatumirwa: kushandisa CREATE2 ye crypto exchange

Musoro we blockchain haumboregi kuve sosi kwete chete marudzi ese ehype, asiwo mazano akanyanya kukosha kubva kune tekinoroji maonero. Naizvozvo, haina kunzvenga vagari veguta rine mushana. Vanhu vari kutarisa zvakanyanya, vachidzidza, vachiedza kuendesa hunyanzvi hwavo mukuchengetedza ruzivo rwechinyakare kune blockchain masisitimu. Parizvino, iripo pa: imwe yekuvandudza kweRostelecom-Solar inogona kutarisa kuchengetedzwa kwe blockchain-based software. Uye munzira, dzimwe pfungwa dzinomuka pakugadzirisa matambudziko akashandiswa enharaunda ye blockchain. Imwe yeaya ma hacks ehupenyu - maitiro ekuona kero yekontrakiti yakangwara isati yatumirwa uchishandisa CREATE2 - nhasi ndinoda kugovana newe pasi pekuchekwa.

Maitiro ekuona kero yekontrakiti yakangwara isati yatumirwa: kushandisa CREATE2 ye crypto exchange
Iyo CREATE2 opcode yakawedzerwa muConstantinople hard fork muna Kukadzi 28th wegore rino. Sezvakataurwa muEIP, iyi opcode yakaunzwa kunyanya kumatanho ehurumende. Zvisinei, takaishandisa kugadzirisa rimwe dambudziko.

Kune vashandisi vane zviremera pakuchinjana. Tinofanira kupa mushandisi wega wega kero yeEthereum iyo chero munhu anogona kutumira zviratidzo, nokudaro achizadza account yavo. Ngatidaidze kero idzi "wallets". Kana zviratidzo zvasvika muzvikwama, tinofanira kuzvitumira kune imwe chikwama (hotwallet).

Muzvikamu zvinotevera, ndinoongorora sarudzo dzekugadzirisa dambudziko iri pasina CREATE2 uye ndinokuudza chikonzero nei takavasiya. Kana iwe uchingofarira mugumisiro wekupedzisira, unogona kuuwana mu "Final Solution" chikamu.

Ethereum kero

Mhinduro iri nyore ndeyekugadzira kero itsva dzeEthereum dzevashandisi vatsva. Kero idzi dzichava zvikwama. Kuendesa ma tokens kubva muchikwama kuenda kune hotwallet, unofanirwa kusaina kutengeserana nekudaidza basa kutamisa () nekiyi yakavanzika yechikwama kubva kumashure.

Iyi nzira ine zvinotevera zvakanakira:

  • ndizvozvo
  • mari yekuendesa ma tokens kubva muchikwama kuenda kune hotwallet yakaenzana nemutengo wekufona basa kutamisa ()

Nekudaro, isu takasarudza kupokana neiyi nzira nekuti ine imwe hombe drawback: iwe unofanirwa kuchengeta makiyi akavanzika kumwe kunhu. Kwete chete ivo vanogona kurasika, asi iwe unofanirwawo kunyatso gadzirisa kuwana makiyi aya. Kana imwe yadzo yakakanganiswa, ipapo zviratidzo zvemumwe mushandisi hazvisviki pachikwama chinopisa.

Maitiro ekuona kero yekontrakiti yakangwara isati yatumirwa: kushandisa CREATE2 ye crypto exchange

Gadzira chibvumirano chakasiyana chemushandisi wega wega

Kuendesa yakasarudzika chibvumirano chemushandisi wega wega kunokubvumira kuti udzivise kuchengetedza zvakavanzika makiyi ewallet pane server. Kutsinhana kunodaidza chibvumirano ichi chakangwara kuendesa ma tokens kune hotwallet.

Isu takasiyawo mhinduro iyi, sezvo mushandisi asingagone kuratidzwa kero yechikwama chake pasina kutumira chibvumirano chakangwara (izvi zvinogoneka, asi nenzira yakaoma kunzwisisa nezvimwe zvipingamupinyi zvatisingazokurukura pano). Pakuchinjana, mushandisi anogona kugadzira maakaundi akawanda sezvaanoda, uye imwe neimwe inoda chikwama chayo. Izvi zvinoreva kuti isu tinofanirwa kushandisa mari pakuendesa kontrakiti tisina kana chokwadi chekuti mushandisi achashandisa iyi account.

Opcode CREATE2

Kugadzirisa dambudziko reiyo nzira yapfuura, takasarudza kushandisa iyo CREATE2 opcode. CREATE2 inobvumidza iwe kufanoona kero ichaiswa iyo smart kontrakiti. Kero inoverengerwa uchishandisa formula inotevera:

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


kupi:

  • adhiresi - kero yekontrakiti yakangwara inodaidza CREATE2
  • munyu - kukosha kwemaitiro
  • init_code - smart contract bytecode yekutumirwa

Izvi zvinovimbisa kuti kero yatinopa kumushandisi ine inodiwa bytecode. Uyezve, chibvumirano ichi chakangwara chinogona kuendeswa chero nguva yatinoda. Semuenzaniso, kana mushandisi afunga kushandisa chikwama chake kekutanga.
Maitiro ekuona kero yekontrakiti yakangwara isati yatumirwa: kushandisa CREATE2 ye crypto exchange
Uyezve, iwe unogona kuverenga iyo smart contract kero nguva dzese pane kuichengeta nekuti:

  • adhiresi mune fomula inogara iripo, sezvo iyi ndiyo kero yefekitari yedu yechikwama
  • munyu - user_id hashi
  • init_code inogara iripo sezvo isu tichishandisa chikwama chimwe chete

Zvimwe zvigadziriso

Mhinduro yapfuura ichine imwe drawback: iwe unofanirwa kubhadhara kuendesa smart kontrakiti. Zvisinei, unogona kuibvisa. Kuti uite izvi unogona kudana basa kutamisa (), ndokuzo kuzviparadza () mugadziri wewallet. Uye ipapo gasi rekuisa iyo smart contract inodzoserwa.

Kusiyana nezvinodavirwa nemukurumbira, unogona kutumira kondirakiti yakangwara kukero imwechete kakawanda neCREATE2 opcode. Izvi zvinodaro nekuti CREATE2 inotarisisa kuti iyo nonce yekero inotarirwa i zero (inopihwa kukosha "1" pakutanga kwemugadziri). Muchiitiko ichi, basa kuzviparadza () inogadzirisa kero dzisina nguva nguva dzese. Saka kana iwe ukafonera CREATE2 zvakare nemakakatanwa akafanana, cheki ye nonce ichapfuura.

Ndapota cherechedza kuti mhinduro iyi yakafanana neEthereum kero sarudzo, asi pasina chikonzero chekuchengetedza makiyi ega. Mutengo wekuendesa mari kubva muchikwama kuenda kune hotwallet inenge yakaenzana nemutengo wekufonera basa kutamisa (), sezvo isu tisingabhadharire smart contract deployment.

Sarudzo yekupedzisira

Maitiro ekuona kero yekontrakiti yakangwara isati yatumirwa: kushandisa CREATE2 ye crypto exchange

Yakagadzirirwa ne:

  • basa rekuwana munyu mushandisi_id
  • kondirakiti yakangwara inodaidza iyo CREATE2 opcode ine munyu wakakodzera (kureva wallet fekitori)
  • wallet bytecode inoenderana nechibvumirano neinotevera muvaki:

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


Kune wese mushandisi mutsva tinoratidza kero yake yechikwama nekuverenga

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


Kana mushandisi achiendesa ma tokeni kukero yewallet inoenderana, yedu yekumashure inoona Kutamisa chiitiko neparameter. _ku, yakaenzana nekero yechikwama. Panguva ino, zvinotoita kuti uwedzere chiyero chemushandisi pakuchinjana usati waendesa chikwama.

Kana kero yechikwama ichiunganidza nhamba yakakwana yezviratidzo, tinogona kuendesa zvese kamwechete kune hotwallet. Kuti uite izvi, iyo backend inodaidza iyo smart contract fekitori basa, iyo inoita zvinotevera zviito:

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


Nekudaro, iyo wallet smart contract muvaki inodaidzwa, iyo inotamisa ma tokens ayo ese kune hotwallet kero uye obva azviparadza.

Iyo yakazara kodhi inogona kuwanikwa pano. Ndokumbira utarise kuti iyi haisi kodhi yedu yekugadzira, sezvo isu takasarudza kukwidziridza wallet bytecode uye takainyora mumaopcode.

Munyori Pavel Kondratenkov, nyanzvi yeEthereum

Source: www.habr.com

Voeg