معماری وب3 و اپلیکیشن های غیرمتمرکز (DApp)
وب3 چیست؟
وب نسل سوم (Web3) در واقع نسل جدید اپلیکیشن های مبتنی بر وب هست که امکان استفاده از مزایای بلاک چین و فناوری های مرتبط را فراهم می کند. ویژگی اصلی اپلیکیشن های وب3 غیرمتمرکز بودن و برقراری اصل اعتماد بدون واسطه می باشد. برای توسعه دهندگانی که دنبال رویکردهای جدید برای حل مسئله اعتماد (Trust) بین کاربران هستند، web3 انتخاب مناسبی است. ولی طراحی و پیاده سازی برنامههای غیرمتمرکز بخصوص برای افرادی که تجربه قبلی در زمینه وب3 ندارند، موضوع نسبتا پیچیده ای است. اکوسیستم Web3 پیچیدگی خاصی دارد و برای درک صحیح آن ابتدا باید معماری وب3 به خوبی درک شود. در این مقاله، اجزای مختلف معماری فنی وب3 را به طور دقیق بررسی خواهیم کرد.
معماری وب3
در شکل زیر یک معماری پیشنهادی برای توسعه اپلیکیشن های وب3 مشاهده می شود. در ادامه به بررسی هر کدام از اجزای اصلی این معماری پیشنهادی خواهیم پرداخت.
1- دستگاه های وب3 (Web3 Devices)
برای اتصال به وب3 (بلاکچین) از وسیله های مختلفی می توان استفاده کرد. این وسیله ها مادامی که یک مرورگر متصل به اینترنت داشته باشند می توانند به وب3 متصل باشند.
در ادامه تعدادی از وسیله هایی که امکان اتصال به وب3 دارند معرفی شده است:
کامپیوتر (دسکتاپ یا لپ تاپ)
کامپیوترها وسیله های رایجی هستند که برای دسترسی به وب3 از آنها استفاده می شود. کافی است Extension مرورگر مربوط به یکی از کیف پول های بلاکچین (مانند متامسک) را نصب کنید تا بتوانید از اپلیکیشن های بلاکچینی استفاده کنید. با توجه به حساسیت موضوع دسترسی به بلاکچین و همچنین استفاده پیچیده از اسمارت کانترکت ها، این وسیله ها با داشتن نمایشگر بزرگتر، دقت، تمرکز و تجربه کاربری بهتری را فراهم می آورند.
تبلت و گوشی های هوشمند
تبلت و گوشی موبایل، وسیله هایی هستند که دسترسی ما به وب3 را راحت تر کرده اند. شما می توانید در هر موقعیتی و در هر زمانی بدون نیاز به کامپیوتر، تنها با استفاده از یک گوشی هوشمند یا تب لت متصل به اینترنت، به وب3 وصل شوید. کافی است نسخه موبایل یک کیف پول بلاکچین مانند متامسک (Metamask)، تراست ولت (Trust Wallet) را روی گوشی خود نصب کنید.
سخت افزارهای اختصاصی
برخی دستگاه های سخت افزاری به طور اختصاصی برای دسترسی به اپلیکیشن های وب3 طراحی و ساخته شده است. برای مثال لجر (Ledger) و ترزور (Trezor) ولت های سخت افزاری هستند که امنیت بالایی در نگهداری کلید خصوصی کاربر دارند و اجازه می دهد کاربر با امنیت بالایی از اپلیکیشن های وب3 استفاده کند.
گجت های هوشمند
این وسیله ها اعم از ساعت هوشمند، اسپیکر هوشمند و تلویزیون های هوشمند که به آنها وسیله های متصل (connected device) نیز گفته می شود می توانند برای کاربردهای محدودتری مانند بررسی وضعیت استارت کانترکت ها یا دسترسی به اطلاعات بلاکچین مورد استفاده قرار گیرند.
2- واسط کاربری (FrontEnd)
رابط کاربری (User Interface) که در معماری وب3 به آن اپلیکیشن غیرمتمرکز (Dapp) نیز گفته می شود، وظیفه نمایش اطلاعات و ایجاد تعامل بصری و کاربرپسند میان کاربر و قابلیت های مربوط به بلاکچین و قراردادهای هوشمند را بر عهده دارد.
برقراری ارتباط با اسمارت کانترکت های دپلوی شده روی بلاکچین برای انجام عملیاتی مانند ارسال تراکنش (transaction)، گرفتن اطلاعات اکانت، گرفتن دیتای شبکه بلاکچین، فراخوانی فانشکن و … نیز یکی دیگر از وظایف فرانت اند می باشد. این کار با استفاده از کتابخانه های Web3 مانند Web3.js یا Ether.js و توسط Node Provider ها (به عنوان واسط در تعامل با اسمارت کانترکت) انجام می شود.
کاربر برای ارسال تراکنش روی بلاکچین باید تراکنش را از طریق کلید خصوصی موجود در کیف پول، امضا کند. فرانت اند مدیریت کیف پول کاربران را نیز بر عهده دارد. برای این منظور، فرانت اند یا باید با ولت های نرم افزاری یا سخت افزاری موجود ادغام (Integrate) شود یا اینکه یک اینترفیس (Interface) ارائه دهد تا کاربر بتواند ساخت و مدیریت ولت خود را مستقیماً از طریق اپلیکیشن انجام دهد.
FrontEnd علاوه بر واکشی (fetch) اطلاعات (مانند موجودی اکانت ها، تراکنش های جاری، دیتای قرارداد هوشمند و …) از بلاکچین، می تواند اطلاعات ایندکس شده روی سرورهای بک اند بیرون زنجیره (off-chain backend server) یا حتی اطلاعات موجود در منابع غیرمتمرکز دیگر از جمله اوراکل ها (oracles) یا پروتکل های دیفای (DeFi protocols) را نیز دریافت نماید.
برای ارائه تجربه کاربری بهتر، این لایه از اپلیکیشن می تواند با ابزارهای وب3 دیگری از جمله ولت های صرافی (exchange wallets)، کاوشگر های بلاکچین (blockchain explorers)، ابزارهای تحلیل اسمارت کانترکت (smart contract analysis)، واسط های صرافی غیرمتمرکز (DEX) و واسط های مدیریت توکن نیز ادغام شود.
در نهایت، فرانت اند باید برای محافظت از کلیدهای خصوصی و داده های حساس کاربران، اقدامات امنیتی مناسبی را اجرا کند. همچنین می تواند با پیاده سازی یک سری مجوز دسترسی (access permission)، استفاده از ویژگی های غیرمتمرکز را کنترل کرده و اطمینان حاصل کند که یک سری عملیات خاص، تنها توسط کاربران مجاز قابل انجام است.
برای پیاده سازی واسط کاربر گرافیکی (GUI) در یک معماری وب3، از همان فریمورک ها و کتابخانه های رایج وب2 مانند React، Vue.js یا Angular استفاده می شود. با این تفاوت که از یک کتابخانه وب3 مانند Web3.js یا Ether.js نیز به منظور ادغام با بلاکچین (integration) استفاده می شود.
3- کیف پول (Wallet)
کاربراین یک اپلیکیشن وب3 برای مدیریت کلید خصوصی و تعامل با بلاکچین، نیاز به یک کیف پول دارند. این کیف پول می تواند یک نرم افزار نصب شده روی یک وسیله، یک افزونه مرورگر، یک وب اپلیکیشن یا حتی یک تجهیزات الکترونیکی باشد. ولت ها اجازه می دهند کاربران بتوانند تراکنش های خود را امضا (Sign) کنند و همچنین برای اقداماتی که انجام می دهند احراز هویت (Authenticate) شوند.
4- نود پروایدرها (Node Providers)
یک Web3 Node Provider عبارت است از یک موجودیت (entity) یا یک پلتفرم (platform) که سرویس هایی مانند اجرا (execution)، ذخیره سازی (data storage) و مدیریت نود (node management) را برای شبکه های بلاکچین ارائه می دهند. در واقع هر نود، یک کامپیوتر متصل به شبکه بلاکچین است که در اعتبارسنجی تراکنش ها (validating transactions)، ذخیره سازی دیتای بلاکچین و همچنین انتشار اطلاعات به سایر گره های شبکه، مشارکت دارد.
از لحاظ فنی و پیاده سازی، Web3 Node Provider ها فرآیند توسعه یک اپلیکیشن وب3 را برای برنامه نویس ها ساده تر می کنند و برنامه نویس می تواند به جای تمرکز روی لایه زیرساخت (infrastructure layer) نودهای بلاکچین، روی لایه اپلیکیشن (application layer) تمرکز کند.
برای اینکه کاربر برنامه نویس بتواند با شبکه بلاکچین تعامل داشته باشد، ابتدا باید به یک Node متصل شود. Node Provider ها برای این منظور یک آدرس وب مانند https://rpc-mumbai.maticvigil.com/ را در اختیار برنامه نویس قرار می دهند که به آن RPC URL یا به طور کاملتر Json-RPC Url گفته می شود. برنامه نویس به راحتی می تواند از این آدرس url در کیف پول یا برنامه های خود استفاده کند و به نود مورد نظر متصل شود.
این آدرس url مربوط به endpoint ای است که api های Node مورد نظر در آن پیاده سازی و مستقر شده است. خود Node برای ارتباط و تعامل با بلاکچین از یک پروتکل سطح پایین به نام JSON-RPC استفاده می کند و برای اینکه برنامه نویس درگیر پیچیدگی های این پروتکل low-level نشود، برنامه نویس به جای کار کردن با پروتکل JSON-RPC از api های ارائه شده توسط node استفاده می کند.
خدمات Node Provider ها
- دسترسی به گروهی از Node ها (توسط یک یا چند endpoint)
- endpoint های WSS ، HTTPS و RPC
- دسترسی (محدود/نامحدود) به دیتای آرشیو شده
- Faucet موجود روی زنجیره های مختلف
- در دستری قرار گرفتن فضای نام Trace/Debug
- بروزرسانی خودکار
- پشتیبانی فنی
- داشبوردهای Query Explorer ، Mempool Viewer و Composer
- خدمات Load Balancing و Node Monitoring برای ارائه درگاه سریع و قابل اعتماد به نزدیک ترین نودهای در دسترس
- استقرار Full-Node و Validator-Node یا یک کلیک
- مقیاس پذیری (Scalability)
- ابزارهای تحلیل
- داشبورد
- قیمت گذاری ساعتی مبتنی بر مدل SaaS (Software As A Service)
مزایای استفاده از Web3 node provider عبارت است از:
- صرفه جویی در هزینه (تلاش و زمان مورد نیاز برای نگهداری نودها)
- توانایی تمرکز روی توسعه اپلیکیشن
- دسترسی به زیرساخت بهینه شده برای کارآیی بهتر
لازم به ذکر است که معمولاً سرویس های ارائه شده توسط Web3 Node ها، کلید خصوصی و اطلاعات خصوصی کاربران را ذخیره نمی کنند. چرا که مسئولیت امنیت کلیدهای خصوصی هر کاربر بر عهده خود کاربر است.
5- نودهای بلاکچین (Blockchain Nodes)
نودهای بلاکچین، تراکنش های ثبت شده توسط کاربران یا نودهای دیگر را دریافت می کنند. سپس هر تراکنش برای اطمینان از اعتبار (validity) آن، از جمله تأیید امضای دیجیتال (digital signature) و اطمینان از کافی بودن موجودی و اختیارات ارسال کننده تراکنش، بررسی می شود.
گره هایی که در فرآیند استخراج (mining) یا اعتبارسنجی (validation) تراکنش ها شرکت دارند، ماینر (Miner) نامیده می شوند و می توانند بلاک های جدید بسازند. وظیفه نودهای ماینر، جمع آوری گروهی از تراکنش های معتبر (Valid) و بسته بندی کردن آنها در قالب یک بلاک می باشد. فرآیند ساخت بلاک ممکن است بسته به الگوریتم اجماع (consensus algorithm) مورد استفاده در هر بلاکچین، متفاوت باشد.
گره ها از طریق مطابقت دادن تراکنش ها با قوانین حاکم بر بلاکچین (اعم از قراردادهای هوشمند و قوانین اجماع)، اعتبار (validity) تراکنش ها را مورد بررسی قرار داده و تایید می کنند. آنها اطمینان حاصل می کنند که مواردی از قبیل رعایت پیش شرط ها (preconditions )، کافی بودن موجودی ها (sufficient balances) و قوانین منطقی از پیش تعریف شده (predefined logic rules) در تراکنش ها رعایت شده باشد. به اینصورت صحت و یکپارچگی (integrity) و ثبات و پایداری (consistency) بلاکچین تضمین می شود.
نودهای شبکه اتریوم، علاوه بر نگهداری (Hosting) سورس کدهای نوشته شده به زبان سالیدیتی کسب و کارها، دیتاهای بلاکچین را نیز نگهداری کرده و برای اطمینان از بروز بودن، آخرین اطلاعات را با سایر گره ها مبادله می کنند.
هر گره به محض ایجاد یک بلاک معتبر، آن را به سایر نودهای شبکه پخش (Broadcast) می کند تا بتوانند اعتبار (validate) آن را بررسی و در صورت valid بود آن را به نسخه بلاکچین خود اضافه کنند. برادکست شدن بلاک به حفظ همگام سازی (synchronization) بین نودها کمک کرده و اجماع (consensus) روی درستی state بلاکچین را تضمین می کند.
هر گره بلاکچین یک کپی کامل از بلاکچین (تاریخچه ای از تراکنش های انجام شده از genesis block تا کنون) را دارد. این کپی با اضافه شدن هر بلاک جدید، بروزرسانی می شود.
نودها در فرآیند اجماع بلاکچین شرکت می کنند تا مشخص شود کدام نسخه از بلاکچین توسط همه نودهای شبکه تایید می شود. بسته به الگوریتم اجماع استفاده شده، نودها برای اطمینان از برقرار بودن امنیت (security) و اعتبار (validity) بلاکچین، ممکن است در مکانیزم های مختلفی اعم از اثبات کار (proof-of-work)، اثبات سهام (proof-of-stake) یا تفویض اختیار (delegation) شرکت کنند.
گره ها تراکنش ها و بلاک های دریافتی را اعتبارسنجی می کنند تا از اعتبار و مطابقت آنها با قوانین بلاکچین اطمینان حاصل کنند. بدینصورت فقط تراکنش های قانونی (legitimate) و بلاک های معتبر (valid) پذیرفته شده و به بلاکچین افزوده می شوند.
یک گره، به محض دریافت یک بلاک تایید شده جدید، آن را به کپی محلی (local copy) خود از زنجیره فعلی بلاکچین اضافه کرده و زنجیره خود را بروزرسانی می کند. سپس برای حفظ اصل همگامی (synchronization) و ثبات (consistency)، کپی خود را در شبکه منتشر (broadcast) می کند تا سایر گره های شبکه نیز زنجیره خود را طبق آخرین نسخه، بروزرسانی کنند.
6- سرور خارج از زنجیره (Off-Chain Backend Server)
سرور خارج از زنجیره یک جزء متمرکز است که معمولاً بخشی از معماری یک برنامه Web3 است، اما مستقیماً روی بلاک چین اجرا نمی شود. این یک سرور سنتی است که در یک محیط ابری یا روی یک سرور اختصاصی هاست می شود.
برخی از عملیات یک برنامه Web3 را می توان با کارآیی بیشتر در خارج از بلاک چین انجام داد زیرا نیازی به امنیت بدون واسطه (immediate security)، شفافیت یا انعطاف پذیری (resilience) بلاکچین ندارند. به عنوان مثال، تأیید هویت (identity verification)، ذخیرهسازی کلان داده (big data storage)، پردازش دیتای بیدرنگ (real-time data processing) یا ارتباط با APIهای خارجی را میتوان با کارآیی بیشتری خارج از بلاک چین انجام داد.
سرور خارج از زنجیره را می توان برای انجام عملیاتی استفاده کرد که به منابع بزرگ یا پردازش سریع نیاز دارد، که دستیابی به آن در بلاکچین دشوار است. با واگذاری وظایف خاصی به سرور خارج از زنجیره، می توان عملکرد و پاسخگویی برنامه Web3 را بهبود بخشید.
اگرچه سرور خارج از زنجیره مستقیماً روی بلاک چین اجرا نمی شود، اما می تواند برای انجام عملیات خاصی با بلاکچین ارتباط برقرار کند. به عنوان مثال، می تواند با قراردادهای هوشمند برای ارسال تراکنش ها، بازیابی داده ها (retrieve data) یا نظارت بر رویدادها (monitor events) تعامل داشته باشد.
سرور خارج از زنجیره میتواند دادهها را از منابع متعدد از جمله بلاک چین جمعآوری (collect)، تجمیع (aggregate) و تجزیه و تحلیل (analyze) کند. این کمک می کند تا با استفاده از الگوریتم ها و تجزیه و تحلیل های پیچیده تر از آنچه که مستقیماً در بلاکچین قابل دستیابی است، اطلاعات ارزشمندی را به کاربران برنامه Web3 ارائه داده شود.
همچنین سرور خارج از زنجیره می تواند برای تعامل با API های خارجی مانند خدمات پرداخت، خدمات داده یا سایر برنامه های کاربردی وب سنتی (وب2) استفاده شود. موضوع یکپارچه سازی سرویس های خارجی (integrating external services) به افزایش قابلیت های برنامه های Web3 کمک می کند.
7- ذخیره سازی غیرمتمرکز فایل (Decentralized File Storage)
ذخیره سازی غیرمتمرکز فایل، یکی از اجزای کلیدی بسیاری از برنامه های Web3 است که هدف آن جلوگیری از متمرکز شدن داده ها (data centralization) و همچنین ارائه راه حل ذخیره سازی انعطاف پذیرتر و تحت کنترل کاربر است. IPFS یکی از فضاهای ذخیره سازی غیرمتمرکز می باشد که به طور گسترده در پروژه های وب3 استفاده می شود.
معرفی دوره آموزشی
اگر قصد دارید یک اپلیکیشن غیرمتمرکز (DApp) پیاده سازی کنید، شما نیاز به یادگیری مطالب مختلفی دارید. مفاهیم بلاکچین، برنامه نویسی به زبان سالیدیتی، استفاده از کتابخانه های وب3 جهت برقراری ارتباط با بلاکچین و قرارداد هوشمند، آشنایی با دو بخش اصلی اکوسیستم بلاکچین یعنی DeFi و NFT.
در بوت کمپ آموزش برنامه نویسی بلاکچین و قرارداد هوشمند که در آکادمی علوم نوین امیرکبیر برگزار می شود ما تمام نیازهای شما را در قالب یک بوت کمپ جامع آماده سازی کردیم تا شما بتوانید همه مباحث مورد نیاز را به صورت یکجا از یک متخصص حوزه بلاکچین با چندین سال سابقه کار در حوزه بلاکچین یاد بگیرید. همچنین برای ارتباط با مدرس و سایر افراد فعال در زمینه بلاکچین، گروه پشتیبانی و پرسش و پاسخ در نظر گرفته شده که شما بتوانید سوالات خودتان را در این گروه مطرح کنید.
درباره مجید شبیری
کارشناس ارشد فناوری اطلاعات از دانشگاه صنعتی امیرکبیر. مدیر و مؤسس "علوم نوین امیرکبیر"، متخصص برنامه نویسی، شبکه، لینوکس و امنیت. از سال 84 همزمان با شروع تحصیلات دانشگاهی، وارد حوزه تخصصی مهندسی نرم افزار شدم و اکنون مشغول تحقیق، توسعه و آموزش در حوزه بلاک چین هستم و معتقدم بلاکچین به زودی فضای کسب و کارها را منقلب خواهد کرد.
نوشته های بیشتر از مجید شبیری
دیدگاهتان را بنویسید