Yadda ake ƙayyade adireshin kwangilar wayo kafin turawa: amfani da CREATE2 don musayar crypto

Batun blockchain ba ya daina zama tushen ba kawai kowane nau'in haɓaka ba, har ma da ra'ayoyin da ke da matukar amfani daga mahangar fasaha. Don haka, ba ta ketare mazauna birnin na rana ba. Mutane suna kallo sosai, suna karatu, suna ƙoƙarin canja wurin ƙwarewar su a cikin tsaro na bayanan gargajiya zuwa tsarin blockchain. Ya zuwa yanzu, yana nan tabo: ɗaya daga cikin ci gaban Rostelecom-Solar na iya bincika amincin software na tushen blockchain. Kuma tare da hanya, wasu tunani sun taso kan magance matsalolin da ake amfani da su na al'ummar blockchain. Ɗaya daga cikin waɗannan hacks na rayuwa - yadda ake ƙayyade adireshin kwangilar wayo kafin turawa ta amfani da CREATE2 - a yau ina so in raba tare da ku a ƙarƙashin yanke.

Yadda ake ƙayyade adireshin kwangilar wayo kafin turawa: amfani da CREATE2 don musayar crypto
An ƙara CREATE2 opcode a cikin babban cokali mai yatsu na Constantinople a ranar 28 ga Fabrairu na wannan shekara. Kamar yadda aka bayyana a cikin EIP, an gabatar da wannan opcode da farko don tashoshi na jiha. Duk da haka, mun yi amfani da shi don magance wata matsala ta daban.

Akwai masu amfani da ma'auni akan musayar. Dole ne mu samar wa kowane mai amfani da adireshin Ethereum wanda kowa zai iya aika alamu zuwa gare shi, ta haka ne za mu sake cika asusun su. Bari mu kira wadannan adireshi "wallets". Lokacin da alamu suka zo cikin wallet, dole ne mu aika su zuwa jaka ɗaya (hotwallet).

A cikin sassan da ke gaba, na bincika zaɓuɓɓukan magance wannan matsala ba tare da CREATE2 ba kuma na gaya muku dalilin da yasa muka watsar da su. Idan kuna sha'awar sakamakon ƙarshe kawai, zaku iya samun shi a cikin sashin "Maganin Ƙarshe".

Adireshin Ethereum

Mafi sauƙi mafi sauƙi shine don samar da sababbin adiresoshin Ethereum don sababbin masu amfani. Waɗannan adiresoshin za su zama wallet. Don canja wurin alamu daga walat zuwa hotwallet, kuna buƙatar sanya hannu kan ma'amala ta hanyar kiran aikin canja wuri () tare da keɓaɓɓen maɓalli na walat daga baya.

Wannan hanyar tana da fa'idodi masu zuwa:

  • yana da sauki
  • Kudin canja wurin alamu daga walat zuwa hotwallet daidai yake da farashin kiran aiki canja wuri ()

Koyaya, mun yanke shawarar adawa da wannan tsarin saboda yana da babban koma baya: kuna buƙatar adana maɓallan masu zaman kansu a wani wuri. Ba wai kawai za a iya rasa su ba, har ma kuna buƙatar sarrafa damar shiga waɗannan maɓallan a hankali. Idan aƙalla ɗaya daga cikinsu ya lalace, to alamun wani mai amfani ba zai kai ga walat ɗin zafi ba.

Yadda ake ƙayyade adireshin kwangilar wayo kafin turawa: amfani da CREATE2 don musayar crypto

Ƙirƙiri keɓantaccen kwangila mai wayo don kowane mai amfani

Ƙaddamar da kwangilar wayo na dabam don kowane mai amfani yana ba ku damar adana maɓallan sirri don walat akan sabar. Musanya zai kira wannan kwangila mai wayo don canja wurin alamu zuwa hotwallet.

Mun kuma yi watsi da wannan bayani, tun da ba za a iya nuna mai amfani da adireshin walat ɗinsa ba tare da ƙaddamar da kwangila mai kyau ba (wannan yana yiwuwa a zahiri, amma a cikin hanya mai rikitarwa tare da wasu rashin amfani waɗanda ba za mu tattauna a nan ba). A kan musayar, mai amfani zai iya ƙirƙirar asusun da yawa kamar yadda yake buƙata, kuma kowanne yana buƙatar nasa walat. Wannan yana nufin cewa muna buƙatar kashe kuɗi don tura kwangila ba tare da tabbatar da cewa mai amfani zai yi amfani da wannan asusun ba.

Opcode CREATE2

Don gyara matsalar hanyar da ta gabata, mun yanke shawarar amfani da opcode CREATE2. CREATE2 yana ba ku damar tantance adireshin inda za a tura kwangilar wayo. Ana ƙididdige adireshin ta amfani da dabara mai zuwa:

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


, inda:

  • adireshin - adireshin kwangilar wayo wanda zai kira CREATE2
  • gishiri - bazuwar darajar
  • init_code - mai kaifin kwangila bytecode don turawa

Wannan yana tabbatar da cewa adireshin da muke bayarwa ga mai amfani a zahiri ya ƙunshi lambar byte da ake so. Haka kuma, ana iya tura wannan kwangilar wayo a duk lokacin da muke buƙata. Misali, lokacin da mai amfani ya yanke shawarar yin amfani da walat ɗin su a karon farko.
Yadda ake ƙayyade adireshin kwangilar wayo kafin turawa: amfani da CREATE2 don musayar crypto
Haka kuma, zaku iya lissafta adireshin kwangilar wayo kowane lokaci maimakon adana shi saboda:

  • adireshin a cikin dabara ne m, tun da wannan shi ne adireshin mu walat factory
  • gishiri - mai amfani_id hash
  • init_code yana dawwama tunda muna amfani da walat iri ɗaya

Ƙarin haɓakawa

Magani na baya har yanzu yana da matsala guda ɗaya: kuna buƙatar biya don ƙaddamar da kwangila mai wayo. Duk da haka, zaka iya kawar da shi. Don yin wannan zaka iya kiran aikin canja wuri ()sannan halaka kai() a cikin maginin walat. Sannan za a dawo da iskar gas don tura kwangilar wayo.

Sabanin sanannen imani, zaku iya tura kwangilar wayo zuwa adireshin iri ɗaya sau da yawa tare da opcode CREATE2. Wannan saboda CREATE2 yana bincika cewa ba na adireshin da aka yi niyya ba sifili ne (an sanya darajar "1" a farkon maginin). A wannan yanayin, aikin halaka kai() sake saita nonce adiresoshin kowane lokaci. Don haka idan kuka sake kiran CREATE2 tare da muhawara iri ɗaya, rajistan nonce zai wuce.

Lura cewa wannan bayani yayi kama da zaɓin adireshin Ethereum, amma ba tare da buƙatar adana maɓallan sirri ba. Kudin canja wurin kuɗi daga walat zuwa hotwallet yana kusan daidai da farashin kiran aiki canja wuri (), Tun da ba mu biya wa hankali kwangila turawa.

Shawarar ƙarshe

Yadda ake ƙayyade adireshin kwangilar wayo kafin turawa: amfani da CREATE2 don musayar crypto

Asalin shirya ta:

  • aiki don samun gishiri ta mai amfani_id
  • kwangila mai wayo wanda zai kira CREATE2 opcode tare da gishiri mai dacewa (watau masana'antar walat)
  • Wallet bytecode daidai da kwangila tare da mai gini mai zuwa:

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


Ga kowane sabon mai amfani muna nuna adireshin walat ɗin sa ta lissafi

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


Lokacin da mai amfani ke canja wurin alamu zuwa adireshin walat ɗin da ya dace, ƙarshen mu yana ganin taron Canja wuri tare da siga. _zuwa, daidai da adireshin walat. A wannan lokaci, ya riga ya yiwu don ƙara yawan ma'auni na mai amfani a kan musayar kafin yin amfani da walat.

Lokacin da adireshin walat ɗin ya tara isassun adadin alamu, za mu iya canza su gaba ɗaya zuwa hotwallet. Don yin wannan, backend ya kira aikin masana'antar kwangila mai wayo, wanda ke aiwatar da ayyuka masu zuwa:

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


Don haka, ana kiran maginin kwangilar wallet ɗin, wanda ke tura duk alamun sa zuwa adireshin hotwallet sannan ya lalata kansa.

Ana iya samun cikakken lambar a nan. Lura cewa wannan ba lambar samarwa ba ce, saboda mun yanke shawarar inganta bytecode na walat kuma muka rubuta shi a cikin opcodes.

Mawallafi Pavel Kondratenkov, ƙwararren Ethereum

source: www.habr.com

Add a comment