በኦንቶሎጂ አውታረመረብ ላይ WebAssembly ስማርት ውል እንዴት እንደሚፃፍ? ክፍል 1: ዝገት

በኦንቶሎጂ አውታረመረብ ላይ WebAssembly ስማርት ውል እንዴት እንደሚፃፍ? ክፍል 1: ዝገት

Ontology Wasm ቴክኖሎጂ የ dApp ስማርት ኮንትራቶችን ውስብስብ የንግድ አመክንዮ ወደ blockchain ለማዛወር የሚወጣውን ወጪ ይቀንሳል፣ በዚህም የ dApp ምህዳርን በእጅጉ ያበለጽጋል።

В настоящее время ኦንቶሎጂ ዋዝም በተመሳሳይ ጊዜ የ Rust እና C ++ እድገትን ይደግፋል። የ Rust ቋንቋ Wasmን በተሻለ ሁኔታ ይደግፋል, እና የመነጨው ባይትኮድ ቀለል ያለ ነው, ይህም የኮንትራት ጥሪ ወጪን የበለጠ ሊቀንስ ይችላል. ስለዚህ፣ በኦንቶሎጂ አውታረመረብ ላይ ውል ለማዘጋጀት Rustን እንዴት መጠቀም እንደሚቻል?

ከዝገት ጋር የ WASM ውል ማዳበር

ውል ይፍጠሩ

ጭነት ገንቢዎች የኮድ እና የሶስተኛ ወገን ቤተ-መጻሕፍት መስተጋብርን በተሻለ ሁኔታ እንዲያደራጁ የሚረዳ ጥሩ የፕሮጀክት ፈጠራ እና የጥቅል አስተዳደር መሳሪያ ነው አዲስ Ontology Wasm ውል ለመፍጠር በቀላሉ የሚከተለውን ትዕዛዝ ያሂዱ፡-

በኦንቶሎጂ አውታረመረብ ላይ WebAssembly ስማርት ውል እንዴት እንደሚፃፍ? ክፍል 1: ዝገት

የሚፈጥረው የፕሮጀክት መዋቅር፡-

በኦንቶሎጂ አውታረመረብ ላይ WebAssembly ስማርት ውል እንዴት እንደሚፃፍ? ክፍል 1: ዝገት

የCargo.toml ፋይል መሰረታዊ የፕሮጀክት መረጃን እና ጥገኛ የቤተ-መጽሐፍትን መረጃ ለማዘጋጀት ይጠቅማል። የፋይሉ [lib] ክፍል ወደ crate-type = ["cdylib"] መዋቀር አለበት። የlib.rs ፋይል የኮንትራቱን አመክንዮ ኮድ ለመጻፍ ይጠቅማል። በተጨማሪም፣ በCargo.toml ውቅር ፋይል ውስጥ የጥገኝነት መለኪያዎችን ወደ [ጥገኛዎች] ክፍል ማከል አለብህ፡

በኦንቶሎጂ አውታረመረብ ላይ WebAssembly ስማርት ውል እንዴት እንደሚፃፍ? ክፍል 1: ዝገት

በዚህ ጥገኝነት፣ ገንቢዎች ከኦንቶሎጂ blockchain ጋር መስተጋብር የሚፈጥሩ በይነገጾችን እና እንደ ተከታታይነት መለኪያ ያሉ መሳሪያዎችን ሊጠሩ ይችላሉ።

የኮንትራት መግቢያ ተግባር

እያንዳንዱ ፕሮግራም የግቤት ተግባር አለው፣ ልክ እንደ ዋናው ተግባር ዘወትር እንደምናየው፣ ውሉ ግን ዋና ተግባር የለውም። Rustን በመጠቀም የWasm ውል ሲፈጠር፣ ነባሪው መጠሪያ ተግባር ውሉን ለመጠቀም እንደ ግብዓት ተግባር ሆኖ ያገለግላል። በቨርቹዋል ማሽን ሊሰራ የሚችል የRust ምንጭ ኮድ ወደ ባይትኮድ ሲዘጋጅ በሩስት ውስጥ ያለ ተግባር ስም ግልጽ አይሆንም። አቀናባሪው ተደጋጋሚ ኮድ እንዳያመነጭ እና የውሉን መጠን ለመቀነስ የጠሪ ተግባር #[no_mangle] ማብራሪያን ይጨምራል።

የመጥሪያው ተግባር ግብይቱን ለማስፈጸም መለኪያዎችን እንዴት ያገኛል?

የ ontio_std ላይብረሪ ግብይትን ለማስፈጸም መለኪያዎችን ለማግኘት የሩጫ ጊዜ ::ግቤት() ተግባርን ይሰጣል። ገንቢዎች የተገኘውን ባይት አደራደር ከስራ ለማራገፍ ZeroCopySourceን መጠቀም ይችላሉ። የመጀመሪያው ባይት የሚነበብበት የጥሪ ዘዴ ስም ሲሆን ከዚያም የስልት መለኪያዎችን ይከተላል።

የኮንትራቱ አፈፃፀም ውጤት እንዴት ይመለሳል?

በ ontio_std ቤተ-መጽሐፍት የቀረበው የሩጫ ጊዜ :: ret ተግባር የአንድ ዘዴ አፈፃፀም ውጤትን ይመልሳል።

የተጠናቀቀው የጥሪ ተግባር ይህን ይመስላል።

በኦንቶሎጂ አውታረመረብ ላይ WebAssembly ስማርት ውል እንዴት እንደሚፃፍ? ክፍል 1: ዝገት

የኮንትራት ውሂብን ተከታታይ ማድረግ እና ማሰናከል

ኮንትራቶችን በማዘጋጀት ሂደት ውስጥ ገንቢዎች ሁልጊዜ የመለያየት እና የመቀነስ ችግር ያጋጥማቸዋል ፣በተለይ የመረጃ ቋቱን እንዴት በመረጃ ቋቱ ውስጥ ማከማቸት እና የ struct data typeን ለማግኘት ከውሂብ ጎታ የተነበበ ባይት ድርድር እንዴት ማጥፋት እንደሚቻል።

የ ontio_std ቤተ-መጽሐፍት ለመረጃ ተከታታይነት እና ለመለያየት ዲኮደር እና ኢንኮደር በይነገጾችን ያቀርባል። የአወቃቀሩ መስኮችም ዲኮደር እና ኢንኮደር በይነገጾችን በመተግበር አወቃቀሩ ተከታታይነት ያለው እና የተከታታይ እንዲሆን። የተለያዩ የመረጃ ዓይነቶች ተከታታይ ሲሆኑ የሲንክ ክፍል ምሳሌዎች ያስፈልጋሉ። የሲንክ ክፍል ምሳሌ የባይት አይነት ውሂቡን የሚያከማች የ set-type field buf አለው፣ እና ሁሉም ተከታታይነት ያለው መረጃ በቡፍ ውስጥ ይከማቻል።

ለቋሚ ርዝመት ውሂብ (ለምሳሌ: ባይት, u16, u32, u64, ወዘተ.) ውሂቡ በቀጥታ ወደ ባይት ድርድር ይቀየራል እና ከዚያም በ buf ውስጥ ይከማቻል; ቋሚ ያልሆነ ርዝመት ላለው መረጃ በመጀመሪያ ርዝመቱ ተከታታይ መሆን አለበት ከዚያም ዲዳታ (ለምሳሌ ያልታወቀ መጠን ያልታወቀ ኢንቲጀር u16, u32, ወይም u64, ወዘተ ጨምሮ)።

ማጥፋት ፍጹም ተቃራኒ ነው። ለእያንዳንዱ ተከታታይ ዘዴ, ተመጣጣኝ የዲሴሪያላይዜሽን ዘዴ አለ. መናድ የምንጭ ክፍል ሁኔታዎችን መጠቀምን ይጠይቃል። ይህ ክፍል ምሳሌ ሁለት መስኮች buf እና pos አለው። Buf ውሂቡ እንዲጠፋ ለማድረግ ጥቅም ላይ ይውላል እና pos የአሁኑን የንባብ ቦታ ለማከማቸት ይጠቅማል። አንድ የተወሰነ የውሂብ አይነት በሚነበብበት ጊዜ, ርዝመቱን ካወቁ, ለማይታወቅ ርዝመት, በቀጥታ ማንበብ ይችላሉ - መጀመሪያ ርዝመቱን ያንብቡ እና ይዘቱን ያንብቡ.

በሰንሰለቱ ውስጥ ያለውን ውሂብ ይድረሱ እና ያዘምኑ

ኦንቶሎጂ-wasm-cdt-ዝገት - በሰንሰለቱ ውስጥ ካለው መረጃ ጋር አብሮ ለመስራት የሚያስችል የአሠራር ዘዴን አቅርቧል ፣ ይህም ለገንቢዎች እንደ ሰንሰለት ውስጥ ያሉ መረጃዎችን ማከል ፣ መሰረዝ ፣ መለወጥ እና መጠይቆችን ለመተግበር ምቹ ነው ።

  • ዳታቤዝ:: አግኝ (ቁልፍ) - ከሰንሰለቱ መረጃን ለመጠየቅ ጥቅም ላይ ይውላል, እና ቁልፍ ጥያቄዎች የ AsRef በይነገጽ ትግበራ;
  • የውሂብ ጎታ :: አስቀምጥ (ቁልፍ, እሴት) - በአውታረ መረቡ ላይ ውሂብ ለማከማቸት ጥቅም ላይ ይውላል. ቁልፍ የ AsRef በይነገጽ ትግበራ ይጠይቃል፣ እና ዋጋ የኢንኮደር በይነገጽን ተግባራዊ ለማድረግ ይጠይቃል።
  • ዳታቤዝ::ሰርዝ(ቁልፍ) - ከሰንሰለቱ ውስጥ መረጃን ለማስወገድ ጥቅም ላይ ይውላል, እና ቁልፍ የ AsRef በይነገጽ ትግበራ ይጠይቃል.

የኮንትራት ሙከራ

የኮንትራት ዘዴዎች ሲተገበሩ በሰንሰለቱ ላይ ያለውን መረጃ ማግኘት እንፈልጋለን እና የውሉን ባይት ኮድ ለማስፈፀም አግባብ ያለው ቨርቹዋል ማሽን እንፈልጋለን ስለዚህ በአጠቃላይ ለሙከራ ውሉን በሰንሰለቱ ላይ ማሰማራት አስፈላጊ ነው. ነገር ግን ይህ የመመርመሪያ ዘዴ ችግር ያለበት ነው. ገንቢዎች ኮንትራቶችን ለመፈተሽ ቀላል ለማድረግ የ ontio_std ላይብረሪ ለሙከራ የማስመሰል ሞጁል ይሰጣል። ይህ ሞጁል በወረዳው ውስጥ ያለውን መረጃ ማስመሰልን ያቀርባል, ይህም ገንቢዎች በውሉ ውስጥ ያሉትን ዘዴዎች አንድ ላይ እንዲሞክሩ ቀላል ያደርገዋል. የተወሰኑ ምሳሌዎችን ማግኘት ይቻላል እዚህ.

የኮንትራት ማረም

console ::ማረም(msg) ውልን በማረም ጊዜ የማረም መረጃን ያሳያል። የ msg መረጃ ወደ መስቀለኛ መንገድ መዝገብ ውስጥ ይታከላል። ቅድመ ሁኔታ የአካባቢው የኦንቶሎጂ ሙከራ መስቀለኛ መንገድ በሚሄድበት ጊዜ የምዝግብ ማስታወሻውን ደረጃ ወደ ማረም ሁነታ ማዘጋጀት ነው።

Runtime:: Notify(msg) ውሉ በሚታረምበት ጊዜ ተገቢውን የማረም መረጃ ያወጣል። ይህ ዘዴ ወደ ሰንሰለቱ የገባውን መረጃ ያከማቻል እና የ GetSmartCodeEvent ዘዴን በመጠቀም ከሰንሰለቱ ሊጠየቅ ይችላል።

ጽሑፉ የተተረጎመው በ Hashrate&Shares አዘጋጆች በተለይ ለኦንቶሎጂ ሩሲያ ነው። ማልቀስ

ገንቢ ነህ? የእኛን የቴክኖሎጂ ማህበረሰብ በ ላይ ይቀላቀሉ ክርክር. በተጨማሪም, ይመልከቱ የገንቢ ማዕከል በድረ-ገጻችን ላይ የገንቢ መሳሪያዎችን, ሰነዶችን እና ሌሎችንም ማግኘት ይችላሉ.

ተዋረዳዊ

ምንጭ: hab.com

አስተያየት ያክሉ