Move වෙත කිමිදෙන්න - Facebook හි Libra blockchain ක්‍රමලේඛන භාෂාව

මීලඟට, අපි Move භාෂාවේ ප්‍රධාන ලක්ෂණ සහ ස්මාර්ට් කොන්ත්‍රාත්තු සඳහා දැනටමත් ජනප්‍රිය භාෂාවක් සමඟ එහි ප්‍රධාන වෙනස්කම් මොනවාදැයි විස්තරාත්මකව බලමු - Solidity (Ethereum වේදිකාවේ). තොරතුරු පදනම් වී ඇත්තේ අන්තර්ජාලයෙන් ලබාගත හැකි පිටු 26ක ධවල පත්‍රිකාවක අධ්‍යයනයක් මතය.

හැඳින්වීම

Move යනු පරිශීලක ගනුදෙනු සහ ස්මාර්ට් කොන්ත්‍රාත්තු ක්‍රියාත්මක කිරීමට භාවිතා කරන ක්‍රියාත්මක කළ හැකි බයිට්කේත භාෂාවකි. කරුණාකර කරුණු දෙකක් සටහන් කරන්න:

  1. Move යනු Move Virtual Machine මත සෘජුවම ක්‍රියාත්මක කළ හැකි බයිට්කේත භාෂාවක් වන අතර, Solidity (Ethereum හි ස්මාර්ට් කොන්ත්‍රාත් භාෂාව) යනු EVM (Ethereum Virtual Machine) තුළ ක්‍රියාත්මක කිරීමට පෙර ප්‍රථමයෙන් bytecode බවට සම්පාදනය කරන ඉහළ මට්ටමේ භාෂාවකි.
  2. Move ස්මාර්ට් කොන්ත්‍රාත්තු ක්‍රියාත්මක කිරීමට පමණක් නොව, පරිශීලක ගනුදෙනු සඳහාද (මෙය පසුව වැඩි විස්තර) භාවිතා කළ හැකි අතර Solidity යනු ස්මාර්ට් කොන්ත්‍රාත්තුවෙන් පමණක් භාෂාවකි.


පරිවර්තනය සිදු කරන ලද්දේ INDEX Protocol ව්‍යාපෘති කණ්ඩායම විසිනි. අපි දැනටමත් පරිවර්තනය කර ඇත ලිබ්රා ව්යාපෘතිය විස්තර කරන විශාල ද්රව්ය, දැන් Move භාෂාව ටිකක් විස්තරාත්මකව බැලීමට කාලයයි. පරිවර්තනය Habrauser සමඟ එක්ව සිදු කරන ලදී කූල්සියු

Move හි ප්‍රධාන ලක්ෂණයක් වන්නේ රේඛීය තර්කය මත පදනම්ව අර්ථකථන සමඟ අභිරුචි සම්පත් වර්ග නිර්වචනය කිරීමේ හැකියාවයි: සම්පතක් කිසි විටෙක පිටපත් කිරීමට හෝ ව්‍යංගයෙන් මකා දැමිය නොහැක, ගෙනයාම පමණි. ක්රියාකාරීව, මෙය රස්ට් භාෂාවේ හැකියාවන්ට සමාන වේ. රස්ට් හි අගයන් වරකට එක් නමකට පමණක් පැවරිය හැක. වෙනත් නමකට අගයක් පැවරීම පෙර නම යටතේ එය ලබා ගත නොහැක.

Move වෙත කිමිදෙන්න - Facebook හි Libra blockchain ක්‍රමලේඛන භාෂාව

උදාහරණයක් ලෙස, පහත කේත කොටස දෝෂයක් ඇති කරයි: මාරු කළ අගය 'x' භාවිතය. මෙයට හේතුව රස්ට් සතුව කුණු එකතු කිරීමක් නොමැති වීමයි. විචල්‍යයන් විෂය පථයෙන් බැහැර වූ විට, ඔවුන් සඳහන් කරන මතකය ද නිදහස් වේ. සරලව කිවහොත්, දත්තවල එක් "හිමිකරුවෙකු" පමණක් සිටිය හැකිය. මෙම උදාහරණයේ x මුල් අයිතිකරු සහ පසුව y නව හිමිකරු බවට පත් වේ. මෙම හැසිරීම ගැන වැඩි විස්තර මෙතැනින් කියවන්න.

විවෘත පද්ධතිවල ඩිජිටල් වත්කම් නියෝජනය කිරීම

ඩිජිටල් ලෙස නිරූපණය කිරීමට අපහසු භෞතික වත්කම්වල ගුණාංග දෙකක් තිබේ:

  • දුර්ලභත්වය (හිඟකම, මුල් පිටපතේ - හිඟකම). පද්ධතියේ වත්කම් සංඛ්යාව (විමෝචනය) පාලනය කළ යුතුය. පවතින වත්කම් අනුපිටපත් කිරීම තහනම් කළ යුතු අතර නව ඒවා නිර්මාණය කිරීම වරප්‍රසාදිත මෙහෙයුමකි.
  • ප්‍රවේශ පාලනය. ප්‍රවේශ පාලන ප්‍රතිපත්ති භාවිතයෙන් වත්කම් ආරක්ෂා කිරීමට පද්ධති සහභාගිකයාට හැකි විය යුතුය.

භෞතික වත්කම් සඳහා ස්වාභාවික වන මෙම ලක්ෂණ දෙක අපට වත්කම් ලෙස සැලකීමට අවශ්‍ය නම් ඩිජිටල් වස්තූන් සඳහා ද ක්‍රියාත්මක කළ යුතුය. නිදසුනක් වශයෙන්, දුර්ලභ ලෝහයක් ස්වභාවික හිඟයක් ඇති අතර, එය ඔබට පමණක් ප්රවේශ විය හැකිය (උදාහරණයක් ලෙස එය ඔබගේ අත්වල තබා ගැනීම) සහ ඔබට එය විකිණීම හෝ වියදම් කළ හැකිය.

මෙම ගුණාංග දෙකට අප පැමිණි ආකාරය නිදර්ශනය කිරීම සඳහා, පහත සඳහන් වාක්‍ය වලින් ආරම්භ කරමු:

යෝජනාව #1: හිඟකම සහ ප්‍රවේශ පාලනයකින් තොරව සරලම රීතිය

Move වෙත කිමිදෙන්න - Facebook හි Libra blockchain ක්‍රමලේඛන භාෂාව

  • G[K]:=n යතුර මගින් ප්‍රවේශ විය හැකි සංඛ්‍යාවක් යාවත්කාලීන කිරීම දක්වයි К බ්ලොක්චේන්හි ගෝලීය තත්වය තුළ, නව අර්ථයක් සමඟ n.
  • ගනුදෙනුව ⟨ඇලිස්, 100⟩ එයින් අදහස් වන්නේ ඇලිස්ගේ ගිණුම් ශේෂය 100 ට සැකසීමයි.

ඉහත විසඳුම බරපතල ගැටළු කිහිපයක් ඇත:

  • ඇලිස්ට යැවීමෙන් අසීමිත කාසි ගණනක් ලබා ගත හැකිය ගනුදෙනුව ⟨ඇලිස්, 100⟩.
  • ඇලිස් බොබ්ට යවන කාසිවල වටිනාකමක් නැත, මන්ද බොබ්ට එම තාක්ෂණයම භාවිතා කරමින් අසීමිත කාසි ගණනක් යැවිය හැකිය.

යෝජනා අංක 2: හිඟය සැලකිල්ලට ගන්න

Move වෙත කිමිදෙන්න - Facebook හි Libra blockchain ක්‍රමලේඛන භාෂාව

දැන් අපි කාසි සංඛ්යාව එසේ තත්ත්වය අධීක්ෂණය Ka අවම වශයෙන් සමාන විය n හුවමාරු ගනුදෙනුවට පෙර. කෙසේ වෙතත්, මෙය හිඟතා ගැටළුව විසඳන අතර, ඇලිස් කාසි යැවිය හැක්කේ කාටද යන්න පිළිබඳ තොරතුරු නොමැත (දැනට, ඕනෑම කෙනෙකුට මෙය කළ හැකිය, ඔබ ප්‍රමාණ සීමා රීතිය කඩ නොකරන තාක් කල්).

යෝජනාව #3: හිඟකම සහ ප්‍රවේශ පාලනය ඒකාබද්ධ කරන්න

Move වෙත කිමිදෙන්න - Facebook හි Libra blockchain ක්‍රමලේඛන භාෂාව

අපි ඩිජිටල් අත්සන යාන්ත්‍රණයක් භාවිතයෙන් මෙම ගැටළුව විසඳන්නෙමු verify_sig ශේෂය පරීක්ෂා කිරීමට පෙර, එයින් අදහස් වන්නේ ඇලිස් ගනුදෙනුව අත්සන් කිරීමට සහ ඇයගේ කාසිවල හිමිකරු බව තහවුරු කිරීමට ඇගේ පුද්ගලික යතුර භාවිතා කරන බවයි.

බ්ලොක්චේන් ක්‍රමලේඛන භාෂා

පවතින බ්ලොක්චේන් භාෂා පහත ගැටළු වලට මුහුණ දෙයි (ඒ සියල්ල Move තුල විසඳා ඇත). අවාසනාවකට මෙන්, ලිපියේ කතුවරයා ඔහුගේ සැසඳීම්වලදී Ethereum වෙත පමණක් යොමු කරයි, එබැවින් ඒවා මෙම සන්දර්භය තුළ පමණක් ගත යුතුය. උදාහරණයක් ලෙස, පහත බොහෝ දේ EOS හි ද විසඳනු ලැබේ)):

වත්කම් වක්‍ර නියෝජනය. වත්කමක් පූර්ණ සංඛ්‍යාවක් භාවිතයෙන් කේතනය කර ඇත, නමුත් පූර්ණ සංඛ්‍යාවක් වත්කමකට සමාන නොවේ. ඇත්ත වශයෙන්ම, Bitcoin/Ether/ නියෝජනය කරන වර්ගයක් හෝ අගයක් නොමැත! මෙය වත්කම් භාවිතා කරන වැඩසටහන් ලිවීම දුෂ්කර සහ දෝෂ සහිත කරයි. වත්කම් ක්‍රියා පටිපාටි වෙත/පිටත යැවීම හෝ ව්‍යුහයන් තුළ වත්කම් ගබඩා කිරීම වැනි රටා සඳහා භාෂාවෙන් විශේෂ සහයක් අවශ්‍ය වේ.

හිඟය පුළුල් නොවේ. භාෂාව නියෝජනය කරන්නේ එක් හිඟ වත්කමක් පමණි. ඊට අමතරව, ඌනතාවයෙන් ආරක්ෂා කිරීමේ මාධ්‍යයන් භාෂාවේ අර්ථ ශාස්ත්‍රය තුළට සෘජුවම සවි කර ඇත. සංවර්ධකයෙකුට, ඔහුට අභිරුචි වත්කමක් නිර්මාණය කිරීමට අවශ්‍ය නම්, සම්පතේ සියලු අංග ප්‍රවේශමෙන් පාලනය කළ යුතුය. Ethereum ස්මාර්ට් කොන්ත්‍රාත්තු සමඟ ඇති ගැටළු මේවාය.

පරිශීලකයන් ඔවුන්ගේ වත්කම්, ERC-20 ටෝකන නිකුත් කරයි, වටිනාකම සහ සම්පූර්ණ සැපයුම යන දෙකම තීරණය කිරීමට පූර්ණ සංඛ්‍යා භාවිතා කරයි. නව ටෝකන නිර්මාණය කරන සෑම විටම, ස්මාර්ට් කොන්ත්‍රාත් කේතය ස්වාධීනව විමෝචන නීතිවලට අනුකූල වීම තහවුරු කළ යුතුය. ඊට අමතරව, වත්කම්වල වක්‍ර නියෝජනය සමහර අවස්ථාවල බරපතල දෝෂ වලට තුඩු දෙයි - අනුපිටපත් කිරීම, ද්විත්ව වියදම් කිරීම හෝ වත්කම් සම්පූර්ණයෙන්ම නැතිවීම.

නම්‍යශීලී ප්‍රවේශ පාලනයක් නොමැතිකම. දැනට බලාත්මක කර ඇති එකම ප්‍රවේශ පාලන ප්‍රතිපත්තිය අසමමිතික ගුප්තකේතනය භාවිතා කරන අත්සන යෝජනා ක්‍රමයකි. හිඟතා ආරක්‍ෂාව මෙන්ම, ප්‍රවේශ පාලන ප්‍රතිපත්තිය ද භාෂාවේ අර්ථ ශාස්ත්‍රය තුළ ගැඹුරින් කාවැදී ඇත. නමුත් ක්‍රමලේඛකයින්ට ඔවුන්ගේම ප්‍රවේශ පාලන ප්‍රතිපත්ති නිර්වචනය කිරීමට ඉඩ දීම සඳහා භාෂාව දිගු කරන්නේ කෙසේද යන්න බොහෝ විට ඉතා අභියෝගාත්මක කාර්යයකි.

ස්මාර්ට් කොන්ත්‍රාත්තුවලට ප්‍රවේශ පාලනය සඳහා දේශීය ගුප්තකේතන සහාය නොමැති Ethereum මතද මෙය සත්‍ය වේ. සංවර්ධකයින් විසින් ප්‍රවේශ පාලනය හස්තීයව සැකසිය යුතුය, උදාහරණයක් ලෙස, එකම හිමිකරු විකරණකාරකය භාවිතයෙන්.

මම Ethereum හි විශාල රසිකයෙක් වුවද, ආරක්ෂක අරමුණු සඳහා වත්කම් ගුණාංග භාෂාවෙන් ස්වදේශිකව සහාය විය යුතු බව මම විශ්වාස කරමි. විශේෂයෙන්, ඊතර් ස්මාර්ට් කොන්ත්‍රාත්තුවක් වෙත මාරු කිරීම ගතික යැවීමට ඇතුළත් වන අතර, එය නැවත ඇතුල් වීමේ අවදානම් ලෙස හැඳින්වෙන නව පන්තියේ දෝෂ හඳුන්වා දී ඇත. මෙහි ගතික යැවීම යන්නෙන් අදහස් කරන්නේ කේතය ක්‍රියාත්මක කිරීමේ තර්කය සම්පාදනය කරන වේලාවේදී (ස්ථිතික) නොව ධාවන වේලාවේදී (ගතික) තීරණය කරන බවයි.

මේ අනුව, Solidity හි, කොන්ත්‍රාත්තුව B කොන්ත්‍රාත්තුවේ ශ්‍රිතයක් කැඳවන විට, කොන්ත්‍රාත්තුවේ B විසින් කොන්ත්‍රාත්තුවේ A හි සංවර්ධකයා විසින් අදහස් නොකළ කේතයක් ධාවනය කළ හැක, එය ප්‍රතිඵලයක් විය හැක. නැවත ඇතුල් වීමේ දුර්වලතා (ගිණුමේ ශේෂයන් ඇත්ත වශයෙන්ම අඩු කිරීමට පෙර මුදල් ආපසු ගැනීම සඳහා කොන්ත්රාත්තුව A අහම්බෙන් B කොන්ත්රාත්තුව ලෙස ක්රියා කරයි).

Move Language Design Fundamentals

පළමු ඇණවුම් සම්පත්

ඉහළ මට්ටමකින් කතා කරන විට, Move language හි මොඩියුල/සම්පත්/ක්‍රියා පටිපාටි අතර අන්තර්ක්‍රියා OOP භාෂා වල පන්ති/වස්තු සහ ක්‍රම අතර සම්බන්ධතා වලට බෙහෙවින් සමාන වේ.
Move හි ඇති මොඩියුල අනෙකුත් blockchains වල ස්මාර්ට් ගිවිසුම් වලට සමාන වේ. ප්‍රකාශිත සම්පත් නිර්මාණය කිරීම, විනාශ කිරීම සහ යාවත්කාලීන කිරීම සඳහා නීති නියම කරන සම්පත් වර්ග සහ ක්‍රියා පටිපාටි මොඩියුලය ප්‍රකාශ කරයි. නමුත් මේ සියල්ල සම්මුතීන් පමණි ("ප්‍රභාෂාව”) චලනය තුළ. අපි මේ කාරණය ටිකක් පසුව නිදර්ශනය කරන්නෙමු.

නම්‍යශීලී බව

Move ස්ක්‍රිප්ටින් හරහා ලිබ්‍රාවට නම්‍යශීලී බවක් එක් කරයි. ලිබ්‍රාවේ සෑම ගනුදෙනුවකම ස්ක්‍රිප්ට් ඇතුළත් වේ, එය අත්‍යවශ්‍යයෙන්ම ගනුදෙනුවේ මූලික ක්‍රියා පටිපාටිය වේ. ස්ක්‍රිප්ටයට එක් නිශ්චිත ක්‍රියාවක් සිදු කළ හැකිය, උදාහරණයක් ලෙස, නිශ්චිත ලබන්නන්ගේ ලැයිස්තුවකට ගෙවීම්, හෝ වෙනත් සම්පත් නැවත භාවිතා කිරීම - උදාහරණයක් ලෙස, සාමාන්‍ය තර්කනය නියම කර ඇති ක්‍රියා පටිපාටියක් ඇමතීමෙන්. Move ගනුදෙනු ස්ක්‍රිප්ට් වැඩි නම්‍යශීලී බවක් ලබා දෙන්නේ එබැවිනි. ස්ක්‍රිප්ට් එකකට එක් වරක් සහ පුනරාවර්තන හැසිරීම් යන දෙකම භාවිතා කළ හැකි අතර, Ethereum හට ක්‍රියාත්මක කළ හැක්කේ පුනරාවර්තනය කළ හැකි ස්ක්‍රිප්ට් පමණි (ස්මාර්ට් කොන්ත්‍රාත්තු ක්‍රමයක් මත එක් ක්‍රමයක් ඇමතීම). එය "නැවත භාවිතා කළ හැකි" ලෙස හැඳින්වීමට හේතුව ස්මාර්ට් කොන්ත්‍රාත්තුවේ කාර්යයන් කිහිප වතාවක් ක්‍රියාත්මක කළ හැකි බැවිනි. (සටහන: මෙහි කාරණය ඉතා සියුම් ය. එක් අතකින්, ව්‍යාජ බයිට්කේත ස්වරූපයෙන් ගනුදෙනු ස්ක්‍රිප්ට් ද බිට්කොයින් හි පවතී. අනෙක් අතට, මට තේරෙන පරිදි, Move මෙම භාෂාව පුළුල් කරයි, ඇත්ත වශයෙන්ම, පූර්ණ-පරිපූර්ණ ස්මාර්ට් කොන්ත්‍රාත්තු භාෂාවක මට්ටමට).

Безопасность

Move ක්‍රියාත්මක කළ හැකි ආකෘතිය bytecode වේ, එය එක් අතකින්, එකලස් කිරීමේ භාෂාවට වඩා ඉහළ මට්ටමේ භාෂාවකි, නමුත් ප්‍රභව කේතයට වඩා අඩු මට්ටමක පවතී. bytecode verifier එකක් භාවිතයෙන් සම්පත්, වර්ග සහ මතක ආරක්ෂාව සඳහා බයිට්කේතය ධාවන කාල (on-chain) තුළ පරීක්ෂා කර පසුව පරිවර්තකයා විසින් ක්‍රියාත්මක කරනු ලැබේ. මෙම ප්‍රවේශය Move හට මූලාශ්‍ර කේතයේ ආරක්ෂාව සැපයීමට ඉඩ සලසයි, නමුත් සම්පාදන ක්‍රියාවලියකින් තොරව සහ පද්ධතියට සම්පාදකයක් එක් කිරීමේ අවශ්‍යතාවයකින් තොරව. Move bytecode language එකක් කිරීම ඇත්තෙන්ම හොඳ විසඳුමක්. Solidity හි සිදු වන පරිදි එය මූලාශ්‍රයෙන් සම්පාදනය කිරීම අවශ්‍ය නොවන අතර සම්පාදක යටිතල ව්‍යුහයට සිදුවිය හැකි අසාර්ථක වීම් හෝ ප්‍රහාර ගැන කරදර විය යුතු නැත.

සත්‍යාපනය

මේ සියල්ල දාමය මත සිදු කරන බැවින්, හැකිතාක් පහසුවෙන් චෙක්පත් සිදු කිරීම අපගේ අරමුණයි (සටහන: සබැඳිව, එක් එක් ගනුදෙනුව ක්‍රියාත්මක කිරීමේදී, ඕනෑම ප්‍රමාදයක් මුළු ජාලයම මන්දගාමී වීමට හේතු වේ), කෙසේ වෙතත්, මුලදී භාෂා සැලසුම Off-chain static verification tools භාවිතා කිරීමට සූදානම් වේ. මෙය වඩාත් යෝග්‍ය වුවද, දැනට සත්‍යාපන මෙවලම් සංවර්ධනය කිරීම (වෙනම මෙවලම් කට්ටලයක් ලෙස) අනාගතයට කල් දමා ඇති අතර, දැන් සහය දක්වන්නේ ධාවන කාලයෙහි (දාමය මත) ගතික සත්‍යාපනය පමණි.

මොඩියුලරිටි

Move modules දත්ත සංක්ෂිප්ත කිරීම සහ තීරනාත්මක සම්පත් මෙහෙයුම් ස්ථානගත කිරීම සපයයි. මොඩියුලයක් මඟින් සපයන ලද කැප්සියුලේෂන්, Move ආකාරයේ පද්ධතිය මඟින් සපයනු ලබන ආරක්ෂාව සමඟ ඒකාබද්ධව, මොඩියුලයේ වර්ග මත පිහිටුවා ඇති ගුණාංග මොඩියුලයෙන් පිටත කේතය මගින් උල්ලංඝනය කළ නොහැකි බව සහතික කරයි. මෙය තරමක් දක්ෂ වියුක්ත නිර්මාණයකි, එනම් කොන්ත්‍රාත්තුවේ ඇතුළත දත්ත වෙනස් කළ හැක්කේ කොන්ත්‍රාත්තුවේ විෂය පථය තුළ මිස පිටතින් නොවන බවයි.

Move වෙත කිමිදෙන්න - Facebook හි Libra blockchain ක්‍රමලේඛන භාෂාව

සමාලෝචනය ගෙන යන්න

ගනුදෙනු ස්ක්‍රිප්ට් උදාහරණය පෙන්නුම් කරන්නේ මොඩියුලයෙන් පිටත ක්‍රමලේඛකයෙකු විසින් ද්වේෂසහගත හෝ නොසැලකිලිමත් ක්‍රියාවන් මොඩියුලයේ සම්පත් වල ආරක්ෂාවට බාධා කළ නොහැකි බවයි. මීළඟට, අපි Libra blockchain වැඩසටහන්ගත කිරීම සඳහා මොඩියුල, සම්පත් සහ ක්‍රියා පටිපාටි භාවිතා කරන ආකාරය පිළිබඳ උදාහරණ බලමු.

සම-සම ගෙවීම්

Move වෙත කිමිදෙන්න - Facebook හි Libra blockchain ක්‍රමලේඛන භාෂාව

ප්‍රමාණයෙන් නිශ්චිතව දක්වා ඇති කාසි ගණන යවන්නාගේ ශේෂයෙන් ලබන්නා වෙත මාරු කරනු ලැබේ.
මෙහි අලුත් දේවල් කිහිපයක් ඇත (රතු පැහැයෙන් උද්දීපනය කර ඇත):

  • 0x0: මොඩියුලය ගබඩා කර ඇති ගිණුමේ ලිපිනය
  • මුදල්: මොඩියුලයේ නම
  • කාසියක්: සම්පත් වර්ගය
  • ක්‍රියා පටිපාටිය මගින් ලබා දෙන කාසි අගය සම්පත් අගයක් වන අතර එහි වර්ගය 0x0.Currency.Coin වේ
  • චලනය (): අගය නැවත භාවිතා කළ නොහැක
  • පිටපත (): අගය පසුව භාවිතා කළ හැක

අපි කේතය දෙස බලමු: පළමු පියවරේදී, යවන්නා විසින් නම් කරන ලද ක්රියා පටිපාටියක් අමතයි යවන්නන්_ගෙන්_ ඉවත් කරන්න ගබඩා කර ඇති මොඩියුලයකින් 0x0.මුදල්. දෙවන පියවරේදී, යවන්නා විසින් කාසි සම්පත් අගය මොඩියුලයේ තැන්පතු ක්‍රියා පටිපාටියට ගෙන යාමෙන් ලබන්නා වෙත අරමුදල් මාරු කරයි. 0x0.මුදල්.

චෙක්පත් මගින් ප්‍රතික්ෂේප කෙරෙන කේතයේ දෝෂ සඳහා උදාහරණ තුනක් මෙන්න:
ඇමතුම වෙනස් කිරීමෙන් අරමුදල් අනුපිටපත් කරන්න චලනය (කාසිය) මත පිටපත (කාසිය). සම්පත් ගෙන යා හැක්කේ පමණි. සම්පතක ප්‍රමාණයක් අනුපිටපත් කිරීමට උත්සාහ කිරීම (උදාහරණයක් ලෙස, ඇමතීමෙන් පිටපත (කාසිය) ඉහත උදාහරණයේ) bytecode සත්‍යාපනය අතරතුර දෝෂයක් ඇති වේ.

සඳහන් කිරීම මගින් අරමුදල් නැවත භාවිතා කිරීම චලනය (කාසිය) දෙවරක් . රේඛාවක් එකතු කිරීම 0x0.Currency.තැන්පතු (පිටපත (සමහර_ගෙවන්නන්), ගෙනයාම (කාසිය)) උදාහරණයක් ලෙස, ඉහත සඳහන් කර ඇති පරිදි යවන්නාට කාසි දෙවරක් "වියදම් කිරීමට" ඉඩ සලසයි - පළමු වරට ගෙවන්නා සමඟ සහ දෙවැන්න සමහර_වෙනත්_ගෙවන්නෙක්. මෙය භෞතික වත්කමක් සමඟ කළ නොහැකි නුසුදුසු හැසිරීමකි. වාසනාවකට මෙන්, Move මෙම වැඩසටහන ප්‍රතික්ෂේප කරනු ඇත.

ප්රතික්ෂේප කිරීම හේතුවෙන් අරමුදල් අහිමි වීම චලනය (කාසිය). ඔබ සම්පත ගෙන නොයන්නේ නම් (උදාහරණයක් ලෙස, අඩංගු පේළිය මකා දැමීමෙන් චලනය (කාසිය)), බයිට්කේත සත්‍යාපන දෝෂයක් දමනු ඇත. මෙය Move programmers හට හදිසි හෝ ද්වේශ සහගත අරමුදල් අහිමි වීමෙන් ආරක්ෂා කරයි.

මුදල් මොඩියුලය

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.

කාසි සම්පත් නිවේදනය

Move වෙත කිමිදෙන්න - Facebook හි Libra blockchain ක්‍රමලේඛන භාෂාව
මොඩියුලය නම් කර ඇත මුදල් සහ සම්පත් වර්ගයක් නම් කර ඇත කාසියක්

සමහර අවස්ථා:

  • කාසියක් වර්ගයේ එක් ක්ෂේත්රයක් සහිත ව්යුහයකි U64 (64-bit unsigned integer)
  • මොඩියුල ක්‍රියා පටිපාටි පමණි මුදල් වර්ගයේ අගයන් නිර්මාණය කිරීමට හෝ විනාශ කිරීමට හැකිය කාසියක්.
  • අනෙකුත් මොඩියුල සහ ස්ක්‍රිප්ට් වලට වටිනාකම් ක්ෂේත්‍රය ලිවීමට හෝ යොමු කිරීමට හැක්කේ මොඩියුලය මඟින් සපයන පොදු ක්‍රියා පටිපාටි හරහා පමණි.

තැන්පතු විකිණීම

Move වෙත කිමිදෙන්න - Facebook හි Libra blockchain ක්‍රමලේඛන භාෂාව

මෙම ක්රියා පටිපාටිය සම්පතක් පිළිගනී කාසියක් ආදානය ලෙස සහ එය සම්පත සමඟ ඒකාබද්ධ කරයි කාසියක්ලබන්නාගේ ගිණුමේ ගබඩා කර ඇත:

  1. ආදාන සම්පත් කාසිය විනාශ කර එහි අගය සටහන් කිරීම.
  2. ලබන්නාගේ ගිණුමේ ගබඩා කර ඇති අද්විතීය කාසි සම්පතක් වෙත සබැඳියක් ලැබීම.
  3. ක්රියාපටිපාටිය ඇමතීමේ දී පරාමිතියෙහි සම්මත කර ඇති අගය අනුව කාසි ගණනෙහි අගය වෙනස් කිරීම.

සමහර අවස්ථා:

  • Unpack, BorrowGlobal - ගොඩනඟන ලද ක්රියා පටිපාටි
  • Unpack T වර්ගයේ සම්පතක් මකා දැමීමට ඇති එකම ක්‍රමය මෙයයි. ක්‍රියා පටිපාටිය මඟින් සම්පතක් ආදානය ලෙස ගෙන, එය විනාශ කර, සම්පත් ක්ෂේත්‍ර හා සම්බන්ධ අගය ආපසු ලබා දෙයි.
  • BorrowGlobal ලිපිනයක් ආදානය ලෙස ගෙන එම ලිපිනය මගින් ප්‍රකාශිත (හිමිකම් ඇති) T හි අද්විතීය අවස්ථාවක් වෙත යොමුවක් ලබා දෙයි
  • &මුට් කාසිය මෙය සම්පත වෙත සබැඳියකි කාසියක්

withdraw_from_sender ක්‍රියාත්මක කිරීම

Move වෙත කිමිදෙන්න - Facebook හි Libra blockchain ක්‍රමලේඛන භාෂාව

මෙම ක්රියා පටිපාටිය:

  1. අද්විතීය සම්පතක් වෙත සබැඳියක් ලබා ගනී කාසියක්, යවන්නාගේ ගිණුමට සම්බන්ධ කර ඇත
  2. සම්පතක වටිනාකම අඩු කරයි කාසියක් නිශ්චිත මුදල සඳහා සබැඳිය හරහා
  3. නව සම්පතක් නිර්මාණය කර ආපසු ලබා දෙයි කාසියක් යාවත්කාලීන ශේෂය සමඟ.

සමහර අවස්ථා:

  • තැන්පතු ඕනෑම කෙනෙකුට ඇති විය හැක, නමුත් යවන්නන්_ගෙන්_ ඉවත් කරන්න ඇමතුම් ගිණුමේ කාසි වලට පමණක් ප්‍රවේශය ඇත
  • GetTxnSenderAddress සමානයි msg.යවන්නා ඝනත්වය තුළ
  • ප්‍රතික්ෂේප නොකරන්න සමානයි අවශ්යයි ඝනත්වය තුළ. මෙම චෙක්පත අසාර්ථක වුවහොත්, ගනුදෙනුව නතර කර සියලු වෙනස්කම් ආපසු හරවනු ලැබේ.
  • ඇසුරුම එය T වර්ගයේ නව සම්පතක් නිර්මාණය කරන බිල්ට් ක්‍රියා පටිපාටියකි.
  • එසේම Unpack, ඇසුරුම සම්පත විස්තර කර ඇති මොඩියුලය තුළ පමණක් හැඳින්විය හැක T

නිගමනය

අපි Move භාෂාවේ ප්‍රධාන ලක්ෂණ පරීක්ෂා කර, එය Ethereum සමඟ සංසන්දනය කළ අතර, ස්ක්‍රිප්ට් වල මූලික වාක්‍ය ඛණ්ඩය පිළිබඳව ද හුරුපුරුදු විය. අවසාන වශයෙන්, පරීක්ෂා කිරීමට මම තරයේ නිර්දේශ කරමි මුල් සුදු කඩදාසි. ක්‍රමලේඛන භාෂා සැලසුම් මූලධර්ම මෙන්ම ප්‍රයෝජනවත් සබැඳි බොහෝමයක් එයට ඇතුළත් වේ.

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

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