ይህ መጣጥፍ ስለ cryptocurrency ወይም ያልተማከለ ፋይናንስ አይደለም። በምትኩ፣ እንደ እርስዎ ልዩ ፍላጎቶች እና ግቦች ላይ በመመስረት ይፋዊ EVM blockchains እና በሚቀጥለው ፕሮጀክትዎ ውስጥ እንዴት ጥቅም ላይ እንደሚውሉ እንመረምራለን። ስሰራበት የነበረውን 0xweb ላይብረሪ በመጠቀም ወደ ጥቅሞቹ፣ ጉዳቶቹ እና ተግባራዊ ምሳሌዎች እገባለሁ።
ቀድሞውኑ እየሰራ ነው. በቀላሉ የውሂብ ሞዴልዎን እንደ ውል ይግለጹ እና ያሰማሩት።
አንዴ የእርስዎ ውሂብ ከተሰቀለ፣ blockchain እስካለ ድረስ ተደራሽ ሆኖ ይቆያል። ከሌላው የማስተናገጃ ምዝገባዎ በጣም ረጅም እንደሚሆን መገመት እችላለሁ።
በብሎክቼይን ውስጥ የማንበብ እና የመፃፍ ሂደቶችን መለየት ለንባብ ስራዎች 100% ጊዜን ያረጋግጣል ፣ በተለይም ብዙ RPC አቅራቢዎችን ለድጋሚ ጥቅም ላይ በሚውልበት ጊዜ።
Blockchains በተፈጥሯቸው ከተለመዱት የማስተናገጃ መፍትሄዎች የበለጠ ከፍተኛ የደህንነት ደረጃ ይሰጣሉ. የውሂብ ብዝበዛ የሚቻለው በእርስዎ የውሂብ ሞዴል ሎጂክ ውስጥ ተጋላጭነቶች ካሉ ብቻ ነው።
ካልተመሰጠረ በስተቀር፣ የእርስዎ ውሂብ ክፍት፣ ተደራሽ እና በማንኛውም ሰው ሊረጋገጥ የሚችል ሆኖ ይቆያል፣ ይህም ግልጽነትን ያበረታታል።
የጎራ ስሞች ለዚህ አይነት ደጋፊ አያስፈልጉም። በምትኩ፣ ያልተማከለ መስቀለኛ መንገድ አቅራቢዎችን ዝርዝር መጠቀም ይቻላል፣ ይህም የደንበኛ ቤተ-መጻሕፍት ለዋና ተጠቃሚዎች በጣም ቀልጣፋውን አማራጭ እንዲመርጡ ያስችላቸዋል።
ከላይ ላሉት ባህሪያት ምስጋና ይግባውና በብሎክቼይን ላይ የተመሰረቱ የጀርባ አዘጋጆች የፕሮጀክት ጥገና እና ልማት ቢቆምም የውሂብ ደህንነትን እና 24/7 ተገኝነትን በማረጋገጥ የተጠቃሚ እምነትን ይገነባሉ።
በብሎክቼይን ላይ የተከማቹ ሌሎች የውሂብ ሞዴሎችን ማዋሃድ ወይም ሌሎች ፕሮጀክቶች በእርስዎ የውሂብ ሞዴል ላይ ሊገነቡ ይችላሉ።
ተጠቃሚዎች ድርጊቶችን ለመቆጣጠር ወይም በራስ ሰር ለመስራት ብዙ የሶስተኛ ወገን ፕሮጄክቶችን መጠቀም ይችላሉ፣ ይህም የውሂብ ሞዴልዎን እድሎች በከፍተኛ ሁኔታ ያሰፋሉ።
ውሂቡ ከዚህ በፊት ከየትኛውም ቦታ ሊገኝ ይችላል.
ተለዋዋጭ የመተግበሪያ ምላሾችን በማንቃት ለእውነተኛ ጊዜ የሚመጡ ክስተቶችን ለማዳመጥ ታሪካዊ ብጁ ክስተቶችን ጫን ወይም WebSocketsን ተጠቀም።
የ"Wallet" ጽንሰ-ሐሳብ ተጠቃሚዎች መልእክቶችን በመፈረም፣ እንከን የለሽ እና ያልተማከለ የተጠቃሚ መለያ በማቅረብ ራሳቸውን እንዲያረጋግጡ ያስችላቸዋል።
ተጠቃሚዎች እርስዎ በገለጿቸው ፈቃዶች ላይ በመመስረት በእርስዎ ማከማቻ ውስጥ ያለውን ውሂብ መቀየር ወይም ማራዘም ይችላሉ። በአስፈላጊ ሁኔታ የእነዚህ ማሻሻያዎች ወጪዎች በተጠቃሚዎች ይሸፈናሉ. አነስተኛ ዋጋ ያለው ብሎክቼይን በመምረጥ፣ እነዚህ ክፍያዎች ብዙም ዋጋ ቢስ ሆነው ሊቆዩ ይችላሉ፣ ብዙውን ጊዜ በአንድ ግብይት ጥቂት ሳንቲም ብቻ ይሆናል።
ምንም እንኳን እውነተኛ ክፍያ የሚከፈልበት ሞዴል ቢከተልም ለምታከማቹት SLOT ብቻ ነው የሚከፍሉት። እያንዳንዱ SLOT 32 ባይት አለው፣ አዲስ መረጃ ለመፃፍ 20000 GAS ወይም ውሂቡን ለማዘመን 5000 GAS ያስከፍላል። ፖሊጎንን እንደ ምሳሌ እንውሰድ፣ በ30-gwei GAS ዋጋ እና በ$0.60 POL ዋጋ።
20000GAS × 30gwei = 0.008 ፖል × $0.60 = $0.00032
ይህ በጣም ብዙ ነው፣ ስለዚህ የ"ፍሎፒ ዲስክ" ስሜት ገላጭ ምስል የማከማቻ መጠኖችን በተሻለ መንገድ ይወክላል፣ ይህ ማለት በራስዎ ከከፈሉ ለአነስተኛ የመረጃ ቋቶች በጣም ተስማሚ ነው። ነገር ግን፣ ልዩ ጥቅም ተጠቃሚዎች የራሳቸውን የማከማቻ እና የድርጊት ወጪዎች መሸከም ይችላሉ፣ ይህ ባህሪ በሌሎች ቴክኖሎጂዎች ውስጥ የማይገኝ ነው። ይህ አካሄድ የመተግበሪያዎን የጅምላ ጉዲፈቻ ሊያደናቅፍ ቢችልም፣ በብሎክቼይን ማህበረሰብ ዘንድ ተቀባይነት አለው።
የብሎክቼይን ዳታ ሞዴሎች ከመረጃው ጋር ለመግባባት ተግባራትን ይደግፋሉ፣ ነገር ግን የማስላት ችሎታቸው ገደቦች አሏቸው። እነዚህ ገደቦች ለንባብ ድርጊቶች በሚጠቀሙባቸው የ RPC ኖዶች እና በጽሁፍ ድርጊቶች (ግብይቶች) ላይ በተጣለው ጥብቅ የ GAS ገደቦች ይወሰናል. መሰረታዊ ክዋኔዎች፣ loops እና ጥልቅ የጥሪ ቁልልዎች በተለምዶ ማስተዳደር የሚችሉ ሲሆኑ፣ blockchain ለከባድ ስሌት የስራ ጫናዎች ተስማሚ አይደለም።
ያ ማለት፣ በተለምዶ ከተካተቱት በአንጻራዊ ሁኔታ አነስተኛ የውሂብ መጠኖች አንጻር፣ ያሉት ገደቦች አብዛኛውን ጊዜ ለአብዛኛዎቹ የአጠቃቀም ጉዳዮች በቂ ናቸው።
ለብሎክቼይን ልማት አዲስ ከሆኑ፣ ለመጀመር ውስብስብ እና ከባድ እንደሆነ ሰምተው ይሆናል። ይሁን እንጂ ይህ እውነት አይደለም. የብሎክቼይን ልማት የታወቁ ፅንሰ-ሀሳቦችን፣ ትርጓሜዎችን እና አገባቦችን ይጠቀማል፣ ይህም ከሚመስለው በላይ ለመማር ቀላል ያደርገዋል።
https://github.com/0xweb-org/emples-backend
ለዚህ ጽሑፍ፣ የመተግበሪያ ሥሪት አስተዳዳሪ ውል እንፍጠር። አዲስ እትም ሲታተም የማውረጃ ማገናኛን ሰርስሮ ለማውጣት የጀርባ ድጋፍ የሚፈልግ የዴስክቶፕ መተግበሪያ እንዳለህ አስብ። አብዛኛዎቹ ቁልፍ ጽንሰ-ሀሳቦችን የሚያሳይ የመጨረሻው ውል ከዚህ በታች አለ።
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol"; struct Package { uint version; uint timestamp; string url; bytes32 sha256; } contract AppVersionManager is Ownable { // Events that are emitted on data updates event NewApplicationInfo(); event NewPackage(uint version, uint timestamp); // Custom error, when title for the application is empty error TitleIsEmpty(); // Some application information string public title; // @TODO: add further application related properties if required // Latest package Package public package; // Track all versions and their packages mapping (uint => Package) public packages; // List of all previous versions uint[] public versions; constructor () Ownable(msg.sender) { } function updateInfo(string calldata newTitle) external onlyOwner { if (bytes(newTitle).length == 0) { revert TitleIsEmpty(); } title = newTitle; emit NewApplicationInfo(); } function updatePackage(Package calldata newPackage) external onlyOwner { require(newPackage.version > package.version, "Newer package already published"); packages[package.version] = package; package = newPackage; versions.push(package.version); emit NewPackage(package.version, block.timestamp); } function findPackageAtTimestamp (uint timestamp) external view returns (Package memory) { if (package.timestamp <= timestamp) { return package; } // the countdown loop to find the latest package for the timestamp int i = int(versions.length); while (--i > -1) { Package memory pkg = packages[versions[uint(i)]]; if (pkg.timestamp <= timestamp) { return pkg; } } revert("No package found"); } function getPackage (uint version) external view returns (Package memory) { if (version == package.version) { return package; } return packages[version]; } }
እያንዳንዱ ገንቢ ይህን ኮድ በትንሹ ጥረት ማንበብ እና መረዳት ይችላል። የTyScriptን የምታውቁት ከሆነ፣ እዚህ ያሉት አብዛኛዎቹ ፅንሰ-ሀሳቦች ቀድሞውንም ትርጉም ይኖራቸዋል። ይበልጥ ግልጽ ለማድረግ፣ ተመሳሳይ የሆነ የTypeScript ምሳሌ ፈጠርኩ ፡ AppVersionManager.ts 🔗 .
በቀላል አነጋገር፣ በ Solidity ውስጥ ያለው ውል እንደ የግዛት ክፍል ምሳሌ ተደርጎ ሊወሰድ ይችላል። የንብረቶች፣ ዘዴዎች፣ ዓይነቶች እና ውርስ ፅንሰ-ሀሳቦች ቀደም ሲል በነገር-ተኮር ፕሮግራሞች ውስጥ የታወቁ ናቸው። እዚህ ላይ ለማብራራት ዋናው ፅንሰ-ሀሳብ onlyOwner
ማሻሻያ ነው (በTyScript ውስጥ ካለው ጌጣጌጥ ጋር ተመሳሳይ)።
እያንዳንዱ የብሎክቼይን መለያ በመሠረቱ የግል እና ይፋዊ ቁልፎች ጥንድ ነው። አድራሻው በመባል የሚታወቀው የመለያው መታወቂያ ከህዝብ ቁልፍ የተገኘ ነው። ግብይት ሲፈፀም የላኪው አድራሻ እንደ msg.sender
ይተላለፋል። ይህንን በመጠቀም አድራሻዎን በገንቢው ውስጥ (በኮንትራት ማሰማራት ወቅት) ማከማቸት እንችላለን ። በኋላ፣ onlyOwner
መቀየሪያ እርስዎ ብቻ እንደ ኮንትራቱ ባለቤት updateInfo
እና updatePackage
ተግባራትን ማከናወን እንደሚችሉ ያረጋግጣል። ሌላ ሰው እነዚህን ድርጊቶች ከሞከረ፣ ግብይቱ ይመለሳል። onlyOwner
ማሻሻያ በስፋት ጥቅም ላይ የዋለው የ OpenZeppelin ቤተ-መጽሐፍት አካል በሆነው Ownable
ውል ነው የቀረበው። ይህ ቤተ-መጽሐፍት የብሎክቼይን ልማትን ለማሳለጥ ሌሎች ብዙ ጠቃሚ ውሎችን ያካትታል።
ሌላው የሚወያይበት አስፈላጊ ርዕስ የፕሮክሲዎች ፅንሰ-ሀሳብ ነው, ይህም ማከማቻን እና ትግበራን ለሁለት የተለያዩ ኮንትራቶች ይከፍላል. በ Solidity ውስጥ ያሉ የውል ትግበራዎች የማይለወጡ ናቸው፣ ይህ ማለት ከተሰማሩ በኋላ አዲስ ተግባራትን ወይም ንብረቶችን ማከል አይችሉም። በዚህ ዙሪያ ለመስራት "ፕሮክሲ" ውል ማሰማራት ይችላሉ. ተኪው ማከማቻን ይቆጣጠራል እና አንድ fallback
ተግባር ብቻ ይይዛል፣ ይህም የተኪውን የማከማቻ አውድ እየጠበቀ ወደ ትግበራ ውል ጥሪዎችን ያስተላልፋል።
ይህ ጽንሰ-ሐሳብ ውስብስብ ሊመስል ይችላል፣ ግን this
በጃቫስክሪፕት ውስጥ እንዴት እንደሚሰራ ተመሳሳይ ነው። ለማብራራት የሚረዳ ፈጣን ተመሳሳይነት ይኸውና፡-
const foo = new Proxy({ bar: 'Lorem' }, { get (obj, prop) { return fooImplementation[prop].bind(obj) }, }); const fooImplementation = { logValue () { console.log('Bar value:', this.bar) } } foo.logValue();
የውክልና ኮንትራቱ የአተገባበሩን ውል ማጣቀሻ ይይዛል። አዲስ ተግባራትን ማከል ከፈለጉ በቀላሉ አዲስ የማስፈጸሚያ ውል ማሰማራት እና ይህን አዲስ ውል ለማጣቀስ ፕሮክሲውን ማዘመን፣ የተግባር ጥሪዎችን ወደ ተዘመነው ምሳሌ ማስተላለፍ። ቀጥተኛ ሂደት ነው፣ ግን ሊታሰብበት የሚገባ ጉዳይ አለ፡ ግንበኞች።
የማስፈጸሚያ ውልን በሚዘረጋበት ጊዜ ገንቢው በራሱ የትግበራ ውል ማከማቻ ውስጥ ይሰራል። ይህ ማለት እንደ title = "Hello World"
ያሉ አቀናባሪዎች የተኪውን ማከማቻ አይቀይሩም። ይህንን ለመፍታት የጀማሪ ተግባር ጽንሰ-ሀሳብን እንጠቀማለን-
initialize
ተግባር ያለው የአተገባበር ውሉን ያሰማሩ።initialize
ዘዴ በፕሮክሲ ኮንትራት አውድ ውስጥ እንዲጠራ ያስችለዋል።
በውጤቱም፣ title
ንብረቱን ማዘመን፣ ለምሳሌ፣ በተኪ ማከማቻ ውስጥ በትክክል ያዘምነዋል።
የተሻሻለው የእኛ AppVersionManager: AppVersionManagerUpgradeable.sol .
የውክሌና ኮንትራቱ ራሱ ሁለንተናዊ እና ከአፈፃፀሙ ነፃ ነው። በOpenZeppelin ላይብረሪ ውስጥ ብዙ የታወቁ የፕሮክሲ መመዘኛዎች አሉ።
እነዚህን ጽንሰ-ሀሳቦች እና ከላይ ያሉትን ምሳሌዎች በማወቅ፣ ለንግድ ጉዳዮችዎ ዘመናዊ ኮንትራቶችን ለማዘጋጀት ዝግጁ ነዎት።
በመጀመሪያ, ኮንትራታችንን ለማሰማራት የምንፈልግበትን blockchain መምረጥ አለብን. ለዚህ ምሳሌ፣ ፖሊጎን መርጫለሁ። ዝቅተኛ የግብይት ወጪዎችን ያቀርባል, ለረጅም ጊዜ ቆይቷል, እና በተከታታይ ጥሩ አፈጻጸም አሳይቷል. የተረጋጋ እና ቀልጣፋ መሠረተ ልማቱ ከ 0.9 ቢሊዮን ዶላር አጠቃላይ እሴት (TVL) ጋር ተዳምሮ አስተማማኝ ምርጫ ያደርገዋል። ኮንትራቶችዎን ለህዝብ blockchains ማሰማራት ማለት ከፋይናንሺያል ተቋማት ጋር አብሮ መኖር ማለት ነው. የTVL መለኪያ እነዚህ ተቋማት በብሎክቼይን አስተማማኝነት ላይ ያላቸውን እምነት ያንፀባርቃል።
ከዚህም በላይ ሁኔታዎች ከተለዋወጡ, ለወደፊቱ ኮንትራቱን ወደ ሌላ blockchain መቀየር ይችላሉ.
የማሳያ ፕሮጄክቱ እንደ CI ሙከራ ማከማቻም ያገለግላል፣ ስለዚህ ሁሉም ትእዛዞች እዚህ ይገኛሉ ፡ https://github.com/0xweb-org/emples-backend/blob/master/deploy-cli.sh
# Install 0xweb library from NPM into the prject folder npm i 0xweb # Install required dependencies to compile/deploy *.sol files npx 0xweb init --hardhat --openzeppelin # Create or import the account. Private key will be encrypted with pin AND machine key. npx 0xweb accounts new --name foo --pin test --login # Save the private key securly and ensure the account has some POL tokens # Deploy. The foo account is selected as default. npx 0xweb deploy ./contracts/AppVersionManager.sol --chain polygon --pin test # Set title npx 0xweb c write AppVersionManager updateInfo --newTitle MySuperApp --pin test # Set latest package information npx 0xweb c write AppVersionManager updatePackage --arg0 'load(./data/package.json)' --pin test
በጥቂት ትዕዛዞች ብቻ፣ ውሉን አሰማርተህ ውሂቡን አዘምነሃል። ለኋለኛው ያ ብቻ ነው - አሁን ላይ ነው እና ከጎንዎ ምንም ተጨማሪ እርምጃዎችን ሳያስፈልግ “ለዘላለም” እየሰራ ነው። የዚህ ማሰማራቱ ወጪዎች፣ በጂኤስኤስ በ70 ግዋይ እና በPOOL ዋጋ $0.51፣ ይሆናሉ፡-
| ጋዝ | ፖል | $ |
---|---|---|---|
አሰማር | 850352 | 0.059 | 0.03 |
ርዕስ አስቀምጥ | 47517 እ.ኤ.አ | 0.0033 | 0.001 |
የጥቅል ውሂብ አስቀምጥ | በ169549 እ.ኤ.አ | 0.0118 | 0.006 |
ጠቅላላ | | | 0.037 |
ያልተማከለ ፣ ደህንነቱ የተጠበቀ እና ረጅም ጊዜ የሚቆይ አገልግሎትን ያለምንም ጥገና ለማዋቀር 4 ሳንቲም ብቻ ያጠፋሉ።
የእርስዎን የውል ውሂብ ለመጠየቅ፣ የ RPC ኖድ አቅራቢዎች ያስፈልጉዎታል። በደርዘን የሚቆጠሩ ነፃ አቅራቢዎች በ https://chainlist.org ይገኛሉ። ብዙ አቅራቢዎችን መምረጥ ይችላሉ፣ እና ጥሩ የዌብ3 ቤተ-መጽሐፍት ለዋና ተጠቃሚዎችዎ በጣም ቀልጣፋውን ለመምረጥ በ runtime ጊዜ የክብ-ሮቢን ስትራቴጂን ሊጠቀም ይችላል። በ0xweb የመነጨው ታይፕ ስክሪፕት ወይም ጃቫስክሪፕት ክፍሎች ምርጡን የመጨረሻ ነጥቦችን ብቻ ሳይሆን ሁሉንም የብሎክቼይን ግንኙነት አብስትራክት ያደርጋሉ። ደንበኞቹ መረጃን ለማምጣት ከፍተኛ ደረጃ ዘዴዎችን ይይዛሉ, ይህም ሂደቱን እንከን የለሽ እና ቀልጣፋ ያደርገዋል.
# The deploy command also generates the class, but manual install is also possible npx 0xweb i 0x<address> --name AppVersionManager --chain polygon
import { AppVersionManager } from './0xc/polygon/AppVersionManager/AppVersionManager' const manager = new AppVersionManager(); console.log(`Title`, await manager.title()); console.log(`Package`, await manager.package());
ለሌሎች የፕሮግራሚንግ ቋንቋዎች የብሎክቼይን ጥያቄን ለማቃለል ብዙ ቤተ መጻሕፍት አሉ። ከተሰማሩ በኋላ የኮንትራቱ አድራሻ እና ABI (በይነገጽ) ይኖረዎታል።
በአማራጭ፣ 0xwebን በመጠቀም የኮንትራት ውሂብ ለመጠየቅ የመካከለኛ ዌር አገልጋይ መክፈት ይችላሉ።
npx 0xweb server start --port 3000 curl http://localhost:3000/api/c/read/AppVersionManager/package?chain=polygon
አንዱ ጥቅም በመተግበሪያዎ ውስጥ ምንም ቤተ-መጻሕፍት ማካተት አያስፈልገዎትም - ጥሬ HTTP ጥያቄዎች። ሆኖም፣ ይህ አካሄድ እርስዎ ማስተዳደር በሚፈልጉት ተጨማሪ አገልጋይ ላይ የተመሰረተ ነው። ብዙ ጊዜ በ0xweb የመነጩ ክፍሎችን ወይም ሌሎች በብሎክቼይን ቤተመፃህፍት በመጠቀም blockchainን መጠየቁ የተሻለ ነው።
ይህ ጽሑፍ blockchains እንዴት ቀላል እና ኃይለኛ ሊሆኑ እንደሚችሉ አሳይቷል, ከባህላዊ ማስተናገጃ መፍትሄዎች ጋር ሲነጻጸር ልዩ ጥቅሞችን ይሰጣል.
በሚቀጥለው ርዕስ ላይ እንደ ግሪንፊልድ እና አርዌቭ ያሉ ያልተማከለ የ BLOB ማከማቻ አውታረ መረቦችን ለመዳሰስ እቅድ አለኝ, ባህሪያቸውን እና ጥቅሞቻቸውን በማጉላት.
በ 0xweb ቤተ-መጽሐፍት ውስጥ ለማካተት ተጨማሪ ባህሪያትን በተመለከተ ማንኛውም አስተያየት ወይም ሀሳብ ካለዎት በአስተያየቶቹ ውስጥ ለማካፈል ነፃነት ይሰማዎ ወይም በቀጥታ በ [email protected] ያግኙ።