مقالات اتریوم

حساب ها، تراکنش ها، سوخت و موارد دیگر در اتریوم (قسمت دوم)

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

این مقاله به گزارش کوین ایران و به نقل از وب سایت Hudson jameson برای درک مکانیزم برخی مفاهیم بنیادی تهیه شده است؛ مفاهیمی چون حساب ها، تراکنش ها، سوخت و نقشی که استخراج کنندگان در تعیین اندازه بلاک های اتریوم ایفا می کنند.

تخمین هزینه تراکنش

هزینه اتری یک تراکنش به دو فاکتور بستگی دارد:

  • gasUsed (سوخت استفاده شده)؛ همانطور که از نام آن پیداست، این مورد به میزان سوخت مصرف شده توسط تراکنش بر می گردد
  • gasPrice (قیمت سوخت)؛ قیمت یا هزینه هر واحد از سوخت مشخص شده برای تراکنش (این قیمت به اتر است)

در نتیجه: هزینه کلی = تعداد واحد سوخت مصرف شده * هزینه هر واحد سوخت

سوخت مصرف شده یا gasUsed

حساب ها، تراکنش ها، سوخت و موارد دیگر در اتریوم (قسمت دوم)

برای هر عملیاتی در EVM، مقدار سوخت مصرفی مشخصی در نظر گرفته شده است. “سوخت مصرف شده” مجموع تمام سوخت های مصرف شده برای تمام عملیات های اجرا شده است.

برای محاسبه هزینه سوخت، می توان از برخی API های تخمین استفاده کرد که البته باید در استفاده از آن ها احتیاط کرد.

قیمت سوخت یا gasPrice

یک کاربر، تراکنشی  را می سازد و امضا می کند؛ هر کاربر می تواند مشخص کند که gasPrice مورد نظرش چقدر است؛ این عدد می تواند صفر هم باشد. اکثر تراکنش ها قیمت سوختی معادل ۰.۰۵e12 wei دارند. در نتیجه متقاعد کردن یک استخراج کننده برای انتخاب تراکنشی با قیمت سوخت کمتر یا صفر، کمی دشوار است.

 مثالی از هزینه تراکنش

این مثال با اجازه تیم MyEtherWallet گفته می شود.

حساب ها، تراکنش ها، سوخت و موارد دیگر در اتریوم (قسمت دوم)

می توانید حد سوخت (gas limit) را مانند واحدهای سوخت ماشین (مقادیری همچون لیتر یا گالن( در نظر بگیرید. قیمت سوخت (gas price) را نیز می توانید مانند قیمت هر واحد از این سوخت ماشین در نظر بگیرید.

برای ماشین، به ازای هر گالن (هر واحد از سوخت ماشین) باید ۲.۵ دلار هزینه کنید. برای اتریوم، به ازای هر “سوخت” یا همان “gas” (هر واحد از سوخت شبکه اتریوم) باید ۲۰ GWEI هزینه کنید. (از این لینک می توانید هر اتر را به زیر مجموعه های آن تبدیل کنید: https://www.myetherwallet.com/helpers.html)

برای اینکه باک ماشین را پر کنید، باید ۲۵ دلار هزینه کنید؛ چرا که پر کردن باک، ۱۰ گالن سوخت نیاز دارد و هزینه هر گالن ۲.۵ دلار بود. پس برای اینکه باک تراکنش خود را در دنیای اتریوم پر کنید، باید ۲۱۰۰۰ واحد “سوخت” در آن بریزید ( یعنی ظرفیت باک تراکنش را ۲۱۰۰۰ در نظر بگیرید). این یعنی باید ۰.۰۰۰۴۲ اتر هزینه کنید. چرا که هزینه هر سوخت معادل ۲۰ GWEI بود.

در نتیجه کامزد کلی TX شما معادل است با ۰.۰۰۰۴۲ اتر.

ارسال توکن ها معمولا به ۵۰۰۰۰ الی ۱۰۰۰۰۰ سوخت نیاز دارد؛ این یعنی کارمزد شما به ۰.۰۰۱ الی ۰.۰۰۲ اتر افزایش پیدا می کند.

حد سوخت بلاک یا block gas limit چیست؟

حساب ها، تراکنش ها، سوخت و موارد دیگر در اتریوم (قسمت دوم)

یک حد سوخت برای عملیات ها داشتیم و یک حد سوخت برای بلاک داریم. این عدد مشخص کننده حداکثر مقدار سوخت مجاز در یک بلاک است تا مشخص کند چه تعداد تراکنش می تواند در آن جای بگیرد. برای مثال فرض کنید ۵ تراکنش داریم؛ هر تراکنش دارای حد سوخت (gas limit) معادل ۱۰، ۲۰، ۳۰، ۴۰ و ۵۰ است. اگر حد سوخت بلاک ۱۰۰ باشد، ۴ تراکنش اول می توانند در بلاک جای بگیرند.

همانطور که قبلا هم گفتیم، استخراج کنندگان انتخاب می کنند که کدام تراکنش ها را در بلاک جای دهند. پس ممکن است یک استخراج کننده دیگر تصمیم بگیرد دو تراکنش آخر (با حد سوخت ۵۰ و ۴۰) را در بلاک جای دهد؛ در اینصورت می تواند تراکنش اول را (که حد سوخت آن ۱۰ است) نیز در بلاک جای دهد.

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

حد سوخت بلاک را می توانید از این لینک مشاهده کنید: https://ethstats.net/

چه کسی درباره میزان حد سوخت بلاک تصمیم گیری می کند؟

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

حد سوخت بلاک چگونه تغییر می کند؟

استخراج کنندگان اتریوم از یک برنامه استخراج استفاده می کنند؛ برنامه هایی مثل ethminer که آن را به یک geth یا نود کلاینت اتریومParity  وصل می کند. geth و Parity دارای ویژگی ها و تنظیمماتی هستند که استخراج کنندگان امکان ایجاد تغییرات در آن ها را دارند.

گزینه های خط فرمانی geth برای استخراج را می توانید از این لینک مشاهده کنید: https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options

گزینه های Parity را نیز می توانید از لینک روبرو مشاهده کنید: https://github.com/paritytech/parity/wiki/Configuring-Parity#cli-options

DoS در شبکه اتریوم چیست؟

حساب ها، تراکنش ها، سوخت و موارد دیگر در اتریوم (قسمت دوم)

DoS مخفف Denial of Service یا همان منع سرویس است. قبلا صحبت ها و نظراتی درباره کاهش سرعت شبکه اتریوم، مسدود شدن و غیر قابل استفاده شدن آن وجود داشت.  از این کاهش سرعت، به عنوان یک “DoS” در شبکه اتریوم یاد می شود.
یک منع سرویس یا DoS ، زمانی در شبکه اتریوم رخ می دهد که مداوما بلاک ها پر شوند و تعداد زیادی تراکنش هم در حال انتظار باشند.

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

DoS های عمدی و مخرب

در پاییز ۲۰۱۶، اتریوم توسط فرد یا گروهی مورد حمله قرار گرفت؛ این حمله با نام حمله تراکنش های اسپم شناخته می شد.

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

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

DoS های غیر عمدی و غیر مخرب

حساب ها، تراکنش ها، سوخت و موارد دیگر در اتریوم (قسمت دوم)

این نوع از DoS یا منع سرویس زمانی رخ می دهد که شبکه دارای تعداد زیادی تراکنش در حال انتظار باشد. همین موضوع باعث می شود تا تراکنش ها برای مدت زمانی غیر معمول و طولانی در انتظار بمانند. آی سی او ها (ICO) یا همان حراج اولیه کوین ها، باعث شده بود که شبکه دچار چنین مشکلی شود.

چرا حد سوخت بلاک حتی وقتی که بلاک ها پر هستند تغییر نمی کند؟

پروتکل اتریوم یک مکانیزم درونی دارد که استخراج کنندگان می توانند بر روی حد سوخت رای دهی کنند؛ در نتیجه حجم بلاک ها می تواند بدون آنکه نیازی به یک هاردفورک (انشعاب سخت) باشد، افزایش بیابد. این مکانیزم در واقع با یک استراتژی پیشفرض ادغام شده که در آن استخراج کنندگان می توانند روی حد گاز که حداقل مقدار آن ۴.۷ میلیون است رای بدهند؛
اما هدفش می تواند ۱۵۰% از میانگین سوخت مصرف شده اخیر باشد؛ این امر باعث می شود تا حجم بلاک ها بصورت طبیعی و با افزایش درخواست ها (تعداد تراکنش ها) افزایش یابد؛ این در حالی است که سقفی برای مقاصد ضد اسپمی هم در نظر گرفته می شود.

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

استخراج کنندگان باید چه کاری انجام دهند؟

استخراج کنندگان می توانند تنظیمات خود را در geth یا parity به حالت قابل تطبیق برگردانند.

توجه داشته باشید که موارد زیر از پستی در Reddit برداشته شده و مقادیر آن می تواند با عددهای بالاتر نیز تنظیم شوند.

Geth
تنظیمات پیشنهاد شده:

about ethereum network pt2 5

–targetgaslimit  حداقل میزان سوخت برای بلاک ها را مشخص می کند (مقدار پیشفرض: ۴۷۱۲۳۸۸) (این مقدار بصورت دستی تنظیم می شود)

–gasprice نمایانگر حداقل قیمت سوخت قابل پذیرش برای استخراج یک تراکنش است (مقدار پیشفرض: ۲۰۰۰۰۰۰۰۰۰۰) (اگر قیمت سوخت یک تراکنش از این عدد کمتر باشد، این استخراج کننده آن را نمی پذیرد)

Parity
تنظیمات پیشنهاد شده

حساب ها، تراکنش ها، سوخت و موارد دیگر در اتریوم (قسمت دوم)

–gas-floor-target  مشخص کننده میزان سوخت به ازای هر بلاک است که در زمان ساخت یک بلاک جدید باید به آن عدد برسیم. (پیشفرض: ۴۷۰۰۰۰۰)

–gas-cap  نشان دهنده آن است که توجه به حجم تراکنش، حد سوخت را به ازای هر بلاک چقدر افزایش می دهیم. (پیشفرض: ۶۲۸۳۱۸۴)

–gasprice حداقل میزان Wei به ازای هر سوخت (GAS) که باید برای هر تراکنش به منظور پذیرفته شدن در یک بلاک پرداخت شود.

سایر گزینه های پیش رو

لطفا برای اطلاع از سایر گزینه ها و امکانات پیش روی استخراج کنندگان به صفحه CLI برای geth و Parity به آدرس زیر مراجعه کنید. طی این گزینه ها، استخراج کنندگان می توانند تنظیمات مورد نظر خود را برای بهینه سازی انجام دهند.

Geth: https://github.com/ethereum/go-ethereum/wiki/Command-Line-Options

Parity:https://github.com/paritytech/parity/wiki/Configuring-Parity#cli-options

 

https://coiniran.com/?p=17976
0 0 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از
guest
2 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
بختیاری
بختیاری
6 سال قبل

مقاله مفیدی بود .سپاس از نویسنده گرامی…

پویا علیخانی
پویا علیخانی
6 سال قبل
پاسخ به  بختیاری

با تشکر از بازخورد ارزشمندتان.

دکمه بازگشت به بالا
2
0
دیدگاه خود را با کوین ایران به اشتراک بگذارید!x