د اونټولوژي په شبکه کې د WebAssembly سمارټ قرارداد لیکلو څرنګوالی؟ 1 برخه: زنګ

د اونټولوژي په شبکه کې د WebAssembly سمارټ قرارداد لیکلو څرنګوالی؟ 1 برخه: زنګ

د اونټولوژي وسیم ټیکنالوژي بلاکچین ته د پیچلي سوداګرۍ منطق سره د dApp سمارټ قراردادونو مهاجرت لګښت کموي ، پدې توګه د dApp ایکوسیستم خورا بډایه کوي.

В настоящее время آنتولوژي وسیم په ورته وخت کې د زنګ او C++ پراختیا ملاتړ کوي. د زنګ ژبه د Wasm ښه ملاتړ کوي، او تولید شوی بایټکوډ ساده دی، کوم چې کولی شي د قرارداد زنګونو لګښت نور هم کم کړي. نو، د اونټولوژي په شبکه کې د تړون رامینځته کولو لپاره څنګه زنګ وکاروئ؟

د زنګ سره د WASM تړون رامینځته کول

یو تړون جوړ کړئ

کارګو د زنګ پراختیا لپاره د پروژې رامینځته کولو او بسته بندۍ مدیریت ښه وسیله ده ، کوم چې پراختیا کونکو سره مرسته کوي ترڅو د کوډ او دریمې ډلې کتابتونونو تعامل غوره تنظیم کړي. د نوي اونټولوژي Wasm تړون رامینځته کولو لپاره ، په ساده ډول لاندې کمانډ پرمخ وړئ:

د اونټولوژي په شبکه کې د WebAssembly سمارټ قرارداد لیکلو څرنګوالی؟ 1 برخه: زنګ

د پروژې جوړښت دا تولیدوي:

د اونټولوژي په شبکه کې د WebAssembly سمارټ قرارداد لیکلو څرنګوالی؟ 1 برخه: زنګ

د Cargo.toml فایل د پروژې د بنسټیزو معلوماتو او اړوند کتابتون معلوماتو تنظیم کولو لپاره کارول کیږي. د دوتنې [lib] برخه باید crate-type = ["cdylib"] ته وټاکل شي. د lib.rs فایل د تړون منطق کوډ لیکلو لپاره کارول کیږي. برسېره پردې، تاسو اړتیا لرئ چې د Cargo.toml ترتیب کولو فایل کې [انحصار] برخې ته د انحصار پیرامیټونه اضافه کړئ:

د اونټولوژي په شبکه کې د WebAssembly سمارټ قرارداد لیکلو څرنګوالی؟ 1 برخه: زنګ

د دې انحصار سره ، پراختیا کونکي کولی شي انٹرفیس ته زنګ ووهي چې د اونټولوژي بلاکچین او وسیلو سره اړیکه لري لکه د سیریل کولو پیرامیټر.

د تړون د ننوتلو فعالیت

هر برنامه د ان پټ فنکشن لري ، لکه د اصلي فعالیت په څیر چې موږ یې معمولا ګورو ، مګر تړون اصلي فعالیت نلري. کله چې د Wasm قرارداد د Rust په کارولو سره رامینځته کیږي، د ډیفالټ انووک فنکشن د قرارداد کارولو لپاره د ان پټ فنکشن په توګه کارول کیږي. په Rust کې د فنکشن نوم به روښانه نه وي کله چې د زنګ سرچینې کوډ په بایټکوډ کې تالیف کړئ چې د مجازی ماشین لخوا اجرا کیدی شي. د دې لپاره چې کمپیلر د بې ځایه کوډ رامینځته کولو مخه ونیسي او د تړون اندازه کمه کړي ، د بلولو فنکشن #[no_mangle] تشریح اضافه کوي.

د بلولو فنکشن څنګه د لیږد اجرا کولو لپاره پیرامیټونه ترلاسه کوي؟

د ontio_std کتابتون د رن ټایم::input() فنکشن چمتو کوي ترڅو د لیږد ترسره کولو لپاره پیرامیټونه ترلاسه کړي. پرمخ وړونکي کولی شي د زیرو کاپي سورس څخه کار واخلي ترڅو پایله شوي بایټ سرې غیر منظم کړي. په کوم کې چې د لوستلو د بایټونو لومړی سري د بلولو میتود نوم دی ، وروسته د میتود پیرامیټونه.

د قرارداد اجرا کولو پایله څنګه بیرته راستانه شوې؟

د رنټیم::ret فنکشن د ontio_std کتابتون لخوا چمتو شوی د میتود اجرا کولو پایله بیرته راګرځوي.

د بشپړ شوي غوښتنې فنکشن داسې ښکاري:

د اونټولوژي په شبکه کې د WebAssembly سمارټ قرارداد لیکلو څرنګوالی؟ 1 برخه: زنګ

د قرارداد ډیټا سیریل کول او غیر سریال کول

د قراردادونو د پراختیا په بهیر کې، پراختیا کونکي تل د سیریل کولو او ډیسیریالیزیشن سره ستونزې لري، په ځانګړې توګه په ډیټابیس کې د ساختماني ډیټا ډول ذخیره کولو څرنګوالی او څنګه د ډیټابیس څخه لوستل شوي د بایټ سرې بې برخې کول ترڅو د جوړښت ډیټا ډول ترلاسه کړي.

د ontio_std کتابتون د ډیټا سیریلائزیشن او ډیسیریلائزیشن لپاره ډیکوډر او انکوډر انٹرفیس چمتو کوي. د ساختمان ساحې هم د کوډر او کوډر انٹرفیس پلي کوي ترڅو جوړښت سیریل او ډیسیریل شي. د سینک ټولګي مثالونه اړین دي کله چې مختلف ډیټا ډولونه سریال شوي وي. د سینک کلاس یوه بیلګه د سیټ ډول فیلډ بف لري چې د بایټ ډول ډیټا ذخیره کوي ، او ټول سریال شوي ډیټا په بف کې زیرمه کیږي.

د ثابت اوږدوالی ډیټا لپاره (د بیلګې په توګه: بایټ، u16، u32، u64، او نور)، ډاټا په مستقیم ډول د بایټ سرې ته بدلیږي او بیا په بف کې زیرمه کیږي؛ د غیر ټاکل شوي اوږدوالي ډیټا لپاره ، اوږدوالی باید لومړی سیریل شي ، بیا Ddata (د مثال په توګه ، د نامعلوم اندازې غیر لاسلیک شوي عددونه ، پشمول u16, u32, یا u64, etc.).

Deserialization دقیق مخالف دی. د هر سیریل کولو میتود لپاره، د ورته سیریل کولو طریقه شتون لري. Deserialization د سرچینې ټولګي مثالونو کارولو ته اړتیا لري. د دې ټولګي مثال دوه ساحې buf او pos لري. بف د ډیټا ذخیره کولو لپاره کارول کیږي ترڅو بې سیریل شي او pos د اوسني لوستل شوي موقعیت ذخیره کولو لپاره کارول کیږي. کله چې یو ځانګړی ډول ډاټا لوستل کیږي، که تاسو د هغې اوږدوالی پوهیږئ، تاسو کولی شئ مستقیم ولولئ، د نامعلوم اوږدوالي ډاټا لپاره - لومړی اوږدوالی ولولئ، بیا مینځپانګې ولولئ.

په سلسله کې معلوماتو ته لاسرسی او تازه کړئ

ontology-wasm-cdt-rust - په زنځیر کې د ډیټا سره کار کولو لپاره عملیاتي میتود پوښل شوی ، کوم چې د پراختیا کونکو لپاره د عملیاتو پلي کولو لپاره مناسب دی لکه په زنځیر کې د معلوماتو اضافه کول ، حذف کول ، بدلول او پوښتنې کول:

  • ډیټابیس:: ترلاسه کول (کیلي) - د زنځیر څخه د معلوماتو غوښتنه کولو لپاره کارول کیږي ، او کلیدي د AsRef انٹرفیس پلي کولو غوښتنه کوي؛
  • ډیټابیس :: کیلي (کیلي، ارزښت) - په شبکه کې د معلوماتو ذخیره کولو لپاره کارول کیږي. کلیدي د AsRef انٹرفیس پلي کولو غوښتنه کوي، او ارزښت د انکوډر انٹرفیس پلي کولو غوښتنه کوي؛
  • ډیټابیس :: حذف (کیلي) - د زنځیر څخه ډیټا لرې کولو لپاره کارول کیږي ، او کلیدي د AsRef انٹرفیس پلي کولو غوښتنه کوي.

د قرارداد ازموینه

کله چې د تړون میتودونه پلي کیږي ، موږ په زنځیر کې معلوماتو ته لاسرسي ته اړتیا لرو او موږ د تړون بایټ کوډ اجرا کولو لپاره مناسب مجازی ماشین ته اړتیا لرو ، نو دا عموما اړینه ده چې قرارداد د ازموینې لپاره په زنځیر کې ځای په ځای کړو. مګر د ازموینې دا طریقه ستونزمنه ده. د دې لپاره چې پراختیا کونکو ته د قراردادونو ازموینه اسانه کړي، د ontio_std کتابتون د ازموینې لپاره یو جعلي ماډل چمتو کوي. دا ماډل په سرکټ کې د معلوماتو سمول چمتو کوي، د پراختیا کونکو لپاره دا اسانه کوي چې په قرارداد کې د میتودونو واحد ازموینه وکړي. ځانګړي مثالونه موندل کیدی شي دلته.

قرارداد Debugging

کنسول:: debug(msg) د تړون د ډیبګ کولو پرمهال د ډیبګ معلومات ښیې. د پیغام معلومات به د نوډ لاګ فایل کې اضافه شي. یو شرط دا دی چې د لاګ فایل کچه د ډیبګ حالت لپاره تنظیم کړئ کله چې د محلي اونټولوژي ازموینې نوډ روان وي.

runtime::notify(msg) مناسب ډیبګ معلومات تولیدوي پداسې حال کې چې قرارداد ډیبګ کیږي. دا طریقه به په زنځیر کې داخل شوي معلومات ذخیره کړي او د getSmartCodeEvent میتود په کارولو سره له زنځیر څخه پوښتنه کیدی شي.

مقاله د حشرت او شریکانو د مدیرانو لخوا په ځانګړي توګه د اونټولوژی روسیه لپاره ژباړل شوې. ژړل

ایا تاسو پرمخ وړونکی یاست؟ زموږ د تخنیکي ټولنې سره یوځای شئ توپیر. همدارنګه، یو نظر وګورئ د پراختیا مرکز زموږ په ویب پاڼه کې، چیرې چې تاسو کولی شئ د پراختیا کونکي وسایل، اسناد، او نور ډیر څه ومومئ.

انټولوژی

سرچینه: www.habr.com

Add a comment