12.3.1.1 اتریوم #
بعد از حل مشکلاتی که برای ایجاد یک ارز یا سکه دیجیتالی یا مجازی وجود داشت توسط بیتکوین، با استفاده از ایجاد یک دفتر کل غیر متمرکز، دیتا مدل بلاکچین و سیستم غیرمتمرکز آن موقعیتی برای ایجاد و حل مشکلات دیگه فراهم کرد.
ویتالیک بوترین ایده اتریوم و وایت پیپر ان را اولین بار در سال ۲۰۱۳ منتشر کرد. او یک فعال در مجله بیتکوین بود و اعتقاد داشت بیتکوین دارای مشکلاتی است که باید برطرف شود. او در سال ۲۰۱۴ با چند توسعه دهنده دیگر در ماه اوت همان سال برای اجرای ایده خود شروع به جذب سرمایه کرد.
همانطور که ایده ها حول و محور یک سکه دیجیتالی پیش از بیتکوین زیاد بود، قبل از اتریوم و حتی بیتکوین هم افرادی فکر استفاده از ماشین ها برای اجرا و مدیریت قرارداد ها داشتند. اما مساله تغییر پذیر بودن کد های ماشینی و همیشه در دسترس بودن آنها کار را دشوار تر میکرد.
همانطور که در بخش قبل (معرفی بلاکچین)توضیح دادیم، یک بلاکچین یک دیتابیس توزیع شده کاملا غیر قابل تغییر است. و همینطور همیه چیز در آن شفاش و اعتبار سنجی شده است. در کنار تمام این موارد نسبت به تعداد node ها شبکه همیشه دسترسی پذیر است و میتوان به دسترسی پذیر بودن اطلاعات بر بستر آن هم اعتماد کرد.
از طرفی مدل های اجماعی قبلی هم مشکلاتی مثل هزینه بر بودن و ایجاد مشکلات در طبعیت را داشتند. در ادامه به حل این مشکلات در اتریوم میپردازیم.
12.3.1.1.1 ماشین مجازی اتریوم و قرار داد های هوشنمد #
این خصوصیات برای ما این فرصت را ایجاد کرد تا قرارداد های هوشمند را اختراع کنیم و پیشتاز این صنعت ویتالیک بوترین با ایده ماشین مجازی اتریوم بود!
اتریوم، یک بلاکچین نسل دوم است که اولین بار با مدل اجماع اثبات کار PoW و قابلیت پشتیبانی از قرارداد های هوشمند اراعه شد. طبق بژ پیپر اتریوم (بژ پیپر نسخه ای ساده نویسی شده و خلاصه شده از یلو پیپر است.) هدف اصلی اتریوم ارز اتر نیست. (ارز شبکه اتریوم اتر و مرسوم ترین خرده واحد آن وی می باشد) هدف اصلی اتریوم ماشین مجازی آن است. شبکه اتریوم، مجموعه ای از نود ها هستند که نرم افزار اتریوم (یک پیاده سازی از اتریوم) را اجرا میکنند و با دیتا مدل بلاکچین استیت کلی را نگهداری میکنند. زمانی که یک قرارداد هوشمند روی اتریوم مستقر میشود، تمامی نود های شبکه یک بایت کد از ان را نگهداری میککند.
پس شما میتوانید به راحتی، با استاندارد های اتریوم قرارداد برای مثال مالی خود را بنویسید، و روی شبکه اتریوم مستقر کنید. این امر باعث میشود که شما بدون واسطه، به دسترسی پذیر بودن، شفاف بودن (تمام بایت کد ها روی شبکه اتریوم قابل استعلام و خواندن است. به نحوی هر قرارداد هوشنمند مجبور است متن باز باشد. قابل ذکر است که سورس کدی که کامپایل نشده در شبکه نگهداری نمیشود اما معمولا اکسپلورر ها یک نسخه اعتبارسنجی شده از سورس کد را اراعه میدهند) ان مطمن باشید.
امامرحله مهم بعدی، اجرای آن قرار داد بصورت مطمن است. هر نود اتریوم یک ماشین مجازی روی خود دارد که از توانایی اجرا بایت کد های اتریوم برخوردار است. یکی از دلایل اجرا نشدن مستقیم کانترکت ها این است که ما در ازای مقدار ورودی ثابت و اجرای توابع کانترکت روی هر نود توقع خروجی ثابت داریم. همانطور که در بخش های قبل اشاره کردیم در بلاکچین بصورت مستقیم به اطلاعات خارج از زنجیره (off-chain) اعتماد نمی کنیم. پس وضعیت نود اجرا کننده نباید در اجرای قرارداد ما اثر گذار باشد.
پس هر نود سورس کد قرار داد هوشنمد شما به علاوه یک ماشین مجازی برای اجرا آن را دارد. از طرفی ما نمیتوانیم توان پردازشی را بین تمام شبکه تقسیم کنیم و بگوییم که همه نود ها باهم یک تابع را جرا کنند. پس تغییر نهایی قرارداد را روی استیت کلی شبکه اتریوم اعمال میکنیم. که با یک تراکنش که ان را contract call صدا میزنیم انجام میشود. در نتیجه همه برای اعمال تغییر، خروجی را اعتبار سنجی میکنند.
تمام کانترکت های اتریوم دسترسی به برخی از اطلاعات شبکه، نوشتن و خواندن از ان را دارند و میتوانند مجوز برداشت اتر از صاحب یک حساب بگیرند یا به حساب های مختلف اتر وایز کنند.
هر کانترکت در شبکه اتریوم (و عمد بلاکچین های موجود) حکم یک شی در پارادایم برنامه نویسی شی گرا را دارد. برای مثال انها استکی مخصوص خود دارند و یا برای صدا زدن یکدگیر باید یک نسخه (instance) از دیگری بسازند. که در این باره در بخش کانترکت و ماشین مجازی اتریوم بصورت مفصل میپردازیم. از طرفی دیگر تمام کانترکت های اتریوم یک فضای ذخیره سازی کلید و مقداری (key/value)هم دارند.
اما مساله پر اهمیت بعدی این است که چرا یک نود باید کانترکت هارا نگهداری و اجرا کند؟؟؟ برای نگهداری و اعتبار سنجی بلاک ها بصورت صادقانه، ما یک جایزه مشخص کردیم. در اصل در ازای صادق بودن و کمک کردن به شبکه ما یک تشویق و برای تلاش در نابود کردن شبکه تنبیه تعریف کردیم. با روش های مختلف. راه حل قرارداد های هوشنمد هم همین مساله است. زمانی که شما یک کانترکت کال انجام میدهید، اولا نیاز به پرداخت کارمز تراکنش خود هستید، اما بخش اصلی این است که تمام بایت کد های اتریوم یک مبلغ بدون واحد (unit less) به عنوان هزینه اجرا یا gas دارند.
برای مثال زمانی که شما یک تابع در یک کانترکت را صدا میزنید، تابعی که شما صدا زده اید از ۵ اوپریشن کد (operation code) تشکیل شده. که هر اوپریشن کد ۳ gas نیاز دارد. (توضیح و جزییات اوپریشن کد ها در بخش ماشین مجازی اتریوم و اسمارت کانترکت انجام میشود) از ان رو که gas واحدی ندارد پس هزینه gas هر کانترکت کال به gas مشخص و ثابت است. اما قیمت هر gas نسبت به بار شبکه و حجم تراکنش ها متفاوت است برای مثال همین الان که این متن نوشته میشود قیمت هر gas حدود ۲۵ gwei است (گیگا وی) حال اگر شما یک کانترکت کال با هزینه مشخص 100 وی انجهام دهید، نیاز به پرداخت ۲۵۰۰ gwei یا 0.068 دلار به عنوان gas دارید.
پس نودی که کانترکت شما را اجرا میکند دلیلی منطقی برای اجرا و نگهداری از ان دارد. و علت ایجاد ارز اتر همین پاداش و هزینه اجرا کانترکت ها است.
12.3.1.1.2 مدل اجماع اثبات سهام (Proof of Stake or PoS) #
مدل اجماع اولیه شبکه اتریوم، مدل اثبات کار بود. اما بعد ازمدتی اتریوم از مدل جدیدی به اسم اثبات سهام امنیت و یکپارچی خود را تظمین کرد.
در مدل اثبات سهام، مسابقه ای وجود ندارد. بجای ماینر ها هر نود نقش یک شخص که وضیفه اعتبار سنجی بلاک هارا دارد را بازی میکند. اما چطور اعتماد به نود ها صورت میگیرد؟
هر نود برای اینکه در فرایند اجماع شرکت داده بشود، مبلغی از ارز شبکه را استیک میکند. بعد از استیک شدن قابلیت جابه جایی ان وجود ندارد و به نحوی تحت کنترل شبکه است. این استیک حکم اعتبار ان نود را دارد. زمانی که شما دست به تقلب بزنید، استیک های شما در خطر خواهد بود. پس هرچه شما ارزش بیشتری را استیک کنید، مبلغ بیشتری برای از دست دادن دارید. پس احتمالا کمتر به فکر صادق نبودن هستید و در نتیجه معتبر تر هستید.
زمانی که ۱۰۰ نود برای مثال با استیک های مختلف وجود دارند، یک شخص بصورت تصادفی برای ثبت بلاک جدید انتخاب میشود و نیازی به هیچگونه مسابقه ای نیست. اما شخص انتخاب شده نیاز دارد که بلاک مورد نظر را اراعه کند و بقیه نود ها ان را تایید کنند. احتمال اینکه شما انتخاب شوید بیشتر است، اما اگر استیک بیشتری داشته باشید.
حداقل استیک در اتریوم در این موقع حدود ۳۲ اتر است. همچین شما قابلیت unstake کردن نود خود را دارید اما فرایند زمان بری است و بعد از ان نود شما در فرایند اجماع شرکت داده نخواهد شد.
هر نود بعد از انتخاب شدن، بلاک خود را اراعه میکند و دیگر نود ها رای میدهند. اگر بلاک تایید شود همه انرا به دفتر کل خود اضافه میکنند و جایزه بلاک به نود مورد نظر میرسید. اگر بلاک رد شود و به مرور نود مشکوک برسد، همانطور که گفتیم استیک ها در خطرند.
در این مدل اجماع، ما بجای مفهوم ماینر یا استخراج کننده از مفهوم و کلمه ولیدیتور و یا اعتبارسنجی کننده استفاده میکنیم. و بجای ماین یا استخراج از کلمه مینت شدن یا ضرب شدن استفاده میکنیم.
در این مدل اجماع ما با قفل کردن دارایی های خود هم اعتبار خود را اثبات میکنیم، و هم مشخص میکنیم که از شبکه ای که در حال فعالیت هستیم سهمی سهامی داریم. پس هر حرکت اسیب زننده ای دارایی مارا به دو نحو در خطر میندازد.
این مدل اجماع هزینه منابع کمتری دارد و برای طبیعت به نسبت بیت کوین کم ضرر تر است. (نکته مهم این است که شبکه بیتکوین هزاران بار از وضعیت فعلی طلا و ارز های فیات متمرکز کاغذی وضعیت بهتری دارد و بشدت کم ضرر تر است.)
در بخش اجماع بصورت جزیی تر به این مدل اجماع میپردازیم.
12.3.1.1.2 world state #
در شبکه اتریم یک استیت جهانی (شبیه به دفتر کل بیتکوین) وجود دارد. اطلاعاتی که تمامی نود ها بصورت یکپارچه از وضعیت ماشین مجازی اتریوم و حساب ها نگهداری میکنند همان ورلد استیت اتریوم است.
تغییرت و تراکنش های اعمال شده در اطلاعات یک نود با دیگر نود ها در یک شبکه همتا به همتا صورت میگیرد (در ادامه به جزییات این شبکه بیشتر خواهیم پرداخت).
گفتنی است که این تغییرات نیاز دارند تا در مرحله اجماع به تایید اکثریت نود ها برسند تا در استیت جهانی اعمال شوند. و پیام های رد و بدل شد در فرایند اجماع در همین شبکه همتا به همتا منتقل میشوند.
راه ارتباطی کابر با نود های شبکه برای خواندن و نوشتن اطلاعات بر ورلد استیت یک API وب ۳ است.
شما برای هر مدل از عملیات نوشتن نیاز به ایجاد یک تراکنش دارید که بسته به تراکنش و بار شبکه کارمزدی متفاوت دارد. اما برای خواندن اطلاعات از شبکه مثل اطلاعات یک بلاک یا حافظه یک قرارداد هوشمند کارمزدی در نظر گرفته نمیشود و نیازی به ایجاد تراکنش نیست و RPC هایی جهت اینکار اراعه میشود.
ایجاد تراکنش هم با اراعه تراکنش خام امضا شده به همین RPC صورت میگیرد.