Meriv çawa berî bicîhkirinê navnîşana peymanek jîr diyar dike: CREATE2 ji bo danûstendina krîptoyê bikar tîne

Mijara zincîra blokê qet namîne ku bibe çavkaniya ne tenê her cûre hîle, lê di heman demê de ramanên ku ji hêla teknolojiyê ve pir hêja ne. Ji ber vê yekê, ji niştecîhên bajarê tav derneket. Mirov ji nêz ve digerin, dixwînin, hewl didin ku pisporiya xwe ya di ewlehiya agahdariya kevneşopî de veguherînin pergalên blokê. Heya nuha, ew di cih de ye: yek ji pêşkeftinên Rostelecom-Solar dikare ewlehiya nermalava bloka-based kontrol bike. Û di rê de, hin raman li ser çareserkirina pirsgirêkên sepandî yên civata blokê derdikevin. Yek ji van hakên jiyanê - meriv çawa navnîşana girêbestek jîr berî bicîhkirinê bi karanîna CREATE2-ê diyar dike - îro ez dixwazim di binê qutbûnê de bi we re parve bikim.

Meriv çawa berî bicîhkirinê navnîşana peymanek jîr diyar dike: CREATE2 ji bo danûstendina krîptoyê bikar tîne
Opcode CREATE2 di 28-ê Sibatê ya vê salê de di forca hişk a Constantinople de hate zêdekirin. Wekî ku di EIP-ê de hate gotin, ev opcode di serî de ji bo kanalên dewletê hate destnîşan kirin. Lêbelê, me ew bikar anî da ku pirsgirêkek cûda çareser bike.

Li ser danûstendinê bikarhênerên bi hevseng hene. Pêdivî ye ku em ji her bikarhênerek navnîşek Ethereum re peyda bikin ku her kes dikare nîşanekan jê re bişîne, bi vî rengî hesabê xwe nûve bike. Werin em ji van navnîşanan re bibêjin "beral". Dema ku token di berika xwe de digihîjin, divê em wan bişînin berîka yekane (hotwallet).

Di beşên jêrîn de, ez vebijarkên ji bo çareserkirina vê pirsgirêkê bêyî CREATE2 analîz dikim û ji we re vedibêjim ka çima me dev ji wan berda. Heke hûn tenê bi encama dawîn re eleqedar in, hûn dikarin wê di beşa "Çareseriya Dawî" de bibînin.

Navnîşanên Ethereum

Çareseriya herî hêsan ev e ku meriv navnîşanên nû yên Ethereum ji bo bikarhênerên nû çêbike. Ev navnîşan dê wallet bin. Ji bo veguheztina nîşanekan ji berîka berbi hotwalletê, hûn hewce ne ku bi bangkirina fonksiyonê danûstendinê îmze bikin derbaskirin() bi mifteya taybet a berîka ji paşperdeya.

Ev nêzîkatî xwedî avantajên jêrîn e:

  • ew hêsan e
  • lêçûna veguheztina nîşanekan ji berîka berbi hotwalletê bi lêçûna bangek fonksiyonê re wekhev e derbaskirin()

Lêbelê, me li dijî vê nêzîkbûnê biryar da ji ber ku ew kêmasiyek mezin heye: hûn hewce ne ku mifteyên taybet li cîhek hilînin. Ne tenê ew dikarin winda bibin, lê hûn jî hewce ne ku bi baldarî gihîştina van mifteyan jî îdare bikin. Ger bi kêmanî yek ji wan were tawîz kirin, wê hingê nîşaneyên bikarhênerek taybetî dê negihîjin berîka germ.

Meriv çawa berî bicîhkirinê navnîşana peymanek jîr diyar dike: CREATE2 ji bo danûstendina krîptoyê bikar tîne

Ji bo her bikarhênerek girêbestek hişmend a cihêreng biafirînin

Ji bo her bikarhênerek girêbestek jêhatî ya cihêreng destnîşan dike ku hûn ji hilanîna kilîdên taybet ên ji bo walletên li ser serverê dûr bisekinin. Danûstandin dê gazî vê peymana biaqil bike da ku tokenan veguhezîne hotwalletê.

Me jî dev ji vê çareseriyê berda, ji ber ku bikarhêner bêyî danîna peymanek biaqil nikare navnîşana berîka xwe nîşan bide (ev bi rastî gengaz e, lê bi dezawantajên din re bi rengek tevlihev, ku em ê li vir nîqaş nekin). Li ser danûstendinê, bikarhênerek dikare bi qasî ku hewce dike hesaban biafirîne, û her yek hewceyê berîka xwe ye. Ev tê vê wateyê ku pêdivî ye ku em ji bo danîna peymanek drav xerc bikin bêyî ku em pê ewle bin ku bikarhêner dê vê hesabê bikar bîne.

Opcode CREATE2

Ji bo çareserkirina pirsgirêka rêbaza berê, me biryar da ku em opcode CREATE2 bikar bînin. CREATE2 destûrê dide te ku hûn berê navnîşana ku dê peymana biaqil were danîn destnîşan bikin. Navnîşan bi formula jêrîn tê hesibandin:

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


, ku li:

  • navnîşan - navnîşana peymana hişmend a ku dê jê re CREATE2 bang bike
  • xwê - nirxa rasthatî
  • init_code - bytecode peymana biaqil ji bo bicihkirinê

Ev piştrast dike ku navnîşana ku em ji bikarhênerê re peyda dikin bi rastî bitekoda xwestinê heye. Digel vê yekê, ev peymana jîr dema ku hewcedariya me hebe dikare were bicîh kirin. Mînakî, gava ku bikarhênerek biryar dide ku yekem car berîka xwe bikar bîne.
Meriv çawa berî bicîhkirinê navnîşana peymanek jîr diyar dike: CREATE2 ji bo danûstendina krîptoyê bikar tîne
Wekî din, hûn dikarin navnîşana peymana hişmend her carê li şûna hilanîna wê hesab bikin ji ber ku:

  • navnîşan di formulê de domdar e, ji ber ku ev navnîşana kargeha meya berîkan e
  • xwê - user_id hash
  • init_code domdar e ji ber ku em heman walletê bikar tînin

Pêşveçûnên bêtir

Çareseriya berê hîn jî kêmasiyek heye: hûn hewce ne ku drav bidin da ku peymana hişmend bicîh bikin. Lêbelê, hûn dikarin jê xilas bibin. Ji bo vê yekê hûn dikarin fonksiyonê telefon bikin derbaskirin(), and then xwe hilweşandin () di çêkerê walletê de. Û dûv re gaza ji bo bicîhkirina peymana hişmend dê were vegerandin.

Berevajî baweriya populer, hûn dikarin bi opcode CREATE2 re gelek caran peymanek jîr li heman navnîşanê bicîh bikin. Ji ber ku CREATE2 kontrol dike ku nebûna navnîşana armancê sifir e (di destpêka çêkerê de nirxa "1" tê dayîn). Di vê rewşê de, fonksiyonê xwe hilweşandin () her car navnîşanên nonce reset dike. Ji ber vê yekê heke hûn dîsa bi heman argumanan gazî CREATE2 bikin, dê kontrola nonce derbas bibe.

Ji kerema xwe not bikin ku ev çareserî dişibihe vebijarka navnîşana Ethereum, lê bêyî hewcedariya hilanîna kilîtên taybet e. Mesrefa veguheztina drav ji berîka berbi hotwalletê bi qasî lêçûna bangkirina fonksiyonek wekhev e derbaskirin(), ji ber ku em ji bo bicihkirina peymana biaqil nadin.

Biryara dawî

Meriv çawa berî bicîhkirinê navnîşana peymanek jîr diyar dike: CREATE2 ji bo danûstendina krîptoyê bikar tîne

Di destpêkê de ji hêla:

  • fonksiyona bidestxistina xwê ji hêla user_id
  • peymanek biaqil ku dê bi xwêya guncan re bangî koda CREATE2 bike (ango kargeha walletê)
  • bytecode wallet ku bi peymana bi çêkerê jêrîn re têkildar e:

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


Ji bo her bikarhênerek nû em navnîşana berîka wî/wê bi hesabkirinê nîşan didin

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


Dema ku bikarhêner nîşanekan vediguhezîne navnîşana berîkê ya têkildar, paşiya me bûyerek Veguheztinê bi pîvanê dibîne. _ber, wekhev navnîşana walletê. Di vê nuqteyê de, jixwe mimkun e ku meriv li ser danûstendinê berî danîna berîka xwe balansa bikarhêner zêde bike.

Dema ku navnîşek berîka jimareyek têr token berhev dike, em dikarin wan bi carekê veguhezînin hotwalletê. Ji bo kirina vê yekê, paşîn fonksiyona kargeha peymana aqilmend gazî dike, ku kiryarên jêrîn pêk tîne:

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


Bi vî rengî, çêkerê peymana smart walletê tê gotin, ku hemî nîşaneyên xwe vediguhezîne navnîşana hotwalletê û dûv re xwe-hilweşîne.

Koda tevahî dikare were dîtin vir. Ji kerema xwe not bikin ku ev ne koda hilberîna me ye, ji ber ku me biryar da ku em bytecode ya walletê xweşbîn bikin û di opcodes de nivîsand.

Nivîskar Pavel Kondratenkov, pisporê Ethereum

Source: www.habr.com

Add a comment