آشنایی با بلاکچین اتریوم
بلاکچین اتریوم در اصل یک ماشین بر پایهی وضعیت تراکنشها است. در علوم کامپیوتری ماشین وضعیت به سیستمی اشاره دارد که یک سری ورودی را دریافت میکند و بر اساس این ورودیها به وضعیت جدیدی منتقل میگردد.
ماشین وضعیت اتریوم با وضعیت اولیه(Genesis State) آغاز میگردد که به وضعیت سفید پیش از انجام هر گونه تراکنش شباهت دارد. زمانی که تراکنشها اجرا گردند، ماشین وضعیت از وضعیت اولیه به وضعیت نهایی منتقل میگردد. در هر لحظه از زمان وضعیت نهایی شرایط کنونی شبکهی اتریوم را نشان میدهد.
هر وضعیت شبکهی اتریوم میلیونها تراکنش را شامل میگردد که در بلاکها دستهبندی میشوند. هر بلاک یک سری تراکنش را شامل میگردد و به بلاک پیشین متصل شده است.
فعالیت ماینینگ در شبکهی اتریوم
تنها تراکنشهای معتبر در بلاکچین اتریوم قرار داده خواهند شد. تراکنشهایی معتبر شناخته میشوند که فرآیند تایید اعتبار(ماینینگ) را طی کنند. در این فرآیند توان محاسباتی گروهی از کامپیوترها برای ایجاد بلاکهای جدید و قرار دادن تراکنشهای معتبر در این بلاکها مصرف میگردد.
هر گره در شبکهی اتریوم که به عنوان ماینر شناخته میشود میتواند بلاک جدیدی را ایجاد و تراکنشها را تایید کند. تعداد زیادی از ماینرها در سراسر جهان بهطور همزمان برای استخراج بلاکهای جدید تلاش میکنند. هر ماینر در زمان ارسال بلاک به بلاکچین یک اثبات ریاضی را ارائه میکند و این اثبات به عنوان ضمانت عمل میکند. هر بلاک درصورت وجود اثبات معتبر شناخته میشود.
ماینر برای افزودن بلاک به شبکهی بلاکچین باید پاسخ معما(اثبات ریاضی) را سریعتر از دیگر ماینرهای رقیب ارائه کند. فرآیند اعتبارسنجی هر بلاک با ارائهی اثبات ریاضی توسط ماینرها به عنوان اثبات کار(proof of work) شناخته میشود.
ماینرها به ازای فعالیت در شبکهی اتریوم پاداش دریافت میکنند. در حقیقت بلاکچین اتریوم از توکن اتر(Ether) به عنوان ارز داخل شبکه استفاده میکند. هر زمانی که ماینر یک بلاک را در شبکه کشف میکند مقدار مشخصی از توکنهای اتر نیز ایجاد و به ماینر ارائه میشوند.
حسابهای موجود در شبکهی اتریوم
حسابهای متعددی در شبکهی اتریوم وجود دارند و وضعیت هر حساب با یک آدرس 20 بایتی مرتبط است. شبکهی اتریوم از شناسهی 160 بیتی برای شناسایی هر حساب کاربری استفاده میکند و بهطور کلی دونوع حساب در شبکهی اتریوم وجود دارد:
- حسابهای دارای مالکیت خارجی که توسط کلیدهای خصوصی کنترل میشوند و هیچ کُد مرتبط با آنها وجود ندارد.
- حسابهای قرارداد که توسط کُد قرارداد مرتبط با آنها کنترل میشوند.
حسابهای دارای مالکیت خارجی پس از امضاء تراکنش با استفاده از کلید خصوصی میتوانند در شبکه تراکنش ارسال کنند. با این وجود، تراکنشهای مربوط به حسابهای دارای مالکیت خارجی به یکدیگر تنها انتقال دارایی را شامل میگردد. اما تراکنشهای حسابهای دارای مالکیت خارجی به حسابهای قرارداد امکان انجام اقدامات گستردهتری را فراهم میکند که انتقال توکنها، انتشار توکنهای جدید، انجام محاسبات، ایجاد حساب جدید و… را شامل میگردد.
برخلاف حسابهای دارای مالکیت خارجی، حسابهای قرارداد امکان ارسال تراکنش مستقیم را ندارند. با این وجود، حسابهای قرارداد تنها در پاسخ به تراکنشهای دیگری که دریافت میکنند(از حسابهای دیگری که دارای مالکیت خارجی هستند و یا حسابهای قرارداد) میتوانند تراکنشی را ارسال کنند.
در نتیجه با توجه به مطالب عنوان شده میتوان نتیجهگیری کرد که تراکنشهای حسابهای دارای مالکیت خارجی تمامی فعالیتهای شبکهی بلاکچین اتریوم را موجب میشوند.
عناصر وضعیت حساب
وضعیت حساب در شبکهی اتریوم بهطور مستقل از نوع حساب از چهار عنصر تشکیل میشود:
- نانس(Nonce): درصورتی که حساب مربوطه یک حساب دارای مالکیت خارجی باشد، این عدد تعداد تراکنشهایی که از آدرس اکانت ارسال شده است را نمایندگی میکند. اما در حساب قرارداد، نانس تعداد قراردادهایی که توسط حساب ایجاد شده است را نشان میدهد.
- موجودی(Balance): تعداد Wei(کوچکترین واحد اتریوم است و هر 1e+18 Wei یک اتر را تشکیل میدهد) که به یک آدرس تعلق دارد.
- ریشهی ذخیرهسازی(StorageRoot): هش گرهی اصلی درخت مرکل پاتریشیا(Merkle Patricia tree) را شامل میگردد. این درخت هش محتوای ذخیره شده توسط حساب را از حالت کُد خارج میکند(اِنکد) و بهطور پیشفرض خالی است.
- کُد هش: کُد هش ماشین مجازی اتریوم(EVM) برای حسابهای قرارداد کٌدی است که به هش تبدیل و سپس ذخیره میگردد. کد هش برای حسابهای دارای مالکیت خارجی تنها هش یک رشتهی خالی را شامل میشود.
وضعیت کلی شبکهی اتریوم ارتباط میان آدرسها و وضعیت حساب را شامل میگردد. این ارتباط در یک ساختار دادهها که درخت مرکل پاتریشیا نام دارد، ذخیره میگردد.
هزینهی گس و پرداخت در شبکهی اتریوم
مفهوم هزینهی گس(Gas) یکی از اصول فعالیت در شبکهی اتریوم را تشکیل میدهد. هرگونه محاسباتی که در نتیجهی اجرای تراکنش در شبکهی اتریوم ایجاد میشود برای کاربر هزینه به همراه خواهد داشت. این هزینه در شبکهی اتریوم با عنوان گس شناخته میشود.
گس واحدی است که برای اندازهگیری هزینهی محاسبات مشخصی در شبکهی اتریوم در نظر گرفته میشود. هزینهی گس بر مبنای گوی(Gwei))برابر است با 1,000,000,000 وی(Wei)) محاسبه میگردد.
فرستنده در هر تراکنش محدودیت گس(Gas Limit) و قیمت گس(Gas Price) را تعیین میکند. این فاکتورها حداکثر هزینهای که فرستنده مایل است برای اجرای تراکنش در شبکهی اتریوم بپردازد را تعیین میکنند.
برای مثال، در صورتی که فرستنده محدودیت گس را 50,000 و قیمت گس را 20Gwei قرار دهد. بدان معنی است که فرستنده تمایل دارد حداکثر 50,000 x 20 gwei = 1,000,000,000,000,000 Wei = 0.001 Ether را برای اجرای تراکنش ارسال کند.
در نهایت ماینرها که در ازای ارائهی توان محاسباتی تراکنشها را در شبکهی اتریوم تایید میکنند، هزینهی گس را نیز به عنوان پاداش دریافت خواهند کرد.
بهطور کلی هرچه فرستنده هزینهی پرداختی بالاتری را در تراکنش اعمال کند، احتمالا ماینرهای بیشتری این تراکنش را انتخاب و تایید خواهند کرد. ماینرها در انتخاب تراکنشها و یا نادیده گرفتن آنها دارای اختیار هستند. ماینرها میتوانند به منظور رفع ابهام ارسال کنندگان تراکنش حداقل هزینهی مورد نیاز برای تایید تراکنش را تعیین کنند.
دریافت هزینه از فضای ذخیرهسازی مصرف شده
هزینهی گس تنها محاسبات در شبکهی اتریوم را شامل نمیشود بلکه کاربران برای استفاده از فضای ذخیره سازی نیز هزینه میپردازند. از آنجایی که افزایش حجم ذخیرهسازی تراکنش کاربران در نهایت موجب افزایش حجم پایگاه دادهی شبکهی اتریوم(دفتر کل) در تمامی گرهها میگردد، این عامل کاربران را به کاهش حجم فضای ذخیرهسازی تشویق میکند.
اجرای تراکنشها در شبکهی اتریوم
در بخش آغازی مقاله شبکهی اتریوم به صورت یک ماشین وضعیت توصیف شده است. به بیان ساده، تراکنشها بخشی از یک دستور العمل هستند که توسط حساب خارجی ایجاد شدهاند و بهطور رمزنگاری امضاء شدهاند. تراکنشها بهطور پیوسته در شبکهی بلاکچین اتریوم ارسال میشوند.
دو نوع تراکنش در شبکهی اتریوم وجود دارد که ارسال پیام(Message Calls) و ایجاد قرار داد(Contract Creations) را شامل میشوند. هر دو دسته از این تراکنشها توسط حسابهای دارای مالکیت خارجی ایجاد و در شبکه ارسال میشوند. اما قراردادهای موجود در شبکهی اتریوم نیز از طریق «پیامها» و یا «تراکنشهای داخلی» با یکدیگر ارتباط برقرار میکنند.
تمامی تراکنشها در بلاکها «گروهبندی» شدهاند. بلاکچین اتریوم از یک سری بلاک تشکیل شده است که بهطور مشابه با شبکهی بلاکچین بیت کوین به یکدیگر زنجیر شدهاند. بلاکهای اتریوم اجزاء زیر را شامل میشوند:
- هدر بلاک(block header)
- دادههای مجموعه تراکنشهایی که در بلاک قرار گرفتهاند
- مجموعهی هدر بلاکهای اومر(Ommer)
آشنایی با بلاکهای اومر(Ommer) یا آنکل(Uncle) در شبکهی اتریوم
از آنجایی که تناوب زمانی استخراج بلاکها در شبکهی اتریوم(تقریبا 15 ثانیه) بسیار کمتر از فاصلهی زمانی استخراج بلاک در شبکهی بیت کوین(تقریبا 10 دقیقه) است، سرعت تایید تراکنشها افزایش مییابد. با این وجود امکان استخراج بلاکهای همزمان(بلاکهای اورفند(Orphaned) که در زنجیرهی اصلی شبکهی اتریوم قرار داده نخواهد شد) نیز توسط ماینرها افزایش مییابد.
در شبکهی بیت کوین بلاکهای اورفند در زنجیرهی شبکه قرار داده نمیشوند و ماینر پاداشی برای استخراج این بلاکها در یافت نمیکند، اما در شبکهی اتریوم بخشی از هدر بلاکها به بلاک اومر یا آنکل اختصاص دارد و ماینرهای این دسته از بلاکها پاداش کمتری را دریافت میکنند. در نتیجه ماینرها به افزودن بلاکهای آنکل در هدر و دریافت پاداش تشویق میشوند.
چنین رویکردی تفاوت ساختاری را در زنجیرهی اتریوم نسبت به بیت کوین را نیز موجب میگردد. در شبکهی بیت کوین طولانیترین زنجیره به عنوان زنجیرهی اصلی انتخاب میشود اما در شبکهی اتریوم زنجیرهای که بیشترین تعداد آنکلها را دارا است به عنوان زنجیرهی اصلی انتخاب میگردد.
هدر بلاک(Block header)
در ابتدای این مقاله به هدر بلاک اشاره کردهایم. هدر بلاک بخشی از بلاک است که از هش بلاک والد، هش بلاکهای آنکل، آدرس حسابی که پاداش را دریافت میکند، سختی، شمارهی بلاک، محدودیت گس، مجموع گس استفاده شده توسط تراکنشهای بلاک، دادههای اضافی مرتبط با بلاک، تایم استمپ، میکس هش(MixHash)، نانس و … تشکیل میشود.
الزامات اجرای تراکنش
تمامی تراکنشهایی که در شبکهی اتریوم ارسال میشوند باید الزامات مشخصی را برآورده سازند که امضاء معتبر تراکنش، آر،ال،پی(RLP)(فرمتی برای رمزگذاری دادههای باینری است که در شبکهی اتریوم استفاده میگردد)، نانس معتبر تراکنش و محدودیت گس که باید بزرگتر و یا مساوی مقدار ذاتی گس(Intrinsic Gas) است که توسط تراکنش استفاده میشود. مقدار ذاتی گس به صورت زیر تعریف میشود:
در این رابطه مقدار از پیشتعیین شده برای اجرای تراکنش 21,000 گس است که با هزینهی گس برای ارسال دادههای تراکنش(4 گس به ازای هر بایت داده معادل با صفر و 68 گس برای هر بایت غیر صفر) جمع میگردد و در صورتیکه تراکنش برای ایجاد قرارداد در شبکهی اتریوم ارسال گردد 32,000 گس نیز به عنوان هزینه اضافه میشود.
حساب فرستندهی تراکنش باید موجودی کافی برای پوشش هزینهی اجرای تراکنش را در اختیار داشته باشد. در نهایت پس از کسر هزینهی اجرای تراکنش از حساب کاربر تراکنش اجرا میگردد.
شما میتوانید سوالات، نظرات و پیشنهادات خود را در بخش دیدگاه با ما به اشتراک بگذارید.