Чӣ гуна бояд суроғаи шартномаи интеллектуалиро пеш аз ҷойгиркунӣ муайян кард: бо истифода аз CREATE2 барои мубодилаи крипто

Мавзӯи blockchain ҳеҷ гоҳ манбаи на танҳо ҳама навъҳои шӯхӣ, балки ғояҳое, ки аз нуқтаи назари технологӣ хеле арзишманданд, боқӣ намемонад. Аз ин ру, он аз сокинони шахри офтобй нагузаштааст. Одамон бодиққат назар мекунанд, меомӯзанд ва кӯшиш мекунанд, ки таҷрибаи худро дар амнияти иттилоотии анъанавӣ ба системаҳои blockchain интиқол диҳанд. То ба ҳол, он дар ҷои аввал аст: яке аз таҳияҳои Rostelecom-Solar метавонад амнияти нармафзори блокчейнро тафтиш кунад. Ва дар баробари ин, баъзе фикрҳо дар бораи ҳалли мушкилоти татбиқшавандаи ҷомеаи blockchain пайдо мешаванд. Яке аз ин лайфхакҳо - чӣ гуна бояд суроғаи шартномаи интеллектуалиро пеш аз ҷойгиркунӣ бо истифода аз CREATE2 муайян кард - имрӯз ман мехоҳам бо шумо дар зери буриш мубодила кунам.

Чӣ гуна бояд суроғаи шартномаи интеллектуалиро пеш аз ҷойгиркунӣ муайян кард: бо истифода аз CREATE2 барои мубодилаи крипто
Коди CREATE2 28 феврали соли ҷорӣ дар штангаи сахти Константинопол илова карда шуд. Тавре ки дар EIP гуфта шудааст, ин opcode асосан барои каналҳои давлатӣ ҷорӣ карда шудааст. Бо вуҷуди ин, мо онро барои ҳалли мушкилоти дигар истифода мебарем.

Дар биржа корбароне ҳастанд, ки тавозун доранд. Мо бояд ба ҳар як корбар суроғаи Ethereum пешниҳод кунем, ки ҳар кас метавонад ба он нишонаҳо фиристад ва ба ин васила ҳисоби онҳоро пур кунад. Биёед ин суроғаҳоро "ҳамёнҳо" номем. Вақте ки нишонаҳо ба ҳамёнҳо меоянд, мо бояд онҳоро ба ҳамёни ягона (hotwallet) фиристем.

Дар бахшҳои зерин ман вариантҳои ҳалли ин мушкилотро бидуни CREATE2 таҳлил мекунам ва ба шумо мегӯям, ки чаро мо онҳоро тарк кардем. Агар шумо танҳо ба натиҷаи ниҳоӣ таваҷҷӯҳ дошта бошед, шумо метавонед онро дар бахши "Ҳалли ниҳоӣ" пайдо кунед.

Суроғаҳои Ethereum

Ҳалли соддатарин ин тавлиди суроғаҳои нави Ethereum барои корбарони нав аст. Ин суроғаҳо ҳамёнҳо хоҳанд буд. Барои интиқол додани нишонаҳо аз ҳамён ба hotwallet, шумо бояд бо занги функсия ба транзаксия имзо гузоред интиқол () бо калиди хусусии ҳамён аз пушти.

Ин усул бартариҳои зерин дорад:

  • ин оддӣ аст
  • арзиши интиқоли нишонаҳо аз ҳамён ба hotwallet ба арзиши занги функсия баробар аст интиқол ()

Бо вуҷуди ин, мо бар зидди ин равиш тасмим гирифтем, зеро он як камбудии ҷиддӣ дорад: шумо бояд калидҳои хусусиро дар ҷое нигоҳ доред. На танҳо онҳоро гум кардан мумкин аст, балки шумо инчунин бояд дастрасӣ ба ин калидҳоро бодиққат идора кунед. Агар ҳадди аққал яке аз онҳо осеб дида бошад, пас токенҳои корбари мушаххас ба ҳамёни гарм намерасанд.

Чӣ гуна бояд суроғаи шартномаи интеллектуалиро пеш аз ҷойгиркунӣ муайян кард: бо истифода аз CREATE2 барои мубодилаи крипто

Барои ҳар як корбар шартномаи интеллектуалии алоҳида эҷод кунед

Ҷойгир кардани шартномаи интеллектуалии алоҳида барои ҳар як корбар ба шумо имкон медиҳад, ки аз нигоҳ доштани калидҳои хусусии ҳамёнҳо дар сервер канорагирӣ кунед. Биржа ин шартномаи оқилонаро барои интиқоли нишонаҳо ба hotwallet даъват мекунад.

Мо инчунин ин ҳалли худро тарк кардем, зеро ба корбар суроғаи ҳамёни худро бидуни ҷойгиркунии шартномаи интеллектуалӣ нишон додан мумкин нест (ин воқеан имконпазир аст, аммо ба таври хеле мураккаб бо дигар нуқсонҳо, ки мо дар ин ҷо муҳокима намекунем). Дар биржа корбар метавонад шумораи зиёди ҳисобҳоро эҷод кунад ва ба ҳар як ҳамёни худ ниёз дорад. Ин маънои онро дорад, ки мо бояд пулро барои ҷойгиркунии шартнома сарф кунем, ҳатто боварӣ надорем, ки корбар ин ҳисобро истифода мебарад.

Опкоди CREATE2

Барои ҳалли мушкилоти усули қаблӣ, мо тасмим гирифтем, ки опкоди CREATE2-ро истифода барем. CREATE2 ба шумо имкон медиҳад, ки суроғаеро, ки шартномаи интеллектуалӣ ҷойгир карда мешавад, пешакӣ муайян кунед. Суроға бо формулаи зерин ҳисоб карда мешавад:

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


, ки:

  • суроғаи — суроғаи шартномаи интеллектуалӣ, ки CREATE2-ро даъват мекунад
  • намак - арзиши тасодуфӣ
  • init_code — Байткоди шартномаи интеллектуалӣ барои ҷойгиркунӣ

Ин кафолат медиҳад, ки суроғае, ки мо ба корбар пешниҳод мекунем, воқеан байткоди дилхоҳро дар бар мегирад. Гузашта аз ин, ин шартномаи оқилонаро ҳар вақте, ки ба мо лозим аст, татбиқ кардан мумкин аст. Масалан, вақте ки корбар тасмим гирифтааст, ки ҳамёни худро бори аввал истифода барад.
Чӣ гуна бояд суроғаи шартномаи интеллектуалиро пеш аз ҷойгиркунӣ муайян кард: бо истифода аз CREATE2 барои мубодилаи крипто
Ғайр аз он, шумо метавонед суроғаи шартномаи интеллектуалиро ҳар дафъа ба ҷои нигоҳ доштани он ҳисоб кунед, зеро:

  • суроғаи дар формула доимист, зеро ин адреси заводи хамьёни мост
  • намак — хэши user_id
  • init_code доимӣ аст, зеро мо ҳамон ҳамёнро истифода мебарем

Такмили бештар

Ҳалли қаблӣ ҳоло ҳам як нуқсон дорад: шумо бояд барои ҷойгир кардани шартномаи интеллектуалӣ пардохт кунед. Бо вуҷуди ин, шумо метавонед аз он халос шавед. Барои ин шумо метавонед функсияро даъват кунед интиқол ()ва баъд худкушӣ () дар созандаи ҳамён. Ва он гоҳ газ барои ҷойгиркунии шартномаи интеллектуалӣ баргардонида мешавад.

Бар хилофи эътиқоди маъмул, шумо метавонед бо коди CREATE2 якчанд маротиба шартномаи оқилонаро дар як суроға ҷойгир кунед. Ин аз он сабаб аст, ки CREATE2 сифр будани суроғаи мақсаднокро тафтиш мекунад (дар ибтидои созанда ба он арзиши "1" дода мешавад). Дар ин ҳолат, функсия худкушӣ () ҳар дафъа суроғаҳои ғайрифаъолро аз нав барқарор мекунад. Пас, агар шумо CREATE2-ро дубора бо ҳамон далелҳо занг занед, санҷиши ғайрирасмӣ мегузарад.

Лутфан таваҷҷӯҳ намоед, ки ин ҳалли вариант ба суроғаи Ethereum монанд аст, аммо бидуни зарурати нигоҳ доштани калидҳои хусусӣ. Арзиши интиқоли пул аз ҳамён ба hotwallet тақрибан ба арзиши занги функсия баробар аст интиқол (), зеро мо барои ҷойгиркунии шартномаи оқилона пардохт намекунем.

Қарори ниҳоӣ

Чӣ гуна бояд суроғаи шартномаи интеллектуалиро пеш аз ҷойгиркунӣ муайян кард: бо истифода аз CREATE2 барои мубодилаи крипто

Дар ибтидо аз ҷониби:

  • функсия барои гирифтани намак Шаҳодатномаи Корбар
  • шартномаи интеллектуалӣ, ки опкоди CREATE2-ро бо намаки мувофиқ даъват мекунад (яъне корхонаи ҳамён)
  • Байткоди ҳамён, ки ба шартнома бо созандаи зерин мувофиқ аст:

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


Барои ҳар як корбари нав мо суроғаи ҳамёни ӯро тавассути ҳисоб нишон медиҳем

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


Вақте ки корбар токенҳоро ба суроғаи мувофиқи ҳамён интиқол медиҳад, паси мо ҳодисаи интиқолро бо параметр мебинад _ба, ба суроғаи ҳамён баробар аст. Дар ин лаҳза, аллакай имконпазир аст, ки тавозуни корбарро дар биржа пеш аз ҷойгиркунии ҳамён афзоиш диҳед.

Вақте ки суроғаи ҳамён миқдори кофии аломатҳоро ҷамъ мекунад, мо метавонем ҳамаи онҳоро якбора ба hotwallet интиқол диҳем. Барои ин кор, пуштибонӣ функсияи интеллектуалии шартномаро даъват мекунад, ки амалҳои зеринро иҷро мекунад:

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


Ҳамин тариқ, созандаи шартномаи интеллектуалии ҳамён даъват карда мешавад, ки ҳамаи нишонаҳои худро ба суроғаи hotwallet интиқол медиҳад ва сипас худкушӣ мекунад.

Рамзи пурраро ёфтан мумкин аст дар ин ҷо. Лутфан таваҷҷӯҳ намоед, ки ин рамзи истеҳсолии мо нест, зеро мо тасмим гирифтем, ки байткоди ҳамёнро оптимизатсия кунем ва онро дар опкодҳо навиштем.

Муаллиф Павел Кондратенков, мутахассиси Ethereum

Манбаъ: will.com

Илова Эзоҳ