یک راهنمای کامل برای ساخت Dapps Ethereum: جلو و پشتی

ساخت وبلاگ

یک آموزش DAPP پایان به پایان برای توسعه دهندگان تمام پشته

DAPP چیست؟

DAPP برنامه ای است که بیشتر یا کاملاً غیر متمرکز است.

تمام جنبه های ممکن برنامه ای را که ممکن است غیر متمرکز باشد در نظر بگیرید:

  • نرم افزار پس زمینه (منطق برنامه)
  • نرم افزار جلو
  • ذخیره داده ها
  • ارتباطات پیام
  • وضوح نام

هر یک از این موارد می تواند تا حدودی متمرکز یا تا حدودی غیر متمرکز باشد. به عنوان مثال ، یک جلو می تواند به عنوان یک برنامه وب که روی یک سرور متمرکز اجرا می شود ، یا به عنوان یک برنامه تلفن همراه که روی دستگاه شما اجرا می شود ، تهیه شود. پس زمینه و ذخیره سازی می تواند در سرورهای خصوصی و بانکهای اطلاعاتی اختصاصی باشد ، یا می توانید از یک قرارداد هوشمند و ذخیره سازی P2P استفاده کنید.

مزایای بسیاری برای ایجاد DAPP وجود دارد که یک معماری متمرکز معمولی نمی تواند ارائه دهد:

انعطاف پذیری: از آنجا که منطق کسب و کار توسط یک قرارداد هوشمند کنترل می شود ، یک پس زمینه DAPP به طور کامل بر روی یک بستر blockchain توزیع و مدیریت می شود. بر خلاف یک برنامه مستقر در یک سرور متمرکز ، DAPP هیچ خرابی نخواهد داشت و تا زمانی که این پلتفرم هنوز کار کند ، در دسترس خواهد بود.

شفافیت: ماهیت زنجیره ای DAPP به همه امکان می دهد کد را بازرسی کنند و از عملکرد آن اطمینان بیشتری داشته باشند. هرگونه تعامل با DAPP برای همیشه در blockchain ذخیره می شود.

مقاومت در برابر سانسور: تا زمانی که کاربر به یک گره اتریوم دسترسی داشته باشد (در صورت لزوم یکی را اجرا می کند) ، کاربر همیشه قادر به تعامل با DAPP بدون دخالت از هرگونه کنترل متمرکز خواهد بود. هیچ ارائه دهنده خدمات یا حتی صاحب قرارداد هوشمند نمی تواند پس از استقرار در شبکه ، کد را تغییر دهد.

در اکوسیستم Ethereum ، همانطور که امروز ایستاده است ، تعداد بسیار کمی از برنامه های غیر متمرکز وجود دارد - بیشتر آنها هنوز هم برای بخشی از عملکرد آنها به خدمات متمرکز و سرورها متکی هستند. در آینده ، ما انتظار داریم که برای هر قسمت از هر DAPP به روشی کاملاً غیر متمرکز امکان پذیر باشد.

Backend (قرارداد هوشمند)

در DAPP ، از قراردادهای هوشمند برای ذخیره منطق تجارت (کد برنامه) و وضعیت مربوط به برنامه شما استفاده می شود. شما می توانید به یک قرارداد هوشمند جایگزین یک مؤلفه طرف سرور (با نام "پس زمینه") در یک برنامه معمولی فکر کنید. این یک توضیح بیش از حد است. یکی از اصلی ترین تفاوت ها این است که هر محاسباتی که در یک قرارداد هوشمند انجام شود بسیار گران است و بنابراین باید تا حد امکان حداقل نگه داشته شود. بنابراین مهم است که مشخص شود کدام جنبه های برنامه به یک بستر اجرای قابل اعتماد و غیرمتمرکز نیاز دارند.

قراردادهای هوشمند Ethereum به شما امکان می دهد معماری ها را بسازید که در آن شبکه ای از قراردادهای هوشمند بین یکدیگر تماس گرفته و داده ها را منتقل می کند ، و متغیرهای حالت خود را در هنگام رفتن می خوانند و می نویسند ، با پیچیدگی آنها فقط با محدودیت گاز بلوک محدود می شود. پس از استقرار قرارداد هوشمند خود ، منطق کسب و کار شما به خوبی می تواند توسط بسیاری از توسعه دهندگان دیگر در آینده مورد استفاده قرار گیرد.

یکی از مهمترین توجه به طراحی معماری قرارداد هوشمند عدم توانایی در تغییر کد یک قرارداد هوشمند پس از استقرار است. در صورت برنامه ریزی با یک opcode خود تخریب در دسترس ، می توان حذف کرد ، اما به غیر از حذف کامل ، کد به هیچ وجه قابل تغییر نیست.

دومین مورد توجه عمده طراحی معماری قرارداد هوشمند اندازه DAPP است. یک قرارداد هوشمند یکپارچه بسیار بزرگ ممکن است برای استقرار و استفاده از آن گاز زیادی هزینه کند. بنابراین ، برخی از برنامه ها ممکن است محاسبات خارج از زنجیره و منبع داده خارجی را انتخاب کنند. با این وجود به خاطر داشته باشید که داشتن منطق اصلی تجارت DAPP به داده های خارجی وابسته است (به عنوان مثال ، از یک سرور متمرکز) به این معنی است که کاربران شما باید به این منابع خارجی اعتماد کنند.

Frontend (رابط کاربری وب)

بر خلاف منطق تجارت DAPP ، که به یک توسعه دهنده نیاز دارد تا EVM و زبانهای جدید مانند استحکام را درک کند ، رابط سمت مشتری DAPP می تواند از فناوری های استاندارد وب استفاده کند (HTML ، CSS ، JavaScript و غیره). این به یک توسعه دهنده وب سنتی اجازه می دهد تا از ابزارهای آشنا ، کتابخانه ها و چارچوب ها استفاده کند. تعامل با Ethereum ، مانند امضای پیام ، ارسال معاملات و مدیریت کلیدها ، اغلب از طریق مرورگر وب ، از طریق پسوند مانند MetaMask انجام می شود.

اگرچه ایجاد DAPP موبایل نیز امکان پذیر است ، در حال حاضر منابع کمی برای کمک به ایجاد جبهه DAPP موبایل وجود دارد ، عمدتاً به دلیل کمبود مشتری های تلفن همراه که می تواند به عنوان مشتری سبک با عملکرد مدیریت کلیدی خدمت کند.

جلوی آن معمولاً از طریق کتابخانه Web3. JS JavaScript که با منابع جلوی آن همراه است ، به اتریوم مرتبط است و توسط یک سرور وب به یک مرورگر خدمت می کند.

ذخیره داده ها

با توجه به هزینه های بالای گاز و محدودیت گاز در حال حاضر در حال حاضر ، قراردادهای هوشمند به خوبی برای ذخیره یا پردازش مقادیر زیادی از داده ها مناسب نیستند. از این رو ، بیشتر DAPP ها از خدمات ذخیره سازی داده های خارج از زنجیره استفاده می کنند ، به این معنی که داده های حجیم را از زنجیره Ethereum در یک بستر ذخیره داده ذخیره می کنند. این بستر ذخیره سازی داده ها می تواند متمرکز شود (به عنوان مثال ، یک پایگاه داده ابری معمولی) ، یا داده ها می توانند غیر متمرکز شوند ، که بر روی یک پلت فرم P2P مانند IPFS یا پلت فرم Swarm خود Ethereum ذخیره می شوند.

ذخیره سازی P2P غیر متمرکز برای ذخیره و توزیع دارایی های بزرگ استاتیک مانند تصاویر ، فیلم ها و منابع رابط وب جلوی برنامه (HTML ، CSS ، JavaScript و غیره) ایده آل است. ما به چند گزینه بعدی خواهیم پرداخت.

سیستم فایل بین سیاره ای (IPFS) یک سیستم ذخیره سازی قابل دسترسی به محتوا غیر متمرکز است که اشیاء ذخیره شده را در بین همسالان در یک شبکه P2P توزیع می کند."آدرس دهی محتوا" به این معنی است که هر قطعه از محتوا (پرونده) هشدار داده شده و از هش برای شناسایی آن پرونده استفاده می شود. سپس می توانید با درخواست آن توسط هش ، هر پرونده را از هر گره IPFS بازیابی کنید.

IPFS قصد دارد HTTP را به عنوان پروتکل انتخاب برای تحویل برنامه های وب جایگزین کند. به جای ذخیره یک برنامه وب در یک سرور واحد ، پرونده ها در IPF ها ذخیره می شوند و از هر گره IPFS قابل بازیابی هستند.

اطلاعات بیشتر در مورد IPF ها را می توان در https://ipfs.io یافت.

ازدحام

SWARM یکی دیگر از سیستم های ذخیره سازی P2P با محتوا است ، مشابه IPF. Swarm توسط بنیاد اتریوم به عنوان بخشی از مجموعه ابزارها ساخته شده است. مانند IPF ، به شما امکان می دهد پرونده هایی را که توسط گره های Swarm منتشر و تکرار می شوند ، ذخیره کنید. با مراجعه به آن توسط هش می توانید به هر پرونده swarm دسترسی پیدا کنید. Swarm به شما امکان می دهد به جای یک سرور وب مرکزی ، از یک سیستم P2P غیر متمرکز به یک وب سایت دسترسی پیدا کنید.

صفحه اصلی Swarm خود در Swarm ذخیره شده و در گره Swarm یا یک دروازه شما قابل دسترسی است: https://swarm-gateways. net/bzz:/theswarm. eth/.

پروتکل های ارتباطی پیام غیر متمرکز

یکی دیگر از مؤلفه های اصلی هر برنامه ، ارتباطات بین فرآیند است. این بدان معنی است که قادر به تبادل پیام بین برنامه ها ، بین نمونه های مختلف برنامه یا بین کاربران برنامه است. به طور سنتی ، این امر با اتکا به یک سرور متمرکز حاصل می شود. با این حال ، انواع مختلفی از گزینه های غیر متمرکز برای پروتکل های مبتنی بر سرور وجود دارد که پیام رسانی را از طریق یک شبکه P2P ارائه می دهد. قابل توجه ترین پروتکل پیام رسانی P2P برای DAPPS Whisper است که بخشی از ابزارهای Go-Ethereum بنیاد Ethereum است.

جنبه نهایی برنامه ای که می تواند غیرمتمرکز باشد ، وضوح نام است. ما بعداً در این فصل به خدمات نام اتریوم نگاه خواهیم کرد. با این حال ، اکنون ، اجازه دهید به یک مثال حفر کنیم.

حراج

حراج DAPP به کاربر اجازه می دهد تا یک نشانه "عمل" را ثبت کند ، که نمایانگر برخی از دارایی های منحصر به فرد مانند خانه ، یک ماشین ، یک علامت تجاری و غیره است. پس از ثبت نام ، مالکیت توکن به حراج منتقل می شود. DAPP ، اجازه می دهد تا برای فروش لیست شود. حراج DAPP هر یک از نشانه های ثبت شده را لیست می کند و به سایر کاربران اجازه می دهد تا پیشنهادات را ارائه دهند. در طول هر حراج ، کاربران می توانند به یک اتاق چت که به طور خاص برای آن حراج ایجاد شده است ، بپیوندند. پس از نهایی شدن حراج ، مالکیت توکین به برنده حراج منتقل می شود.

روند کلی حراج را می توان در تصویر زیر مشاهده کرد

مؤلفه های اصلی حراج ما DAPP عبارتند از:

  • یک قرارداد هوشمند اجرای نشانه های "عمل" غیرقانونی ERC721 (DeedRepository)
  • یک قرارداد هوشمند در اجرای حراج (حراج) برای فروش اعمال
  • یک جبهه وب با استفاده از چارچوب Vue/Vuetify JavaScript
  • کتابخانه Web3. js برای اتصال به زنجیرهای اتریوم (از طریق Metamask یا سایر مشتریان)
  • مشتری Swarm ، برای ذخیره منابعی مانند تصاویر
  • یک مشتری زمزمه ، برای ایجاد اتاق های چت در هر حراج برای همه شرکت کنندگان

می توانید کد منبع را برای حراج DAPP در اینجا پیدا کنید.

حراج DAPP: قراردادهای هوشمند پس زمینه

مثال DAPP حراج ما توسط دو قرارداد هوشمند پشتیبانی می شود که برای پشتیبانی از برنامه ، باید در یک blockchain Ethereum مستقر شویم: حراج و اصلاحات.

بیایید با نگاه کردن به deedRepository ، نشان داده شده در deedRepository. sol: یک نشانه عمل ERC721 برای استفاده در حراج. این قرارداد یک نشانه غیر قابل تنظیم ERC721 است.

مثال 1. DeedRepository. sol: یک نشانه عمل ERC721 برای استفاده در حراج

همانطور که مشاهده می کنید ، قرارداد DeedRepository یک اجرای ساده از یک نشانه سازگار با ERC721 است.

حراج ما DAPP از قرارداد DeedRepository برای صدور و پیگیری نشانه های هر حراج استفاده می کند. خود حراج توسط قرارداد حراج است. این قرارداد خیلی طولانی است که در اینجا به طور کامل شامل می شود ، اما AuctionRepository. sol: قرارداد اصلی حراج DAPP تعریف اصلی قرارداد و ساختارهای داده را نشان می دهد.

مثال 2. حراج Repository. sol: حراج اصلی قرارداد هوشمند DAPP

قرارداد حراج ، کلیه حراج ها را با عملکردهای زیر مدیریت می کند:

شما می توانید با استفاده از ترافل در مخزن کتاب ، این قراردادها را به blockchain Ethereum (به عنوان مثال ، روپستن) مستقر کنید:

DAPP

اگر دو قرارداد هوشمند حراج DAPP را بخوانید ، متوجه چیز مهمی خواهید شد: هیچ حساب یا نقشی خاص وجود ندارد که امتیازات ویژه ای نسبت به DAPP داشته باشد. هر حراج دارای یک مالک با برخی از قابلیت های خاص است ، اما حراج DAPP خود کاربر ممتاز ندارد.

این یک انتخاب عمدی برای عدم تمرکز حاکمیت DAPP است و پس از استقرار ، از هرگونه کنترل خودداری می کند. با مقایسه ، برخی از DAPP دارای یک یا چند حساب ممتاز با قابلیت های ویژه مانند امکان خاتمه قرارداد DAPP ، برای غلبه یا تغییر پیکربندی آن یا "وتو" عملیات خاص هستند. معمولاً این کارکردهای حاکمیتی در DAPP معرفی می شوند تا از مشکلات ناشناخته ای که ممکن است به دلیل یک اشکال بوجود بیاید ، جلوگیری شود.

مسئله حاکمیت حل و فصل بسیار دشوار است ، زیرا این یک شمشیر دو لبه را نشان می دهد. از یک طرف ، حساب های ممتاز خطرناک هستند. در صورت به خطر انداختن ، آنها می توانند امنیت DAPP را خراب کنند. از طرف دیگر ، بدون هیچ حساب ممتازی ، در صورت یافتن اشکال ، هیچ گزینه بازیابی وجود ندارد. ما هر دو این خطرات را در DAPP های اتریوم آشکار کرده ایم. در مورد تاریخ DAO و Ethereum Fork ، برخی از حساب های ممتاز به نام "متصدیان" وجود داشت ، اما در توانایی های آنها بسیار محدود بودند. این حسابها قادر به غلبه بر برداشت مهاجم دائو نبودند. در یک مورد اخیر ، Bancor مبادله ای غیر متمرکز سرقت گسترده ای را تجربه کرد زیرا یک حساب مدیریت ممتاز به خطر افتاد. به نظر می رسد ، Bancor به همان اندازه که در ابتدا تصور می شد غیر متمرکز نبود.

هنگام ساختن DAPP ، باید تصمیم بگیرید که آیا می خواهید قراردادهای هوشمند را واقعاً مستقل کنید ، آنها را راه اندازی کنید و سپس هیچ کنترلی نداشته باشید یا حسابهای ممتازی ایجاد کنید و خطر ابتلا به آن را به خطر بیاندازید. هر دو انتخاب ریسک را به همراه دارد ، اما در دراز مدت ، DAPP های واقعی نمی توانند دسترسی تخصصی برای حساب های ممتاز داشته باشند - این غیر متمرکز نیست.

حراج DAPP: رابط کاربری Frontend

پس از اعزام قراردادهای حراج DAPP ، می توانید با استفاده از کنسول JavaScript مورد علاقه خود و Web3. JS یا یک کتابخانه Web3 دیگر با آنها ارتباط برقرار کنید. با این حال ، بیشتر کاربران به یک رابط کاربری آسان نیاز دارند. رابط کاربری حراج DAPP ما با استفاده از چارچوب JavaScript Vue2/VueTify از Google ساخته شده است.

می توانید کد رابط کاربری را در پوشه Code/Auction_Dapp/Frontend در repo پیدا کنید. دایرکتوری ساختار و مطالب زیر را دارد:

پس از استقرار قراردادها ، پیکربندی جلوی FrontEnd/Src/Config. js را ویرایش کرده و آدرس های قراردادهای DeedRepository و حراج را وارد کنید. برنامه Frontend همچنین نیاز به دسترسی به گره اتریوم دارد که یک رابط JSON-RPC و WebSockets را ارائه می دهد. پس از پیکربندی Frontend ، آن را با یک سرور وب در دستگاه محلی خود راه اندازی کنید:

حراج Dapp Frontend از طریق هر مرورگر وب در http: // localhost: 8080 قابل دسترسی خواهد بود.

اگر همه چیز خوب پیش برود ، باید صفحه نمایش داده شده در رابط کاربری حراج DAPP را مشاهده کنید ، که نشان دهنده حراج DAPP است که در یک مرورگر وب اجرا می شود.

عدم تمرکز بیشتر حراج DAPP

DAPP ما در حال حاضر کاملاً غیر متمرکز است ، اما ما می توانیم چیزها را بهبود بخشیم.

قرارداد حراج به طور مستقل از هرگونه نظارت ، برای هر کسی باز است. پس از استقرار ، نمی توان متوقف شد و هیچ حراج را نیز نمی توان کنترل کرد. هر حراج دارای یک اتاق گفتگوی جداگانه است که به هر کسی امکان می دهد در مورد حراج بدون سانسور یا شناسایی ارتباط برقرار کند. دارایی های مختلف حراج ، مانند توضیحات و تصویر مرتبط ، در Swarm ذخیره می شود و باعث می شود آنها سانسور یا مسدود شوند.

هر کس می تواند با ساخت معاملات به صورت دستی یا با اجرای جلوی VUE در دستگاه محلی خود با DAPP تعامل داشته باشد. کد DAPP خود منبع باز است و به طور مشترک در یک مخزن عمومی توسعه یافته است.

دو کار وجود دارد که می توانیم انجام دهیم تا این DAPP غیر متمرکز و مقاوم باشد:

  • تمام کد برنامه را در SWARM یا IPF ها ذخیره کنید.
  • با استفاده از سرویس نام Ethereum با مراجعه به یک نام به DAPP دسترسی پیدا کنید.

ما گزینه اول را در بخش بعدی کشف خواهیم کرد و در سرویس نام Ethereum (ENS) به دوم خواهیم رسید.

ذخیره DAPP حراج در Swarm

ما در اوایل این فصل Swarm را در Swarm معرفی کردیم. حراج ما DAPP در حال حاضر از Swarm برای ذخیره تصویر نماد برای هر حراج استفاده می کند. این یک راه حل بسیار کارآمدتر از تلاش برای ذخیره داده ها در اتریوم است که گران است. همچنین بسیار انعطاف پذیر تر از این است که این تصاویر در یک سرویس متمرکز مانند سرور وب یا سرور پرونده ذخیره شوند.

اما ما می توانیم یک قدم جلوتر را برداریم. ما می توانیم به جای اجرای یک سرور وب ، کل جلوی DAPP خود را در Swarm ذخیره کرده و آن را مستقیماً از یک گره Swarm اجرا کنیم.

آماده سازی ازدحام

برای شروع ، باید SWARM را نصب کرده و گره Swarm خود را آغاز کنید. Swarm بخشی از مجموعه ابزارهای Go-Ethereum بنیاد Ethereum است. به دستورالعمل های نصب Go-Ethereum در [GO_ETHEREUM_GETH] مراجعه کنید ، یا برای نصب نسخه باینری Swarm ، دستورالعمل های موجود در اسناد Swarm را دنبال کنید.

پس از نصب Swarm ، می توانید با اجرای آن با دستور نسخه ، به درستی کار کنید:

برای شروع اجرای Swarm ، باید به آن بگویید که چگونه به نمونه ای از GETH متصل شوید ، تا به API JSON-RPC دسترسی پیدا کنید. آن را با دنبال کردن دستورالعمل در راهنمای شروع کار شروع کنید.

وقتی شروع به Swarm می کنید ، باید چیزی شبیه به این را ببینید:

می توانید تأیید کنید که گره Swarm شما با اتصال به رابط وب Swarm Gateway محلی به درستی در حال اجرا است: http: // localhost: 8500.

شما باید یک صفحه نمایش مانند The Swarm Gateway را در LocalHost مشاهده کنید و بتوانید از هر هش یا نام هشدار دهنده پرس و جو کنید.

بارگذاری پرونده ها به Swarm

پس از اجرای گره Swarm محلی و دروازه خود ، می توانید در Swarm بارگذاری کنید و پرونده ها به سادگی با مراجعه به هش پرونده ، در هر گره Swarm قابل دسترسی خواهند بود.

بیایید این را با بارگذاری یک پرونده آزمایش کنیم:

Swarm پرونده Readme. md را بارگذاری کرده و هش را که می توانید از آن برای دسترسی به پرونده از هر گره Swarm استفاده کنید ، بازگرداند. به عنوان مثال ، می توانید از دروازه Swarm Gateway استفاده کنید.

در حالی که بارگذاری یک فایل نسبتاً ساده است ، بارگذاری کل جلوی DAPP کمی پیچیده تر است. به این دلیل است که منابع مختلف DAPP (HTML ، CSS ، JavaScript ، کتابخانه ها و غیره) منابع خود را به یکدیگر تعبیه کرده اند. به طور معمول ، یک سرور وب URL ها را به پرونده های محلی ترجمه می کند و به منابع صحیح خدمت می کند. ما می توانیم با بسته بندی DAPP خود ، برای Swarm به همین نتیجه برسیم.

در حراج DAPP ، یک اسکریپت برای بسته بندی تمام منابع وجود دارد:

نتیجه این دستور دایرکتوری جدید ، Code/Auction_Dapp/Frontend/Dist خواهد بود ، که شامل کل حراج DAPP Frontend ، بسته بندی شده در کنار هم است:

اکنون می توانید با استفاده از دستور UP و گزینه - بازگشتی ، کل DAPP را در Swarm بارگذاری کنید. در اینجا ، ما همچنین به Swarm می گوییم که index.html مسیر پیش فرض بارگیری این DAPP است:

اکنون ، کل DAPP حراج ما در Swarm میزبانی شده و توسط URL SWARM قابل دسترسی است:

  • bzz: // AB164CF37DC10647E43A233486CDEFFA8334B026E32A480DD9CBD020C12D4581

ما در عدم تمرکز DAPP پیشرفت کرده ایم ، اما استفاده از آن را سخت تر کرده ایم. URL مانند آن بسیار کاربر پسند نسبت به یک نام خوب مانند Auction_Dapp.com است. آیا ما مجبور شده ایم تا بتوانیم قابلیت استفاده را فدا کنیم تا بتوانیم تمرکزش را بدست آوریم؟لازم نیست.

در بخش بعدی ، ما سرویس نام Ethereum را بررسی خواهیم کرد ، که به ما امکان می دهد از نامهای آسان برای خواندن استفاده کنیم اما هنوز ماهیت غیرمتمرکز برنامه خود را حفظ می کند.

سرویس نام Ethereum (ENS)

شما می توانید بهترین قرارداد هوشمند جهان را طراحی کنید ، اما اگر رابط خوبی برای کاربران ارائه ندهید ، آنها قادر به دسترسی به آن نخواهند بود.

در اینترنت سنتی ، سیستم نام دامنه (DNS) به ما این امکان را می دهد تا ضمن حل این نام ها به آدرس های IP یا سایر شناسه های موجود در پشت صحنه ، از نام های قابل خواندن در مرورگر استفاده کنیم. در blockchain Ethereum ، سیستم نامگذاری اتریوم (ENS) همان مشکل را حل می کند ، اما به روشی غیر متمرکز.

به عنوان مثال ، آدرس اهدای بنیاد Ethereum 0xFB6916095CA1DF60BB79CE92CE3EA74C37C5D359 است. در یک کیف پول که از ENS پشتیبانی می کند ، به سادگی Ethereum. eth است.

ENS بیش از یک قرارداد هوشمند است. این یک DAPP اساسی است که یک سرویس نام غیرمتمرکز ارائه می دهد. علاوه بر این ، ENS توسط تعدادی از DAPP ها برای ثبت نام ، مدیریت و حراج های نام ثبت شده پشتیبانی می شود. Ens نشان می دهد که چگونه DAPP ها می توانند با هم کار کنند: این DAPP ساخته شده است تا به سایر DAPP ها خدمت کند ، که توسط یک اکوسیستم DAPP ها پشتیبانی می شود ، در سایر DAPP ها تعبیه شده است.

در این بخش خواهیم دید که چگونه ENS کار می کند. ما نشان خواهیم داد که چگونه می توانید نام خود را تنظیم کرده و آن را به یک کیف پول یا آدرس اتریوم پیوند دهید ، چگونه می توانید ENS را در یک DAPP دیگر جاسازی کنید ، و چگونه می توانید از ENS برای نامگذاری منابع DAPP خود استفاده کنید تا استفاده از آنها آسانتر شود.

مشخصات ENS

ENS عمدتاً در سه پیشنهاد بهبود اتریوم مشخص شده است: EIP-137 ، که عملکردهای اساسی ENS را مشخص می کند. EIP-162 ، که سیستم حراج را برای ریشه . TH توصیف می کند. و EIP-181 ، که وضوح معکوس آدرس ها را مشخص می کند.

ENS از یک فلسفه طراحی "ساندویچ" پیروی می کند: یک لایه بسیار ساده در پایین ، و به دنبال آن لایه هایی از کد پیچیده تر اما قابل تعویض ، با یک لایه فوقانی بسیار ساده که تمام وجوه را در حساب های جداگانه نگه می دارد.

لایه پایین: صاحبان نام و حل کننده ها

ENS به جای نامهای قابل خواندن با "گره ها" عمل می کند: یک نام قابل خواندن با انسان با استفاده از الگوریتم "NameHash" به یک گره تبدیل می شود.

لایه پایه ENS یک قرارداد هوشمندانه ساده (کمتر از 50 خط کد) است که توسط ERC137 تعریف شده است که به صاحبان گره ها اجازه می دهد تا اطلاعاتی را در مورد نام خود تنظیم کنند و زیرنویس ایجاد کنند (معادل ENS از زیر دامنه های DNS).

تنها توابع موجود در لایه پایه ، مواردی است که یک صاحب گره را قادر می سازد تا اطلاعاتی را در مورد گره خود (به طور خاص حل کننده ، زمان زندگی یا انتقال مالکیت) تنظیم کند و صاحبان زیرنویس های جدید را ایجاد کند.

الگوریتم NameHash یک الگوریتم بازگشتی است که می تواند هر نامی را به هش تبدیل کند که نام را مشخص کند.

"بازگشتی" به این معنی است که ما با حل یک زیربنایی که یک مشکل کوچکتر از همان نوع است ، مشکل را حل می کنیم و سپس برای حل مشکل اصلی از راه حل برای زیرنویس استفاده می کنیم.

NameHash به صورت بازگشتی مؤلفه های نام ، تولید یک رشته منحصر به فرد و با طول ثابت (یا "گره") برای هر دامنه ورودی معتبر. به عنوان مثال ، گره NameHash از Subdomain. example. eth keccak ('گره) + keccak (' ') است. زیرنویس ما باید حل کنیم این است که گره را به عنوان مثال محاسبه کنیم. برای شروع ، ما باید گره را برای ETH ، که keccak () + keccak ('') محاسبه کنیم.

گره ریشه همان چیزی است که ما آن را "مورد پایه" بازگشت خود می نامیم ، و بدیهی است که نمی توانیم آن را به صورت بازگشتی تعریف کنیم ، یا الگوریتم هرگز خاتمه نمی یابد! گره ریشه به عنوان 0x00000000000000000000000000000000000000000000000000000000000000 (32 بایت صفر) تعریف شده است.

با هم قرار دادن این همه ، گره Subdomain. example. eth بنابراین keccak (keccak (0x0. 0 + keccak (eth ")) + keccak (" مثال ") + keccak (" زیر دامنه ") است.

تعمیم ، ما می توانیم عملکرد NameHash را به شرح زیر تعریف کنیم (مورد پایه گره ریشه یا نام خالی ، و به دنبال آن مرحله بازگشتی):

در پایتون این می شود:

بنابراین ، Mastering-Ethereum. eth به شرح زیر پردازش می شود:

البته ، زیر دامنه ها می توانند خود زیر دامنه هایی داشته باشند: ممکن است یک sub. subdomain. example. eth بعد از subdomain. example. eth وجود داشته باشد ، سپس یک sub. sub. subdomain. example. eth و غیره. برای جلوگیری از بازپرداخت گران قیمت ، از آنجا که NameHash فقط به نام خود بستگی دارد ، گره برای یک نام معین را می توان از قبل استفاده کرد و در یک قرارداد قرار داد و نیاز به دستکاری رشته را برطرف کرد و اجازه می دهد بدون در نظر گرفتن تعداد اجزای موجود در آن ، به جستجوی فوری سوابق ENS اجازه دهید. نام خام

چگونه یک نام معتبر را انتخاب کنیم؟نام ها شامل یک سری برچسب های جدا شده از نقطه است. اگرچه حروف بزرگ و کوچک مجاز است ، همه برچسب ها باید از یک فرآیند عادی سازی UTS #46 پیروی کنند که برچسب های موردی را قبل از هذیان آنها انجام می دهند ، بنابراین نام هایی با موارد مختلف اما املای یکسان با همان NameHash به پایان می رسد.

شما می توانید از برچسب ها و دامنه ها به هر طول استفاده کنید ، اما به دلیل سازگاری با میراث DNS ، قوانین زیر توصیه می شود:

  • برچسب ها نباید بیش از 64 کاراکتر باشند.
  • نام های کامل ENS نباید بیش از 255 کاراکتر باشد.
  • برچسب ها نباید با Hyphens شروع یا پایان یابد ، یا با رقم شروع شود.

مالکیت گره ریشه

یکی از نتایج این سیستم سلسله مراتبی این است که به صاحبان گره ریشه متکی است ، که قادر به ایجاد دامنه های سطح بالا (TLD) هستند.

در حالی که هدف نهایی اتخاذ یک فرآیند تصمیم گیری غیر متمرکز برای TLD های جدید است ، در زمان نوشتن گره ریشه توسط یک Multisig 4 از 7 کنترل می شود ، که توسط مردم در کشورهای مختلف برگزار می شود (ساخته شده به عنوان بازتاب 7صاحبان کلیدی سیستم DNS). در نتیجه ، اکثریت حداقل 4 از 7 صاحب کلیدی برای ایجاد هرگونه تغییر لازم است.

در حال حاضر ، هدف و هدف این صاحبان کلیدی کار در اجماع با جامعه است:

  • پس از ارزیابی سیستم ، مالکیت موقت TLD را به یک قرارداد دائمی تر مهاجرت کرده و ارتقا دهید.
  • اگر جامعه موافقت می کند که به آنها نیاز دارند ، اضافه کردن TLD های جدید اجازه دهید.
  • هنگامی که چنین سیستمی به توافق ، آزمایش و اجرای آن رسیدگی می شود ، مالکیت Multisig Root Multisig را به یک قرارداد غیرمتمرکز تر مهاجرت کنید.
  • به عنوان یک روش آخر برای مقابله با هرگونه اشکال یا آسیب پذیری در ثبت های سطح بالا خدمت کنید.

Resolvers قرارداد اصلی ENS نمی تواند ابرداده را به نام ها اضافه کند. این وظیفه به اصطلاح "قراردادهای حل کننده" است. اینها قراردادهای ایجاد شده توسط کاربر هستند که می توانند به سؤالات مربوط به نام پاسخ دهند ، مانند آنچه آدرس swarm با برنامه در ارتباط است ، چه آدرس پرداخت به برنامه (در اتر یا نشانه ها) دریافت می کند ، یا اینکه هش برنامه چیست (برای تأییدیکپارچگی آن).

لایه میانی: گره ها.

در زمان نوشتن ، تنها دامنه سطح بالا که در یک قرارداد هوشمند قابل ثبت است ، قابل ثبت است.

توجه: در حال انجام این کار در مورد امکان صاحبان دامنه سنتی DNS برای ادعای مالکیت ENS در حال انجام است. در حالی که در تئوری این می تواند برای .com کار کند ، تنها دامنه ای که تاکنون برای آن اجرا شده است . xyz و فقط در تست Ropsten Testnet است.

دامنه ها از طریق یک سیستم حراج توزیع می شوند. هیچ لیست یا اولویت رزرو شده وجود ندارد و تنها راه دستیابی به نام استفاده از سیستم است. سیستم حراج یک کد پیچیده (بیش از 500 خط) است. بیشتر تلاشهای اولیه توسعه (و اشکالات!) در ENS در این بخش از سیستم قرار داشت. با این حال ، این نیز قابل تعویض و قابل ارتقا است ، بدون خطر برای بودجه - بعداً در مورد آن.

حراج های ویکری

نام ها از طریق حراج اصلاح شده ویکری توزیع می شوند. در یک حراج سنتی ویکری ، هر داوطلب یک پیشنهاد بسته بندی شده را ارائه می دهد ، و همه آنها به طور همزمان فاش می شوند ، در این مرحله بالاترین پیشنهاد دهنده برنده حراج می شود اما فقط پیشنهاد دوم را پرداخت می کند. بنابراین داوطلبان انگیزه می گیرند که کمتر از ارزش واقعی نام برای آنها پیشنهاد ندهند ، زیرا پیشنهاد ارزش واقعی آنها شانس پیروزی آنها را افزایش می دهد اما بر قیمتی که در نهایت پرداخت می کنند تأثیر نمی گذارد.

در یک blockchain ، برخی از تغییرات مورد نیاز است:

  • برای اطمینان از داوطلبان پیشنهاداتی را که قصد پرداخت آن را ندارند ، ارائه نمی دهند ، باید یک مقدار برابر یا بالاتر از پیشنهاد خود را از قبل قفل کنند ، تا تضمین کننده پیشنهاد معتبر باشد.
  • از آنجا که شما نمی توانید اسرار را در یک blockchain مخفی کنید ، داوطلبان باید حداقل دو معاملات (یک فرآیند تعهد - آشکار) را انجام دهند تا ارزش اصلی و نامی را که پیشنهاد می کنند پنهان کنند.
  • از آنجا که شما نمی توانید همه پیشنهادات را همزمان در یک سیستم غیر متمرکز فاش کنید ، داوطلبان باید خودشان پیشنهادات خود را فاش کنند. اگر این کار را نکنند ، وجوه قفل شده خود را از دست می دهند. بدون این توقیف ، می توان پیشنهادات زیادی را ارائه داد و فقط یک یا دو را فاش کرد و یک حراج با قیمت بسته شده را به حراج سنتی با قیمت تبدیل کرد.

بنابراین ، حراج یک فرایند چهار مرحله ای است:

  1. حراج را شروع کنید. این برای پخش قصد ثبت نام لازم است. این همه مهلت های حراج را ایجاد می کند. این اسامی به گونه ای هشدار داده شده است که فقط کسانی که نام خود را در فرهنگ لغت خود دارند ، می دانند کدام حراج افتتاح شده است. این امر به حریم خصوصی اجازه می دهد ، که در صورت ایجاد یک پروژه جدید مفید است و نمی خواهید جزئیات مربوط به آن را به اشتراک بگذارید. شما می توانید همزمان چندین حراج ساختگی را باز کنید ، بنابراین اگر کسی شما را دنبال کند ، نمی تواند به سادگی در مورد حراج هایی که باز می کنید پیشنهاد دهید.
  2. یک پیشنهاد بسته بندی شده ایجاد کنید. شما باید این کار را قبل از مهلت مناقصه انجام دهید ، با پیوند دادن مقدار معینی از اتر به هش یک پیام مخفی (شامل موارد دیگر ، هش نام ، مقدار واقعی پیشنهاد و نمک). شما می توانید بیشتر از آنچه در واقع پیشنهاد می دهید ، اتر را قفل کنید تا ارزیابی واقعی خود را نقاب بزنید.
  3. پیشنهاد را فاش کنید. در طول دوره فاش ، شما باید معامله ای را نشان دهید که پیشنهاد را نشان می دهد ، که سپس بالاترین پیشنهاد و دومین پیشنهاد را محاسبه می کند و اتر را به داوطلبان ناموفق می فرستد. هر بار که پیشنهاد فاش می شود ، برنده فعلی محاسبه می شود. بنابراین ، آخرین موردی که قبل از انقضا مهلت آشکار تنظیم می شود ، برنده کلی می شود.
  4. بعد از آن تمیز کنید. اگر برنده هستید ، می توانید حراج را نهایی کنید تا تفاوت بین پیشنهاد خود و پیشنهاد دوم خود را برگردانید. اگر فراموش کردید که فاش کنید می توانید دیررس را فاش کنید و کمی از پیشنهاد خود را بازیابی کنید.

لایه بالا: اعمال

لایه برتر ENS هنوز یک قرارداد فوق العاده ساده با یک هدف واحد است: برای نگه داشتن وجوه.

هنگامی که شما یک نام کسب می کنید ، وجوه در واقع در هیچ کجا ارسال نمی شوند بلکه فقط برای دوره ای که می خواهید نام را نگه دارید (حداقل یک سال) قفل شده اند. این مانند یک بازپرداخت تضمین شده عمل می کند: اگر مالک دیگر نام را نمی خواهد ، می تواند آن را به سیستم بفروشد و اتر خود را بازیابی کند (بنابراین هزینه نگه داشتن نام هزینه فرصت انجام کاری با بازده بیشتر از صفر است)بشر

البته ، داشتن یک قرارداد واحد میلیون ها دلار در اتر ثابت کرده است که بسیار خطرناک است ، بنابراین در عوض ENS یک قرارداد عمل برای هر نام جدید ایجاد می کند. قرارداد عمل بسیار ساده است (حدود 50 خط کد) ، و فقط اجازه می دهد تا وجوه به یک حساب واحد (صاحب عمل) منتقل شود و توسط یک نهاد واحد (قرارداد ثبت نام) فراخوانی شود. این روش به طور چشمگیری سطح حمله را کاهش می دهد که اشکالات می توانند بودجه را در معرض خطر قرار دهند.

ثبت نام

همانطور که در حراج های ویکری دیدیم ، ثبت نام در ENS یک فرایند چهار مرحله ای است. ابتدا برای هر نام موجود ، پیشنهاد خود را ارائه می دهیم ، سپس پیشنهاد خود را پس از 48 ساعت برای تأمین نام ، فاش می کنیم. جدول زمانی ENS برای ثبت نام نمودار است که جدول زمانی ثبت نام را نشان می دهد.

بیایید نام ما را ثبت کنیم!

ما از یکی از چندین رابط کاربر پسند در دسترس برای جستجوی نام های موجود استفاده خواهیم کرد ، یک پیشنهاد را روی نام Ethereumbook. eth قرار دهید ، پیشنهاد را فاش کنید و نام را ایمن کنید.

تعدادی از رابط های مبتنی بر وب وجود دارد که به ما امکان می دهد با ENS DAPP تعامل داشته باشیم. برای این مثال ، ما از رابط Mycrypto در رابطه با Metamask به عنوان کیف پول خود استفاده خواهیم کرد.

ابتدا باید اطمینان حاصل کنیم که نامی که می خواهیم در دسترس است. در حین نوشتن این کتاب ، ما واقعاً می خواستیم نام مستر را ثبت کنیم. از آنجا که ثبت نام های ENS فقط یک سال گذشته است ، ممکن است در آینده این نام را تأمین کند. در ضمن ، اجازه دهید Ethereumbook. eth را جستجو کنیم.

شکل 6. در جستجوی نام های ENS در mycrypto.com

عالی! نام موجود استبرای ثبت نام آن ، باید با شروع حراج برای یک نام ENS به جلو حرکت کنیم. بیایید Metamask را باز کنیم و حراج را برای Ethereumbook. eth شروع کنیم.

بیایید پیشنهاد خود را انجام دهیم. برای انجام این کار ، ما باید مراحل ارائه پیشنهاد برای یک نام ENS را دنبال کنیم.

هشدار همانطور که در حراج های ویکری ذکر شد ، باید پیشنهاد خود را ظرف 48 ساعت پس از اتمام حراج فاش کنید ، یا در پیشنهاد خود وجوه خود را از دست می دهید. آیا فراموش کردیم که این کار را انجام دهیم و خودمان 0. 01 را از دست بدهیم؟شما شرط می بندید که ما انجام دادیم.

یک تصویر عکس بگیرید ، عبارت مخفی خود را ذخیره کنید (به عنوان پشتیبان برای پیشنهاد خود) ، و یادآوری در تقویم خود برای تاریخ و زمان فاش کنید ، بنابراین بودجه خود را فراموش نکنید و از دست ندهید.

سرانجام ، ما معامله را با کلیک بر روی دکمه Big Green ارسال شده نشان داده شده در معامله Metamask حاوی پیشنهاد شما تأیید می کنیم.

اگر همه چیز خوب پیش برود ، پس از ارائه معامله به این روش می توانید در 48 ساعت پیشنهاد را برگردانید و فاش کنید و نامی که درخواست کردید در آدرس اتریوم شما ثبت می شود.

مدیریت نام ENS شما

پس از ثبت نام ENS ، می توانید آن را با استفاده از یک رابط کاربر پسند دیگر مدیریت کنید: ENS Manager.

پس از آنجا ، نامی را که می خواهید در کادر جستجو مدیریت کنید وارد کنید (به رابط وب ENS Manager مراجعه کنید). شما باید کیف پول Ethereum خود را (به عنوان مثال ، metamask) باز کنید ، تا مدیر ENS DAPP بتواند نام را از طرف شما مدیریت کند.

از این رابط، می‌توانیم زیردامنه‌ها را ایجاد کنیم، یک قرارداد حل‌کننده تنظیم کنیم (در ادامه در مورد آن بیشتر توضیح خواهیم داد)، و هر نام را به منبع مناسب، مانند آدرس Swarm یک frontend DApp متصل کنیم.

ایجاد یک زیر دامنه ENS

ابتدا، بیایید یک زیر دامنه برای نمونه Auction DApp خود ایجاد کنیم (به افزودن زیر دامنه auction. ethereumbook. eth مراجعه کنید). ما مزایده زیر دامنه را نام گذاری می کنیم، بنابراین نام کاملاً واجد شرایط auction. ethereumbook. eth خواهد بود.

هنگامی که زیر دامنه را ایجاد کردیم، می‌توانیم auction. ethereumbook. eth را در کادر جستجو وارد کرده و آن را مدیریت کنیم، همانطور که قبلاً دامنه ethereumbook. eth را مدیریت می‌کردیم.

حل کننده های ENS

در ENS، حل یک نام یک فرآیند دو مرحله ای است:

  1. رجیستری ENS با نامی فراخوانی می شود تا پس از هش کردن، آن را حل کند. اگر رکورد وجود داشته باشد، رجیستری آدرس حل کننده خود را برمی گرداند.
  2. حل‌کننده با استفاده از روش مناسب با منبع درخواستی فراخوانی می‌شود. حل کننده نتیجه مورد نظر را برمی گرداند.

این فرآیند دو مرحله ای چندین مزیت دارد. جداسازی عملکرد حل‌کننده‌ها از خود سیستم نام‌گذاری، انعطاف‌پذیری بسیار بیشتری به ما می‌دهد. صاحبان نام ها می توانند از حل کننده های سفارشی برای حل هر نوع یا منبعی استفاده کنند و عملکرد ENS را گسترش دهند. برای مثال، اگر در آینده می‌خواهید یک منبع موقعیت جغرافیایی (طول/طول جغرافیایی) را به یک نام ENS پیوند دهید، می‌توانید یک حل‌کننده جدید ایجاد کنید که به یک جستار موقعیت جغرافیایی پاسخ می‌دهد. چه کسی می داند چه برنامه هایی ممکن است در آینده مفید باشند؟با حل کننده های سفارشی، تنها محدودیت تخیل شماست.

برای راحتی کار، یک حل‌کننده عمومی پیش‌فرض وجود دارد که می‌تواند منابع مختلفی از جمله آدرس (برای کیف پول یا قراردادها) و محتوا (یک هش Swarm برای dApp یا کد منبع قرارداد) را حل کند.

از آنجایی که می‌خواهیم Auction dApp خود را به یک هش Swarm پیوند دهیم، می‌توانیم از حل‌کننده عمومی استفاده کنیم که از وضوح محتوا پشتیبانی می‌کند، همانطور که در تنظیم حل‌کننده عمومی پیش‌فرض برای auction. ethereumbook. eth نشان داده شده است. ما نیازی به کدنویسی یا استقرار یک حل کننده سفارشی نداریم.

حل یک نام برای یک Swarm Hash (محتوا)

هنگامی که حل‌کننده auction. ethereumbook. eth به عنوان حل‌کننده عمومی تنظیم شد، می‌توانیم آن را طوری تنظیم کنیم که هش Swarm را به عنوان محتوای نام ما برگرداند (به تنظیم «محتوا» برای بازگشت به auction. ethereumbook. eth مراجعه کنید).

پس از مدت کوتاهی منتظر ماند تا تراکنش ما تایید شود، باید بتوانیم نام را به درستی حل کنیم. قبل از تنظیم یک نام، Auction dApp ما را می‌توان در یک دروازه Swarm با هش آن یافت:

یا با جستجو در مرورگر DApp یا دروازه Swarm برای URL Swarm:

  • bzz: // AB164CF37DC10647E43A233486CDEFFA8334B026E32A480DD9CBD020C12D4581

اکنون که آن را به یک نام وصل کرده ایم ، بسیار ساده تر است:

ما همچنین می توانیم با جستجوی "Auction. ethereumbook. eth" در هر کیف پول یا مرورگر سازگار با ENS (به عنوان مثال ، غبار) آن را پیدا کنیم.

از برنامه به DAPP

در طول چندین بخش گذشته ، ما به تدریج یک برنامه غیر متمرکز ایجاد کرده ایم. ما با یک جفت قرارداد هوشمند شروع کردیم تا حراج را برای اعمال ERC721 انجام دهیم. این قراردادها به گونه ای طراحی شده اند که هیچ حسابهای حاکم یا ممتازی ندارند ، به طوری که عملکرد آنها واقعاً غیر متمرکز است. ما یک جبهه اضافه کردیم که در JavaScript پیاده سازی شده است ، که یک رابط مناسب و کاربر پسند به DAPP ما ارائه می دهد. حراج DAPP از Swarm سیستم ذخیره سازی غیر متمرکز برای ذخیره منابع کاربردی مانند تصاویر استفاده می کند. DAPP همچنین از پروتکل ارتباطات غیر متمرکز برای ارائه یک اتاق چت رمزگذاری شده برای هر حراج و بدون هیچ سرور مرکزی استفاده می کند.

ما کل جلو را به Swarm بارگذاری کردیم ، به طوری که DAPP ما برای ارائه پرونده ها به هیچ سرور وب اعتماد نمی کند. سرانجام ، ما نامی را برای DAPP خود با استفاده از ENS اختصاص دادیم و آن را به هش Swarm از جبهه وصل کردیم تا کاربران بتوانند با یک نام ساده و آسان برای خواندن انسانی به آن دسترسی پیدا کنند.

با هر یک از این مراحل ، عدم تمرکز کاربرد خود را افزایش دادیم. نتیجه نهایی DAPP است که هیچ نقطه مرکزی اقتدار ، نقطه اصلی عدم موفقیت ندارد و چشم انداز "Web3" را بیان می کند.

حراج DAPP معماری معماری کامل حراج DAPP را نشان می دهد.

نتیجه

برنامه های غیر متمرکز اوج دید اتریوم است ، همانطور که بنیانگذاران از اولین طرح ها بیان می کنند. در حالی که بسیاری از برنامه ها امروز خود را "dapps" می نامند ، اما بیشتر آنها کاملاً غیر متمرکز نیستند.

با این حال ، در حال حاضر امکان ساخت برنامه هایی که تقریباً کاملاً غیر متمرکز هستند امکان پذیر است.

با گذشت زمان ، هرچه بیشتر فناوری بالغ می شود ، بیشتر و بیشتر برنامه های ما می توانند غیر متمرکز شوند و در نتیجه یک وب انعطاف پذیر ، مقاوم در برابر سانسور و رایگان انجام شود.

فارکس وکسب درامد...
ما را در سایت فارکس وکسب درامد دنبال می کنید

برچسب : نویسنده : آرش اصل زاد بازدید : 56 تاريخ : جمعه 11 فروردين 1402 ساعت: 22:53