آنٽولوجي نيٽ ورڪ تي 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 معاهدو Rust استعمال ڪندي ترقي ڪئي وئي آهي، ڊفالٽ انووڪ فنڪشن کي استعمال ڪيو ويندو آهي ان پٽ فنڪشن جي طور تي استعمال ڪرڻ لاءِ. Rust ۾ هڪ فنڪشن جو نالو واضح نه ٿيندو جڏهن Rust سورس ڪوڊ کي bytecode ۾ مرتب ڪيو ويندو جيڪو هڪ ورچوئل مشين ذريعي هلائي سگهجي ٿو. ڪمپيلر کي فالتو ڪوڊ پيدا ڪرڻ کان روڪڻ ۽ معاهدي جي سائيز کي گھٽائڻ لاءِ، invoke function #[no_mangle] تشريح شامل ڪري ٿو.

انڪوڪ فنڪشن کي ٽرانزيڪشن تي عمل ڪرڻ لاءِ پيٽرول ڪيئن ملندو آهي؟

ontio_std لائبريري هڪ ٽرانزيڪشن تي عمل ڪرڻ لاءِ پيرا ميٽرز حاصل ڪرڻ لاءِ رن ٽائم::input() فنڪشن مهيا ڪري ٿي. ڊولپرز استعمال ڪري سگھن ٿا ZeroCopySource جي نتيجي ۾ بائيٽ صف کي ختم ڪرڻ لاءِ. جنهن ۾ پڙهڻ جي بائيٽ جي پهرين صف کي انووڪ طريقي جو نالو آهي، جنهن جي پٺيان طريقي جي پيرا ميٽرز.

معاهدي جي عمل جو نتيجو ڪيئن واپس آيو آهي؟

ontio_std لائبريري پاران مهيا ڪيل رن ٽائم::ريٽ فنڪشن هڪ طريقي جي عمل جو نتيجو واپس ڏئي ٿو.

مڪمل دعوت واري فنڪشن هن طرح ڏسڻ ۾ اچي ٿو:

آنٽولوجي نيٽ ورڪ تي WebAssembly سمارٽ معاهدو ڪيئن لکجي؟ حصو 1: زنگ

معاهدي جي ڊيٽا کي ترتيب ڏيڻ ۽ ترتيب ڏيڻ

ترقي يافته معاهدن جي عمل ۾، ڊولپرز هميشه سيريلائيزيشن ۽ ڊيسيريلائيزيشن سان مسئلن ۾ هلندا آهن، خاص طور تي ڊيٽابيس ۾ هڪ struct ڊيٽا جي قسم کي ڪيئن ذخيرو ڪجي ۽ ڊيٽابيس مان پڙهيل بائيٽ ايري کي ڪيئن ختم ڪجي هڪ struct ڊيٽا قسم حاصل ڪرڻ لاءِ.

ontio_std لائبريري ڊيٽا سيريلائيزيشن ۽ ڊيسيريلائيزيشن لاءِ ڊيڪوڊر ۽ انڪوڊر انٽرفيس مهيا ڪري ٿي. هڪ ڍانچي جا شعبا پڻ ڊيڪوڊر ۽ انڪوڊر انٽرفيس کي لاڳو ڪن ٿا ته جيئن ڍانچي کي سيريلائيز ۽ ڊيسيريلائيز ڪري سگهجي. سنڪ ڪلاس جا مثال گھربل آھن جڏھن مختلف ڊيٽا جا قسم سيريل ٿيل آھن. سنڪ ڪلاس جو ھڪڙو مثال ھڪڙو سيٽ قسم جي فيلڊ بف آھي جيڪو بائيٽ قسم جي ڊيٽا کي ذخيرو ڪري ٿو، ۽ تمام سيريل ٿيل ڊيٽا بف ۾ ذخيرو ٿيل آھي.

مقرر ٿيل ڊگھي ڊيٽا لاءِ (مثال طور: بائيٽ، u16، u32، u64، وغيره)، ڊيٽا سڌو سنئون بائيٽ ايري ۾ تبديل ڪئي ويندي آهي ۽ پوءِ بف ۾ محفوظ ڪئي ويندي آهي؛ غير مقرر ٿيل ڊگھائي جي ڊيٽا لاءِ، ڊگھائي کي پھريائين سيريل ڪرڻ گھرجي، پوءِ ڊي ڊيٽا (مثال طور، اڻڄاتل سائيز جا اڻ دستخط ٿيل عدد، بشمول u16، u32، يا u64 وغيره).

Deserialization بلڪل سامهون آهي. هر سيريلائيزيشن جي طريقي لاء، هڪ لاڳاپيل ڊيسيريلائيزيشن جو طريقو آهي. Deserialization جي ضرورت آهي ماخذ طبقي جي مثالن جي استعمال جي. هن طبقي جي مثال ۾ ٻه شعبا buf ۽ pos آهن. بف ڊيٽا کي ذخيرو ڪرڻ لاء استعمال ڪيو ويندو آهي deserialized ۽ pos استعمال ڪيو ويندو آهي موجوده پڙهڻ واري پوزيشن کي ذخيرو ڪرڻ لاء. جڏهن هڪ خاص قسم جي ڊيٽا پڙهي وڃي ٿي، جيڪڏهن توهان ان جي ڊگھائي ڄاڻو ٿا، ته توهان ان کي سڌو پڙهي سگهو ٿا، اڻڄاتل ڊگھائي جي ڊيٽا لاءِ- پھريائين ڊگھائي پڙھو، پوءِ مواد پڙھو.

زنجير ۾ ڊيٽا تائين رسائي ۽ تازه ڪاري

ontology-wasm-cdt-rust - زنجير ۾ ڊيٽا سان ڪم ڪرڻ لاءِ هڪ آپريشنل طريقو شامل ڪيو ويو آهي، جيڪو ڊولپرز لاءِ عملن کي لاڳو ڪرڻ لاءِ آسان آهي جيئن ته زنجير ۾ ڊيٽا شامل ڪرڻ، حذف ڪرڻ، تبديل ڪرڻ ۽ سوال ڪرڻ:

  • ڊيٽابيس::حاصل(ڪجي) - زنجير مان ڊيٽا جي درخواست ڪرڻ لاء استعمال ڪيو ويندو آهي، ۽ اهم درخواستن کي لاڳو ڪرڻ لاء AsRef انٽرفيس؛
  • ڊيٽابيس :: put(key، value) - نيٽ ورڪ تي ڊيٽا ذخيرو ڪرڻ لاء استعمال ڪيو. اهم درخواستون AsRef انٽرفيس کي لاڳو ڪرڻ لاءِ، ۽ قدر جي درخواست ڪري ٿو انڪوڊر انٽرفيس کي لاڳو ڪرڻ جي؛
  • ڊيٽابيس :: ڊليٽ (ڪي) - زنجير مان ڊيٽا کي هٽائڻ لاء استعمال ڪيو ويندو آهي، ۽ اهم درخواستن کي لاڳو ڪرڻ لاء AsRef انٽرفيس.

معاهدي جي جاچ

جڏهن معاهدي جا طريقا لاڳو ڪيا وڃن ٿا، اسان کي زنجير تي ڊيٽا تائين رسائي جي ضرورت آهي ۽ اسان کي معاهدي جي بائيٽ ڪوڊ تي عمل ڪرڻ لاءِ هڪ مناسب ورچوئل مشين جي ضرورت آهي، تنهنڪري اهو عام طور تي ضروري آهي ته معاهدو کي زنجير تي جانچ لاءِ مقرر ڪيو وڃي. پر امتحان جو هي طريقو مشڪل آهي. ڊولپرز لاءِ معاهدن جي جانچ ڪرڻ کي آسان بڻائڻ لاءِ، ontio_std لائبريري ٽيسٽ لاءِ ٺٺولي ماڊل مهيا ڪري ٿي. هي ماڊل زنجير ۾ ڊيٽا جي تخليق مهيا ڪري ٿو، ڊولپرز لاءِ ان کي آسان بڻائي ٿو يونٽ جي معاهدي ۾ طريقن کي جانچڻ. خاص مثال ملي سگھن ٿا هتي.

معاهدو ڊيبگنگ

console::debug(msg) ڪانٽريڪٽ ڊيبگ ڪرڻ دوران ڊيبگ معلومات ڏيکاري ٿو. پيغام جي معلومات نوڊ لاگ فائل ۾ شامل ڪئي ويندي. ھڪڙي شرط آھي لاگ فائل جي سطح کي ڊيبگ موڊ تي سيٽ ڪرڻ جڏھن مقامي آنٽولوجي ٽيسٽ نوڊ ھلندو آھي.

runtime::notify(msg) مناسب ڊيبگ معلومات ڪڍي ٿو جڏهن معاهدو ڊيبگ ڪيو پيو وڃي. اهو طريقو زنجير ۾ داخل ڪيل معلومات کي ذخيرو ڪندو ۽ getSmartCodeEvent طريقو استعمال ڪندي زنجير مان پڇي سگهجي ٿو.

مضمون حشرت ۽ شيئرز جي ايڊيٽرن پاران ترجمو ڪيو ويو خاص طور تي آنٽولوجي روس لاءِ. روئڻ

ڇا توهان ڊولپر آهيو؟ اسان جي ٽيڪنيڪل ڪميونٽي ۾ شامل ٿيو رعايت. پڻ، هڪ نظر وٺو ڊولپر سينٽر اسان جي ويب سائيٽ تي، جتي توهان ڳولي سگهو ٿا ڊولپر جا اوزار، دستاويز، ۽ وڌيڪ.

آنٽالوجي

جو ذريعو: www.habr.com

تبصرو شامل ڪريو