Yuav ua li cas los txiav txim qhov chaw nyob ntawm daim ntawv cog lus ntse ua ntej xa mus: siv CREATE2 rau kev sib pauv crypto

Lub ntsiab lus ntawm blockchain yeej tsis tso tseg tsis yog txhua yam hype nkaus xwb, tab sis kuj yog cov tswv yim uas muaj txiaj ntsig zoo los ntawm kev siv thev naus laus zis. Yog li ntawd, nws tsis tau hla cov neeg nyob hauv lub hnub ci lub nroog. Tib neeg tab tom saib ze, kawm, sim hloov lawv cov kev txawj ntse hauv cov ntaub ntawv kev ruaj ntseg rau blockchain systems. Txog tam sim no, nws yog qhov chaw ntawm: ib qho ntawm Rostelecom-Solar txoj kev txhim kho tuaj yeem tshawb xyuas kev ruaj ntseg ntawm blockchain-based software. Thiab ntawm txoj kev, qee qhov kev xav tshwm sim ntawm kev daws teeb meem siv ntawm blockchain zej zog. Ib qho ntawm lub neej hacks - yuav ua li cas los txiav txim qhov chaw nyob ntawm daim ntawv cog lus ntse ua ntej xa mus siv CREATE2 - hnub no kuv xav qhia rau koj hauv qab kev txiav.

Yuav ua li cas los txiav txim qhov chaw nyob ntawm daim ntawv cog lus ntse ua ntej xa mus: siv CREATE2 rau kev sib pauv crypto
CREATE2 opcode tau ntxiv rau hauv Constantinople nyuaj diav rawg thaum Lub Ob Hlis 28th ntawm lub xyoo no. Raws li tau hais hauv EIP, qhov opcode no tau qhia feem ntau rau lub xeev cov channel. Txawm li cas los xij, peb siv nws los daws qhov teeb meem sib txawv.

Muaj cov neeg siv nrog qhov sib npaug ntawm kev sib pauv. Peb yuav tsum muab txhua tus neeg siv nrog qhov chaw nyob Ethereum uas ib tus neeg tuaj yeem xa cov tokens, yog li rov ntxiv lawv tus account. Cia peb hu cov chaw nyob no "wallets". Thaum cov tokens tuaj txog hauv hnab nyiaj, peb yuav tsum xa lawv mus rau ib lub hnab nyiaj (hotwallet).

Hauv ntu nram qab no, kuv txheeb xyuas cov kev xaiv los daws qhov teeb meem no yam tsis muaj CREATE2 thiab qhia koj tias vim li cas peb tso lawv. Yog tias koj tsuas yog txaus siab rau qhov kawg tshwm sim, koj tuaj yeem pom nws hauv ntu "Final Solution".

Ethereum chaw nyob

Qhov kev daws teeb meem yooj yim tshaj plaws yog los tsim cov chaw nyob Ethereum tshiab rau cov neeg siv tshiab. Cov chaw nyob no yuav yog cov hnab nyiaj. Txhawm rau hloov cov tokens los ntawm lub hnab nyiaj mus rau hotwallet, koj yuav tsum kos npe rau kev sib pauv los ntawm kev hu rau lub luag haujlwm hloov () nrog tus yuam sij ntiag tug ntawm lub hnab nyiaj los ntawm lub backend.

Txoj kev no muaj qhov zoo hauv qab no:

  • nws yog qhov yooj yim
  • tus nqi ntawm kev xa cov tokens los ntawm lub hnab nyiaj mus rau hotwallet yog sib npaug rau tus nqi ntawm kev hu xov tooj hloov ()

Txawm li cas los xij, peb txiav txim siab tawm tsam txoj hauv kev no vim tias nws muaj ib qho teeb meem loj: koj yuav tsum khaws cov yuam sij ntiag tug rau qhov chaw. Tsis tsuas yog lawv tuaj yeem ploj, tab sis koj kuj yuav tsum tau ua tib zoo tswj kev nkag mus rau cov yuam sij no. Yog tias tsawg kawg yog ib qho ntawm lawv raug cuam tshuam, ces tus tokens ntawm ib tus neeg siv yuav tsis ncav cuag lub hnab nyiaj kub.

Yuav ua li cas los txiav txim qhov chaw nyob ntawm daim ntawv cog lus ntse ua ntej xa mus: siv CREATE2 rau kev sib pauv crypto

Tsim ib daim ntawv cog lus ntse cais rau txhua tus neeg siv

Kev xa ib daim ntawv cog lus ntse rau txhua tus neeg siv tso cai rau koj kom tsis txhob khaws cov yuam sij ntiag tug rau lub hnab nyiaj ntawm lub server. Kev sib pauv yuav hu rau daim ntawv cog lus ntse no kom hloov cov tokens mus rau hotwallet.

Peb kuj tso tseg qhov kev daws teeb meem no, txij li tus neeg siv tsis tuaj yeem pom nws qhov chaw nyob hauv hnab nyiaj yam tsis tau siv daim ntawv cog lus ntse (qhov no yog qhov ua tau, tab sis nyob rau hauv txoj kev nyuaj nrog lwm yam tsis zoo uas peb yuav tsis tham txog ntawm no). Ntawm kev sib pauv, tus neeg siv tuaj yeem tsim ntau tus account raws li nws xav tau, thiab txhua tus xav tau nws lub hnab nyiaj. Qhov no txhais tau hais tias peb yuav tsum siv nyiaj rau kev xa tawm daim ntawv cog lus yam tsis tau paub tseeb tias tus neeg siv yuav siv tus lej no.

Opcode CREATE 2

Txhawm rau kho qhov teeb meem ntawm txoj kev dhau los, peb txiav txim siab siv CREATE2 opcode. CREATE2 tso cai rau koj los txiav txim siab qhov chaw nyob uas daim ntawv cog lus ntse yuav raug xa mus. Qhov chaw nyob yog suav nrog cov qauv hauv qab no:

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


, nyob qhov twg:

  • chaw nyob - qhov chaw nyob ntawm daim ntawv cog lus ntse uas yuav hu CREATE2
  • ntsev - tus nqi random
  • ib_code - daim ntawv cog lus ntse bytecode rau kev xa tawm

Qhov no ua kom ntseeg tau tias qhov chaw nyob peb muab rau tus neeg siv tiag tiag muaj qhov xav tau bytecode. Ntxiv mus, daim ntawv cog lus ntse no tuaj yeem siv tau thaum twg peb xav tau. Piv txwv li, thaum tus neeg siv txiav txim siab siv lawv lub hnab nyiaj thawj zaug.
Yuav ua li cas los txiav txim qhov chaw nyob ntawm daim ntawv cog lus ntse ua ntej xa mus: siv CREATE2 rau kev sib pauv crypto
Ntxiv mus, koj tuaj yeem xam qhov chaw nyob daim ntawv cog lus ntse txhua lub sijhawm es tsis txhob khaws cia vim tias:

  • chaw nyob nyob rau hauv cov mis yog tas li, vim qhov no yog qhov chaw nyob ntawm peb lub hnab ntim khoom Hoobkas
  • ntsev - user_id hash
  • ib_code yog tas li vim peb siv tib lub hnab nyiaj

Kev txhim kho ntxiv

Cov kev daws teeb meem yav dhau los tseem muaj ib qho teeb meem: koj yuav tsum tau them nyiaj rau xa daim ntawv cog lus ntse. Txawm li cas los xij, koj tuaj yeem tshem tau nws. Ua li no koj tuaj yeem hu rau lub luag haujlwm hloov ()thiab ntawd selfdestruct() nyob rau hauv lub hnab nyiaj constructor. Thiab tom qab ntawd cov roj rau kev xa cov ntawv cog lus ntse yuav raug xa rov qab.

Raws li kev ntseeg nrov, koj tuaj yeem xa daim ntawv cog lus ntse rau tib qhov chaw nyob ntau zaus nrog CREATE2 opcode. Qhov no yog vim CREATE2 xyuas tias qhov nonce ntawm lub hom phiaj chaw nyob yog xoom (nws tau muab tus nqi "1" thaum pib ntawm tus tsim). Hauv qhov no, kev ua haujlwm selfdestruct() rov pib dua nonce chaw nyob txhua lub sijhawm. Yog li yog tias koj hu CREATE2 dua nrog tib cov lus sib cav, qhov nonce kos yuav dhau mus.

Thov nco ntsoov tias qhov kev daws teeb meem no zoo ib yam li Ethereum chaw nyob xaiv, tab sis tsis tas yuav khaws cov yuam sij ntiag tug. Tus nqi ntawm kev xa nyiaj los ntawm lub hnab nyiaj mus rau hotwallet yog kwv yees li qhov sib npaug ntawm tus nqi hu rau ib qho haujlwm hloov (), txij li thaum peb tsis them rau kev cog lus ntse xa tawm.

Kev txiav txim zaum kawg

Yuav ua li cas los txiav txim qhov chaw nyob ntawm daim ntawv cog lus ntse ua ntej xa mus: siv CREATE2 rau kev sib pauv crypto

Keeb kwm npaj los ntawm:

  • muaj nuj nqi kom tau ntsev los ntawm user_id
  • daim ntawv cog lus ntse uas yuav hu rau CREATE2 opcode nrog cov ntsev tsim nyog (piv txwv li lub hnab ntim khoom lag luam)
  • hnab nyiaj bytecode sib raug rau daim ntawv cog lus nrog tus tsim hauv qab no:

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


Rau txhua tus neeg siv tshiab peb qhia nws qhov chaw nyob hauv hnab nyiaj los ntawm kev suav

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


Thaum tus neeg siv hloov pauv tokens mus rau qhov chaw nyob hauv hnab nyiaj, peb lub backend pom qhov hloov pauv nrog qhov ntsuas _ rau, sib npaug rau lub hnab nyiaj. Lub sijhawm no, nws yog qhov ua tau kom tus neeg siv qhov nyiaj tshuav ntawm qhov sib pauv ua ntej xa mus rau lub hnab nyiaj.

Thaum qhov chaw nyob hauv hnab nyiaj khaws ntau tus lej tokens txaus, peb tuaj yeem hloov lawv txhua lub sijhawm mus rau hotwallet. Ua li no, lub backend hu rau lub tuam txhab kev cog lus ntse ua haujlwm, uas ua cov haujlwm hauv qab no:

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


Yog li, lub hnab nyiaj ntse daim ntawv cog lus hu ua, uas hloov tag nrho nws cov tokens mus rau qhov chaw nyob hotwallet thiab tom qab ntawd nws tus kheej puas tsuaj.

Tus lej code tuaj yeem pom no. Thov nco ntsoov tias qhov no tsis yog peb cov cai ntau lawm, raws li peb tau txiav txim siab los txhim kho lub hnab nyiaj bytecode thiab sau nws hauv opcodes.

Tus sau Pavel Kondratenkov, tus kws tshaj lij Ethereum

Tau qhov twg los: www.hab.com

Ntxiv ib saib