paint-brush
Блокчейныг арын хэсэг болгон хөгжүүлэх нь үнэхээр хэцүү юу?by@0xtnbts
Шинэ түүх

Блокчейныг арын хэсэг болгон хөгжүүлэх нь үнэхээр хэцүү юу?

by Alex Kit11m2025/01/17
Read on Terminal Reader

Хэтэрхий урт; Унших

Энэ нийтлэл нь криптовалют эсвэл төвлөрсөн бус санхүүгийн тухай биш юм. Үүний оронд бид олон нийтэд зориулсан EVM блокчейн болон тэдгээрийг таны дараагийн төсөлд хэрхэн ашиглах талаар судлах болно. Би 0xweb номын санг ашиглан давуу тал, сул тал, практик жишээнүүдийг судлах болно.
featured image - Блокчейныг арын хэсэг болгон хөгжүүлэх нь үнэхээр хэцүү юу?
Alex Kit HackerNoon profile picture

Энэ нийтлэл нь криптовалют эсвэл төвлөрсөн бус санхүүгийн тухай биш юм. Үүний оронд бид нийтийн EVM блокчейнүүдийг судалж, таны хэрэгцээ, зорилгоос хамааран дараагийн төсөлдөө тэдгээрийг хэрхэн ашиглах талаар судлах болно. Би өөрийн ажиллаж байсан 0xweb номын санг ашиглан давуу болон сул талууд болон практик жишээнүүдэд шумбах болно.

§ pro and contra

• 🚀 Тохируулах хугацаа тэг болно

Энэ нь аль хэдийн ажиллаж байна. Зүгээр л өөрийн өгөгдлийн загвараа гэрээ гэж тодорхойлж, түүнийгээ ашигла.

• ✨ Засвар үйлчилгээ байхгүй

Таны өгөгдлийг байршуулсны дараа блокчэйн ажиллаж байгаа цагт тэдгээрт хандах боломжтой хэвээр байна. Энэ нь таны бусад хостингийн захиалгаас хамаагүй урт байх болно гэж би бодож байна.

• 💯 100% унших хугацаа; Ойролцоогоор 100% бичих хугацаа

Блокчейн дэх унших, бичих процессыг тусгаарласнаар унших үйлдлүүдийн 100% ажиллах хугацааг баталгаажуулдаг, ялангуяа олон RPC үйлчилгээ үзүүлэгчийг нөөцлөхөд ашиглах үед.

• 🛡️ Аюулгүй

Блокчейн нь ердийн хостинг шийдлээс илүү өндөр түвшний аюулгүй байдлыг хангадаг. Таны өгөгдлийн загварын логикт сул тал байгаа тохиолдолд л өгөгдөл ашиглах боломжтой.

• 📖 Нээлттэй өгөгдөл

Шифрлээгүй тохиолдолд таны өгөгдөл нээлттэй, хүртээмжтэй, хэн ч шалгах боломжтой хэвээр үлдэж, ил тод байдлыг дэмжинэ.

• 🖧 DNS-гүй

Энэ төрлийн backend-д домэйн нэр шаардлагагүй. Үүний оронд төвлөрсөн бус зангилаа үйлчилгээ үзүүлэгчдийн жагсаалтыг ашиглаж болох бөгөөд энэ нь үйлчлүүлэгчийн номын сангуудад эцсийн хэрэглэгчдэд хамгийн үр дүнтэй сонголтыг сонгох боломжийг олгодог.

• 🤝 Итгэл

Дээрх боломжуудын ачаар блокчэйнд суурилсан backend нь төслийн засвар үйлчилгээ, хөгжүүлэлт зогссон ч өгөгдлийн аюулгүй байдал, 24/7 бэлэн байдлыг хангах замаар хэрэглэгчийн итгэлийг бий болгодог.

• 🧩 Гуравдагч талын өгөгдлийн загваруудтай харилцан уялдаатай байх

Та блокчэйнд хадгалагдсан бусад өгөгдлийн загваруудыг нэгтгэж болно, эсвэл бусад төслүүд таны өгөгдлийн загвар дээр тулгуурлаж болно.

• ⚙️ Өргөтгөх чадвар

Хэрэглэгчид үйлдлүүдийг хянах, автоматжуулахын тулд олон тооны гуравдагч талын төслүүдийг ашиглаж, таны өгөгдлийн загварын боломжийг ихээхэн өргөжүүлж болно.

• 📜 Түүх, цаг хугацаагаар аялах

Өгөгдөл рүү өнгөрсөн үеийн аль ч цэгээс хандах боломжтой.

• 📡 Үйл явдал, арга хэмжээ

Түүхэн захиалгат үйл явдлуудыг ачаалах эсвэл WebSockets ашиглан бодит цаг хугацаанд ирж буй үйл явдлыг сонсож, динамик програмын хариуг идэвхжүүлнэ.

• 👤 Хэрэглэгчийн таних тэмдэг

"Түрүүвч"-ийн үзэл баримтлал нь хэрэглэгчдэд зурваст гарын үсэг зурах замаар өөрсдийгөө баталгаажуулах боломжийг олгодог бөгөөд хэрэглэгчийн төвлөрсөн бус танилтыг өгдөг.

• 📝 Хэрэглэгчдэд өгөгдлийг өөрчлөх, өргөтгөх эрхийг олгох

Таны тодорхойлсон зөвшөөрөл дээр үндэслэн хэрэглэгчид таны сан дахь өгөгдлийг өөрчлөх эсвэл өргөтгөх боломжтой. Хамгийн чухал нь эдгээр өөрчлөлтийн зардлыг хэрэглэгчид өөрсдөө хариуцдаг. Хямд өртөгтэй блокчейныг сонгосноор эдгээр хураамж нь маш бага хэвээр байх бөгөөд ихэнхдээ нэг гүйлгээнд хэдхэн цент болдог.

• 🌐 Асар том бөгөөд тасралтгүй хөгжиж буй экосистем

  • өгөгдлийн загварынхаа үйл ажиллагааг сайжруулахад ашиглаж болох олон тооны бат бөх модулиуд.
  • олон нээлттэй эхийн болон үнэгүй үйлчилгээнүүд, түүнчлэн үнэгүй төлөвлөгөө санал болгодог үйлчилгээнүүд байдаг. Үйлдвэрлэлийн хэрэгцээнд хангалттай үнэ төлбөргүй төлөвлөгөө гаргах нь блокчейн нийгэмлэгийн нийтлэг практик юм.

§ эсрэг

• 💾 Хадгалах нь үнэтэй 😢

Хэдийгээр энэ нь жинхэнэ төлбөр төлдөг загварыг дагаж мөрддөг ч та зөвхөн өөрийн хадгалдаг SLOT-ууддаа л төлбөр төлдөг. SLOT бүр нь 32 байт бөгөөд шинэ өгөгдөл бичихэд 20000 GAS, өгөгдлийг шинэчлэхэд 5000 GAS зардал гардаг. 30 гвей хийн үнэ, 0.60 долларын POL үнэ бүхий Полигоныг жишээ болгон авч үзье.


20000GAS × 30gwei = 0,008 POL × $0,60 = $0,00032


Энэ нь маш их тул "Уян диск" эможи нь хадгалах сангийн хэмжээг хамгийн сайн илэрхийлдэг бөгөөд хэрэв та өөрөө төлбөрөө төлвөл жижиг өгөгдлийн багцад хамгийн тохиромжтой гэсэн үг юм. Гэсэн хэдий ч бусад технологид байдаггүй онцлог шинж чанар нь хэрэглэгчид өөрсдийн хадгалалт, үйлдлийн зардлыг өөрөө хариуцдаг нь өвөрмөц давуу тал юм. Хэдийгээр энэ арга нь таны аппликейшнийг олноор нэвтрүүлэхэд саад болж магадгүй ч блокчейн нийгэмлэгийн хүрээнд үүнийг өргөнөөр хүлээн зөвшөөрдөг.

• 🧮 Тооцоолол хязгаарлагдмал 😢

Блокчейн өгөгдлийн загварууд нь өгөгдөлтэй харилцах функцуудыг дэмждэг боловч тэдгээрийн тооцоолох чадвар нь хязгаарлалттай байдаг. Эдгээр хязгаарлалтууд нь унших үйлдэлд ашигладаг RPC зангилаа болон бичих үйлдэлд (гүйлгээнд) тавьсан GAS-ийн хатуу хязгаарлалтаас хамаарна. Үндсэн үйлдлүүд, гогцоонууд болон илүү гүнзгий дуудлагын стекийг ихэвчлэн удирдах боломжтой байдаг ч блокчейн нь тооцооллын ачаалал ихтэй ажиллахад тохиромжгүй байдаг.


Өгөгдлийн хэмжээ харьцангуй бага байдаг тул одоо байгаа хязгаарлалтууд нь ихэнх хэрэглээний тохиолдолд хангалттай байдаг.

§ цэгийн саармаг

• 🧬 Өгөгдлийн бүтэц, Solidity хэл, SDK

Хэрэв та блокчэйн хөгжүүлэлтэд шинээр орсон бол үүнийг эхлүүлэхэд төвөгтэй бөгөөд хэцүү гэж сонссон байх. Гэсэн хэдий ч энэ нь үнэн биш юм. Блокчейн хөгжүүлэлт нь танил ойлголт, семантик, синтаксийг ашигладаг тул сурахад санагдсанаас илүү хялбар болгодог.

§ Демо: Програмын хувилбарын репозитор

https://github.com/0xweb-org/examples-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]; } }


Хөгжүүлэгч бүр энэ кодыг хамгийн бага хүчин чармайлтаар уншиж, ойлгож чадна. Хэрэв та TypeScript-ийг мэддэг бол энд байгаа ихэнх ойлголтууд аль хэдийн утга учиртай болно. Үүнийг илүү ойлгомжтой болгохын тулд би ижил төстэй TypeScript жишээг үүсгэсэн: AppVersionManager.ts 🔗 .


Энгийнээр хэлбэл, Solidity дахь гэрээг төлөвтэй ангийн жишээ гэж үзэж болно. Объект хандалтат програмчлалд шинж чанар, арга, төрөл, удамшил гэсэн ойлголтууд аль хэдийн сайн мэддэг болсон. Энд тайлбарлах гол ойлголт бол onlyOwner хувиргагч (TypeScript дээрх чимэглэлтэй төстэй).


Блокчейн данс бүр үндсэндээ хувийн болон нийтийн хос түлхүүр юм. Хаяг гэж нэрлэгддэг дансны ID нь нийтийн түлхүүрээс үүсэлтэй. Гүйлгээг гүйцэтгэх үед илгээгчийн хаягийг msg.sender гэж дамжуулдаг. Үүнийг ашигласнаар бид таны хаягийг бүтээгчид (гэрээг байршуулах үед) хадгалах боломжтой. Хожим нь onlyOwner хувиргагч нь зөвхөн та гэрээ эзэмшигчийн хувьд updateInfo болон updatePackage функцуудыг гүйцэтгэх боломжтой болно. Хэрэв өөр хэн нэгэн эдгээр үйлдлийг хийхийг оролдвол гүйлгээг буцаах болно. Өргөн хэрэглэгддэг OpenZeppelin номын сангийн нэг хэсэг болох Ownable гэрээгээр onlyOwner хувиргагчийг хангадаг. Энэхүү номын санд блокчейн хөгжлийг хялбаршуулах бусад олон ашигтай гэрээнүүд багтсан болно.


Хэлэлцэх өөр нэг чухал сэдэв бол хадгалалт болон хэрэгжилтийг хоёр тусдаа гэрээ болгон хуваасан Proxies -ийн тухай ойлголт юм. Solidity дахь гэрээний хэрэгжилт нь өөрчлөгддөггүй бөгөөд та байршуулсны дараа шинэ функц эсвэл шинж чанарыг нэмэх боломжгүй гэсэн үг юм. Үүнийг арилгахын тулд та "Прокси" гэрээг ашиглаж болно. Прокси нь санах ойг зохицуулдаг бөгөөд зөвхөн нэг fallback функцийг агуулдаг бөгөөд энэ нь Прокси-ийн хадгалах контекстийг хадгалахын зэрэгцээ хэрэгжүүлэх гэрээнд дуудлагыг шилжүүлдэг.


Энэ ойлголт нь төвөгтэй мэт санагдаж болох ч this JavaScript дээр хэрхэн ажилладагтай төстэй юм. Үүнийг тодруулахад туслах хурдан аналоги энд байна:


 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" гэх мэт тохируулагч нь прокси-ийн санах ойг өөрчлөхгүй гэсэн үг юм. Үүнийг шийдвэрлэхийн тулд бид эхлүүлэгч функцийн ойлголтыг ашигладаг:

  1. Хэрэгжүүлэх гэрээг initialize функцээр байрлуул.
  2. Прокси гэрээг байрлуулж, хэрэгжүүлэх гэрээний хаягийг түүний бүтээгч дээр дамжуулна. Энэ тохиргоо нь прокси гэрээний хүрээнд initialize аргыг дуудах боломжийг олгодог.


Үүний үр дүнд, жишээлбэл, title өмчийг шинэчлэх нь прокси санах ойд зөв шинэчлэх болно.


Манай AppVersionManager-ийн сайжруулсан хэрэгжүүлэлтийн хувилбар энд байна: AppVersionManagerUpgradeable.sol .


Төлөөлөгчийн гэрээ нь өөрөө нэлээд түгээмэл бөгөөд хэрэгжилтээс үл хамаарна. Проксид зориулсан хэд хэдэн алдартай стандартууд OpenZeppelin номын санд байдаг.


Эдгээр ойлголтууд болон дээрх жишээнүүдийн талаархи мэдлэгтэй бол та бизнесийн хэрэг дээрээ ухаалаг гэрээг боловсруулахад бэлэн байна.

§ Байрлуулалт

  1. Блокчэйнийг сонгоно уу

Нэгдүгээрт, бид гэрээгээ байршуулахыг хүсч буй блокчэйнийг сонгох хэрэгтэй. Энэ жишээний хувьд би олон өнцөгтийг сонгосон. Энэ нь гүйлгээний зардал багатай, удаан хугацаанд ашиглагдаж ирсэн, сайн гүйцэтгэлтэй байдаг. Тогтвортой, үр ашигтай дэд бүтэц нь 0.9 тэрбум долларын нийт үнэ цэнэ түгжигдсэн (TVL) нь найдвартай сонголт болгодог. Гэрээгээ нийтийн блокчэйнд байршуулна гэдэг нь санхүүгийн байгууллагуудтай зэрэгцэн оршиж байна гэсэн үг. TVL хэмжигдэхүүн нь блокчэйний найдвартай байдалд эдгээр байгууллагуудын итгэлийг илэрхийлдэг.


Түүнээс гадна нөхцөл байдал өөрчлөгдвөл та гэрээгээ ирээдүйд өөр блокчэйнд шилжүүлж болно.


  1. Байрлуулах


Демо төсөл нь мөн CI тестийн репозитороор үйлчилдэг тул бүх тушаалуудыг эндээс олж болно: https://github.com/0xweb-org/examples-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 гвей, POL үнэ нь 0.51 ам.доллар байх үед энэхүү байршуулалтын зардал нь:



ХИЙ

ПОЛ

доллар

Байрлуулах

850352

0.059

0.03

Гарчиг хадгалах

47517

0.0033

0.001

Багцын өгөгдлийг хадгалах

169549

0.0118

0.006

Нийт



0.037


Та төвлөрсөн бус , аюулгүй , урт хугацааны үйлчилгээ үзүүлэхийн тулд засвар үйлчилгээ шаардлагагүйгээр ердөө 4 цент зарцуулдаг.

§ Асуулга

Гэрээнийхээ өгөгдлийг асуухын тулд танд RPC зангилаа үйлчилгээ үзүүлэгчид хэрэгтэй болно. Олон арван үнэгүй үйлчилгээ үзүүлэгчийг https://chainlist.org дээрээс авах боломжтой. Та олон үйлчилгээ үзүүлэгч сонгох боломжтой бөгөөд сайн Web3 номын сан нь эцсийн хэрэглэгчдэдээ хамгийн үр дүнтэйг сонгохын тулд ажиллах хугацаандаа тойрсон стратегийг ашиглаж болно. 0xweb-ийн тусламжтайгаар үүсгэсэн TypeScript эсвэл JavaScript ангиуд нь зөвхөн хамгийн сайн төгсгөлийн цэгүүдийг сонгоод зогсохгүй блокчэйн холболтыг бүхэлд нь хийсвэрлэдэг. Үйлчлүүлэгчид өгөгдөл татах өндөр түвшний аргуудыг агуулж, үйл явцыг саадгүй, үр дүнтэй болгодог.

 # 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


Нэг давуу тал нь та програмдаа ямар ч номын сан оруулах шаардлагагүй юм - raw HTTP requests. Гэсэн хэдий ч, энэ арга нь таны удирдах шаардлагатай нэмэлт сервер дээр тулгуурладаг. 0xweb-ээр үүсгэгдсэн ангиуд эсвэл бусад блокчэйн сангуудыг ашиглан блокчэйнийг шууд асуух нь илүү дээр юм.

§ Дүгнэлт 🏁

Энэхүү нийтлэл нь блокчейн нь хэрхэн энгийн бөгөөд хүчирхэг байж болохыг харуулсан бөгөөд уламжлалт хостинг шийдлүүдтэй харьцуулахад өвөрмөц давуу талыг санал болгодог.


Дараагийн өгүүллээр би Greenfield, Arweave зэрэг төвлөрсөн бус BLOB хадгалах сүлжээнүүдийг судалж, тэдгээрийн онцлог, ашиг тусыг онцлон харуулахаар төлөвлөж байна.


Хэрэв танд 0xweb номын санд оруулах нэмэлт боломжуудын талаар санал, санаа байгаа бол сэтгэгдэл дээр хуваалцах эсвэл [email protected] хаягаар шууд холбогдоно уу.