کیف پول اتریوم
سمیرا ابراهیم پور | 2018.01.07

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

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

انواع مختلف حساب های اتریوم

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

حساب های اتریوم به دو دسته تقسیم می شوند:

  • حساب های با مالکیت خارجی (بیرونی)
  • حساب های مبتنی بر قرارداد

( به طور خلاصه، حساب های با مالکیت بیرونی در واقع همان حساب های کیف پول شما هستند که با کلید خصوصی شما مدیریت می شوند؛ از این حساب ها با نام EOA که مخفف Externally Owned Accounts است یاد می شود؛ اما کنترل حساب های مبتنی بر قرارداد، از طریق کد آن قرارداد انجام می گیرد). در ادامه به بررسی این دو مورد می پردازیم.

حساب های با مالکیت خارجی (EOA)

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

حساب های با مالکیت خارجی شامل چهار ویژگی زیر می باشند:

  • موجودی آن ها اتر است.
  • می توانند تراکنش ارسال کنند (اتر جابجا کنند و یا کد یک قرارداد را فعال کنند).
  • کنترل و مدیریت آن ها از طریق کلیدهای خصوصی است.
  • هیچ کدی مختص به خود ندارند.

حساب های مبتنی بر قرارداد

حساب های مبتنی بر قرارداد شامل چهار ویژگی زیر می باشند:

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

تمام عملیات ها و کارها بر روی بلاکچین اتریوم، از طریق تراکنش هایی که از حساب ها ارسال می شوند در جریان هستند. هر بار که یک “حساب مبتنی بر قرارداد” تراکنشی دریافت می کند، کد آن حساب فعال می شود؛ این کد از یک سری پارامتر ورودی استفاده می کند تا به همان صورتی که از قبل برنامه ریزی شده بوده، اجرا شود؛ چگونه این پارامترهای ورودی به کد داده می شود؟ این پارامترها در قالب بخشی از آن تراکنش – که حساب دریافت کرده بود – وجود دارند.

کد قرارداد توسط ماشین مجازی اتریوم (Ethereum Virtual Machine) که روی همه نودها وجود دارد اجرا می شود؛ این کار (اجرای کد) به عنوان بخشی از وظیفه آن ها برای تایید بلاک های جدید محسوب می شود.

تراکنش ها و پیام ها چه چیزهایی هستند؟

در ادامه به بررسی چیستی تراکنش ها و پیام ها، تفاوت این دو و جزئیات مربوط به آن ها در شبکه اتریوم می پردازیم.

تراکنش ها (Transactions)

اصطلاح “تراکنش” اتر، به “بسته ای امضا شده از داده ها” اطلاق می شود؛ این بسته ی امضا شده از داده ها، پیامی را در خود ذخیره می کند که باید از یک حساب با مالکیت خارجی، به یک حساب دیگر بر روی بلاکچین ارسال شود.

تراکنش اتر شامل موارد زیر می شود:

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

  • دریافت کننده پیام
  • امضایی که ارسال کننده را تایید هویت می کند و قصد آن ها از ارسال پیام از طریق بلاکچین برای گیرنده را مشخص می کند.
  • گزینه VALUE (ارزش)؛ میزان wei مورد نظر برای ارسال از طرف فرستنده به گیرنده. (wei در اتریوم، مانند سنت در دلار و یا ساتوشی در بیتکوین است)
  • یک گزینه اختیاری برای اطلاعات؛ می تواند شامل پیامی شود که به قرارداد ارسال می شود.
  • گزینه GASLIMIT (حد سوخت)؛ مشخص کننده حداکثر تعداد مراحل محاسباتی است که اجرای تراکنش مجاز به عبور از آن ها است.
  • گزینه GASPRICE (قیمت سوخت)؛ مشخص کننده کارمزدی است که ارسال کننده به منظور پرداخت برای هر واحد از سوخت در نظر دارد.

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

پیام ها (Messages)

قراردادها قابلیت ارسال “پیام” به قراردادهای دیگر را دارند. پیام ها چیزهایی مجازی هستند که تنها در محیط اجرایی اتریوم وجود دارند. می توان آن ها را مثل فراخوانی توابع در نظر گرفت.

پیام ها شامل موارد زیر می شوند:

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

در واقع یک پیام، مانند یک تراکنش است؛ با این تفاوت که توسط یک قرارداد ساخته می شود و نه یک بازیگر بیرونی. یک پیام زمانی ساخته می شود که کدِ در حال اجرای یک قرارداد، آپکدهای CALL یا DELEGATECALL را اجرا کند؛ این ها به ساخت و اجرای یک پیام می پردازند. گاهی اوقات به این پیام ها “تراکنش های داخلی” یا “internal transaction” نیز گفته می شود (مانند نمونه آن در عکس بالا).

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

سوخت یا gas چیست؟

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

اتریوم یک محیط اجرایی بر روی بلاکچین دارد که به آن ماشین مجازی اتریوم یا Ethereum Virtual Machine می گویند. هر نود مشارکت کننده در شبکه، به عنوان بخشی از پروتکل تایید بلاک، این EVM را اجرا می کند؛ (EVM مخفف ماشین مجازی اتریوم است). آن ها تراکنش های لیست شده در بلاکی که در حال تایید آن هستند را مرور می کنند و کد را اجرا می کنند؛ چرا که فعال سازی یا به عبارتی دکمه فعال کردن آن کد، از طریق تراکنش درون EVM زده شده است.

این کار توسط تمام نودها انجام می گیرد. این موضوع -که اجرای قرارداد مکررا در تمام نودها صورت می گیرد- طبیعتا باعث گران شدن آن ها می شود؛ همین امر باعث می شود تا برای استفاده نکردن از بلاکچین برای محاسباتی که می تواند خارج از زنجیره (offchain) صورت بگیرند، انگیزه ایجاد شود.

در اتریوم، سوخت یا همان gas یک مقیاس اندازه گیری برای نیاز محاسباتی است. برای هر عملیات، یک مقدار ثابتی از سوخت مشخص شده است. برای مثال جمع کردن دو عدد، به اندازه 3 سوخت هزینه دارد؛ عدد سوخت مورد نیاز برای محاسبه یک هش، 30 می باشد؛ و یا ارسال یک تراکنش، 21000 سوخت هزینه دارد.

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

سوخت و هزینه تراکنش های اتر

هر تراکنش باید شامل حد سوخت (gas limit) و کارمزدی شود که به ازای هر واحد سوخت می خواهد بپردازد. استخراج کنندگان می توانند تصمیم بگیرند که چه تراکنشی را انتخاب کنند و کارمزدش را بگیرند. در واقع، امروزه تمام تراکنش ها توسط استخراج کنندگان انتخاب خواهند شد؛ اما کارمزد هر تراکنش مشخص می کند که چقدر زمان می برد تا آن تراکنش انتخاب شود.

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

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

بیشتر بخوانید:

مختصری در رابطه با اتریوم