డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్

తరువాత, మూవ్ లాంగ్వేజ్ యొక్క ప్రధాన లక్షణాలను మరియు స్మార్ట్ కాంట్రాక్ట్‌ల కోసం మరొక, ఇప్పటికే పాపులర్ అయిన భాష - సాలిడిటీ (Ethereum ప్లాట్‌ఫారమ్‌లో) తో దాని ముఖ్య తేడాలు ఏమిటో వివరంగా పరిశీలిస్తాము. అందుబాటులో ఉన్న ఆన్‌లైన్ 26-పేజీల వైట్‌పేపర్ అధ్యయనం ఆధారంగా ఈ విషయం రూపొందించబడింది.

పరిచయం

Move అనేది వినియోగదారు లావాదేవీలు మరియు స్మార్ట్ ఒప్పందాలను అమలు చేయడానికి ఉపయోగించే ఎక్జిక్యూటబుల్ బైట్‌కోడ్ భాష. దయచేసి రెండు పాయింట్లను గమనించండి:

  1. తరలింపు అనేది మూవ్ వర్చువల్ మెషీన్‌లో నేరుగా అమలు చేయగల బైట్‌కోడ్ లాంగ్వేజ్ అయితే, సాలిడిటీ (Ethereum యొక్క స్మార్ట్ కాంట్రాక్ట్ లాంగ్వేజ్) అనేది ఒక EVM (Ethereum వర్చువల్ మెషిన్) లో అమలు చేయడానికి ముందు బైట్‌కోడ్‌కి సంకలనం చేయబడిన ఒక ఉన్నత స్థాయి భాష.
  2. తరలింపు అనేది స్మార్ట్ కాంట్రాక్ట్‌లను అమలు చేయడానికి మాత్రమే కాకుండా, కస్టమ్ లావాదేవీల కోసం కూడా ఉపయోగించవచ్చు (దీని తర్వాత మరిన్ని), సాలిడిటీ అనేది ఒక స్మార్ట్ కాంట్రాక్ట్-మాత్రమే భాష.


అనువాదం INDEX ప్రోటోకాల్ ప్రాజెక్ట్ బృందంచే నిర్వహించబడింది. మేము ఇప్పటికే అనువదించాము తుల ప్రాజెక్ట్ను వివరించే పెద్ద పదార్థం, ఇప్పుడు మూవ్ లాంగ్వేజ్‌ని కొంచెం వివరంగా చూడాల్సిన సమయం వచ్చింది. అనువాదం హబ్రౌజర్‌తో సంయుక్తంగా జరిగింది కూల్సియు

లీనియర్ లాజిక్ ఆధారంగా సెమాంటిక్స్‌తో కస్టమ్ రిసోర్స్ రకాలను నిర్వచించగల సామర్థ్యం మూవ్ యొక్క ముఖ్య లక్షణం: వనరు ఎప్పుడూ కాపీ చేయబడదు లేదా పరోక్షంగా తొలగించబడదు, తరలించబడుతుంది. క్రియాత్మకంగా, ఇది రస్ట్ భాష యొక్క సామర్థ్యాలను పోలి ఉంటుంది. రస్ట్‌లోని విలువలు ఒకేసారి ఒక పేరుకు మాత్రమే కేటాయించబడతాయి. వేరొక పేరుకు విలువను కేటాయించడం వలన మునుపటి పేరుతో అది అందుబాటులో ఉండదు.

డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్

ఉదాహరణకు, కింది కోడ్ స్నిప్పెట్ లోపాన్ని విసురుతుంది: తరలించిన విలువ 'x' ఉపయోగం. రస్ట్‌లో చెత్త సేకరణ లేనందున దీనికి కారణం. వేరియబుల్స్ పరిధి నుండి బయటకు వెళ్లినప్పుడు, అవి సూచించే మెమరీ కూడా విముక్తి చేయబడుతుంది. సరళంగా చెప్పాలంటే, డేటా యొక్క ఒక "యజమాని" మాత్రమే ఉండవచ్చు. ఈ ఉదాహరణలో x అసలు యజమాని మరియు తరువాత y కొత్త యజమాని అవుతాడు. ఈ ప్రవర్తన గురించి ఇక్కడ మరింత చదవండి.

ఓపెన్ సిస్టమ్స్‌లో డిజిటల్ ఆస్తుల ప్రాతినిధ్యం

భౌతిక ఆస్తుల యొక్క రెండు లక్షణాలు డిజిటల్‌గా ప్రాతినిధ్యం వహించడం కష్టం:

  • అరుదుగా (కొరత, అసలే కొరత). సిస్టమ్‌లోని ఆస్తుల సంఖ్య (ఉద్గారాలు) నియంత్రించబడాలి. ఇప్పటికే ఉన్న ఆస్తులను నకిలీ చేయడం తప్పనిసరిగా నిషేధించబడాలి మరియు కొత్త వాటిని సృష్టించడం ఒక విశేషమైన ఆపరేషన్.
  • ప్రాప్యత నియంత్రణ... సిస్టమ్ పార్టిసిపెంట్ యాక్సెస్ కంట్రోల్ పాలసీలను ఉపయోగించి ఆస్తులను కాపాడగలగాలి.

భౌతిక ఆస్తులకు సహజమైన ఈ రెండు లక్షణాలు, మనం వాటిని ఆస్తులుగా పరిగణించాలనుకుంటే డిజిటల్ వస్తువులకు తప్పనిసరిగా అమలు చేయాలి. ఉదాహరణకు, ఒక అరుదైన లోహం సహజ కొరతను కలిగి ఉంది, మరియు మీకు మాత్రమే ప్రాప్యత ఉంటుంది (ఉదాహరణకు మీ చేతుల్లో పట్టుకోవడం) మరియు మీరు దానిని అమ్మవచ్చు లేదా ఖర్చు చేయవచ్చు.

మేము ఈ రెండు లక్షణాలకు ఎలా వచ్చామో వివరించడానికి, కింది వాక్యాలతో ప్రారంభిద్దాం:

సూచన # 1: కొరత మరియు యాక్సెస్ నియంత్రణ లేని సరళమైన నియమం

డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్

  • G [K]: = ఎన్ కీ ద్వారా ప్రాప్యత చేయగల సంఖ్యకు నవీకరణను సూచిస్తుంది К బ్లాక్‌చెయిన్ యొక్క ప్రపంచ స్థితిలో, కొత్త అర్థంతో n.
  • లావాదేవీ ⟨ఆలిస్, 100⟩ అంటే ఆలిస్ అకౌంట్ బ్యాలెన్స్ 100 కి సెట్ చేయడం.

పై పరిష్కారం అనేక ప్రధాన సమస్యలను కలిగి ఉంది:

  • ఆలిస్ కేవలం పంపడం ద్వారా అపరిమిత సంఖ్యలో నాణేలను అందుకోవచ్చు లావాదేవీ ⟨ఆలిస్, 100⟩.
  • బాబ్‌కు ఆలిస్ పంపే నాణేలు పనికిరానివి, అదే టెక్నిక్ ఉపయోగించి బాబ్ తనకు అపరిమిత సంఖ్యలో నాణేలను పంపవచ్చు.

సూచన # 2: లోటును పరిగణనలోకి తీసుకోవడం

డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్

ఇప్పుడు మేము పరిస్థితిని పర్యవేక్షిస్తున్నాము కనుక నాణేల సంఖ్య Ka కనీసం సమానంగా ఉంది n బదిలీ లావాదేవీకి ముందు. అయితే, ఇది కొరత సమస్యను పరిష్కరిస్తున్నప్పుడు, ఆలిస్ నాణేలను ఎవరు పంపవచ్చనే సమాచారం లేదు (ప్రస్తుతానికి, ఎవరైనా దీన్ని చేయవచ్చు, ప్రధాన విషయం మొత్తాన్ని పరిమితం చేసే నియమాన్ని ఉల్లంఘించకూడదు).

ప్రతిపాదన # 3: కొరత మరియు యాక్సెస్ నియంత్రణ కలపడం

డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్

మేము డిజిటల్ సిగ్నేచర్ మెకానిజంతో ఈ సమస్యను పరిష్కరిస్తాము ధృవీకరించు_సిగ్ బ్యాలెన్స్ తనిఖీ చేయడానికి ముందు, అంటే ఆలిస్ లావాదేవీపై సంతకం చేయడానికి మరియు ఆమె నాణేల యజమాని అని నిర్ధారించడానికి తన ప్రైవేట్ కీని ఉపయోగిస్తుంది.

బ్లాక్‌చెయిన్ ప్రోగ్రామింగ్ భాషలు

ఇప్పటికే ఉన్న బ్లాక్‌చెయిన్ భాషలు కింది సమస్యలను ఎదుర్కొంటున్నాయి (అవన్నీ మూవ్‌లో పరిష్కరించబడ్డాయి (గమనిక: దురదృష్టవశాత్తు, వ్యాసం రచయిత తన పోలికలలో Ethereum కి మాత్రమే విజ్ఞప్తి చేస్తారు, కాబట్టి వాటిని ఈ సందర్భంలో మాత్రమే తీసుకోవడం విలువ. ఉదాహరణకు, కింది వాటిలో చాలావరకు EOS లో కూడా పరిష్కరించబడతాయి.,

ఆస్తుల పరోక్ష ప్రాతినిధ్యం. ఒక ఆస్తి పూర్ణాంకాన్ని ఉపయోగించి ఎన్కోడ్ చేయబడింది, కానీ పూర్ణాంకం అనేది ఆస్తికి సమానం కాదు. నిజానికి, Bitcoin/Ether/<ఏదైనా కాయిన్>ని సూచించే రకం లేదా విలువ లేదు! ఇది ఆస్తులను ఉపయోగించుకునే ప్రోగ్రామ్‌లను వ్రాయడం కష్టతరం చేస్తుంది మరియు దోషాలకు గురవుతుంది. విధానాలకు/నుండి ఆస్తులను పంపడం లేదా నిర్మాణాలలో ఆస్తులను నిల్వ చేయడం వంటి నమూనాలకు భాష నుండి ప్రత్యేక మద్దతు అవసరం.

లోటు విస్తరించదగినది కాదు... భాష ఒక అరుదైన ఆస్తిని మాత్రమే సూచిస్తుంది. అదనంగా, కొరతకు వ్యతిరేకంగా ఉన్న నివారణలు భాష యొక్క అర్థశాస్త్రంలో నేరుగా గట్టిగా ఉంటాయి. డెవలపర్, అతను అనుకూల ఆస్తిని సృష్టించాలనుకుంటే, వనరు యొక్క అన్ని అంశాలను జాగ్రత్తగా నియంత్రించాలి. ఇవి ఖచ్చితంగా Ethereum స్మార్ట్ కాంట్రాక్ట్‌ల సమస్యలు.

యూజర్లు తమ ఆస్తులు, ERC-20 టోకెన్‌లను జారీ చేస్తారు, విలువలు మరియు మొత్తం సరఫరా రెండింటిని నిర్ణయించడానికి పూర్ణాంకాలను ఉపయోగిస్తారు. కొత్త టోకెన్లు సృష్టించబడినప్పుడల్లా, స్మార్ట్ కాంట్రాక్ట్ కోడ్ తప్పనిసరిగా ఉద్గార నియమాలకు అనుగుణంగా ఉందో లేదో ధృవీకరించాలి. అదనంగా, ఆస్తుల పరోక్ష ప్రదర్శన కొన్ని సందర్భాల్లో తీవ్రమైన లోపాలకు దారితీస్తుంది - నకిలీ, రెట్టింపు వ్యయం లేదా ఆస్తుల పూర్తి నష్టం.

సౌకర్యవంతమైన యాక్సెస్ నియంత్రణ లేకపోవడం... నేడు వాడుకలో ఉన్న ఏకైక యాక్సెస్ నియంత్రణ విధానం అసమాన క్రిప్టోగ్రఫీని ఉపయోగించే సంతకం పథకం. కొరత రక్షణ వలె, యాక్సెస్ కంట్రోల్ పాలసీలు భాష యొక్క అర్థశాస్త్రంలో లోతుగా పొందుపరచబడ్డాయి. ప్రోగ్రామర్లు తమ సొంత యాక్సెస్ నియంత్రణ విధానాలను నిర్వచించడానికి భాషను ఎలా పొడిగించాలి అనేది చాలా గమ్మత్తైన పని.

ఇది Ethereumలో కూడా వర్తిస్తుంది, ఇక్కడ స్మార్ట్ కాంట్రాక్టులు యాక్సెస్ నియంత్రణ కోసం స్థానిక క్రిప్టోగ్రఫీ మద్దతును కలిగి ఉండవు. డెవలపర్‌లు తప్పనిసరిగా యాక్సెస్ నియంత్రణను మాన్యువల్‌గా సెట్ చేయాలి, ఉదాహరణకు, ఓన్లీ ఓనర్ మాడిఫైయర్‌ని ఉపయోగించి.

నేను Ethereumకి పెద్ద అభిమానిని అయినప్పటికీ, భద్రతా ప్రయోజనాల కోసం ఆస్తి ప్రాపర్టీలకు భాష స్థానికంగా మద్దతు ఇవ్వాలని నేను నమ్ముతున్నాను. ప్రత్యేకించి, ఈథర్‌ను స్మార్ట్ కాంట్రాక్ట్‌కి బదిలీ చేయడంలో డైనమిక్ డిస్‌పాచ్ ఉంటుంది, ఇది రీ-ఎంట్రెన్సీ వల్నరబిలిటీస్ అని పిలువబడే కొత్త తరగతి బగ్‌లను పరిచయం చేసింది. ఇక్కడ డైనమిక్ డిస్పాచ్ అంటే కోడ్ యొక్క ఎగ్జిక్యూషన్ లాజిక్ కంపైల్ సమయంలో (స్టాటిక్) కాకుండా రన్‌టైమ్ (డైనమిక్) వద్ద నిర్ణయించబడుతుంది.

ఈ విధంగా, సాలిడిటీలో, కాంట్రాక్ట్ A కాంట్రాక్ట్ Bలో ఒక ఫంక్షన్‌ని పిలిచినప్పుడు, కాంట్రాక్ట్ B కాంట్రాక్ట్ A డెవలపర్ ద్వారా ఉద్దేశించని కోడ్‌ని అమలు చేస్తుంది, దీని ఫలితంగా ఉండవచ్చు రీ-ఎంట్రీ దుర్బలత్వాలు (ఒప్పందం A అనుకోకుండా ఖాతా నిల్వలను తీసివేయడానికి ముందు డబ్బును ఉపసంహరించుకోవడానికి ఒప్పందం B వలె పనిచేస్తుంది).

మూవ్ లాంగ్వేజ్ డిజైన్ ఫండమెంటల్స్

ఫస్ట్-ఆర్డర్ వనరులు

ఉన్నత స్థాయిలో, మూవ్ లాంగ్వేజ్‌లోని మాడ్యూల్స్ / రిసోర్సెస్ / ప్రొసీజర్‌ల మధ్య పరస్పర చర్య OOP భాషలలోని క్లాసులు / ఆబ్జెక్ట్‌లు మరియు పద్ధతుల మధ్య సంబంధానికి చాలా పోలి ఉంటుంది.
మూవ్ మాడ్యూల్స్ ఇతర బ్లాక్‌చైన్‌లలోని స్మార్ట్ కాంట్రాక్ట్‌ల మాదిరిగానే ఉంటాయి. మాడ్యూల్ వనరుల రకాలు మరియు విధానాలను ప్రకటించింది, ఇది ప్రకటించిన వనరులను సృష్టించడం, నాశనం చేయడం మరియు నవీకరించడం కోసం నియమాలను నిర్వచిస్తుంది. కానీ ఇవన్నీ కేవలం సమావేశాలు ("పడికట్టు”) తరలింపులో. మేము ఈ అంశాన్ని కొంచెం తరువాత వివరిస్తాము.

వశ్యత

మూవ్ స్క్రిప్టింగ్ ద్వారా తులకు వశ్యతను జోడిస్తుంది. తులారాశిలోని ప్రతి లావాదేవీ స్క్రిప్ట్‌ను కలిగి ఉంటుంది, ఇది తప్పనిసరిగా లావాదేవీ యొక్క ప్రధాన ప్రక్రియ. స్క్రిప్ట్ ఒక నిర్దిష్ట చర్యను చేయగలదు, ఉదాహరణకు, పేర్కొన్న గ్రహీతల జాబితాకు చెల్లింపులు లేదా ఇతర వనరులను మళ్లీ ఉపయోగించుకోవచ్చు - ఉదాహరణకు, సాధారణ తర్కం పేర్కొన్న విధానాన్ని కాల్ చేయడం ద్వారా. అందుకే మూవ్ లావాదేవీ స్క్రిప్ట్‌లు ఎక్కువ సౌలభ్యాన్ని అందిస్తాయి. స్క్రిప్ట్ వన్-టైమ్ మరియు రిపీటింగ్ బిహేవియర్‌లను రెండింటినీ ఉపయోగించవచ్చు, అయితే Ethereum పునరావృతమయ్యే స్క్రిప్ట్‌లను మాత్రమే అమలు చేయగలదు (స్మార్ట్ కాంట్రాక్ట్ పద్ధతిలో ఒక పద్ధతిని కాల్ చేయడం). స్మార్ట్ కాంట్రాక్ట్ యొక్క విధులు అనేక సార్లు అమలు చేయబడటం వలన దీనిని "పునర్వినియోగం" అని పిలుస్తారు. (గమనిక: ఇక్కడ విషయం చాలా సూక్ష్మమైనది. ఒక వైపు, బిట్‌కాయిన్‌లో నకిలీ-బైట్‌కోడ్ రూపంలో లావాదేవీ స్క్రిప్ట్‌లు కూడా ఉన్నాయి. మరోవైపు, నేను అర్థం చేసుకున్నట్లుగా, Move ఈ భాషను పూర్తి స్థాయి స్మార్ట్ కాంట్రాక్ట్ భాష స్థాయికి విస్తరిస్తుంది).

భద్రత

మూవ్ ఎక్జిక్యూటబుల్ ఫార్మాట్ బైట్‌కోడ్, ఇది ఒక వైపు, అసెంబ్లీ భాష కంటే ఉన్నత స్థాయి భాష, కానీ సోర్స్ కోడ్ కంటే తక్కువ స్థాయి. బైట్‌కోడ్ వెరిఫైయర్‌ని ఉపయోగించి వనరులు, రకాలు మరియు మెమరీ భద్రత కోసం రన్-టైమ్ (ఆన్-చైన్)లో తనిఖీ చేయబడుతుంది, ఆపై వ్యాఖ్యాత ద్వారా అమలు చేయబడుతుంది. ఈ విధానం సోర్స్ కోడ్ యొక్క భద్రతను అందించడానికి Moveని అనుమతిస్తుంది, కానీ కంపైలేషన్ ప్రక్రియ లేకుండా మరియు సిస్టమ్‌కు కంపైలర్‌ను జోడించాల్సిన అవసరం లేదు. మూవ్‌ని బైట్‌కోడ్ లాంగ్వేజ్ చేయడం నిజంగా మంచి పరిష్కారం. సాలిడిటీ విషయంలో వలె ఇది మూలం నుండి సంకలనం చేయవలసిన అవసరం లేదు మరియు కంపైలర్ ఇన్‌ఫ్రాస్ట్రక్చర్‌పై సాధ్యమయ్యే వైఫల్యాలు లేదా దాడుల గురించి ఆందోళన చెందాల్సిన అవసరం లేదు.

నిర్ధారణతత్వమేనని

మేము తనిఖీలను వీలైనంత సులభంగా నిర్వహించాలని లక్ష్యంగా పెట్టుకున్నాము, ఎందుకంటే ఇదంతా చైన్‌లో జరుగుతుంది (గమనిక: ఆన్‌లైన్‌లో, ప్రతి లావాదేవీ అమలు సమయంలో, ఏదైనా ఆలస్యం మొత్తం నెట్‌వర్క్ మందగించడానికి దారితీస్తుంది), అయితే, ప్రారంభంలో భాష రూపకల్పన ఆఫ్-చెయిన్ స్టాటిక్ ధృవీకరణ సాధనాలను ఉపయోగించడానికి సిద్ధంగా ఉంది. ఇది మరింత ప్రాధాన్యమైనప్పటికీ, ప్రస్తుతానికి ధృవీకరణ సాధనాల అభివృద్ధి (ప్రత్యేక టూల్‌కిట్‌గా) భవిష్యత్తు కోసం వాయిదా వేయబడింది మరియు ఇప్పుడు రన్-టైమ్ (ఆన్-చైన్)లో డైనమిక్ వెరిఫికేషన్‌కు మాత్రమే మద్దతు ఉంది.

మాడ్యులారిటీ

మూవ్ మాడ్యూల్స్ డేటా సంగ్రహాన్ని అందిస్తాయి మరియు వనరులపై క్లిష్టమైన కార్యకలాపాలను స్థానికీకరిస్తాయి. మాడ్యూల్ అందించిన ఎన్‌క్యాప్సులేషన్, మూవ్ టైప్ సిస్టమ్ అందించిన రక్షణతో కలిపి, మాడ్యూల్ రకాల్లో సెట్ చేయబడిన లక్షణాలను మాడ్యూల్ వెలుపల కోడ్ ద్వారా ఉల్లంఘించలేమని నిర్ధారిస్తుంది. ఇది బాగా ఆలోచనాత్మకమైన సంగ్రహణ డిజైన్, అంటే కాంట్రాక్ట్ లోపల ఉన్న డేటా కాంట్రాక్ట్ ఫ్రేమ్‌వర్క్‌లో మాత్రమే మారుతుంది, కానీ బయట కాదు.

డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్

అవలోకనాన్ని తరలించండి

మాడ్యూల్ వెలుపల ప్రోగ్రామర్ చేసే హానికరమైన లేదా అజాగ్రత్త చర్యలు మాడ్యూల్ వనరుల భద్రతకు రాజీ పడలేవని లావాదేవీ స్క్రిప్ట్ ఉదాహరణ చూపిస్తుంది. తరువాత, తుల బ్లాక్‌చెయిన్‌ను ప్రోగ్రామ్ చేయడానికి మాడ్యూల్స్, వనరులు మరియు విధానాలు ఎలా ఉపయోగించబడుతాయో ఉదాహరణలు చూద్దాం.

పీర్-టు-పీర్ చెల్లింపులు

డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్

మొత్తంలో పేర్కొన్న నాణేల సంఖ్య పంపినవారి బ్యాలెన్స్ నుండి గ్రహీతకు బదిలీ చేయబడుతుంది.
ఇక్కడ కొన్ని కొత్త విషయాలు ఉన్నాయి (ఎరుపు రంగులో హైలైట్ చేయబడింది):

  • 0x0: మాడ్యూల్ నిల్వ చేయబడిన ఖాతా చిరునామా
  • కరెన్సీ: మాడ్యూల్ పేరు
  • నాణెం: వనరుల రకం
  • ప్రక్రియ ద్వారా తిరిగి వచ్చిన నాణెం విలువ రకం 0x0.Currency.Coin యొక్క వనరు విలువ
  • కదలిక (): విలువ మళ్లీ ఉపయోగించబడదు
  • కాపీ (): విలువను తర్వాత ఉపయోగించవచ్చు

కోడ్‌ని అన్వయించండి: మొదటి దశలో, పంపినవారు అనే ప్రక్రియకు కాల్ చేస్తారు పంపినవారి నుండి ఉపసంహరించుకోండి లో నిల్వ చేయబడిన మాడ్యూల్ నుండి 0x0.కరెన్సీ. రెండవ దశలో, పంపినవారు కాయిన్ రిసోర్స్ విలువను మాడ్యూల్ డిపాజిట్ విధానంలోకి తరలించడం ద్వారా గ్రహీతకు నిధులను బదిలీ చేస్తారు 0x0.కరెన్సీ.

తనిఖీల ద్వారా తిరస్కరించబడే కోడ్‌లోని లోపాల యొక్క మూడు ఉదాహరణలు ఇక్కడ ఉన్నాయి:
కాల్‌ను మార్చడం ద్వారా నిధులను నకిలీ చేయండి తరలించు (నాణెం)కాపీ (నాణెం). వనరులు మాత్రమే తరలించబడతాయి. వనరు యొక్క పరిమాణాన్ని నకిలీ చేయడానికి ప్రయత్నిస్తున్నారు (ఉదాహరణకు, కాల్ చేయడం ద్వారా కాపీ (నాణెం) పై ఉదాహరణలో) బైట్‌కోడ్‌ని తనిఖీ చేస్తున్నప్పుడు లోపం ఏర్పడుతుంది.

పేర్కొనడం ద్వారా నిధుల పునర్వినియోగం తరలించు (నాణెం) రెండుసార్లు . ఒక లైన్ కలుపుతోంది 0x0.Currency.deposit (కాపీ (కొన్ని_చెల్లింపుదారులు), తరలింపు (నాణెం)) ఉదాహరణకు, పైన పేర్కొన్నది పంపినవారు నాణేలను రెండుసార్లు "ఖర్చు" చేయడానికి అనుమతిస్తుంది - మొదటి సారి చెల్లింపుదారుడితో మరియు రెండవది కొంత_ఇతర_చెల్లింపుదారు. ఇది భౌతిక ఆస్తితో సాధ్యం కాని అవాంఛనీయ ప్రవర్తన. అదృష్టవశాత్తూ, Move ఈ ప్రోగ్రామ్‌ని తిరస్కరిస్తుంది.

తిరస్కరణ కారణంగా నిధుల నష్టం తరలించు (నాణెం). మీరు వనరును తరలించకపోతే (ఉదాహరణకు, కలిగి ఉన్న లైన్‌ను తొలగించడం ద్వారా తరలించు (నాణెం)), బైట్‌కోడ్ ధృవీకరణ లోపం త్రోసివేయబడుతుంది. ఇది ప్రమాదవశాత్తు లేదా హానికరమైన నిధుల నష్టం నుండి మూవ్ ప్రోగ్రామర్‌లను రక్షిస్తుంది.

కరెన్సీ మాడ్యూల్

డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్

ప్రతి ఖాతాలో 0 లేదా అంతకంటే ఎక్కువ మాడ్యూల్‌లు (దీర్ఘ చతురస్రాలుగా చూపబడతాయి) మరియు ఒకటి లేదా అంతకంటే ఎక్కువ వనరు విలువలు (సిలిండర్‌లుగా చూపబడతాయి) ఉండవచ్చు. ఉదాహరణకు, వద్ద ఒక ఖాతా 0x0 మాడ్యూల్ కలిగి ఉంది 0x0.కరెన్సీ మరియు వనరుల రకం విలువ 0x0.Currency.Coin. చిరునామాలో ఖాతా 0x1 రెండు వనరులు మరియు ఒక మాడ్యూల్ ఉన్నాయి; చిరునామాలో ఖాతా 0x2 రెండు మాడ్యూల్స్ మరియు ఒక వనరు విలువను కలిగి ఉంది.

నెకోటరీ క్షణాలు:

  • లావాదేవీ స్క్రిప్ట్ పరమాణు - ఇది పూర్తిగా అమలు చేయబడుతుంది లేదా అస్సలు కాదు.
  • మాడ్యూల్ అనేది ప్రపంచవ్యాప్తంగా అందుబాటులో ఉండే దీర్ఘకాల కోడ్ భాగం.
  • గ్లోబల్ స్టేట్ హ్యాష్ టేబుల్‌గా రూపొందించబడింది, ఇక్కడ కీ ఖాతా చిరునామా
  • ఖాతాలు ఇచ్చిన రకం యొక్క ఒకటి కంటే ఎక్కువ వనరుల విలువను కలిగి ఉండకూడదు మరియు ఇచ్చిన పేరుతో ఒకటి కంటే ఎక్కువ మాడ్యూల్‌లను కలిగి ఉండకూడదు (ఖాతా వద్ద 0x0 అదనపు వనరును కలిగి ఉండకూడదు 0x0.Currency.Coin లేదా పేరు పెట్టబడిన మరొక మాడ్యూల్ కరెన్సీ)
  • డిక్లేర్డ్ మాడ్యూల్ యొక్క చిరునామా రకంలో భాగం (0x0.Currency.Coin и 0x1.Currency.Coin పరస్పరం మార్చుకోలేని ప్రత్యేక రకాలు)
  • ప్రోగ్రామర్లు తమ కస్టమ్ రిసోర్స్‌ని నిర్వచించడం ద్వారా ఖాతాలో ఈ రకమైన వనరు యొక్క బహుళ సందర్భాలను నిల్వ చేయవచ్చు - (వనరు TwoCoins {c1: 0x0.Currency.Coin, c2: 0x0.Currency.Coin})
  • మీరు వైరుధ్యాలు లేకుండా వనరులను దాని పేరుతో సూచించవచ్చు, ఉదాహరణకు మీరు ఉపయోగించి రెండు వనరులను సూచించవచ్చు TwoCoins.c1 и TwoCoins.c2.

కాయిన్ రిసోర్స్ ప్రకటన

డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్
మాడ్యూల్ పేరు పెట్టబడింది కరెన్సీ మరియు పేరు పెట్టబడిన వనరు రకం నాణెం

నెకోటరీ క్షణాలు:

  • నాణెం ఒక రకమైన ఫీల్డ్‌తో కూడిన నిర్మాణం u64 (64-బిట్ సంతకం చేయని పూర్ణాంకం)
  • మాడ్యూల్ విధానాలు మాత్రమే కరెన్సీ రకం విలువలను సృష్టించవచ్చు లేదా నాశనం చేయవచ్చు నాణెం.
  • ఇతర మాడ్యూల్‌లు మరియు స్క్రిప్ట్‌లు మాడ్యూల్ అందించిన పబ్లిక్ ప్రొసీజర్‌ల ద్వారా విలువ ఫీల్డ్‌ను మాత్రమే వ్రాయగలవు లేదా సూచించగలవు.

డిపాజిట్ అమ్మకం

డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్

ఈ విధానం ఒక వనరును అంగీకరిస్తుంది నాణెం ఇన్‌పుట్‌గా మరియు దానిని వనరుతో కలుపుతుంది నాణెంగ్రహీత ఖాతాలో నిల్వ చేయబడుతుంది:

  1. ఇన్‌పుట్ రిసోర్స్ కాయిన్‌ను నాశనం చేయడం మరియు దాని విలువను రికార్డ్ చేయడం.
  2. గ్రహీత ఖాతాలో నిల్వ చేయబడిన ప్రత్యేకమైన కాయిన్ రిసోర్స్‌కి లింక్‌ని అందుకోవడం.
  3. విధానాన్ని కాల్ చేస్తున్నప్పుడు పరామితిలో ఆమోదించిన విలువ ద్వారా నాణేల సంఖ్య యొక్క విలువను మార్చడం.

నెకోటరీ క్షణాలు:

  • అన్ప్యాక్, బారో గ్లోబల్ - అంతర్నిర్మిత విధానాలు
  • అన్ప్యాక్ చేయండి T రకం వనరును తొలగించడానికి ఇది ఏకైక మార్గం. ప్రక్రియ వనరును ఇన్‌పుట్‌గా తీసుకుంటుంది, దానిని నాశనం చేస్తుంది మరియు వనరు యొక్క ఫీల్డ్‌లతో అనుబంధించబడిన విలువను అందిస్తుంది.
  • బారో గ్లోబల్ చిరునామాను ఇన్‌పుట్‌గా తీసుకుంటుంది మరియు ఆ చిరునామా ద్వారా ప్రచురించబడిన (యాజమాన్యం) T యొక్క ప్రత్యేక ఉదాహరణకి సూచనను అందిస్తుంది
  • &మట్ కాయిన్ ఇది వనరుకి లింక్ నాణెం

withdraw_from_sender అమలు

డైవ్ ఇన్ మూవ్ - Facebook యొక్క Libra blockchain ప్రోగ్రామింగ్ లాంగ్వేజ్

ఈ విధానం:

  1. ప్రత్యేకమైన వనరుకి లింక్‌ను పొందుతుంది నాణెం, పంపినవారి ఖాతాకు లింక్ చేయబడింది
  2. వనరు విలువను తగ్గిస్తుంది నాణెం పేర్కొన్న మొత్తానికి లింక్ ద్వారా
  3. కొత్త వనరును సృష్టిస్తుంది మరియు తిరిగి అందిస్తుంది నాణెం నవీకరించబడిన బ్యాలెన్స్‌తో.

నెకోటరీ క్షణాలు:

  • డిపాజిట్ ఎవరైనా కారణం కావచ్చు, కానీ పంపినవారి నుండి ఉపసంహరించుకోండి కాలింగ్ ఖాతా యొక్క నాణేలకు మాత్రమే యాక్సెస్ ఉంది
  • GetTxnSender చిరునామా ఒకేలా msg.sender సాలిడిటీలో
  • తప్ప తిరస్కరించండి ఒకేలా అవసరం సాలిడిటీలో. ఈ చెక్ విఫలమైతే, లావాదేవీ నిలిపివేయబడుతుంది మరియు అన్ని మార్పులు వెనక్కి తీసుకోబడతాయి.
  • ప్యాక్ ఇది టైప్ T యొక్క కొత్త వనరును సృష్టించే అంతర్నిర్మిత విధానం.
  • అలాగే అన్ప్యాక్ చేయండి, ప్యాక్ వనరు వివరించబడిన మాడ్యూల్ లోపల మాత్రమే కాల్ చేయవచ్చు T

తీర్మానం

మేము Move భాష యొక్క ప్రధాన లక్షణాలను పరిశీలించాము, దానిని Ethereumతో పోల్చాము మరియు స్క్రిప్ట్‌ల యొక్క ప్రాథమిక వాక్యనిర్మాణంతో కూడా సుపరిచితం అయ్యాము. చివరగా, తనిఖీ చేయమని నేను బాగా సిఫార్సు చేస్తున్నాను అసలు తెల్ల కాగితం. ఇది ప్రోగ్రామింగ్ లాంగ్వేజ్ డిజైన్ సూత్రాలకు సంబంధించిన చాలా వివరాలను అలాగే అనేక ఉపయోగకరమైన లింక్‌లను కలిగి ఉంటుంది.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి