Ontology ජාලය මත WebAssembly ස්මාර්ට් කොන්ත්‍රාත්තුවක් ලියන්නේ කෙසේද? 1 කොටස: මලකඩ

Ontology ජාලය මත WebAssembly ස්මාර්ට් කොන්ත්‍රාත්තුවක් ලියන්නේ කෙසේද? 1 කොටස: මලකඩ

Ontology Wasm තාක්‍ෂණය මගින් dApp ස්මාර්ට් කොන්ත්‍රාත්තු බ්ලොක්චේන් වෙත සංක්‍රමණය කිරීමේ පිරිවැය අඩු කරයි, එමඟින් dApp පරිසර පද්ධතිය විශාල වශයෙන් පොහොසත් කරයි.

මේ වෙලාවෙ මම ඔන්ටොලොජි වස්ම් එකවරම රස්ට් සහ C++ සංවර්ධනය සඳහා සහය දක්වයි. රස්ට් භාෂාව Wasm වලට වඩා හොඳින් සහය දක්වන අතර, උත්පාදනය කරන ලද බයිට්කේතය සරල වන අතර, කොන්ත්‍රාත් ඇමතුම්වල පිරිවැය තවදුරටත් අඩු කළ හැකිය. ඒ නිසා, ඔන්ටොලොජි ජාලයේ කොන්ත්රාත්තුවක් වර්ධනය කිරීම සඳහා රස්ට් භාවිතා කරන්නේ කෙසේද?

මලකඩ සමඟ WASM ගිවිසුමක් සංවර්ධනය කිරීම

ගිවිසුමක් සාදන්න

ගුවන් භාණ්ඩ රස්ට් සංවර්ධනය සඳහා හොඳ ව්‍යාපෘති නිර්මාණය සහ පැකේජ කළමනාකරණ මෙවලමකි, එය සංවර්ධකයින්ට කේත සහ තෙවන පාර්ශවීය පුස්තකාලවල අන්තර්ක්‍රියාකාරිත්වය වඩා හොඳින් සංවිධානය කිරීමට උපකාරී වේ. නව Ontology Wasm ගිවිසුමක් නිර්මාණය කිරීම සඳහා, පහත විධානය ක්‍රියාත්මක කරන්න:

Ontology ජාලය මත WebAssembly ස්මාර්ට් කොන්ත්‍රාත්තුවක් ලියන්නේ කෙසේද? 1 කොටස: මලකඩ

එය ජනනය කරන ව්‍යාපෘති ව්‍යුහය:

Ontology ජාලය මත WebAssembly ස්මාර්ට් කොන්ත්‍රාත්තුවක් ලියන්නේ කෙසේද? 1 කොටස: මලකඩ

Cargo.toml ගොනුව මූලික ව්‍යාපෘති තොරතුරු සහ යැපෙන පුස්තකාල තොරතුරු සැකසීමට භාවිතා කරයි. ගොනුවේ [lib] කොටස crate-type = ["cdylib"] ලෙස සැකසිය යුතුය. ගිවිසුම් තාර්කික කේතය ලිවීමට lib.rs ගොනුව භාවිතා කරයි. ඊට අමතරව, ඔබට Cargo.toml වින්‍යාස ගොනුවේ [පරාධීනතා] කොටසට පරායත්ත පරාමිතීන් එක් කිරීමට අවශ්‍ය වේ:

Ontology ජාලය මත WebAssembly ස්මාර්ට් කොන්ත්‍රාත්තුවක් ලියන්නේ කෙසේද? 1 කොටස: මලකඩ

මෙම යැපීම සමඟින්, සංවර්ධකයින්ට ඔන්ටොලොජි බ්ලොක්චේන් සමඟ අන්තර්ක්‍රියා කරන අතුරුමුහුණත් සහ අනුක්‍රමික පරාමිතිය වැනි මෙවලම් ඇමතීමට හැකිය.

කොන්ත්රාත් ඇතුළත් කිරීමේ කාර්යය

සෑම වැඩසටහනකටම අපි සාමාන්‍යයෙන් දකින ප්‍රධාන කාර්යය මෙන් ආදාන ශ්‍රිතයක් ඇත, නමුත් කොන්ත්‍රාත්තුවේ ප්‍රධාන කාර්යයක් නොමැත. රස්ට් භාවිතයෙන් Wasm කොන්ත්‍රාත්තුවක් සංවර්ධනය කරන විට, කොන්ත්‍රාත්තුව භාවිතා කිරීමට ආදාන ශ්‍රිතය ලෙස පෙරනිමි ආමන්ත්‍රණය ශ්‍රිතය භාවිතා කරයි. අථත්‍ය යන්ත්‍රයක් මඟින් ක්‍රියාත්මක කළ හැකි බයිට්කේතයකට රස්ට් ප්‍රභව කේතය සම්පාදනය කිරීමේදී රස්ට් හි ශ්‍රිතයක නම අපැහැදිලි වනු ඇත. සම්පාදකයා අනවශ්‍ය කේතයක් ජනනය කිරීම වැළැක්වීමට සහ කොන්ත්‍රාත්තුවේ ප්‍රමාණය අඩු කිරීමට, ආයාචනා ශ්‍රිතය #[no_mangle] විවරණයක් එක් කරයි.

ගනුදෙනුවක් ක්‍රියාත්මක කිරීමට ආමන්ත්‍රණ ශ්‍රිතයට පරාමිති ලැබෙන්නේ කෙසේද?

ontio_std පුස්තකාලය මඟින් ගනුදෙනුවක් ක්‍රියාත්මක කිරීම සඳහා පරාමිති ලබා ගැනීම සඳහා ධාවන කාලය:: input() ශ්‍රිතයක් සපයයි. සංවර්ධකයින්ට ZeroCopySource භාවිතා කිරීමෙන් ලැබෙන බයිට් අරාව ඉවත් කිරීමට හැකිය. එහි පළමු බයිට් අරාව කියවනු ලබන්නේ ආමන්ත්‍රණ ක්‍රමයේ නම වන අතර පසුව ක්‍රම පරාමිති වේ.

කොන්ත්රාත්තුව ක්රියාත්මක කිරීමේ ප්රතිඵලය ආපසු ලබා දෙන්නේ කෙසේද?

ontio_std පුස්තකාලය මඟින් සපයන ධාවන කාලය::ret ශ්‍රිතය ක්‍රම ක්‍රියාත්මක කිරීමේ ප්‍රතිඵලය ලබා දෙයි.

සම්පුර්ණ කරන ලද ආයාචනා ශ්‍රිතය මේ ආකාරයට පෙනේ:

Ontology ජාලය මත WebAssembly ස්මාර්ට් කොන්ත්‍රාත්තුවක් ලියන්නේ කෙසේද? 1 කොටස: මලකඩ

කොන්ත්‍රාත් දත්ත අනුක්‍රමික කිරීම සහ ඉවත් කිරීම

කොන්ත්‍රාත්තු සංවර්ධනය කිරීමේ ක්‍රියාවලියේදී, සංවර්ධකයින් සෑම විටම අනුක්‍රමිකකරණය සහ deserialization සමඟ ගැටළු වලට මුහුණ දෙයි, විශේෂයෙන් දත්ත සමුදායේ struct දත්ත වර්ගයක් ගබඩා කරන්නේ කෙසේද සහ struct දත්ත වර්ගයක් ලබා ගැනීම සඳහා දත්ත සමුදායෙන් කියවන ලද byte array එකක් deerialize කරන්නේ කෙසේද.

ontio_std පුස්තකාලය දත්ත අනුක්‍රමිකකරණය සහ deserialization සඳහා විකේතක සහ කේතන අතුරුමුහුණත් සපයයි. ව්‍යුහයක ක්ෂේත්‍ර ද විකේතනය සහ කේතීකරණ අතුරුමුහුණත් ක්‍රියාවට නංවයි, එවිට ව්‍යුහය අනුක්‍රමිකව හා විකෘති කළ හැකිය. විවිධ දත්ත වර්ග අනුක්‍රමික වන විට සින්ක් පන්තියේ අවස්ථා අවශ්‍ය වේ. සින්ක් පන්තියේ උදාහරණයකට බයිට් වර්ගයේ දත්ත ගබඩා කරන කට්ටල ආකාරයේ ක්ෂේත්‍ර buf එකක් ඇති අතර, සියලුම අනුක්‍රමික දත්ත buf තුළ ගබඩා වේ.

ස්ථාවර දිග දත්ත සඳහා (උදා: byte, u16, u32, u64, ආදිය), දත්ත සෘජුවම byte array එකක් බවට පරිවර්තනය කර පසුව buf තුළ ගබඩා කර ඇත; ස්ථාවර නොවන දිග දත්ත සඳහා, දිග ප්‍රථමයෙන් අනුක්‍රමික කළ යුතුය, පසුව Ddata (උදාහරණයක් ලෙස, u16, u32, හෝ u64 ඇතුළුව නොදන්නා ප්‍රමාණයේ අත්සන් නොකළ පූර්ණ සංඛ්‍යා).

Deserialization යනු හරියටම ප්‍රතිවිරුද්ධයයි. සෑම අනුක්‍රමික ක්‍රමයක් සඳහාම, අනුරූපී deserialization ක්‍රමයක් ඇත. Deserialization සඳහා Source class හි අවස්ථා භාවිතා කිරීම අවශ්‍ය වේ. මෙම පන්ති අවස්ථාවට buf සහ pos ක්ෂේත්‍ර දෙකක් ඇත. Deerialize කළ යුතු දත්ත ගබඩා කිරීමට Buf භාවිතා කරන අතර වත්මන් කියවීමේ ස්ථානය ගබඩා කිරීමට pos භාවිතා කරයි. කිසියම් දත්ත වර්ගයක් කියවන විට, ඔබ එහි දිග දන්නේ නම්, ඔබට එය කෙලින්ම කියවිය හැක, නොදන්නා දිග දත්ත සඳහා - පළමුව දිග කියවන්න, පසුව අන්තර්ගතය කියවන්න.

දාමයේ දත්ත වෙත ප්‍රවේශ වීම සහ යාවත්කාලීන කිරීම

ontology-wasm-cdt-rust - දාමයේ දත්ත සමඟ වැඩ කිරීම සඳහා මෙහෙයුම් ක්‍රමයක් සංවර්ධකයින්ට පහත පරිදි දාමයේ දත්ත එකතු කිරීම, මැකීම, වෙනස් කිරීම සහ විමසීම් වැනි මෙහෙයුම් ක්‍රියාත්මක කිරීමට පහසු වේ:

  • දත්ත සමුදාය ::get(යතුර) - දාමයෙන් දත්ත ඉල්ලා සිටීමට භාවිතා කරන අතර, AsRef අතුරුමුහුණත ක්රියාත්මක කිරීම සඳහා ප්රධාන ඉල්ලීම්;
  • දත්ත සමුදාය ::put(යතුර, අගය) - ජාලයේ දත්ත ගබඩා කිරීමට භාවිතා කරයි. AsRef අතුරුමුහුණත ක්‍රියාත්මක කිරීම සඳහා යතුර ඉල්ලා සිටින අතර, එන්කෝඩර් අතුරුමුහුණත ක්‍රියාත්මක කිරීම සඳහා අගය ඉල්ලා සිටී;
  • දත්ත සමුදාය ::Delete(යතුර) - දාමයෙන් දත්ත ඉවත් කිරීමට භාවිතා කරන අතර, AsRef අතුරුමුහුණත ක්රියාත්මක කිරීම සඳහා ප්රධාන ඉල්ලීම් කරයි.

කොන්ත්රාත් පරීක්ෂණය

කොන්ත්‍රාත්තුවේ ක්‍රම ක්‍රියාත්මක කරන විට, අපට දාමයේ දත්ත වෙත ප්‍රවේශය අවශ්‍ය වන අතර කොන්ත්‍රාත්තුවේ බයිට් කේතය ක්‍රියාත්මක කිරීමට අපට සුදුසු අථත්‍ය යන්ත්‍රයක් අවශ්‍ය වේ, එබැවින් සාමාන්‍යයෙන් පරීක්ෂා කිරීම සඳහා දාමය මත කොන්ත්‍රාත්තුව යෙදවීම අවශ්‍ය වේ. නමුත් මෙම පරීක්ෂණ ක්‍රමය ගැටළු සහගතය. සංවර්ධකයින්ට කොන්ත්‍රාත්තු පරීක්ෂා කිරීම පහසු කිරීම සඳහා, ontio_std පුස්තකාලය පරීක්ෂා කිරීම සඳහා ව්‍යාජ මොඩියුලයක් සපයයි. මෙම මොඩියුලය පරිපථයේ දත්ත අනුකරණයක් සපයන අතර, කොන්ත්‍රාත්තුවේ ක්‍රම ඒකක පරීක්ෂා කිරීම සංවර්ධකයින්ට පහසු කරයි. විශේෂිත උදාහරණ සොයාගත හැකිය මෙහි.

ගිවිසුම් නිදොස්කරණය

කොන්සෝලය::debug(msg) කොන්ත්‍රාත්තුවක් නිදොස් කිරීමේදී නිදොස් කිරීමේ තොරතුරු පෙන්වයි. පණිවිඩ තොරතුරු නෝඩ් ලොග් ගොනුවට එකතු වේ. පූර්ව අවශ්‍යතාවයක් වන්නේ දේශීය ඔන්ටොලොජි පරීක්ෂණ නෝඩය ක්‍රියාත්මක වන විට ලොග් ගොනු මට්ටම නිදොස් කිරීමේ ප්‍රකාරයට සැකසීමයි.

runtime::notify(msg) කොන්ත්‍රාත්තුව දෝෂහරණය කරන අතරතුර සුදුසු නිදොස් කිරීමේ තොරතුරු ප්‍රතිදානය කරයි. මෙම ක්‍රමය මඟින් දාමයට ඇතුළත් කළ තොරතුරු ගබඩා කරනු ඇති අතර getSmartCodeEvent ක්‍රමය භාවිතයෙන් දාමයෙන් විමසිය හැක.

විශේෂයෙන්ම OntologyRussia සඳහා Hashrate&Shares හි සංස්කාරකවරුන් විසින් ලිපිය පරිවර්තනය කරන ලදී. අඬනවා

ඔබ සංවර්ධකයෙක්ද? අපගේ තාක්ෂණික ප්‍රජාවට සම්බන්ධ වන්න විකාරයක්. එසේම, බලන්න සංවර්ධක මධ්යස්ථානය අපගේ වෙබ් අඩවියේ, ඔබට සංවර්ධක මෙවලම්, ලියකියවිලි සහ තවත් දේ සොයා ගත හැක.

ඕටොවිද්යාව

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

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