اتریوم برای توسعه‌دهندگان وب

این یک ترجمه آزاد از مقاله‌ای کوتاه به زبان انگلیسی است. لینک مقاله اصلی در انتهای پست ذکر شده است.من برای مدتی مشغول یادگیری پلتفرم بلاکچین اتریوم بودم و هر چی بیشتر یاد می‌گرفتم، به نظر هیجان‌انگیز‌تر می‌اومد. درباره اتریوم منابع زیادی هست (مقاله‌ها، ویدئوها و مستندهای پلتفرم)، به خاطر همین به راحتی ممکنه توی منابع غرق بشین. ولی بسیاری از این منابع تاریخ گذشته هستن به این خاطر که پلتفرم اتریوم با سرعت بالایی در حال تکامله. این مقاله حاصل تلاش من برای توضیح اتریوم از منظر یک توسعه‌دهنده وب هست.اگه شما یه توسعه‌دهنده وب هستین می‌دونید که یک وب‌اپ با معماری کلاینت-سرور به طور کلی چطور کار می‌کنه.یک اپلیکیشن متمرکزوب اپلیکیشن شما روی یک سرویس هاستینگ مثل AWS یا یک VPS قرار می‌‎گیره. همه کلاینت‌ها با این اپلیکیشن متمرکز تعامل می‌کنن. کلاینت‌ می‌تونه یک مرورگر یا یک API باشه که از سرویس شما استفاده می‌کنه. وقتی یک کلاینت یک درخواست به سرور می‌فرسته، سرور کار خودش رو انجام می‌ده، با دیتابیس و/یا کش صحبت می‌کنه، (دیتابیس رو) می‌خونه، می‌نویسه، آپدیت می‌کنه و در آخر پاسخ درخواست رو به کلاینت برمی‌گردونه.این معماری بیشتر وقت‌ها خوب کار می‌کنه. با این حال، برای بعضی اپلیکیشن‌های خاص خیلی بهتره اگر دیتابیس به صورت عمومی (public) و امن برای همه در دسترس باشه و برای دسترسی به داده‌ها نیازی به وب‌اپلیکیشن سمت سرور نباشه.برای مثال، بیایید به eBay نگاه کنیم. فرض کنید شما یه PowerSeller (فروشنده بزرگ با خدمات مشتری استاندارد و قابل قبول) در eBay هستید که صدها نظر خوب از مشتری‌ها دریافت کرده و به دلیلی eBay حساب کاربری شما رو مسدود می‌کنه. این خیلی بده و می‌تونه به شدت به کسب‌و‌کار شما آسیب بزنه. خیلی خوب می‌شد اگر می‌تونستید همه نظرات و امتیازهایی که گرفتید رو به یک پلتفرم دیگه (غیر از eBay) منتقل کنید. eBay به عنوان شخص ثالث معتمد بین فروشنده و خریدار رابطه برقرار می‌کنه. اما در مقابل از هر فروش مقداری کمیسیون برمی‌داره. چی می‌شد اگه راهی وجود داشت که eBay رو کلاً از تراکنش بین خریدار و فروشنده حذف کنیم؟ اون وقت شما می‌تونستید مبلغ کمیسیون رو صرفه‌جویی کنید و ضمناً به همه داده‌های خودتون دسترسی داشته باشید. اینجا همون جاییه که اپلیکیشن‌های غیرمتمرکز وارد صحنه می‌شن. اتریوم ساختن Dapp ها (decentralized applications) رو خیلی آسون کرده. این تصویر کلی یک Ethereum Dapp هست:یک اپلیکیشن غیرمتمرکزاگه دقت کرده باشین، هر کلاینت (مرورگر) با instance اپلیکیشن خودش مرتبط می‌شه. سرور متمرکزی وجود نداره که همه کلاینت‌ها به اون وصل بشن. این به این معنیه که هر کسی که می‌خواد با یک dapp تراکنش داشته باشه باید یک کپی کامل از بلاکچین روی سیستم خودش (کامپیوتر یا موبایل یا ...) داشته باشه. یعنی شما قبل از این که بتونید از اپلیکیشن استفاده کنید باید بلاکچین رو دانلود کنید و بعد از اون شروع به استفاده از اپلیکیشن کنید. این کار اولش ممکنه مسخره به نظر بیاد اما این مزیت رو داره که دیگه به یک سرور متمرکز وابسته نیستید که ممکنه فردا ناپدید بشه یا دسترسی شما رو مسدود کنه.در واقعیت هم برای دانلود کل بلاکچین شما نیاز به مقدار زیاد هارد دیسک یا رم ندارید.حالا ببینیم این بلاکچین دقیقاً چی هست؟1. دیتابیس: وقتی چند تا تراکنش توی شبکه اتریوم ثبت می‌شه، این تراکنش‌ها توی یک بلاک بسته‌بندی می‌شن و هر بلاک به بلاک بعد از خودش لینک می‌شه. این رشته‌ی لینک‌‎‌شده‌ی بلاک‌ها که اطلاعات همه‌ تراکنش‌ها رو نگه می‌دارن همون بلاکچین هست. اگه به مثال eBay برگردیم، هر تراکنش بین خریدار و فروشنده، چه فروش باشه، چه استرداد وجه، چه شکایت و یا هر چیز دیگه، روی بلاکچین ثبت می‌شه و همه می‌تونن اون رو ببینن. برای اطمینان از این که همه گره‌ها (node) روی شبکه نسخه یکسانی از داده‌های تراکنش‌ها دارن و برای اطمینان از این که هیچ داده نامعتبری روی این دیتابیس ثبت نمی‌شه، اتریوم از الگوریتمی به اسم Proof of Work استفاده می‌کنه.2. کد: دیتابیس فقط داده‌ها رو ذخیره می‌کنه. اما منطق (logic) خرید، فروش، لغو، استرداد و غیره کجاست؟ در دنیای اتریوم شما کد اپلیکیشن (قرارداد/قرارداد هوشمند) رو با زبانی به اسم Solidity می‌نویسید. بعد از اون شما از کامپایلر سالیدیتی استفاده می‌‎کنید تا کد رو به Ethereum Byte Code تبدیل کنید و بعد این byte code رو روی بلاکچین قرار بدید. جایگزین‌هایی برای Solidity وجود داره اما Solidity با اختلاف محبوب‌ترین زبان برای توسعه قرارداد هوشمنده.پس بلاکچین داده شما رو نگه می‌داره، کد شما رو نگه می‌داره و ضمناً کد روی توی EVM یا Ethereum Virtual Machine اجرا می‌کنه.برای ساختن dapp ها بر بستر وب، اتریوم یک کتابخونه به درد بخور جاواسکریپت به اسم web3.js داره که اتصال کلاینت به node بلاکچین رو برقرار می‌کنه. پس شما می‌تونید این کتابخونه رو توی framework جاواسکریپت خودتون (reactjs, angularjs) اضافه کنید و کار رو شروع کنید.یک ویژگی بزرگ و خیلی مهم دیگه پلتفرم اتریوم قابلیت‌های مالی اونه. نظرتون چیه اگه بهتون بگم که به محض این که شما شروع به استفاده از یک dapp می‌کنید، یک حساب بانکی هم اون جا براتون درست می‌شه؟ در واقع نه یک حساب، شما می‌‎تونید هر تعداد که بخواهید حساب بانکی داشته باشید. اسم این حساب‌های بانکی کیف‌پول (Wallet) هست. جایی که شما پول‌تون رو ذخیره می‌کنید (در قالب Ether/اتر، واحد پول اکوسیستم اتریوم) و تراکنش انجام می‌دین.جزئیات زیادی درباره کارکرد داخلی بلاکچین هست که من عمداً کنار گذاشتم، چون می‌خواستم روی مقایسه اپلیکیشن‌های غیرمتمرکز و متمرکز تمرکز کنم. امیدوارم که این پست به این هدف رسیده باشه و ایده کلی خوبی از این که اتریوم چیه و چطور می‌شه برای ساختن dapp ها از اون استفاده کرد به شما داده باشه.منبع: https://medium.com/@mvmurthy/ethereum-for-web-developers-890be23d1d0c