مقرر ڪرڻ کان پهريان سمارٽ معاهدي جي ايڊريس کي ڪيئن طئي ڪيو وڃي: استعمال ڪندي CREATE2 هڪ crypto ايڪسچينج لاءِ

بلاڪچين جو موضوع ڪڏهن به نه صرف هر قسم جي هائپ جو ذريعو بڻجي ٿو، پر اهي خيال پڻ آهن جيڪي ٽيڪنالاجي نقطي نظر کان تمام قيمتي آهن. تنهن ڪري، اهو سج شهر جي رهاڪن کي نظرانداز نه ڪيو. ماڻهو ويجهي ڏسي رهيا آهن، پڙهائي رهيا آهن، انهن جي ماهر کي روايتي معلومات سيڪيورٽي ۾ منتقل ڪرڻ جي ڪوشش ڪري رهيا آهن بلاڪچين سسٽم ڏانهن. ايترو پري، اهو جڳهه تي آهي: Rostelecom-Solar جي ترقيات مان هڪ بلاڪچين تي ٻڌل سافٽ ويئر جي سيڪيورٽي کي چيڪ ڪري سگهي ٿو. ۽ رستي ۾، بلاڪچين ڪميونٽي جي لاڳو ٿيل مسئلن کي حل ڪرڻ تي ڪجهه سوچون پيدا ٿين ٿيون. انهن مان هڪ لائف هيڪس - CREATE2 استعمال ڪرڻ کان پهريان هڪ سمارٽ معاهدي جي ايڊريس کي ڪيئن طئي ڪيو وڃي - اڄ آئون توهان سان ڪٽ هيٺ حصيداري ڪرڻ چاهيان ٿو.

مقرر ڪرڻ کان پهريان سمارٽ معاهدي جي ايڊريس کي ڪيئن طئي ڪيو وڃي: استعمال ڪندي CREATE2 هڪ crypto ايڪسچينج لاءِ
CREATE2 opcode هن سال جي 28 فيبروري تي قسطنطنيه هارڊ فورڪ ۾ شامل ڪيو ويو. جيئن EIP ۾ چيو ويو آهي، هي اوپي ڪوڊ بنيادي طور تي رياستي چينلز لاءِ متعارف ڪرايو ويو هو. بهرحال، اسان ان کي استعمال ڪيو هڪ مختلف مسئلو حل ڪرڻ لاء.

بيلنس سان مٽا سٽا تي صارف آهن. اسان کي لازمي طور تي هر صارف کي ايٿيروم ايڊريس مهيا ڪرڻ گهرجي جنهن تي ڪو به ٽوڪن موڪلي سگهي ٿو، انهي سان گڏ انهن جي اڪائونٽ کي ٻيهر ڏيڻ. اچو ته انهن پتي کي "wallets" سڏين. جڏهن ٽوڪن پرس ۾ اچن ٿا، اسان کي انهن کي هڪ واحد والٽ (hotwallet) ڏانهن موڪلڻ گهرجي.

هيٺين حصن ۾، مان CREATE2 کان سواءِ هن مسئلي کي حل ڪرڻ لاءِ اختيارن جو تجزيو ڪريان ٿو ۽ توهان کي ٻڌايان ٿو ته اسان انهن کي ڇو ڇڏيو. جيڪڏهن توهان صرف حتمي نتيجو ۾ دلچسپي رکو ٿا، توهان ان کي "فائنل حل" سيڪشن ۾ ڳولي سگهو ٿا.

Ethereum پتي

نون صارفين لاء نئين ايٿيروم ايڊريس پيدا ڪرڻ جو آسان حل آهي. اهي پتا پرس هوندا. ٽوڪن کي والٽ کان hotwallet ڏانهن منتقل ڪرڻ لاءِ، توهان کي فنڪشن کي ڪال ڪري ٽرانزيڪشن تي دستخط ڪرڻ جي ضرورت آهي منتقلي () پس منظر مان پرس جي نجي چاٻي سان.

هن طريقي سان هيٺيان فائدا آهن:

  • اهو سادو آهي
  • هڪ والٽ کان hotwallet ڏانهن ٽوڪن جي منتقلي جي قيمت هڪ فنڪشن ڪال جي قيمت جي برابر آهي منتقلي ()

تنهن هوندي، اسان هن طريقي جي خلاف فيصلو ڪيو آهي ڇاڪاڻ ته ان ۾ هڪ اهم خرابي آهي: توهان کي نجي چابين کي ذخيرو ڪرڻ جي ضرورت آهي. نه رڳو اهي گم ٿي سگهن ٿا، پر توهان کي انهن ڪنٽين تائين رسائي کي احتياط سان منظم ڪرڻ جي ضرورت آهي. جيڪڏهن انهن مان گهٽ ۾ گهٽ هڪ سمجهوتو آهي، ته پوء هڪ خاص صارف جا ٽوڪن گرم والٽ تائين نه پهچندا.

مقرر ڪرڻ کان پهريان سمارٽ معاهدي جي ايڊريس کي ڪيئن طئي ڪيو وڃي: استعمال ڪندي CREATE2 هڪ crypto ايڪسچينج لاءِ

هر صارف لاءِ الڳ سمارٽ معاهدو ٺاهيو

هر صارف لاءِ الڳ سمارٽ معاهدو ترتيب ڏيڻ توهان کي سرور تي پرس لاءِ نجي چاٻيون محفوظ ڪرڻ کان پاسو ڪرڻ جي اجازت ڏئي ٿو. ايڪسچينج هن سمارٽ معاهدي کي سڏيندو ٽوڪن کي hotwallet ڏانهن منتقل ڪرڻ لاءِ.

اسان هن حل کي به ڇڏي ڏنو، ڇاڪاڻ ته صارف کي سمارٽ معاهدو لڳائڻ کان سواءِ سندس والٽ ايڊريس نه ڏيکاري سگهجي ٿو (اهو اصل ۾ ممڪن آهي، پر هڪ پيچيده طريقي سان ٻين نقصانن سان، جنهن تي اسان هتي بحث نه ڪنداسين). مٽا سٽا تي، هڪ صارف ٺاهي سگهي ٿو ڪيترا ئي اڪائونٽس جيتري هن کي ضرورت آهي، ۽ هر هڪ کي پنهنجي والٽ جي ضرورت آهي. هن جو مطلب اهو آهي ته اسان کي پئسا خرچ ڪرڻ جي ضرورت آهي هڪ معاهدي کي ترتيب ڏيڻ تي بغير پڪ ڪرڻ جي ته صارف هن اڪائونٽ کي استعمال ڪندو.

Opcode CREATE2

پوئين طريقي جي مسئلي کي حل ڪرڻ لاء، اسان CREATE2 opcode استعمال ڪرڻ جو فيصلو ڪيو. CREATE2 توهان کي ايڊريس اڳ ۾ طئي ڪرڻ جي اجازت ڏئي ٿي جتي سمارٽ معاهدو لڳايو ويندو. پتو هيٺ ڏنل فارمولا استعمال ڪندي حساب ڪيو ويو آهي:

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


، جتي:

  • پتو - سمارٽ معاهدي جو پتو جيڪو سڏيندو CREATE2
  • لوڻ - بي ترتيب قدر
  • init_code - ترتيب ڏيڻ لاءِ سمارٽ معاهدو بائيٽ ڪوڊ

اهو يقيني بڻائي ٿو ته پتو جيڪو اسان صارف کي فراهم ڪريون ٿا اصل ۾ گهربل بائيٽ ڪوڊ شامل آهي. ان کان علاوه، هي سمارٽ معاهدو ترتيب ڏئي سگهجي ٿو جڏهن اسان کي ضرورت هجي. مثال طور، جڏهن هڪ صارف فيصلو ڪري ٿو ته پهريون ڀيرو پنهنجو پرس استعمال ڪرڻ.
مقرر ڪرڻ کان پهريان سمارٽ معاهدي جي ايڊريس کي ڪيئن طئي ڪيو وڃي: استعمال ڪندي CREATE2 هڪ crypto ايڪسچينج لاءِ
ان کان علاوه، توهان حساب ڪري سگهو ٿا سمارٽ ڪانٽريڪٽ ايڊريس هر وقت ان کي ذخيرو ڪرڻ بدران ڇاڪاڻ ته:

  • پتو فارمولا ۾ مسلسل آهي، ڇو ته هي اسان جي والٽ فيڪٽري جو پتو آهي
  • لوڻ - user_id hash
  • init_code مسلسل آهي ڇو ته اسان ساڳيو والٽ استعمال ڪندا آهيون

وڌيڪ بهتري

پوئين حل ۾ اڃا به هڪ خرابي آهي: توهان کي سمارٽ معاهدي کي ترتيب ڏيڻ لاءِ ادا ڪرڻو پوندو. تنهن هوندي به، توهان ان کان نجات حاصل ڪري سگهو ٿا. هن کي ڪرڻ لاء، توهان فنڪشن کي سڏي سگهو ٿا منتقلي ()، ۽ پوء خود تباهي () والٽ ٺاهيندڙ ۾. ۽ پوءِ سمارٽ ڪانٽريڪٽ جي مقرري لاءِ گئس واپس ڪئي ويندي.

مشهور اعتقاد جي برعڪس، توهان هڪ سمارٽ معاهدو ترتيب ڏئي سگهو ٿا ساڳئي پتي تي ڪيترائي ڀيرا CREATE2 opcode سان. اهو ئي سبب آهي ته CREATE2 چيڪ ڪري ٿو ته ٽارگيٽ ايڊريس جي غير موجودگي صفر آهي (اها قيمت مقرر ڪئي وئي آهي "1" تعمير ڪندڙ جي شروعات ۾). هن معاملي ۾، فنڪشن خود تباهي () هر دفعي غير پتي کي ٻيهر سيٽ ڪري ٿو. تنهن ڪري جيڪڏهن توهان ساڳئي دليلن سان ٻيهر CREATE2 کي سڏيندا آهيو، نان چيڪ پاس ٿي ويندو.

مهرباني ڪري نوٽ ڪريو ته هي حل Ethereum پتي جي اختيار سان ملندڙ جلندڙ آهي، پر خانگي چابيون ذخيرو ڪرڻ جي ضرورت کان سواء. هڪ والٽ کان hotwallet ۾ رقم جي منتقلي جي قيمت تقريبن هڪ فنڪشن کي ڪال ڪرڻ جي قيمت جي برابر آهي منتقلي ()، ڇاڪاڻ ته اسان سمارٽ معاهدي جي تعیناتي لاءِ ادا نه ڪندا آهيون.

آخري فيصلو

مقرر ڪرڻ کان پهريان سمارٽ معاهدي جي ايڊريس کي ڪيئن طئي ڪيو وڃي: استعمال ڪندي CREATE2 هڪ crypto ايڪسچينج لاءِ

اصل ۾ تيار ڪيل:

  • لوڻ حاصل ڪرڻ جو ڪم استعمال ڪندڙ_ آئي ڊي
  • هڪ سمارٽ معاهدو جيڪو ڪال ڪندو CREATE2 opcode کي مناسب لوڻ سان (يعني والٽ فيڪٽري)
  • والٽ بائيٽ ڪوڊ هيٺ ڏنل تعمير ڪندڙ سان معاهدي سان لاڳاپيل آهي:

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

تبصرو شامل ڪريو