Sida loo go'aamiyo ciwaanka qandaraaska smart ka hor inta aan la dirin: adoo isticmaalaya CREATE2 isweydaarsiga crypto

Mawduuca xannibaadda waligiis ma joojinayo in uu noqdo isha kaliya ee dhammaan noocyada buunbuuninta, laakiin sidoo kale fikrado aad u qiimo badan marka loo eego aragtida tignoolajiyada. Sidaa darteed, ma aysan dhaafin dadka deggan magaalada qorraxda leh. Dadku waxay si dhow u eegayaan, baranayaan, isku dayayaan inay u gudbiyaan khibradooda amniga macluumaadka dhaqameed ee nidaamyada xannibaadda. Ilaa hadda, waxay ku taal: mid ka mid ah horumarinta Rostelecom-Solar's waxay hubin kartaa amniga software-ku-saleysan blockchain. Oo jidka dhexdiisa, fikradaha qaar ayaa ka soo baxa xallinta dhibaatooyinka la dabaqay ee bulshada blockchain. Mid ka mid ah hacks-ka nolosha - sida loo go'aamiyo ciwaanka qandaraaska smart ka hor inta aan la dirin iyadoo la adeegsanayo CREATE2 - maanta waxaan rabaa inaan kula wadaago qaybta hoose.

Sida loo go'aamiyo ciwaanka qandaraaska smart ka hor inta aan la dirin: adoo isticmaalaya CREATE2 isweydaarsiga crypto
CREATE2 opcode waxa lagu daray farageetada adag ee Constantinople 28-kii Febraayo ee sanadkan. Sida lagu sheegay EIP, opcode-kan waxa ugu horrayn loo soo bandhigay kanaalada gobolka. Si kastaba ha ahaatee, waxaan u isticmaalnay si aan u xalino dhibaato kale.

Waxaa jira isticmaaleyaal leh dheelitirnaanta sarrifka. Waa in aan siinaa isticmaale kasta ciwaanka Ethereum kaas oo qof kasta uu u diri karo calaamado, si ay u buuxiyaan akoonkooda. Aan ugu yeerno ciwaanadan "Boorsooyinka". Marka calaamaduhu ay ku yimaadaan boorsooyinka, waa inaan u dirnaa hal boorso (hotwallet).

Qaybaha soo socda, waxaan ku falanqeynayaa fursadaha lagu xallinayo dhibaatadan la'aanteed CREATE2 waxaanan kuu sheegayaa sababta aan uga tagnay. Haddii aad xiisaynayso kaliya natiijada kama dambaysta ah, waxaad ka heli kartaa qaybta "Xalka ugu dambeeya".

Ciwaanada Ethereum

Xalka ugu fudud ayaa ah in la abuuro cinwaanno Ethereum cusub oo loogu talagalay isticmaaleyaasha cusub. Cinwaannadani waxay noqon doonaan boorsooyinka. Si aad calaamadaha boorsada ugu wareejiso hotwallet, waxaad u baahan tahay inaad saxiixdo wax kala iibsiga adoo wacaya shaqada wareejin () oo leh furaha gaarka ah ee boorsada ka soo gadaasha dambe.

Habkani wuxuu leeyahay faa'iidooyinka soo socda:

  • way fududahay
  • Qiimaha ka wareejinta calaamadaha boorsada jeebka lagu shubto waxay la mid tahay qiimaha wicitaanka shaqada wareejin ()

Si kastaba ha ahaatee, waxaan go'aansanay inaan ka soo horjeedno habkan sababtoo ah waxay leedahay hal cillad oo weyn: waxaad u baahan tahay inaad ku kaydiso furayaasha gaarka ah meel. Ma aha oo kaliya inay lumin karaan, laakiin sidoo kale waxaad u baahan tahay inaad si taxadar leh u maamusho gelitaanka furayaashan. Haddii ugu yaraan mid ka mid ah la jabiyo, markaa calaamadaha isticmaale gaar ah ma gaari doonaan boorsada kulul.

Sida loo go'aamiyo ciwaanka qandaraaska smart ka hor inta aan la dirin: adoo isticmaalaya CREATE2 isweydaarsiga crypto

U samee qandaraas gaar ah isticmaale kasta

U geynta qandaraas gaar ah oo caqli gal ah isticmaale kasta wuxuu kuu ogolaanayaa inaad iska ilaaliso kaydinta furayaasha gaarka ah ee boorsooyinka server-ka. Sarrifku wuxuu wici doonaa qandaraaskan caqliga leh si loogu wareejiyo calaamadaha hotwallet-ka.

Waxaan sidoo kale ka tagnay xalkan, maadaama isticmaalaha aan la tusi karin ciwaanka boorsada isaga oo aan geynin qandaraas caqli-gal ah (tani dhab ahaantii waa suurtagal, laakiin si adag oo adag oo leh faa'iidooyin kale oo aan halkan kaga hadli doono). Isweydaarsiga, isticmaaluhu wuxuu abuuri karaa xisaabaadyo badan inta uu u baahan yahay, mid walbana wuxuu u baahan yahay boorso u gaar ah. Tani waxay ka dhigan tahay in aan u baahanahay in aan lacag ku bixino dejinta qandaraaska iyada oo aan xitaa hubin in isticmaaluhu uu isticmaali doono akoonkan.

Opcode CREATE2

Si loo xaliyo dhibaatada qaabkii hore, waxaan go'aansanay inaan isticmaalno CREATE2 opcode. CREATE2 waxay kuu ogolaaneysaa inaad horay u sii go'aamiso ciwaanka meesha qandaraaska caqliga leh la geynayo. Ciwaanka waxaa lagu xisaabiyaa qaacidooyinka soo socda:

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


, meesha:

  • cinwaanka - ciwaanka qandaraaska smart ee wici doona CREATE2
  • cusbo - qiimaha random
  • init_code - bytecode qandaraaska smart ee geynta

Tani waxay hubinaysaa in ciwaanka aanu siino isticmaaluhu dhab ahaantii ka kooban yahay bytecode-ka la rabo. Intaa waxaa dheer, qandaraaskan smart waxaa la geyn karaa mar kasta oo aan u baahanahay. Tusaale ahaan, marka isticmaaluhu uu go'aansado inuu isticmaalo boorsada jeebka markii ugu horeysay.
Sida loo go'aamiyo ciwaanka qandaraaska smart ka hor inta aan la dirin: adoo isticmaalaya CREATE2 isweydaarsiga crypto
Waxaa intaa dheer, waxaad xisaabin kartaa ciwaanka qandaraaska smart mar kasta halkii aad ku kaydin lahayd sababtoo ah:

  • cinwaanka in formula waa joogto ah, tan iyo kani waa cinwaanka warshadeena boorsada
  • cusbo - user_id xashiish
  • init_code waa joogto maadaama aan isticmaalno boorsada isku midka ah

Horumarin badan

Xalka hore wuxuu weli leeyahay hal cillad: waxaad u baahan tahay inaad bixiso si aad u geyso qandaraaska smart. Si kastaba ha ahaatee, waad ka takhalusi kartaa. Si tan loo sameeyo waxaad wici kartaa shaqada wareejin ()ka dibna isburburinta() ku jira dhismaha boorsada. Ka dibna gaaska loogu talagalay dejinta qandaraaska smart waa la soo celin doonaa.

Si ka soo horjeeda caqiidada caanka ah, waxaad geyn kartaa qandaraas caqli gal ah isla cinwaanka dhowr jeer adigoo wata CREATE2 opcode. Tani waa sababta oo ah CREATE2 waxay hubisaa in aan ciwaanka bartilmaameedku ahayn eber (waxaa loo qoondeeyay qiimaha "1" bilowga dhisaha). Xaaladdan oo kale, shaqada isburburinta() dib u dajinaysaa ciwaanada nonce mar kasta. Markaa haddii aad mar kale wacdo CREATE2 adiga oo wata doodo isku mid ah, jeeg la'aanta ayaa dhaafi doonta.

Fadlan ogow in xalkani uu la mid yahay xulashada cinwaanka Ethereum, laakiin iyada oo aan loo baahnayn in la kaydiyo furayaasha gaarka ah. Kharashka lacagta lagaga wareejinayo boorsada jeebka lagu shubto waxa uu la mid yahay kharashka wicista hawlqabad wareejin (), mar haddii aanaan bixin lacag la geeyo qandaraas smart.

Go'aanka kama dambaysta ah

Sida loo go'aamiyo ciwaanka qandaraaska smart ka hor inta aan la dirin: adoo isticmaalaya CREATE2 isweydaarsiga crypto

Asal ahaan waxaa diyaariyey:

  • function si aad milix u hesho isticmaale_id
  • qandaraas caqli-gal ah oo u yeeri doona CREATE2 opcode oo leh milix ku habboon (sida warshada boorsada)
  • bytecode boorsada u dhiganta heshiiska dhismaha soo socda:

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


Isticmaale kasta oo cusub waxaanu ku tusinaa ciwaankiisa jeebka anagoo xisaabinayna

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


Marka adeegsaduhu u wareejiyo calaamadaha ciwaanka boorsada u dhigma, dhabarkayaga dambe waxa uu arkaa dhacdada wareejinta oo leh cabbirka _ku, oo le'eg cinwaanka jeebka Waqtigan xaadirka ah, waxaa horayba suurtagal u ah in la kordhiyo dheelitirka isticmaalaha ee sarrifka ka hor inta aan la dirin boorsada.

Marka ciwaanka boorsada uu ururiyo tiro ku filan oo calaamado ah, waxaan hal mar ku wareejin karnaa hotwallet. Si tan loo sameeyo, dhabarku wuxuu wacaa shaqada warshadda qandaraaska ee smart, kaas oo fulisa tallaabooyinka soo socda:

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


Sidaa darteed, jeebka qandaraas-dhisaha smart ayaa loo yaqaan, kaas oo u gudbiya dhammaan calaamadihiisa cinwaanka hotwallet ka dibna is-burbura.

Codka buuxa waa la heli karaa halkan. Fadlan ogow in kani aanu ahayn koodkayaga wax-soo-saarka, maadaama aanu go'aansanay inaanu hagaajino bytecode-ka boorsada oo aanu ku qornay opcodes.

Qoraaga Pavel Kondratenkov, ku takhasusay Ethereum

Source: www.habr.com

Add a comment