هزینه استقرار قرارداد هوشمند در اتریوم

ایجاد یک قرارداد هوشمند معمولاً بین 10 تا 2000 دلار هزینه دارد، به شرطی که قیمت اتریوم بین 1500 تا 2000 دلار باشد. سه عامل اصلی این هزینه را تعیین می‌کنند:

  1. قیمت اتریوم،

  2. اندازه قرارداد کامپایل شده بر حسب بایت،

  3. قیمت فعلی گس (Gas) در شبکه اتریوم.

در مجموع، شش مؤلفه مختلف وجود دارد که تعیین می‌کنند چه مقدار گس برای استقرار قرارداد مورد نیاز است. شرایط بازار و وضعیت فعلی شبکه، قیمت دلاری گس را مشخص می‌کنند. در این مقاله، تمام این مقادیر را به‌طور کامل بررسی می‌کنیم.

هزینه استقرار قرارداد هوشمند

برای استقرار یک قرارداد هوشمند در شبکه اتریوم، هزینه گس از چند بخش اصلی تشکیل می‌شود:

  1. همه تراکنش های اتریوم باید مبلغ ثابتی معادل 21,000 گس پرداخت کنند.

  2. ایجاد یک قرارداد جدید، به‌صورت ثابت 32,000 گس هزینه دارد.

  3. برای هر متغیر ذخیره سازی (storage variable) که مقداردهی می‌کنید، باید 22,100 گس پرداخت شود.

  4. در داده های تراکنش (transaction data)، هر بایت صفر 4 گس مصرف می‌کند، و هر بایت غیرصفر 16 گس.

  5. اجرای هر دستور (bytecode) در مرحله ابتدایی سازی (initialization) نیز هزینه ای دارد که به نوع دستور بستگی دارد.

  6. در نهایت، برای هر بایت کد نهایی که در بلاکچین ذخیره می‌شود، باید 200 گس به ازای هر بایت پرداخت کنید.

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

اسکرین شات ریمیکس هزینه گس برای ایجاد قرارداد هوشمند

طبق اطلاعات ارائه‌شده در محیط Remix، هزینه استقرار این قرارداد برابر با 66,862 گس بوده است. در این مقاله، این مقدار را به‌صورت دقیق تجزیه و تحلیل می‌کنیم.

در تنظیمات، کانستراکتور (constructor) را به‌صورت payable تعریف کردیم و همچنین بهینه سازی (optimizer) را روی 200 بار اجرا تنظیم کردیم. این دو اقدام باعث شدند حجم نهایی قرارداد کاهش پیدا کند.

حالا بیایید مجموع هزینه‌ها را بررسی کنیم:

  • 21,000 گس برای اجرای تراکنش استقرار

  • 32,000 گس برای فرآیند ایجاد قرارداد

  • جمع کل تا اینجا: 53,000 گس

بنابراین هنوز باید 13,862 گس دیگر را بررسی کنیم تا بتوانیم هزینه نهایی 66,862 گس را به‌طور کامل توضیح دهیم.

هزینه گس مربوط به بایت کد تراکنش (tx.data)

بایت کد تراکنش برای استقرار قرارداد به صورت زیر بود:

هر دو کاراکتر هگزادسیمال نشان‌دهنده یک بایت هستند. برای خوانایی بهتر، می‌توانیم بین آن‌ها فاصله قرار دهیم. برای این کار، از کد پایتون زیر استفاده می‌کنیم:
خروجی این کد به صورت زیر است:
هر بایت صفر (00) معادل 4 گس و هر بایت غیرصفر معادل 16 گس مصرف می‌کند. برای محاسبه تعداد آن‌ها می‌توانیم از این اسکریپت پایتون استفاده کنیم:

نتیجه اجرای این کد:

  • 75 بایت غیر صفر → 75 × 16 = 1,200 گس

  • 5 بایت صفر → 5 × 4 = 20 گس

جمع این دو مقدار می‌شود 1,220 گس بابت بایت‌کد تراکنش.

حال بیایید هزینه کلی تا این مرحله را محاسبه کنیم:

  • 21,000 گس برای اجرای تراکنش

  • 32,000 گس برای ایجاد قرارداد

  • 1,220 گس برای داده های تراکنش

جمع کل: 54,220 گس

ما هنوز باید 12,642 گس دیگر را تحلیل کنیم تا به مجموع هزینه اعلام‌شده 66,862 گس برسیم.

کد استقرار (Deployment Code)

حالا دوباره به بایت کد نگاه می‌کنیم:

قسمت بولد شده، همان کد نهایی قرارداد است که در بلاکچین ثبت می‌شود (deployed bytecode). بایت‌کدی که قبل از آن قرار دارد، به عنوان کد اولیه استقرار (initialization code) شناخته می‌شود.

برای محاسبه هزینه این بخش، باید تعداد بایت‌های کد مستقرشده را در 200 گس ضرب کنیم؛ زیرا این کد به‌صورت دائمی در وضعیت شبکه اتریوم ذخیره می‌شود و نسبت به داده‌های تراکنش، هزینه بالاتری دارد. درک این مفاهیم برای افرادی که در مسیر آموزش برنامه نویسی بلاکچین هستند، اهمیت زیادی دارد، چون نشان می‌دهد چگونه جزئیات فنی بر هزینه نهایی قرارداد اثر می‌گذارد.

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

خروجی این کد:
63 بایت

در نتیجه:

  • 63 × 200 = 12,600 گس بابت کد مستقرشده

اکنون تمام هزینه ها را با هم جمع‌بندی می‌کنیم:

بخش هزینه گس
اجرای تراکنش 21,000
ایجاد قرارداد 32,000
داده های تراکنش (bytecode tx.data) 1,220
کد نهایی مستقرشده 12,600
جمع کل 66,820

ما تا اینجا فقط 42 گس کمتر از عدد نهایی یعنی 66,862 هستیم. این تفاوت اندک ممکن است به خاطر عملیات داخلی ریز یا اختلاف‌های جزئی در ارزیابی برخی دستورات ماشین مجازی اتریوم (EVM) باشد که در تخمین کلی محاسبه نشده‌اند.

هزینه اجرای بایت کد در زمان استقرار قرارداد

علاوه بر تمام هزینه‌هایی که تا اینجا محاسبه کردیم، اجرای بایت‌کد ابتدایی قرارداد (Initialization Bytecode) نیز باید به‌طور جداگانه در نظر گرفته شود:

برای درک بهتر این کد، می‌توانیم از ابزار EVM Playground استفاده کنیم تا معادل دستورهای ماشین مجازی اتریوم (EVM) را ببینیم:

دستور شرح هزینه گس
PUSH1 0x80 قراردادن مقدار 0x80 در استک 3 گس
PUSH1 0x40 قراردادن مقدار 0x40 در استک 3 گس
MSTORE ذخیره مقدار در حافظه 12 گس
PUSH1 0x3f مقداردهی به طول کد 3 گس
DUP1 تکرار مقدار بالای استک 3 گس
PUSH1 0x11 آدرس شروع کپی کد 3 گس
PUSH1 0x00 آدرس مقصد حافظه 3 گس
CODECOPY کپی کردن کد به حافظه 9 گس
PUSH1 0x00 آماده سازی برای خروج 3 گس
RETURN بازگرداندن کد به بلاکچین 0 گس
INVALID اجرا نمی‌شود (بی‌اثر)

مجموع هزینه اجرای این بایت‌کد برابر است با 42 گس. Debugger در محیط Remix مقدار دقیق این عدد را هنگام اجرای بایت کد به ما نشان داد.

اشکال‌زدایی گس (gas) در استقرار قرارداد هوشمند

و در اینجا به پایان رسیدیم؛ حالا تمام اجزای مربوط به هزینه استقرار یک قرارداد هوشمند را بررسی و محاسبه کردیم.

در ادامه، جمع‌بندی نهایی را مشاهده می‌کنید:

بخش هزینه گس
اجرای تراکنش 21,000
فرآیند ایجاد قرارداد 32,000
هزینه داده های بایت کد (tx.data) 1,220
ذخیره سازی کد نهایی در بلاکچین 12,600
اجرای بایت کد اولیه استقرار 42
جمع کل 66,862 گس

نکته‌ای که باید در نظر داشته باشید این است که اگر در کانستراکتور (constructor) متغیرهایی از نوع ذخیره سازی (storage) مقداردهی کنیم، این هزینه به‌مراتب بیشتر خواهد شد. برای هر متغیر باید 22,100 گس به‌صورت جداگانه پرداخت شود. با این حال، برای حفظ سادگی و تمرکز این راهنما، از بررسی آن صرف‌نظر کردیم.

برای اطلاع از روش‌های کاهش هزینه استقرار، می‌توانید مقاله ما با عنوان بهینه سازی گس در سالیدیتی را مطالعه کنید. تمام ارقام مربوط به هزینه گس در این مقاله، بر اساس مستندات رسمی اتریوم یعنی Ethereum Yellow Paper استخراج شده‌اند.

تبدیل گس به دلار

برای محاسبه هزینه دلاری از روی واحد گس (gas)، می‌توانیم از فرمول زیر استفاده کنیم:

هزینه (دلار) = (تعداد گس × قیمت گس بر حسب gwei × قیمت اتریوم بر حسب دلار) ÷ 1,000,000,000

قیمت گس بر حسب gwei را می‌توانید از وب‌سایت‌هایی مثل EthGasStation یا Etherscan دریافت کنید.

در این مثال، اگر فرض کنیم:

  • قیمت اتریوم: 1000 دلار

  • قیمت گس: 20 gwei

  • تعداد گس مصرف‌شده: 66,862

محاسبه به شکل زیر خواهد بود:

در نتیجه، هزینه استقرار این قرارداد تقریباً برابر با 1.34 دلار خواهد بود.

5/5 - (1 امتیاز)

راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.

آموزش گام به گام برنامه نویسی اندروید با B4A (پروژه محور)
  • انتشار: ۵ مرداد ۱۴۰۴

دسته بندی موضوعات

آخرین محصولات فروشگاه

مشاهده همه

نظرات

بازخوردهای خود را برای ما ارسال کنید