آنٹولوجی نیٹ ورک پر WebAssembly سمارٹ کنٹریکٹ کیسے لکھا جائے؟ حصہ 1: زنگ

آنٹولوجی نیٹ ورک پر WebAssembly سمارٹ کنٹریکٹ کیسے لکھا جائے؟ حصہ 1: زنگ

اونٹولوجی Wasm ٹیکنالوجی پیچیدہ کاروباری منطق کے ساتھ dApp سمارٹ معاہدوں کو بلاک چین میں منتقل کرنے کی لاگت کو کم کرتی ہے، اس طرح dApp ماحولیاتی نظام کو بہت زیادہ تقویت ملتی ہے۔

اب آنٹولوجی وسیم بیک وقت زنگ اور C++ دونوں کی ترقی کی حمایت کرتا ہے۔ زنگ کی زبان Wasm کو بہتر طریقے سے سپورٹ کرتی ہے، اور تیار کردہ بائی کوڈ آسان ہے، جو کنٹریکٹ کالز کی لاگت کو مزید کم کر سکتا ہے۔ تو، آنٹولوجی نیٹ ورک پر معاہدہ تیار کرنے کے لیے Rust کا استعمال کیسے کریں؟

زنگ کے ساتھ WASM معاہدہ تیار کرنا

ایک معاہدہ بنائیں

چارج رسٹ ڈویلپمنٹ کے لیے ایک اچھا پروجیکٹ تخلیق اور پیکیج مینجمنٹ ٹول ہے، جو ڈویلپرز کو کوڈ اور تھرڈ پارٹی لائبریریوں کے تعامل کو بہتر طریقے سے منظم کرنے میں مدد کرتا ہے۔ ایک نیا اونٹولوجی Wasm معاہدہ بنانے کے لیے، بس درج ذیل کمانڈ کو چلائیں:

آنٹولوجی نیٹ ورک پر WebAssembly سمارٹ کنٹریکٹ کیسے لکھا جائے؟ حصہ 1: زنگ

پروجیکٹ کا ڈھانچہ یہ تیار کرتا ہے:

آنٹولوجی نیٹ ورک پر WebAssembly سمارٹ کنٹریکٹ کیسے لکھا جائے؟ حصہ 1: زنگ

Cargo.toml فائل کا استعمال بنیادی پراجیکٹ کی معلومات اور منحصر لائبریری کی معلومات کو ترتیب دینے کے لیے کیا جاتا ہے۔ فائل کا [lib] سیکشن crate-type = ["cdylib"] پر سیٹ ہونا چاہیے۔ lib.rs فائل کو کنٹریکٹ لاجک کوڈ لکھنے کے لیے استعمال کیا جاتا ہے۔ اس کے علاوہ، آپ کو Cargo.toml کنفیگریشن فائل کے [انحصارات] سیکشن میں انحصار کے پیرامیٹرز کو شامل کرنے کی ضرورت ہے:

آنٹولوجی نیٹ ورک پر WebAssembly سمارٹ کنٹریکٹ کیسے لکھا جائے؟ حصہ 1: زنگ

اس انحصار کے ساتھ، ڈویلپر ایسے انٹرفیس کو کال کرسکتے ہیں جو اونٹولوجی بلاکچین اور ٹولز جیسے سیریلائزیشن پیرامیٹر کے ساتھ تعامل کرتے ہیں۔

کنٹریکٹ انٹری فنکشن

ہر پروگرام میں ایک ان پٹ فنکشن ہوتا ہے، جیسا کہ مین فنکشن جو ہم عام طور پر دیکھتے ہیں، لیکن کنٹریکٹ میں مین فنکشن نہیں ہوتا ہے۔ جب زنگ کا استعمال کرتے ہوئے ایک Wasm معاہدہ تیار کیا جاتا ہے، تو معاہدہ کو استعمال کرنے کے لیے پہلے سے طے شدہ انووک فنکشن کو ان پٹ فنکشن کے طور پر استعمال کیا جاتا ہے۔ Rust میں کسی فنکشن کا نام واضح نہیں ہو گا جب Rust سورس کوڈ کو بائیک کوڈ میں مرتب کیا جائے گا جسے ورچوئل مشین کے ذریعے عمل میں لایا جا سکتا ہے۔ کمپائلر کو بے کار کوڈ بنانے سے روکنے اور معاہدے کے سائز کو کم کرنے کے لیے، invoke فنکشن #[no_mangle] تشریح کا اضافہ کرتا ہے۔

انووک فنکشن کو ٹرانزیکشن کو انجام دینے کے لیے پیرامیٹرز کیسے حاصل ہوتے ہیں؟

ontio_std لائبریری رن ٹائم::input() فنکشن فراہم کرتی ہے تاکہ لین دین کو انجام دینے کے لیے پیرامیٹرز حاصل کیے جاسکیں۔ ڈویلپرز ZeroCopySource کے نتیجے میں آنے والی بائٹ سرنی کو ڈی سیریلائز کرنے کے لیے استعمال کر سکتے ہیں۔ جس میں پڑھے جانے والے بائٹس کی پہلی صف انووک طریقہ کا نام ہے، اس کے بعد طریقہ کے پیرامیٹرز ہیں۔

معاہدے پر عمل درآمد کا نتیجہ کیسے نکلتا ہے؟

Ontio_std لائبریری کی طرف سے فراہم کردہ رن ٹائم::ریٹ فنکشن طریقہ پر عمل درآمد کا نتیجہ واپس کرتا ہے۔

مکمل انووک فنکشن اس طرح لگتا ہے:

آنٹولوجی نیٹ ورک پر WebAssembly سمارٹ کنٹریکٹ کیسے لکھا جائے؟ حصہ 1: زنگ

معاہدہ کے ڈیٹا کو سیریلائز اور ڈی سیریلائز کرنا

کنٹریکٹ تیار کرنے کے عمل میں، ڈویلپرز کو ہمیشہ سیریلائزیشن اور ڈی سیریلائزیشن کے ساتھ مسائل کا سامنا کرنا پڑتا ہے، خاص طور پر ڈیٹا بیس میں سٹرک ڈیٹا کی قسم کو کیسے اسٹور کیا جائے اور سٹرک ڈیٹا ٹائپ حاصل کرنے کے لیے ڈیٹا بیس سے پڑھے گئے بائٹ ارے کو کیسے ڈی سیریلائز کیا جائے۔

ontio_std لائبریری ڈیٹا سیریلائزیشن اور ڈی سیریلائزیشن کے لیے ڈیکوڈر اور انکوڈر انٹرفیس فراہم کرتی ہے۔ ڈھانچے کے فیلڈز ڈیکوڈر اور انکوڈر انٹرفیس کو بھی نافذ کرتے ہیں تاکہ ڈھانچے کو سیریلائز اور ڈی سیریلائز کیا جاسکے۔ جب مختلف ڈیٹا کی اقسام کو سیریلائز کیا جاتا ہے تو سنک کلاس کی مثالیں درکار ہوتی ہیں۔ سنک کلاس کی ایک مثال میں سیٹ ٹائپ فیلڈ بف ہے جو بائٹ ٹائپ ڈیٹا کو اسٹور کرتا ہے، اور تمام سیریلائزڈ ڈیٹا بف میں اسٹور کیا جاتا ہے۔

مقررہ لمبائی کے ڈیٹا کے لیے (مثال کے طور پر: بائٹ، u16، u32، u64، وغیرہ)، ڈیٹا کو براہ راست بائٹ سرنی میں تبدیل کیا جاتا ہے اور پھر buf میں محفوظ کیا جاتا ہے۔ غیر مقررہ لمبائی کے ڈیٹا کے لیے، لمبائی کو پہلے سیریلائز کیا جانا چاہیے، پھر Ddata (مثال کے طور پر، نامعلوم سائز کے غیر دستخط شدہ عدد، بشمول u16، u32، یا u64، وغیرہ)۔

ڈیسیریلائزیشن بالکل اس کے برعکس ہے۔ ہر سیریلائزیشن کے طریقہ کار کے لیے، اسی طرح ڈی سیریلائزیشن کا طریقہ ہوتا ہے۔ ڈی سیریلائزیشن کے لیے سورس کلاس کی مثالوں کے استعمال کی ضرورت ہوتی ہے۔ اس کلاس مثال میں دو فیلڈز buf اور pos ہیں۔ بف کا استعمال ڈیٹا کو ڈی سیریلائز کرنے کے لیے ذخیرہ کرنے کے لیے کیا جاتا ہے اور pos کا استعمال موجودہ پڑھنے کی پوزیشن کو ذخیرہ کرنے کے لیے کیا جاتا ہے۔ جب کسی خاص قسم کا ڈیٹا پڑھا جا رہا ہو، اگر آپ کو اس کی لمبائی معلوم ہو، تو آپ اسے براہ راست پڑھ سکتے ہیں، نامعلوم طوالت کے ڈیٹا کے لیے — پہلے لمبائی کو پڑھیں، پھر مواد پڑھیں۔

سلسلہ میں ڈیٹا تک رسائی اور اپ ڈیٹ کریں۔

ontology-wasm-cdt-rust - زنجیر میں ڈیٹا کے ساتھ کام کرنے کے لیے ایک آپریشنل طریقہ کا احاطہ کیا گیا ہے، جو ڈویلپرز کے لیے مندرجہ ذیل طریقے سے ڈیٹا کو شامل کرنے، حذف کرنے، تبدیل کرنے اور استفسار کرنے جیسے کاموں کو لاگو کرنے کے لیے آسان ہے:

  • ڈیٹا بیس::get(key) - زنجیر سے ڈیٹا کی درخواست کرنے کے لیے استعمال کیا جاتا ہے، اور کلیدی AsRef انٹرفیس کے نفاذ کی درخواست کرتی ہے۔
  • ڈیٹا بیس :: ڈال (کلید، قدر) - نیٹ ورک پر ڈیٹا ذخیرہ کرنے کے لیے استعمال کیا جاتا ہے۔ کلید AsRef انٹرفیس کے نفاذ کی درخواست کرتی ہے، اور قدر انکوڈر انٹرفیس کے نفاذ کی درخواست کرتی ہے۔
  • ڈیٹا بیس :: ڈیلیٹ (کلید) - زنجیر سے ڈیٹا کو ہٹانے کے لیے استعمال کیا جاتا ہے، اور کلیدی AsRef انٹرفیس کے نفاذ کی درخواست کرتی ہے۔

معاہدہ کی جانچ

جب کسی معاہدے کے طریقوں کو نافذ کیا جاتا ہے، تو ہمیں سلسلہ کے ڈیٹا تک رسائی کی ضرورت ہوتی ہے اور ہمیں معاہدے کے بائیک کوڈ کو انجام دینے کے لیے ایک مناسب ورچوئل مشین کی ضرورت ہوتی ہے، اس لیے عام طور پر جانچ کے لیے معاہدے کو چین پر تعینات کرنا ضروری ہوتا ہے۔ لیکن جانچ کا یہ طریقہ مشکل ہے۔ ڈویلپرز کے لیے معاہدوں کی جانچ کرنا آسان بنانے کے لیے، ontio_std لائبریری جانچ کے لیے ایک فرضی ماڈیول فراہم کرتی ہے۔ یہ ماڈیول سرکٹ میں ڈیٹا کی نقل فراہم کرتا ہے، جس سے ڈویلپرز کے لیے معاہدے میں طریقوں کو یونٹ ٹیسٹ کرنا آسان ہو جاتا ہے۔ مخصوص مثالیں مل سکتی ہیں۔ یہاں.

معاہدہ ڈیبگنگ

console::debug(msg) معاہدے کو ڈیبگ کرتے وقت ڈیبگ کی معلومات دکھاتا ہے۔ پیغام کی معلومات نوڈ لاگ فائل میں شامل کی جائے گی۔ ایک شرط لاگ فائل کی سطح کو ڈیبگ موڈ پر سیٹ کرنا ہے جب مقامی اونٹولوجی ٹیسٹ نوڈ چل رہا ہو۔

runtime::notify(msg) مناسب ڈیبگ معلومات کو آؤٹ پٹ کرتا ہے جب معاہدہ ڈیبگ کیا جا رہا ہو۔ یہ طریقہ سلسلہ میں داخل کی گئی معلومات کو ذخیرہ کرے گا اور getSmartCodeEvent طریقہ استعمال کرتے ہوئے سلسلہ سے استفسار کیا جا سکتا ہے۔

مضمون کا ترجمہ حشرات اینڈ شیئرز کے ایڈیٹرز نے خاص طور پر اونٹولوجی روس کے لیے کیا تھا۔ کلک کریں

کیا آپ ایک ڈویلپر ہیں؟ پر ہماری ٹیک کمیونٹی میں شامل ہوں۔ Discord. اس کے علاوہ، پر ایک نظر ڈالیں ڈویلپر سینٹر ہماری ویب سائٹ پر، جہاں آپ ڈویلپر ٹولز، دستاویزات، اور بہت کچھ حاصل کر سکتے ہیں۔

علم

ماخذ: www.habr.com

نیا تبصرہ شامل کریں