ஆன்டாலஜி நெட்வொர்க்கில் WebAssembly ஸ்மார்ட் ஒப்பந்தத்தை எழுதுவது எப்படி? பகுதி 1: துரு

ஆன்டாலஜி நெட்வொர்க்கில் WebAssembly ஸ்மார்ட் ஒப்பந்தத்தை எழுதுவது எப்படி? பகுதி 1: துரு

ஆன்டாலஜி Wasm தொழில்நுட்பமானது, சிக்கலான வணிக தர்க்கத்துடன் dApp ஸ்மார்ட் ஒப்பந்தங்களை பிளாக்செயினுக்கு மாற்றுவதற்கான செலவைக் குறைக்கிறது, இதன் மூலம் dApp சுற்றுச்சூழல் அமைப்பை பெரிதும் வளப்படுத்துகிறது.

இந்த நேரத்தில், நான் ஆன்டாலஜி வாஸ்ம் ரஸ்ட் மற்றும் சி++ மேம்பாடு இரண்டையும் ஒரே நேரத்தில் ஆதரிக்கிறது. ரஸ்ட் மொழி Wasm ஐ சிறப்பாக ஆதரிக்கிறது, மேலும் உருவாக்கப்பட்ட பைட்கோட் எளிமையானது, இது ஒப்பந்த அழைப்புகளின் விலையை மேலும் குறைக்கும். அதனால், ஒன்டாலஜி நெட்வொர்க்கில் ஒப்பந்தத்தை உருவாக்க ரஸ்டை எவ்வாறு பயன்படுத்துவது?

ரஸ்டுடன் WASM ஒப்பந்தத்தை உருவாக்குதல்

ஒரு ஒப்பந்தத்தை உருவாக்கவும்

சரக்கு ரஸ்ட் மேம்பாட்டிற்கான ஒரு நல்ல திட்ட உருவாக்கம் மற்றும் தொகுப்பு மேலாண்மை கருவியாகும், இது குறியீடு மற்றும் மூன்றாம் தரப்பு நூலகங்களின் தொடர்புகளை சிறப்பாக ஒழுங்கமைக்க டெவலப்பர்களுக்கு உதவுகிறது. புதிய ஆன்டாலஜி வாஸ்ம் ஒப்பந்தத்தை உருவாக்க, பின்வரும் கட்டளையை இயக்கவும்:

ஆன்டாலஜி நெட்வொர்க்கில் WebAssembly ஸ்மார்ட் ஒப்பந்தத்தை எழுதுவது எப்படி? பகுதி 1: துரு

இது உருவாக்கும் திட்ட அமைப்பு:

ஆன்டாலஜி நெட்வொர்க்கில் WebAssembly ஸ்மார்ட் ஒப்பந்தத்தை எழுதுவது எப்படி? பகுதி 1: துரு

Cargo.toml கோப்பு அடிப்படை திட்டத் தகவல் மற்றும் சார்ந்த நூலகத் தகவலை அமைக்கப் பயன்படுகிறது. கோப்பின் [lib] பகுதியை crate-type = ["cdylib"] என அமைக்க வேண்டும். ஒப்பந்த லாஜிக் குறியீட்டை எழுத lib.rs கோப்பு பயன்படுத்தப்படுகிறது. கூடுதலாக, நீங்கள் Cargo.toml உள்ளமைவு கோப்பின் [சார்புகள்] பிரிவில் சார்பு அளவுருக்களை சேர்க்க வேண்டும்:

ஆன்டாலஜி நெட்வொர்க்கில் WebAssembly ஸ்மார்ட் ஒப்பந்தத்தை எழுதுவது எப்படி? பகுதி 1: துரு

இந்த சார்பு மூலம், டெவலப்பர்கள் ஆன்டாலஜி பிளாக்செயினுடன் தொடர்பு கொள்ளும் இடைமுகங்கள் மற்றும் வரிசைப்படுத்தல் அளவுரு போன்ற கருவிகளை அழைக்கலாம்.

ஒப்பந்த நுழைவு செயல்பாடு

ஒவ்வொரு நிரலுக்கும் உள்ளீடு செயல்பாடு உள்ளது, பொதுவாக நாம் பார்க்கும் முக்கிய செயல்பாடு போன்றது, ஆனால் ஒப்பந்தத்தில் ஒரு முக்கிய செயல்பாடு இல்லை. ரஸ்ட்டைப் பயன்படுத்தி Wasm ஒப்பந்தம் உருவாக்கப்படும்போது, ​​ஒப்பந்தத்தைப் பயன்படுத்துவதற்கான உள்ளீட்டுச் செயல்பாடாக இயல்புநிலை அழைப்புச் செயல்பாடு பயன்படுத்தப்படுகிறது. ரஸ்ட் மூலக் குறியீட்டை மெய்நிகர் இயந்திரத்தால் செயல்படுத்தக்கூடிய பைட்கோடில் தொகுக்கும்போது ரஸ்டில் உள்ள செயல்பாட்டின் பெயர் தெளிவாக இருக்காது. கம்பைலர் தேவையற்ற குறியீட்டை உருவாக்குவதைத் தடுக்கவும், ஒப்பந்தத்தின் அளவைக் குறைக்கவும், அழைப்பு செயல்பாடு #[no_mangle] சிறுகுறிப்பைச் சேர்க்கிறது.

ஒரு பரிவர்த்தனையை செயல்படுத்துவதற்கான அளவுருக்களை அழைப்பிதழ் செயல்பாடு எவ்வாறு பெறுகிறது?

ontio_std நூலகம் ஒரு பரிவர்த்தனையை செயல்படுத்துவதற்கான அளவுருக்களைப் பெற ஒரு இயக்க நேரம்:: input() செயல்பாட்டை வழங்குகிறது. டெவலப்பர்கள் ZeroCopySource ஐப் பயன்படுத்தி பைட் வரிசையை சீரழிக்க முடியும். இதில் படிக்கப்பட்ட பைட்டுகளின் முதல் வரிசையானது அழைப்பு முறையின் பெயர், அதைத் தொடர்ந்து முறை அளவுருக்கள்.

ஒப்பந்தத்தை நிறைவேற்றியதன் விளைவு எவ்வாறு திரும்பப் பெறப்படுகிறது?

ontio_std நூலகத்தால் வழங்கப்படும் இயக்க நேரம்::ret செயல்பாடு ஒரு முறை செயல்படுத்தலின் முடிவை வழங்குகிறது.

முடிக்கப்பட்ட அழைப்பு செயல்பாடு இதுபோல் தெரிகிறது:

ஆன்டாலஜி நெட்வொர்க்கில் WebAssembly ஸ்மார்ட் ஒப்பந்தத்தை எழுதுவது எப்படி? பகுதி 1: துரு

ஒப்பந்தத் தரவை வரிசைப்படுத்துதல் மற்றும் நீக்குதல்

ஒப்பந்தங்களை உருவாக்கும் செயல்பாட்டில், டெவலப்பர்கள் எப்பொழுதும் வரிசைப்படுத்தல் மற்றும் சீரியலைசேஷன் ஆகியவற்றில் சிக்கல்களை எதிர்கொள்கின்றனர், குறிப்பாக தரவுத்தளத்தில் ஒரு struct தரவு வகையை எவ்வாறு சேமிப்பது மற்றும் ஒரு struct தரவு வகையைப் பெற தரவுத்தளத்திலிருந்து படிக்கப்பட்ட பைட் வரிசையை எவ்வாறு சிதைப்பது.

ontio_std நூலகம் தரவு வரிசைப்படுத்தல் மற்றும் டீரியலைசேஷன் ஆகியவற்றிற்கான குறிவிலக்கி மற்றும் குறியாக்கி இடைமுகங்களை வழங்குகிறது. ஒரு struct இன் புலங்கள் டிகோடர் மற்றும் குறியாக்கி இடைமுகங்களையும் செயல்படுத்துகின்றன, இதனால் கட்டமைப்பை வரிசைப்படுத்தலாம் மற்றும் சீரியலைஸ் செய்யலாம். பல்வேறு தரவு வகைகள் வரிசைப்படுத்தப்படும்போது, ​​சின்க் வகுப்பின் நிகழ்வுகள் தேவைப்படுகின்றன. சின்க் வகுப்பின் ஒரு உதாரணம், பைட் வகைத் தரவைச் சேமிக்கும் செட்-டைப் ஃபீல்டு பஃப் உள்ளது, மேலும் அனைத்து வரிசைப்படுத்தப்பட்ட தரவும் பஃப் இல் சேமிக்கப்படும்.

நிலையான நீளத் தரவுகளுக்கு (எ.கா: பைட், u16, u32, u64, முதலியன), தரவு நேரடியாக பைட் வரிசையாக மாற்றப்பட்டு பின்னர் பஃப் இல் சேமிக்கப்படும்; நிலையான நீளம் இல்லாத தரவுகளுக்கு, நீளம் முதலில் வரிசைப்படுத்தப்பட வேண்டும், பின்னர் Ddata (உதாரணமாக, u16, u32, அல்லது u64 போன்றவை உட்பட அறியப்படாத அளவிலான கையொப்பமிடப்படாத முழு எண்கள்).

சீரியலைசேஷன் இதற்கு நேர் எதிரானது. ஒவ்வொரு சீரியலைசேஷன் முறைக்கும், அதனுடன் தொடர்புடைய டீரியலைசேஷன் முறை உள்ளது. சீரியலைசேஷன் செய்ய மூல வகுப்பின் நிகழ்வுகளைப் பயன்படுத்த வேண்டும். இந்த வகுப்பு நிகழ்வில் buf மற்றும் pos என இரண்டு புலங்கள் உள்ளன. டீரியலைஸ் செய்ய வேண்டிய தரவைச் சேமிக்க Buf பயன்படுத்தப்படுகிறது மற்றும் தற்போதைய வாசிப்பு நிலையை சேமிக்க pos பயன்படுத்தப்படுகிறது. ஒரு குறிப்பிட்ட வகை தரவு படிக்கப்படும்போது, ​​அதன் நீளம் உங்களுக்குத் தெரிந்தால், அதை நேரடியாகப் படிக்கலாம், தெரியாத நீளத்தின் தரவுகளுக்கு-முதலில் நீளத்தைப் படித்து, பின்னர் உள்ளடக்கத்தைப் படிக்கவும்.

சங்கிலியில் தரவை அணுகவும் புதுப்பிக்கவும்

ontology-wasm-cdt-rust - சங்கிலியில் உள்ள தரவுகளுடன் பணிபுரிவதற்கான ஒரு செயல்பாட்டு முறை இணைக்கப்பட்டுள்ளது, இது டெவலப்பர்கள் சங்கிலியில் தரவைச் சேர்ப்பது, நீக்குவது, மாற்றுவது மற்றும் வினவுவது போன்ற செயல்பாடுகளைச் செயல்படுத்த வசதியானது:

  • தரவுத்தளம்::get(விசை) - சங்கிலியிலிருந்து தரவைக் கோர பயன்படுகிறது, மேலும் AsRef இடைமுகத்தை செயல்படுத்த முக்கிய கோரிக்கைகள்;
  • தரவுத்தளம்::புட்(விசை, மதிப்பு) - நெட்வொர்க்கில் தரவைச் சேமிக்கப் பயன்படுகிறது. AsRef இடைமுகத்தை செயல்படுத்துவதற்கு விசை கோருகிறது, மேலும் என்கோடர் இடைமுகத்தை செயல்படுத்த மதிப்பு கோருகிறது;
  • தரவுத்தளம்::நீக்கு(விசை) - சங்கிலியிலிருந்து தரவை அகற்றப் பயன்படுகிறது, மேலும் AsRef இடைமுகத்தை செயல்படுத்த முக்கிய கோரிக்கைகள்.

ஒப்பந்த சோதனை

ஒரு ஒப்பந்தத்தின் முறைகள் செயல்படுத்தப்படும்போது, ​​சங்கிலியில் உள்ள தரவை அணுக வேண்டும், மேலும் ஒப்பந்தத்தின் பைட்கோடைச் செயல்படுத்த பொருத்தமான மெய்நிகர் இயந்திரம் தேவை, எனவே சோதனைக்காக ஒப்பந்தத்தை சங்கிலியில் வரிசைப்படுத்துவது பொதுவாக அவசியம். ஆனால் இந்த சோதனை முறை சிக்கலானது. டெவலப்பர்கள் ஒப்பந்தங்களைச் சோதிப்பதை எளிதாக்க, ontio_std நூலகம் சோதனைக்கு ஒரு போலி தொகுதியை வழங்குகிறது. இந்த தொகுதியானது சர்க்யூட்டில் உள்ள தரவின் உருவகப்படுத்துதலை வழங்குகிறது, டெவலப்பர்கள் ஒப்பந்தத்தில் உள்ள முறைகளை யூனிட் சோதனை செய்வதை எளிதாக்குகிறது. குறிப்பிட்ட உதாரணங்களைக் காணலாம் இங்கே.

ஒப்பந்த பிழைத்திருத்தம்

console::debug(msg) ஒரு ஒப்பந்தத்தை பிழைத்திருத்தும்போது பிழைத்திருத்தத் தகவலைக் காட்டுகிறது. செய்தித் தகவல் முனை பதிவு கோப்பில் சேர்க்கப்படும். உள்ளூர் ஆன்டாலஜி சோதனை முனை இயங்கும் போது பதிவு கோப்பு அளவை பிழைத்திருத்த பயன்முறைக்கு அமைப்பது ஒரு முன்நிபந்தனை.

runtime::notify(msg) ஒப்பந்தம் பிழைத்திருத்தம் செய்யப்படும்போது பொருத்தமான பிழைத்திருத்தத் தகவலை வெளியிடுகிறது. இந்த முறை சங்கிலியில் உள்ளிடப்பட்ட தகவலைச் சேமிக்கும் மற்றும் getSmartCodeEvent முறையைப் பயன்படுத்தி சங்கிலியிலிருந்து வினவலாம்.

குறிப்பாக OntologyRussia க்காக Hashrate&Shares இன் ஆசிரியர்களால் கட்டுரை மொழிபெயர்க்கப்பட்டது. கலங்குவது

நீங்கள் ஒரு டெவலப்பரா? எங்கள் தொழில்நுட்ப சமூகத்தில் சேரவும் கூறின. மேலும், பாருங்கள் டெவலப்பர் மையம் எங்கள் இணையதளத்தில், டெவலப்பர் கருவிகள், ஆவணங்கள் மற்றும் பலவற்றை நீங்கள் காணலாம்.

ஆண்டாலஜி

ஆதாரம்: www.habr.com

கருத்தைச் சேர்