Me pehea te whakatau i te wahitau o te kirimana atamai i mua i te tohatoha: te whakamahi i te CREATE2 mo te whakawhiti crypto

Ko te kaupapa o te poraka kaore e mutu te noho hei puna mo nga momo whakahirahira katoa, engari ano hoki nga whakaaro tino nui mai i te tirohanga hangarau. Na reira, kaore ia i paopao i nga tangata o te pa paki. Kei te ata titiro nga tangata, e ako ana, e ngana ana ki te huri i o raatau tohungatanga ki te papa korero tuku iho ki nga punaha poraka. I tenei wa, ko tetahi o nga whanaketanga o Rostelecom-Solar ka taea te tirotiro i te haumarutanga o te rorohiko i runga i te poraka. Na i runga i te huarahi, ka puta etahi whakaaro mo te whakaoti rapanga tono o te hapori poraka. Ko tetahi o enei hacks ora - me pehea te whakatau i te wahitau o te kirimana atamai i mua i te tohatoha ma te whakamahi i te CREATE2 - i tenei ra ka hiahia ahau ki te whakapuaki ki a koe i raro i te tapahi.

Me pehea te whakatau i te wahitau o te kirimana atamai i mua i te tohatoha: te whakamahi i te CREATE2 mo te whakawhiti crypto
Ko te CREATE2 opcode i taapirihia ki te marau pakeke o Constantinople i te Hui-tanguru 28 o tenei tau. Ka rite ki te korero i roto i te EIP, i whakauruhia tenei opcode mo nga waahana kawanatanga. Heoi, i whakamahia e matou hei whakaoti rapanga rereke.

He kaiwhakamahi he toenga i runga i te whakawhitinga. Me hoatu e matou he wahitau Ethereum ki ia kaiwhakamahi, ka taea e tetahi te tuku tohu, na reira ka whakakiia o raatau putea. Me karanga enei wahitau "pukoro". Ka tae mai nga tohu ki roto i nga putea, me tuku atu ki te putea kotahi (hotwallet).

I nga waahanga e whai ake nei, ka tātari au i nga whiringa hei whakaoti i tenei raru me te kore CREATE2 me te whakamarama he aha i whakarerea ai e matou. Mena kei te pirangi koe ki te hua whakamutunga, ka kitea e koe i te waahanga Whakamutunga Whakamutunga.

Nga wahitau Ethereum

Ko te otinga ngawari ko te whakaputa i nga wahitau ethereum hou mo nga kaiwhakamahi hou. Ko enei wahitau ko nga putea. Hei whakawhiti i nga tohu mai i te putea ki te putea wera, me haina koe i te tauwhitinga ma te karanga i te mahi whakawhiti() me te kī tūmataiti o te putea mai i te tuara.

Ko tenei huarahi e whai ake nei nga painga:

  • he ngawari
  • ko te utu mo te whakawhiti tohu mai i te putea ki te hotwallet he rite ki te utu mo te karanga i te mahi whakawhiti()

Heoi, i whakarerea e matou tenei huarahi na te mea kotahi te raru nui: me rokiroki e koe nga taviri motuhake ki tetahi waahi. A ehara i te mea ka ngaro noa, engari me ata whakahaere te uru ki enei taviri. Mena ka taupatupatuhia tetahi o ratou, katahi ka kore e tae nga tohu o tetahi kaiwhakamahi ki te putea wera.

Me pehea te whakatau i te wahitau o te kirimana atamai i mua i te tohatoha: te whakamahi i te CREATE2 mo te whakawhiti crypto

Waihangahia he kirimana atamai motuhake mo ia kaiwhakamahi

Ma te whakamahi i tetahi kirimana mohio motuhake mo ia kaiwhakamahi ka taea e koe te kore e penapena nga taviri motuhake mai i nga putea i runga i te tūmau. Ka karangahia e te whakawhitiwhiti tenei kirimana maatau ki te whakawhiti i nga tohu ki te putea wera.

I whakarerea ano e matou tenei otinga, na te mea kaore e taea e te kaiwhakamahi te whakaatu i tana wahitau putea me te kore e tukuna he kirimana atamai (ka taea tenei, engari he tino uaua me etahi atu ngoikoretanga kaore e korerohia e matou i konei). I runga i te whakawhitinga, ka taea e te kaiwhakamahi te hanga i nga kaute maha e hiahiatia ana e ia, me te hiahia o te katoa ki a raatau ake putea. Ko te tikanga me whakapau moni ki te tuku kirimana me te kore e tino mohio ka whakamahia e te kaiwhakamahi tenei kaute.

Opcode CREATE2

Hei whakatika i te raruraru o te tikanga o mua, i whakatau matou ki te whakamahi i te CREATE2 opcode. Ka taea e CREATE2 te whakatau i mua i te waahi ka tukuna te kirimana atamai. Ka tatauhia te wahitau ma te whakamahi i te tauira e whai ake nei:

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


, kei hea:

  • wāhitau — te wahitau o te kirimana atamai ka karanga CREATE2
  • te tote - uara matapōkere
  • init_waehere - bytecode kirimana atamai mo te tuku

Ma tenei e whakarite ko te wahitau ka tukuna e matou ki te kaiwhakamahi ka mau tonu te bytecode e hiahiatia ana. Ano, ka taea te tuku i tenei kirimana atamai i nga wa e hiahia ana matou. Hei tauira, ka whakatau te kaiwhakamahi ki te whakamahi i tana putea mo te wa tuatahi.
Me pehea te whakatau i te wahitau o te kirimana atamai i mua i te tohatoha: te whakamahi i te CREATE2 mo te whakawhiti crypto
I tua atu, ka taea e koe te tatau i te wahitau kirimana atamai ia wa, kaua ki te penapena, na te mea:

  • wāhitau i roto i te tauira he pumau na te mea ko te wahitau o ta maatau wheketere putea
  • te tote - user_id hash
  • init_waehere he pumau na te mea ka whakamahia e matou te putea kotahi

He whakapai ake

Ko te otinga o mua he kotahi tonu te whakahoki: me utu koe mo te tuku kirimana atamai. Heoi, ka taea e koe te whakakore. Mo tenei ka taea e koe te karanga i te mahi whakawhiti()ko reira hoki whakangaro whaiaro() i roto i te kaihanga putea. Na ka whakahokia te hau mo te tuku i te kirimana atamai.

He rereke ki te whakapono rongonui, ka taea e koe te tuku kirimana atamai ki te wahitau kotahi i nga wa maha me te CREATE2 opcode. Ko tenei na te mea ka tirohia e CREATE2 he kore te nonce o te wahitau kua whakaritea (kua tautapahia te uara "1" i te timatanga o te kaihanga). I te wa ano, ko te mahi whakangaro whaiaro() ka tautuhi ano i te wahitau nonce ia wa. No reira, ki te karanga ano koe ki a CREATE2 me nga tohenga rite, ka paahi te haki kore.

Kia mahara ko tenei otinga he rite ki te otinga wahitau ethereum, engari kaore he hiahia ki te penapena i nga kii motuhake. Ko te utu mo te whakawhiti moni mai i te putea ki te putea wera he rite ki te utu mo te karanga i tetahi mahi whakawhiti(), i te mea kaore matou e utu mo te tukunga o te kirimana atamai.

Te whakatau whakamutunga

Me pehea te whakatau i te wahitau o te kirimana atamai i mua i te tohatoha: te whakamahi i te CREATE2 mo te whakawhiti crypto

I whakaritea tuatahi:

  • mahi ki te tiki tote e kaiwhakamahi_id
  • kirimana atamai ka karanga te CREATE2 opcode me te tote e tika ana (arā, he wheketere putea)
  • putea bytecode e rite ana ki te kirimana me te kaihanga e whai ake nei:

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


Mo ia kaiwhakamahi hou, ka whakaatu matou i tana wahitau putea ma te tatau

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


I te wa e whakawhiti ana te kaiwhakamahi i nga tohu ki te wahitau putea e rite ana, ka kite to maatau tuara i te kaupapa Whakawhiti me te tawhā _kirite ki te wahitau putea. I tenei wa, kua taea te whakanui ake i te toenga o te kaiwhakamahi i runga i te whakawhitinga i mua i te tuku i te putea.

Ina kohia nga tohu nui ki te wahitau putea, ka taea e taatau te whakawhiti katoa i te wa kotahi ki te putea wera. Hei mahi i tenei, ka karangahia e te tuara te mahi wheketere kirimana atamai, e mahi ana i nga mahi e whai ake nei:

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


No reira, ka karangahia te kaihanga kirimana atamai putea, e whakawhiti ana i ona tohu katoa ki te wahitau hotwallet katahi ka whakangaro i a ia ano.

Ka kitea te waehere katoa konei. Kia mahara mai ehara tenei i ta matou waehere whakaputa, na te mea i whakatau matou ki te arotau i te bytecode putea me te tuhi i roto i nga opcodes.

Kaituhi Pavel Kondratenkov, tohunga Ethereum

Source: will.com

Tāpiri i te kōrero