బ్లాక్చెయిన్ అంశం అన్ని రకాల హైప్లకు మాత్రమే కాకుండా, సాంకేతిక కోణం నుండి చాలా విలువైన ఆలోచనలకు కూడా మూలంగా ఉండదు. అందువల్ల, ఇది ఎండ నగర నివాసితులను దాటవేయలేదు. ప్రజలు నిశితంగా చూస్తున్నారు, చదువుతున్నారు, సంప్రదాయ సమాచార భద్రతలో తమ నైపుణ్యాన్ని బ్లాక్చెయిన్ సిస్టమ్లకు బదిలీ చేయడానికి ప్రయత్నిస్తున్నారు. ఇప్పటివరకు, ఇది గుర్తించదగినది: Rostelecom-Solar యొక్క అభివృద్ధిలలో ఒకటి బ్లాక్చెయిన్-ఆధారిత సాఫ్ట్వేర్ యొక్క భద్రతను తనిఖీ చేయగలదు. అలాగే, బ్లాక్చెయిన్ సంఘం యొక్క అనువర్తిత సమస్యలను పరిష్కరించడంపై కొన్ని ఆలోచనలు తలెత్తుతాయి. ఈ లైఫ్ హ్యాక్లలో ఒకటి - CREATE2ని ఉపయోగించి విస్తరణకు ముందు స్మార్ట్ ఒప్పందం యొక్క చిరునామాను ఎలా గుర్తించాలి - ఈ రోజు నేను మీతో కట్ కింద భాగస్వామ్యం చేయాలనుకుంటున్నాను.
ఈ సంవత్సరం ఫిబ్రవరి 2న కాన్స్టాంటినోపుల్ హార్డ్ ఫోర్క్లో CREATE28 ఆప్కోడ్ జోడించబడింది. EIPలో పేర్కొన్నట్లుగా, ఈ ఆప్కోడ్ ప్రధానంగా రాష్ట్ర ఛానెల్ల కోసం ప్రవేశపెట్టబడింది. అయితే, మేము దానిని వేరే సమస్యను పరిష్కరించడానికి ఉపయోగించాము.
ఎక్స్ఛేంజ్లో బ్యాలెన్స్ ఉన్న వినియోగదారులు ఉన్నారు. మేము ప్రతి వినియోగదారుకు తప్పనిసరిగా Ethereum చిరునామాను అందించాలి, దీని ద్వారా ఎవరైనా టోకెన్లను పంపవచ్చు, తద్వారా వారి ఖాతాను భర్తీ చేయవచ్చు. ఈ చిరునామాలను "వాలెట్లు" అని పిలుద్దాం. వాలెట్లలో టోకెన్లు వచ్చినప్పుడు, మనం వాటిని తప్పనిసరిగా ఒకే వాలెట్ (హాట్వాలెట్)కి పంపాలి.
కింది విభాగాలలో, నేను CREATE2 లేకుండా ఈ సమస్యను పరిష్కరించడానికి ఎంపికలను విశ్లేషిస్తాను మరియు మేము వాటిని ఎందుకు విడిచిపెట్టామో మీకు చెప్తాను. మీరు తుది ఫలితంపై మాత్రమే ఆసక్తి కలిగి ఉంటే, మీరు దానిని "ఫైనల్ సొల్యూషన్" విభాగంలో కనుగొనవచ్చు.
Ethereum చిరునామాలు
కొత్త వినియోగదారుల కోసం కొత్త Ethereum చిరునామాలను రూపొందించడం సరళమైన పరిష్కారం. ఈ చిరునామాలు వాలెట్లుగా ఉంటాయి. వాలెట్ నుండి హాట్వాలెట్కి టోకెన్లను బదిలీ చేయడానికి, మీరు ఫంక్షన్కు కాల్ చేయడం ద్వారా లావాదేవీపై సంతకం చేయాలి బదిలీ () బ్యాకెండ్ నుండి వాలెట్ ప్రైవేట్ కీతో.
ఈ విధానం క్రింది ప్రయోజనాలను కలిగి ఉంది:
- ఇది సులభం
- వాలెట్ నుండి హాట్వాలెట్కి టోకెన్లను బదిలీ చేయడానికి అయ్యే ఖర్చు ఫంక్షన్ కాల్ ఖర్చుతో సమానంగా ఉంటుంది బదిలీ ()
అయినప్పటికీ, మేము ఈ విధానానికి వ్యతిరేకంగా నిర్ణయించుకున్నాము ఎందుకంటే దీనికి ఒక ప్రధాన లోపం ఉంది: మీరు ఎక్కడో ప్రైవేట్ కీలను నిల్వ చేయాలి. వాటిని కోల్పోవడమే కాకుండా, మీరు ఈ కీలకు ప్రాప్యతను జాగ్రత్తగా నిర్వహించాలి. వాటిలో కనీసం ఒకటి రాజీపడితే, నిర్దిష్ట వినియోగదారు యొక్క టోకెన్లు హాట్ వాలెట్కు చేరవు.
ప్రతి వినియోగదారు కోసం ప్రత్యేక స్మార్ట్ ఒప్పందాన్ని సృష్టించండి
ప్రతి వినియోగదారు కోసం ప్రత్యేక స్మార్ట్ ఒప్పందాన్ని అమలు చేయడం వలన సర్వర్లో వాలెట్ల కోసం ప్రైవేట్ కీలను నిల్వ చేయకుండా నిరోధించవచ్చు. టోకెన్లను హాట్వాలెట్కు బదిలీ చేయడానికి ఎక్స్ఛేంజ్ ఈ స్మార్ట్ కాంట్రాక్ట్ని పిలుస్తుంది.
స్మార్ట్ కాంట్రాక్ట్ని అమలు చేయకుండా వినియోగదారుకు అతని వాలెట్ చిరునామాను చూపడం సాధ్యం కాదు కాబట్టి మేము ఈ పరిష్కారాన్ని కూడా వదిలివేసాము (ఇది వాస్తవానికి సాధ్యమే, కానీ మేము ఇక్కడ చర్చించని ఇతర ప్రతికూలతలతో చాలా క్లిష్టమైన మార్గంలో). మార్పిడిలో, ఒక వినియోగదారు తనకు అవసరమైనన్ని ఖాతాలను సృష్టించవచ్చు మరియు ప్రతి ఒక్కరికి దాని స్వంత వాలెట్ అవసరం. వినియోగదారు ఈ ఖాతాను ఉపయోగిస్తారని కూడా ఖచ్చితంగా తెలియకుండానే మేము ఒప్పందాన్ని అమలు చేయడానికి డబ్బు ఖర్చు చేయాల్సి ఉంటుందని దీని అర్థం.
Opcode CREATE2
మునుపటి పద్ధతి యొక్క సమస్యను పరిష్కరించడానికి, మేము CREATE2 ఆప్కోడ్ని ఉపయోగించాలని నిర్ణయించుకున్నాము. CREATE2 స్మార్ట్ కాంట్రాక్ట్ ఎక్కడ అమలు చేయబడుతుందో ముందుగా నిర్ణయించడానికి మిమ్మల్ని అనుమతిస్తుంది. చిరునామా క్రింది సూత్రాన్ని ఉపయోగించి లెక్కించబడుతుంది:
keccak256 (0xff ++ address ++ salt ++ keccak256 (init_code)) [12:]
, ఇక్కడ:
- చిరునామా — CREATE2కి కాల్ చేసే స్మార్ట్ కాంట్రాక్ట్ చిరునామా
- ఉ ప్పు - యాదృచ్ఛిక విలువ
- init_code - విస్తరణ కోసం స్మార్ట్ కాంట్రాక్ట్ బైట్కోడ్
ఇది వినియోగదారుకు మేము అందించే చిరునామా వాస్తవానికి కావలసిన బైట్కోడ్ను కలిగి ఉందని నిర్ధారిస్తుంది. అంతేకాకుండా, ఈ స్మార్ట్ కాంట్రాక్టును మనకు అవసరమైనప్పుడు అమలు చేయవచ్చు. ఉదాహరణకు, ఒక వినియోగదారు వారి వాలెట్ను మొదటిసారి ఉపయోగించాలని నిర్ణయించుకున్నప్పుడు.
అంతేకాకుండా, మీరు స్మార్ట్ కాంట్రాక్ట్ చిరునామాను నిల్వ చేయడానికి బదులుగా ప్రతిసారీ లెక్కించవచ్చు ఎందుకంటే:
- చిరునామా ఫార్ములా స్థిరంగా ఉంటుంది, ఎందుకంటే ఇది మా వాలెట్ ఫ్యాక్టరీ చిరునామా
- ఉ ప్పు — user_id హాష్
- init_code మేము ఒకే వాలెట్ని ఉపయోగిస్తున్నందున స్థిరంగా ఉంటుంది
మరిన్ని మెరుగుదలలు
మునుపటి పరిష్కారానికి ఇప్పటికీ ఒక లోపం ఉంది: మీరు స్మార్ట్ ఒప్పందాన్ని అమలు చేయడానికి చెల్లించాలి. అయితే, మీరు దానిని వదిలించుకోవచ్చు. దీన్ని చేయడానికి మీరు ఫంక్షన్కు కాల్ చేయవచ్చు బదిలీ (), ఆపై స్వీయ విధ్వంసం() వాలెట్ కన్స్ట్రక్టర్లో. ఆపై స్మార్ట్ కాంట్రాక్టును అమలు చేయడానికి గ్యాస్ తిరిగి ఇవ్వబడుతుంది.
జనాదరణ పొందిన నమ్మకానికి విరుద్ధంగా, మీరు CREATE2 ఆప్కోడ్తో ఒకే చిరునామాకు అనేకసార్లు స్మార్ట్ ఒప్పందాన్ని అమలు చేయవచ్చు. ఎందుకంటే CREATE2 లక్ష్య చిరునామా యొక్క నాన్సు సున్నా అని తనిఖీ చేస్తుంది (దీనికి కన్స్ట్రక్టర్ ప్రారంభంలో "1" విలువ కేటాయించబడుతుంది). ఈ సందర్భంలో, ఫంక్షన్ స్వీయ విధ్వంసం() ప్రతిసారీ చిరునామాలను రీసెట్ చేస్తుంది. కాబట్టి మీరు అదే ఆర్గ్యుమెంట్లతో మళ్లీ CREATE2కి కాల్ చేస్తే, నాన్స్ చెక్ పాస్ అవుతుంది.
దయచేసి ఈ పరిష్కారం Ethereum చిరునామా ఎంపికను పోలి ఉంటుంది, కానీ ప్రైవేట్ కీలను నిల్వ చేయవలసిన అవసరం లేకుండానే ఉంటుంది. వాలెట్ నుండి హాట్వాలెట్కి డబ్బును బదిలీ చేయడానికి అయ్యే ఖర్చు ఫంక్షన్కి కాల్ చేయడానికి అయ్యే ఖర్చుతో సమానంగా ఉంటుంది బదిలీ (), మేము స్మార్ట్ కాంట్రాక్ట్ విస్తరణ కోసం చెల్లించనందున.
తుది నిర్ణయం
వాస్తవానికి దీని ద్వారా తయారు చేయబడింది:
- ద్వారా ఉప్పు పొందడానికి ఫంక్షన్ వినియోగదారుని గుర్తింపు
- 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:]
వినియోగదారు సంబంధిత వాలెట్ చిరునామాకు టోకెన్లను బదిలీ చేసినప్పుడు, మా బ్యాకెండ్ పారామీటర్తో బదిలీ ఈవెంట్ను చూస్తుంది _కు, వాలెట్ చిరునామాకు సమానం. ఈ సమయంలో, వాలెట్ను అమలు చేయడానికి ముందు మార్పిడిలో వినియోగదారు బ్యాలెన్స్ను పెంచడం ఇప్పటికే సాధ్యమే.
వాలెట్ చిరునామా తగినంత సంఖ్యలో టోకెన్లను సేకరించినప్పుడు, మేము వాటిని ఒకేసారి హాట్వాలెట్కి బదిలీ చేయవచ్చు. దీన్ని చేయడానికి, బ్యాకెండ్ స్మార్ట్ కాంట్రాక్ట్ ఫ్యాక్టరీ ఫంక్షన్ని పిలుస్తుంది, ఇది క్రింది చర్యలను చేస్తుంది:
function deployWallet (соль uint256) {
bytes memory walletBytecode =…;
// invoke CREATE2 with wallet bytecode and salt
}
అందువలన, వాలెట్ స్మార్ట్ కాంట్రాక్ట్ కన్స్ట్రక్టర్ అంటారు, ఇది అన్ని టోకెన్లను హాట్వాలెట్ చిరునామాకు బదిలీ చేస్తుంది మరియు తర్వాత స్వీయ-నాశనం చేస్తుంది.
పూర్తి కోడ్ కనుగొనవచ్చు
రచయిత పావెల్ కొండ్రాటెన్కోవ్, Ethereum నిపుణుడు
మూలం: www.habr.com