Ontology नेटवर्कमा WebAssembly स्मार्ट अनुबंध कसरी लेख्ने? भाग १: खिया

Ontology नेटवर्कमा WebAssembly स्मार्ट अनुबंध कसरी लेख्ने? भाग १: खिया

Ontology Wasm टेक्नोलोजीले ब्लकचेनमा जटिल व्यापार तर्कको साथ dApp स्मार्ट अनुबंधहरू माइग्रेट गर्ने लागत घटाउँछ, जसले गर्दा dApp इकोसिस्टमलाई धेरै समृद्ध बनाउँछ।

हाल ओन्टोलजी वास्म एकै साथ दुबै रस्ट र C++ विकासलाई समर्थन गर्दछ। Rust भाषाले Wasm लाई राम्रोसँग समर्थन गर्दछ, र उत्पन्न गरिएको bytecode सरल छ, जसले थप सम्झौता कलहरूको लागत घटाउन सक्छ। तर, Ontology नेटवर्क मा एक सम्झौता विकास गर्न Rust कसरी प्रयोग गर्ने?

रस्टसँग WASM सम्झौताको विकास गर्दै

एक सम्झौता सिर्जना गर्नुहोस्

कार्गो रस्ट विकासको लागि राम्रो परियोजना निर्माण र प्याकेज व्यवस्थापन उपकरण हो, जसले विकासकर्ताहरूलाई कोड र तेस्रो-पक्ष पुस्तकालयहरूको अन्तरक्रियालाई राम्रोसँग व्यवस्थित गर्न मद्दत गर्दछ। नयाँ Ontology Wasm अनुबंध सिर्जना गर्न, केवल निम्न आदेश चलाउनुहोस्:

Ontology नेटवर्कमा WebAssembly स्मार्ट अनुबंध कसरी लेख्ने? भाग १: खिया

परियोजना संरचना यसले उत्पन्न गर्दछ:

Ontology नेटवर्कमा WebAssembly स्मार्ट अनुबंध कसरी लेख्ने? भाग १: खिया

Cargo.toml फाइल आधारभूत परियोजना जानकारी र निर्भर पुस्तकालय जानकारी सेटअप गर्न प्रयोग गरिन्छ। फाइलको [lib] खण्ड crate-type = ["cdylib"] मा सेट हुनुपर्छ। lib.rs फाइल अनुबंध तर्क कोड लेख्न प्रयोग गरिन्छ। थप रूपमा, तपाईंले Cargo.toml कन्फिगरेसन फाइलको [निर्भरता] खण्डमा निर्भरता प्यारामिटरहरू थप्न आवश्यक छ:

Ontology नेटवर्कमा WebAssembly स्मार्ट अनुबंध कसरी लेख्ने? भाग १: खिया

यस निर्भरताको साथ, विकासकर्ताहरूले इन्टरफेसहरू कल गर्न सक्छन् जुन ओन्टोलजी ब्लकचेन र उपकरणहरू जस्तै सीरियलाइजेशन प्यारामिटरसँग अन्तरक्रिया गर्दछ।

अनुबंध प्रविष्टि प्रकार्य

प्रत्येक प्रोग्राममा इनपुट प्रकार्य हुन्छ, जस्तै मुख्य प्रकार्य हामी सामान्यतया देख्छौं, तर सम्झौताको मुख्य प्रकार्य हुँदैन। जब एक Wasm अनुबंध Rust प्रयोग गरी विकसित गरिन्छ, पूर्वनिर्धारित invoke प्रकार्यलाई अनुबंध प्रयोग गर्न इनपुट प्रकार्यको रूपमा प्रयोग गरिन्छ। Rust मा एक प्रकार्यको नाम अस्पष्ट हुनेछ जब रस्ट स्रोत कोडलाई बाइटकोडमा कम्पाइल गर्दा जुन भर्चुअल मेसिनद्वारा कार्यान्वयन गर्न सकिन्छ। कम्पाइलरलाई अनावश्यक कोड उत्पन्न गर्नबाट रोक्न र सम्झौताको आकार घटाउन, इनभोक प्रकार्यले #[no_mangle] एनोटेसन थप्छ।

इनभोक प्रकार्यले लेनदेन कार्यान्वयन गर्न प्यारामिटरहरू कसरी प्राप्त गर्छ?

ontio_std पुस्तकालयले लेनदेन कार्यान्वयन गर्न प्यारामिटरहरू प्राप्त गर्न रनटाइम::इनपुट() प्रकार्य प्रदान गर्दछ। विकासकर्ताहरूले परिणामस्वरूप बाइट एरेलाई डिसिरियलाइज गर्न ZeroCopySource प्रयोग गर्न सक्छन्। जसमा पढिएको बाइट्सको पहिलो एरे इनभोक विधिको नाम हो, त्यसपछि विधि प्यारामिटरहरू।

सम्झौता कार्यान्वयनको नतिजा कसरी फिर्ता हुन्छ?

ontio_std पुस्तकालय द्वारा प्रदान गरिएको रनटाइम:: ret प्रकार्यले विधि कार्यान्वयनको परिणाम फर्काउँछ।

पूरा आह्वान प्रकार्य यस्तो देखिन्छ:

Ontology नेटवर्कमा WebAssembly स्मार्ट अनुबंध कसरी लेख्ने? भाग १: खिया

सिरियलाइज र डिसेरियलाइज अनुबंध डेटा

सम्झौताहरू विकास गर्ने प्रक्रियामा, विकासकर्ताहरू सधैं क्रमिककरण र डिसेरियलाइजेसनको साथ समस्यामा पर्छन्, विशेष गरी कसरी डेटाबेसमा स्ट्रक्चर डेटा प्रकार भण्डार गर्ने र स्ट्रक्चर डेटा प्रकार प्राप्त गर्न डेटाबेसबाट पढिएको बाइट एरेलाई कसरी डिसेरियलाइज गर्ने।

ontio_std पुस्तकालयले डेटा क्रमबद्धता र deserialization को लागि डिकोडर र एन्कोडर इन्टरफेसहरू प्रदान गर्दछ। संरचनाको क्षेत्रहरूले डिकोडर र एन्कोडर इन्टरफेसहरू पनि लागू गर्दछ ताकि संरचनालाई क्रमबद्ध र डिसेरियलाइज गर्न सकिन्छ। विभिन्न डाटा प्रकारहरू क्रमबद्ध हुँदा सिङ्क वर्गका उदाहरणहरू आवश्यक हुन्छन्। सिंक क्लासको एउटा उदाहरणमा सेट-टाइप फिल्ड बफ छ जसले बाइट प्रकारको डाटा भण्डार गर्दछ, र सबै क्रमबद्ध डाटा buf मा भण्डारण गरिन्छ।

निश्चित लम्बाइ डेटाको लागि (जस्तै: बाइट, u16, u32, u64, आदि), डाटा सीधै बाइट एरेमा रूपान्तरण गरिन्छ र त्यसपछि buf मा भण्डारण गरिन्छ; गैर-निश्चित लम्बाइको डेटाको लागि, लम्बाइ पहिले क्रमबद्ध हुनुपर्छ, त्यसपछि Ddata (उदाहरणका लागि, u16, u32, वा u64, आदि सहित अज्ञात साइजको अहस्ताक्षरित पूर्णाङ्कहरू)।

Deserialization ठीक विपरीत छ। प्रत्येक क्रमबद्ध विधिको लागि, त्यहाँ एक अनुरूप deserialization विधि छ। Deserialization स्रोत वर्ग को उदाहरण को उपयोग को आवश्यकता छ। यो वर्ग उदाहरणमा दुई क्षेत्रहरू buf र pos छन्। बफ डेटालाई डिसेरियलाइज गर्न भण्डारण गर्न प्रयोग गरिन्छ र हालको पढिएको स्थिति भण्डारण गर्न pos प्रयोग गरिन्छ। जब एक विशेष प्रकारको डाटा पढिँदै छ, यदि तपाईंलाई यसको लम्बाइ थाहा छ भने, तपाईं यसलाई सीधै पढ्न सक्नुहुन्छ, अज्ञात लम्बाइको डाटाको लागि - पहिले लम्बाइ पढ्नुहोस्, त्यसपछि सामग्रीहरू पढ्नुहोस्।

श्रृंखलामा डेटा पहुँच र अद्यावधिक गर्नुहोस्

ontology-wasm-cdt-rust - चेनमा डाटासँग काम गर्नको लागि एक अपरेशनल विधि इन्क्याप्सुलेटेड, जुन विकासकर्ताहरूका लागि अपरेशनहरू लागू गर्नको लागि सुविधाजनक छ जस्तै थप्ने, मेटाउने, परिवर्तन गर्ने र श्रृंखलामा डाटा क्वेरी गर्ने जस्ता:

  • डाटाबेस::गेट(कुञ्जी) - चेनबाट डाटा अनुरोध गर्न प्रयोग गरिन्छ, र कुञ्जीले AsRef इन्टरफेसको कार्यान्वयनको लागि अनुरोध गर्दछ;
  • डाटाबेस ::पुट(कुञ्जी, मान) - नेटवर्कमा डाटा भण्डारण गर्न प्रयोग गरिन्छ। कुञ्जीले AsRef इन्टरफेसको कार्यान्वयनको लागि अनुरोध गर्दछ, र मानले एन्कोडर इन्टरफेसको कार्यान्वयनको लागि अनुरोध गर्दछ;
  • डाटाबेस::मेट्नुहोस्(कुञ्जी) - चेनबाट डाटा हटाउन प्रयोग गरिन्छ, र कुञ्जीले AsRef इन्टरफेसको कार्यान्वयनको लागि अनुरोध गर्दछ।

अनुबंध परीक्षण

जब सम्झौताका विधिहरू लागू हुन्छन्, हामीलाई चेनमा डेटामा पहुँच चाहिन्छ र हामीलाई सम्झौताको बाइटकोड कार्यान्वयन गर्न उपयुक्त भर्चुअल मेसिन चाहिन्छ, त्यसैले यो सामान्यतया परीक्षणको लागि चेनमा अनुबंध तैनात गर्न आवश्यक हुन्छ। तर यो परीक्षण विधि समस्याग्रस्त छ। विकासकर्ताहरूलाई अनुबंधहरू परीक्षण गर्न सजिलो बनाउनको लागि, ontio_std पुस्तकालयले परीक्षणको लागि नक्कली मोड्युल प्रदान गर्दछ। यो मोड्युलले सर्किटमा डेटाको सिमुलेशन प्रदान गर्दछ, जसले विकासकर्ताहरूलाई अनुबंधमा विधिहरूको एकाइ परीक्षण गर्न सजिलो बनाउँछ। विशिष्ट उदाहरणहरू फेला पार्न सकिन्छ यहाँ.

सम्झौता डिबगिङ

console::debug(msg) ले सम्झौता डिबग गर्दा डिबग जानकारी देखाउँछ। सन्देश जानकारी नोड लग फाइलमा थपिनेछ। स्थानीय ओन्टोलजी परीक्षण नोड चलिरहेको बेला डिबग मोडमा लग फाइल स्तर सेट गर्न एक पूर्व शर्त हो।

runtime::notify(msg) ले सम्झौता डिबग गर्दा उपयुक्त डिबग जानकारी आउटपुट गर्दछ। यो विधिले चेनमा प्रविष्ट गरिएको जानकारी भण्डारण गर्नेछ र getSmartCodeEvent विधि प्रयोग गरेर चेनबाट सोध्न सकिन्छ।

लेख विशेष गरी OntologyRussia को लागि Hashrate & Shares को सम्पादकहरु द्वारा अनुवाद गरिएको थियो। रुनु

तपाईं विकासकर्ता हुनुहुन्छ? हाम्रो प्राविधिक समुदायमा सामेल हुनुहोस् त्याग। साथै, एक नजर राख्नुहोस् विकासकर्ता केन्द्र हाम्रो वेबसाइटमा, जहाँ तपाइँ विकासकर्ता उपकरणहरू, कागजातहरू, र थप फेला पार्न सक्नुहुन्छ।

ओन्टोलोजी

स्रोत: www.habr.com

एक टिप्पणी थप्न