යෙදවීමට පෙර ස්මාර්ට් කොන්ත්‍රාත්තුවක ලිපිනය තීරණය කරන්නේ කෙසේද: ක්‍රිප්ටෝ හුවමාරුවක් සඳහා CREATE2 භාවිතා කිරීම

බ්ලොක්චේන් මාතෘකාව සෑම ආකාරයකම උද්දීපනය පමණක් නොව, තාක්‍ෂණික දෘෂ්ටි කෝණයකින් ඉතා වටිනා අදහස් ද ප්‍රභවයක් වීම නතර නොවේ. එමනිසා, එය හිරු නගරයේ පදිංචිකරුවන් මඟ හැර ගියේ නැත. මිනිසුන් සමීපව බලමින්, අධ්‍යයනය කරමින්, සාම්ප්‍රදායික තොරතුරු ආරක්‍ෂාව පිළිබඳ ඔවුන්ගේ ප්‍රවීණත්වය බ්ලොක්චේන් පද්ධති වෙත මාරු කිරීමට උත්සාහ කරති. මෙතෙක්, එය ස්ථානගත වී ඇත: Rostelecom-Solar හි එක් දියුණුවකට බ්ලොක්චේන් පාදක මෘදුකාංගවල ආරක්ෂාව පරීක්ෂා කළ හැකිය. ඒ අතරම, බ්ලොක්චේන් ප්‍රජාවේ ව්‍යවහාරික ගැටළු විසඳීම පිළිබඳව සමහර සිතුවිලි පැන නගී. මෙම ජීවිත හැක් වලින් එකක් - CREATE2 භාවිතයෙන් යෙදවීමට පෙර ස්මාර්ට් කොන්ත්‍රාත්තුවක ලිපිනය තීරණය කරන්නේ කෙසේද - අද මට කප්පාදුව යටතේ ඔබ සමඟ බෙදා ගැනීමට අවශ්‍යයි.

යෙදවීමට පෙර ස්මාර්ට් කොන්ත්‍රාත්තුවක ලිපිනය තීරණය කරන්නේ කෙසේද: ක්‍රිප්ටෝ හුවමාරුවක් සඳහා CREATE2 භාවිතා කිරීම
CREATE2 opcode මෙම වසරේ පෙබරවාරි 28 වන දින කොන්ස්තන්තිනෝපල් දෘඪ දෙබලක එකතු කරන ලදී. EIP හි සඳහන් පරිදි, මෙම opcode මූලික වශයෙන් රාජ්‍ය නාලිකා සඳහා හඳුන්වා දෙන ලදී. කෙසේ වෙතත්, අපි එය වෙනත් ගැටළුවක් විසඳීමට භාවිතා කළෙමු.

හුවමාරුවෙහි ශේෂයන් සහිත පරිශීලකයන් සිටී. ඕනෑම කෙනෙකුට ටෝකන යැවිය හැකි Ethereum ලිපිනයක් අපි සෑම පරිශීලකයෙකුටම ලබා දිය යුතු අතර එමඟින් ඔවුන්ගේ ගිණුම නැවත පුරවා ගත යුතුය. අපි මෙම ලිපින "පසුම්බි" ලෙස හඳුන්වමු. ටෝකන මුදල් පසුම්බිවලට පැමිණි විට, අපි ඒවා තනි මුදල් පසුම්බියකට (හොට්වොලට්) යැවිය යුතුය.

පහත කොටස් වලදී, මම CREATE2 නොමැතිව මෙම ගැටළුව විසඳීම සඳහා විකල්ප විශ්ලේෂණය කර අප ඒවා අත්හැරියේ මන්දැයි ඔබට කියමි. ඔබ අවසාන ප්රතිඵලය ගැන පමණක් උනන්දුවක් දක්වන්නේ නම්, ඔබට එය "අවසාන විසඳුම" කොටසෙහි සොයාගත හැකිය.

Ethereum ලිපින

සරලම විසඳුම වන්නේ නව පරිශීලකයින් සඳහා නව Ethereum ලිපින උත්පාදනය කිරීමයි. මෙම ලිපින මුදල් පසුම්බි වනු ඇත. මුදල් පසුම්බියක සිට හොට්වොලට් වෙත ටෝකන මාරු කිරීම සඳහා, ඔබ කාර්යය ඇමතීමෙන් ගනුදෙනුව අත්සන් කළ යුතුය මාරු() පසුම්බියේ පුද්ගලික යතුර සමඟ.

මෙම ප්රවේශය පහත සඳහන් වාසි ඇත:

  • ඒක සරලයි
  • මුදල් පසුම්බියක සිට හොට්වොලට් වෙත ටෝකන මාරු කිරීමේ පිරිවැය ක්‍රියාකාරී ඇමතුමක පිරිවැයට සමාන වේ මාරු()

කෙසේ වෙතත්, අපි මෙම ප්‍රවේශයට එරෙහිව තීරණය කළේ එයට එක් ප්‍රධාන අඩුපාඩුවක් ඇති බැවිනි: ඔබට පුද්ගලික යතුරු කොහේ හරි ගබඩා කළ යුතුය. ඔවුන් අහිමි විය හැකි පමණක් නොව, ඔබ මෙම යතුරු වෙත ප්රවේශය ප්රවේශමෙන් කළමනාකරණය කළ යුතුය. අවම වශයෙන් ඔවුන්ගෙන් එකක් වත් සම්මුතියකට ලක්වුවහොත්, විශේෂිත පරිශීලකයෙකුගේ ටෝකන උණුසුම් මුදල් පසුම්බිය වෙත ළඟා නොවනු ඇත.

යෙදවීමට පෙර ස්මාර්ට් කොන්ත්‍රාත්තුවක ලිපිනය තීරණය කරන්නේ කෙසේද: ක්‍රිප්ටෝ හුවමාරුවක් සඳහා CREATE2 භාවිතා කිරීම

එක් එක් පරිශීලකයා සඳහා වෙනම ස්මාර්ට් ගිවිසුමක් සාදන්න

එක් එක් පරිශීලකයා සඳහා වෙනම ස්මාර්ට් කොන්ත්රාත්තුවක් යෙදවීම සේවාදායකයේ මුදල් පසුම්බි සඳහා පුද්ගලික යතුරු ගබඩා කිරීම වළක්වා ගැනීමට ඔබට ඉඩ සලසයි. ටෝකන හොට්වොලට් වෙත මාරු කිරීමට හුවමාරුව මෙම ස්මාර්ට් කොන්ත්‍රාත්තුව කැඳවනු ඇත.

ස්මාර්ට් කොන්ත්‍රාත්තුවක් යෙදවීමකින් තොරව පරිශීලකයාට ඔහුගේ පසුම්බි ලිපිනය පෙන්විය නොහැකි බැවින් අපි මෙම විසඳුම ද අත්හැරියෙමු (මෙය ඇත්ත වශයෙන්ම කළ හැකි නමුත් අපි මෙහි සාකච්ඡා නොකරන වෙනත් අවාසි සමඟ තරමක් සංකීර්ණ ආකාරයකින්). හුවමාරුවේදී, පරිශීලකයෙකුට ඔහුට අවශ්‍ය තරම් ගිණුම් සෑදිය හැකි අතර, ඒ සෑම කෙනෙකුටම තමන්ගේම මුදල් පසුම්බිය අවශ්‍ය වේ. මෙයින් අදහස් කරන්නේ පරිශීලකයා මෙම ගිණුම භාවිතා කරන බවට පවා සහතික නොවී කොන්ත්‍රාත්තුවක් යෙදවීමට අපට මුදල් වියදම් කළ යුතු බවයි.

Opcode CREATE2

පෙර ක්‍රමයේ ගැටලුව විසඳීමට, අපි CREATE2 opcode භාවිතා කිරීමට තීරණය කළෙමු. CREATE2 ඔබට ස්මාර්ට් කොන්ත්‍රාත්තුව යොදවනු ලබන ලිපිනය කලින් තීරණය කිරීමට ඉඩ සලසයි. ලිපිනය ගණනය කරනු ලබන්නේ පහත සූත්‍රය භාවිතා කරමිනි:

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


, එහිදී:

  • ලිපිනය — CREATE2 අමතන ස්මාර්ට් කොන්ත්‍රාත්තුවේ ලිපිනය
  • ලුණු - අහඹු අගය
  • init_code - යෙදවීම සඳහා ස්මාර්ට් කොන්ත්‍රාත් බයිට්කේතය

මෙමගින් අප පරිශීලකයාට ලබා දෙන ලිපිනයෙහි ඇත්ත වශයෙන්ම අවශ්‍ය බයිට්කේතය අඩංගු බව සහතික කරයි. එපමණක් නොව, මෙම ස්මාර්ට් කොන්ත්රාත්තුව අපට අවශ්ය ඕනෑම අවස්ථාවක යෙදවිය හැක. උදාහරණයක් ලෙස, පරිශීලකයෙකු පළමු වරට තම මුදල් පසුම්බිය භාවිතා කිරීමට තීරණය කරන විට.
යෙදවීමට පෙර ස්මාර්ට් කොන්ත්‍රාත්තුවක ලිපිනය තීරණය කරන්නේ කෙසේද: ක්‍රිප්ටෝ හුවමාරුවක් සඳහා CREATE2 භාවිතා කිරීම
එපමණක් නොව, ඔබට එය ගබඩා කිරීම වෙනුවට සෑම විටම ස්මාර්ට් කොන්ත්‍රාත් ලිපිනය ගණනය කළ හැකිය:

  • ලිපිනය මෙය අපගේ පසුම්බි කම්හලේ ලිපිනය වන බැවින් සූත්‍රයේ නියත වේ
  • ලුණු — user_id හැෂ්
  • init_code අපි එකම මුදල් පසුම්බිය භාවිතා කරන බැවින් නියත වේ

තවත් වැඩිදියුණු කිරීම්

පෙර විසඳුම තවමත් එක් අඩුපාඩුවක් ඇත: ඔබ ස්මාර්ට් කොන්ත්රාත්තුව යෙදවීමට ගෙවිය යුතුය. කෙසේ වෙතත්, ඔබට එය ඉවත් කළ හැකිය. මෙය සිදු කිරීම සඳහා ඔබට කාර්යය ඇමතිය හැකිය මාරු(), ඊළගට ස්වයං විනාශය () පසුම්බිය ඉදිකිරීම්කරු තුළ. එවිට ස්මාර්ට් කොන්ත්රාත්තුව යෙදවීම සඳහා ගෑස් ආපසු ලබා දෙනු ඇත.

ජනප්‍රිය විශ්වාසයට පටහැනිව, ඔබට CREATE2 opcode සමඟින් එකම ලිපිනයට ස්මාර්ට් කොන්ත්‍රාත්තුවක් කිහිප වතාවක් යෙදවිය හැක. මක්නිසාද යත්, CREATE2 විසින් ඉලක්කගත ලිපිනයෙහි නොවන අගය ශුන්‍ය බව පරීක්‍ෂා කරන බැවිනි (එයට ඉදිකිරීම්කරුගේ ආරම්භයේදී "1" අගය පවරනු ලැබේ). මෙම අවස්ථාවේදී, කාර්යය ස්වයං විනාශය () සෑම විටම ලිපින නැවත සකසයි. එබැවින් ඔබ එම තර්ක සමඟ නැවත CREATE2 ඇමතුවහොත්, නොන්ස් චෙක්පත සමත් වේ.

මෙම විසඳුම Ethereum ලිපින විකල්පයට සමාන නමුත් පුද්ගලික යතුරු ගබඩා කිරීමේ අවශ්‍යතාවයකින් තොරව බව කරුණාවෙන් සලකන්න. මුදල් පසුම්බියක සිට හොට්වොලට් වෙත මුදල් මාරු කිරීමේ පිරිවැය ශ්‍රිතයක් ඇමතීමේ පිරිවැයට ආසන්න වශයෙන් සමාන වේ මාරු(), අපි ස්මාර්ට් කොන්ත්‍රාත්තුවේ යෙදවීම සඳහා ගෙවන්නේ නැති නිසා.

අවසන් තීරණය

යෙදවීමට පෙර ස්මාර්ට් කොන්ත්‍රාත්තුවක ලිපිනය තීරණය කරන්නේ කෙසේද: ක්‍රිප්ටෝ හුවමාරුවක් සඳහා CREATE2 භාවිතා කිරීම

මුලින් සකස් කළේ:

  • ලුණු ලබා ගැනීමේ කාර්යය පරිශීලක ID
  • සුදුසු ලුණු (එනම් මුදල් පසුම්බිය කම්හල) සමග CREATE2 opcode අමතන ස්මාර්ට් කොන්ත්‍රාත්තුවක්
  • පහත සඳහන් ඉදිකිරීම්කරු සමඟ ගිවිසුමට අනුරූප වන wallet bytecode:

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
}


මේ අනුව, පසුම්බිය ස්මාර්ට් කොන්ත්‍රාත් කොන්ත්‍රාත්කරු කැඳවනු ලැබේ, එය එහි සියලුම ටෝකන හොට්වොලට් ලිපිනයට මාරු කර ස්වයං විනාශ කරයි.

සම්පූර්ණ කේතය සොයාගත හැකිය මෙහි. අපි පසුම්බිය බයිට්කේතය ප්‍රශස්ත කිරීමට තීරණය කර එය opcodes වලින් ලියා ඇති බැවින්, මෙය අපගේ නිෂ්පාදන කේතය නොවන බව කරුණාවෙන් සලකන්න.

කර්තෘ Pavel Kondratenkov, Ethereum විශේෂඥ

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න