Indlela yokunquma ikheli lenkontileka ehlakaniphile ngaphambi kokuthunyelwa: usebenzisa i-CREATE2 yokushintshaniswa kwe-crypto

Isihloko se-blockchain asilokothi siyeke ukuba umthombo wazo zonke izinhlobo ze-hype kuphela, kodwa futhi nemibono eyigugu kakhulu ngokombono wezobuchwepheshe. Ngakho-ke, ayizange idlule izakhamuzi zedolobha libalele. Abantu babhekisisa, bayafunda, bezama ukudlulisa ubuchwepheshe babo ekuvikelekeni kolwazi lwendabuko ezinhlelweni ze-blockchain. Kuze kube manje, kuyabonakala: enye yentuthuko yeRostelecom-Solar ingabheka ukuphepha kwesoftware esekwe ku-blockchain. Futhi endleleni, eminye imicabango iphakama ekuxazululeni izinkinga ezisetshenzisiwe zomphakathi we-blockchain. Enye yalezi zigebengu zezempilo - indlela yokunquma ikheli lenkontileka ehlakaniphile ngaphambi kokuthunyelwa kusetshenziswa i-CREATE2 - namuhla ngifuna ukwabelana nawe ngaphansi kokunqunywa.

Indlela yokunquma ikheli lenkontileka ehlakaniphile ngaphambi kokuthunyelwa: usebenzisa i-CREATE2 yokushintshaniswa kwe-crypto
I-opcode ye-CREATE2 yengezwe ku-hard fork yase-Constantinople ngoFebruwari 28 walo nyaka. Njengoba kushiwo ku-EIP, le opcode yethulwa ngokuyinhloko eziteshini zombuso. Nokho, siyisebenzisele ukuxazulula inkinga ehlukile.

Kukhona abasebenzisi abanamabhalansi ku-exchange. Kufanele sinikeze umsebenzisi ngamunye ikheli le-Ethereum lapho noma ubani angathumela khona amathokheni, ngaleyo ndlela agcwalise i-akhawunti yakhe. Masibize la makheli ngokuthi "izikhwama zemali". Lapho amathokheni efika kuma-wallet, kufanele siwathumele esikhwameni esisodwa (hotwallet).

Ezigabeni ezilandelayo, ngihlaziya izinketho zokuxazulula le nkinga ngaphandle kwe-CREATE2 futhi ngikutshela ukuthi kungani sizishiye. Uma unentshisekelo kuphela kumphumela wokugcina, ungawuthola esigabeni esithi "Isixazululo Sokugcina".

Amakheli e-Ethereum

Isixazululo esilula ukukhiqiza amakheli amasha e-Ethereum kubasebenzisi abasha. Lawa makheli kuzoba yizikhwama zemali. Ukudlulisa amathokheni kusuka esikhwameni kuya ku-hotwallet, udinga ukusayina ukuthengiselana ngokubiza umsebenzi dlulisa() ngokhiye wangasese wesikhwama semali ovela ngemuva.

Le ndlela inezinzuzo ezilandelayo:

  • ilula
  • izindleko zokudlulisa amathokheni kusuka esikhwameni kuya ku-hotwallet zilingana nezindleko zocingo lomsebenzi dlulisa()

Kodwa-ke, sinqume ngokumelene nale ndlela ngoba ine-drawback eyodwa enkulu: udinga ukugcina okhiye abayimfihlo endaweni ethile. Hhayi nje kuphela ukuthi zingalahleka, kodwa futhi udinga ukuphatha ngokucophelela ukufinyelela kulaba khiye. Uma okungenani eyodwa yazo isengozini, amathokheni omsebenzisi othile ngeke afinyelele isikhwama semali esishisayo.

Indlela yokunquma ikheli lenkontileka ehlakaniphile ngaphambi kokuthunyelwa: usebenzisa i-CREATE2 yokushintshaniswa kwe-crypto

Dala inkontileka ehlakaniphile ehlukile yomsebenzisi ngamunye

Ukukhipha inkontileka ehlakaniphile ehlukile yomsebenzisi ngamunye ikuvumela ukuthi ugweme ukugcina okhiye abayimfihlo bezikhwama zemali kuseva. Ukushintshana kuzobiza le nkontileka ehlakaniphile ukuze idlulisele amathokheni ku-hotwallet.

Siphinde sasiyeka lesi sixazululo, njengoba umsebenzisi engakwazi ukuboniswa ikheli lakhe lesikhwama ngaphandle kokufaka inkontileka ehlakaniphile (lokhu kungenzeka ngempela, kodwa ngendlela eyinkimbinkimbi nezinye izinto ezimbi esingeke sizixoxe lapha). Ekushintshanisweni, umsebenzisi angakha ama-akhawunti amaningi njengoba edinga, futhi ngamunye udinga isikhwama sakhe semali. Lokhu kusho ukuthi sidinga ukusebenzisa imali ekukhipheni inkontileka ngaphandle kokuqinisekisa ukuthi umsebenzisi uzosebenzisa le akhawunti.

Ikhodi ye-CREATE2

Ukuze silungise inkinga yendlela edlule, sinqume ukusebenzisa i-opcode ye-CREATE2. I-CREATE2 ikuvumela ukuthi unqume kusengaphambili ikheli lapho kuzosetshenziswa khona inkontileka ehlakaniphile. Ikheli libalwa kusetshenziswa ifomula elandelayo:

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


, lapho:

  • ikheli β€” ikheli lenkontileka ehlakaniphile elizobiza i-CREATE2
  • usawoti - inani elingahleliwe
  • init_code - I-bytecode yenkontileka ehlakaniphile ukuze isetshenziswe

Lokhu kuqinisekisa ukuthi ikheli esilinikeza umsebenzisi empeleni liqukethe i-bytecode efunwayo. Ngaphezu kwalokho, le nkontileka ehlakaniphile ingafakwa noma nini lapho siyidinga. Isibonelo, uma umsebenzisi enquma ukusebenzisa isikhwama sakhe semali okokuqala ngqa.
Indlela yokunquma ikheli lenkontileka ehlakaniphile ngaphambi kokuthunyelwa: usebenzisa i-CREATE2 yokushintshaniswa kwe-crypto
Ngaphezu kwalokho, ungakwazi ukubala ikheli lenkontileka elihlakaniphile ngaso sonke isikhathi esikhundleni sokuligcina ngoba:

  • ikheli kufomula ayishintshi, njengoba leli ikheli lefekthri yethu yesikhwama
  • usawoti - i-user_id hash
  • init_code ihlala njalo njengoba sisebenzisa isikhwama esifanayo

Ukuthuthukiswa okwengeziwe

Isixazululo sangaphambilini sisenomphumela owodwa: udinga ukukhokha ukuze usebenzise inkontileka ehlakaniphile. Nokho, ungakwazi ukukususa. Ukwenza lokhu ungabiza umsebenzi dlulisa(), bese selfdestruct() kumakhi wesikhwama semali. Bese-ke kuzobuyiswa igesi yokuthunyelwa kwenkontileka ehlakaniphile.

Ngokuphambene nenkolelo evamile, ungakwazi ukuthumela inkontileka ehlakaniphile ekhelini elifanayo izikhathi eziningi nge-opcode ye-CREATE2. Lokhu kungenxa yokuthi i-CREATE2 ihlola ukuthi i-nonce yekheli eliqondiwe linguziro (inikezwe inani elithi "1" ekuqaleni komakhi). Kulokhu, umsebenzi selfdestruct() imisa kabusha amakheli angenamsebenzi ngaso sonke isikhathi. Ngakho-ke uma ushayela i-CREATE2 futhi ngezimpikiswano ezifanayo, isheke le-nonce lizodlula.

Sicela uqaphele ukuthi lesi sixazululo sifana nenketho yekheli le-Ethereum, kodwa ngaphandle kwesidingo sokugcina okhiye bangasese. Izindleko zokudlulisa imali isuka ku-wallet iye ku-hotwallet cishe ilingana nezindleko zokubiza umsebenzi dlulisa(), njengoba singakukhokheli ukuthunyelwa kwenkontileka okuhlakaniphile.

Isinqumo sokugcina

Indlela yokunquma ikheli lenkontileka ehlakaniphile ngaphambi kokuthunyelwa: usebenzisa i-CREATE2 yokushintshaniswa kwe-crypto

Ilungiselelwe ngu-:

  • umsebenzi wokuthola usawoti ngawo USER_ID
  • inkontileka ehlakaniphile ezobiza i-opcode ye-CREATE2 ngosawoti ofanele (okungukuthi. i-wallet factory)
  • i-wallet bytecode ehambisana nenkontileka nomakhi olandelayo:

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


Kuwo wonke umsebenzisi omusha sibonisa ikheli lesikhwama sakhe ngezibalo

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


Lapho umsebenzisi edlulisela amathokheni ekhelini le-wallet elihambisanayo, i-backend yethu ibona umcimbi Wokudlulisa onepharamitha. _ku, elilingana nekheli lesikhwama. Kuleli qophelo, sekungenzeka kakade ukwandisa ibhalansi yomsebenzisi ekushintsheni ngaphambi kokukhipha isikhwama semali.

Uma ikheli lesikhwama liqoqa inani elanele lamathokheni, singawadlulisela wonke ngesikhathi esisodwa ku-hotwallet. Ukwenza lokhu, i-backend ibiza umsebenzi wefekthri yenkontileka ehlakaniphile, owenza lezi zenzo ezilandelayo:

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


Ngakho-ke, umakhi wenkontileka ehlakaniphile wesikhwama ubizwa ngokuthi, odlulisela wonke amathokheni ayo ekhelini le-hotwallet bese ezilimaza.

Ikhodi egcwele ingatholakala lapha. Sicela uqaphele ukuthi lena akuyona ikhodi yethu yokukhiqiza, njengoba sinqume ukuthuthukisa i-bytecode yesikhwama futhi sayibhala ngama-opcode.

Umbhali uPavel Kondratenkov, uchwepheshe we-Ethereum

Source: www.habr.com

Engeza amazwana