معاملات

  • 2021-11-1

تراکنش ها دستورالعمل هایی هستند که به صورت رمزنگاری از حساب ها امضا می شوند. یک حساب برای به‌روزرسانی وضعیت شبکه اتریوم، تراکنش را آغاز می‌کند. ساده ترین تراکنش انتقال ETH از یک حساب به حساب دیگر است.

برای کمک به درک بهتر این صفحه، توصیه می کنیم ابتدا اکانت ها و مقدمه ما در مورد اتریوم را بخوانید.

معامله چیست؟

تراکنش اتریوم به اقدامی اشاره دارد که توسط یک حساب تحت مالکیت خارجی آغاز می شود، به عبارت دیگر حسابی که توسط یک انسان مدیریت می شود، نه یک قرارداد. برای مثال، اگر باب آلیس 1 اتریوم را ارسال کند، حساب باب باید بدهکار شود و حساب آلیس باید بستانکار شود. این عمل تغییر وضعیت در یک تراکنش انجام می شود.

Diagram showing a transaction cause state change

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

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

تراکنش ها مستلزم کارمزد هستند و باید در یک بلوک معتبر گنجانده شوند. برای ساده‌تر کردن این مرور کلی، هزینه‌های گاز و اعتبارسنجی را در جای دیگری پوشش می‌دهیم.

تراکنش ارسالی شامل اطلاعات زیر است:

  • گیرنده - آدرس دریافت کننده (اگر حساب خارجی باشد، تراکنش ارزش را منتقل می کند. اگر حساب قراردادی باشد، تراکنش کد قرارداد را اجرا می کند)
  • امضا - شناسه فرستنده. این زمانی ایجاد می شود که کلید خصوصی فرستنده تراکنش را امضا کند و تأیید کند که فرستنده این تراکنش را مجاز کرده است
  • nonce - یک شمارنده متوالی افزایشی که شماره تراکنش را از حساب نشان می دهد
  • مقدار - مقدار ETH برای انتقال از فرستنده به گیرنده (در WEI، نام ETH)
  • داده - فیلد اختیاری برای گنجاندن داده های دلخواه
  • gasLimit - حداکثر مقدار واحدهای گازی که می تواند توسط معامله مصرف شود. واحدهای گاز نشان دهنده مراحل محاسباتی هستند
  • maxPriorityFeePerGas - حداکثر مقدار گازی که باید به عنوان نوک اعتبارسنجی درج شود
  • maxFeePerGas - حداکثر مقدار گازی که مایل به پرداخت برای تراکنش است (شامل baseFeePerGas و maxPriorityFeePerGas)

گاز اشاره ای به محاسبات مورد نیاز برای پردازش تراکنش توسط یک اعتبارسنجی است. کاربران باید برای این محاسبه هزینه ای بپردازند. gasLimit و maxPriorityFeePerGas حداکثر کارمزد تراکنش پرداخت شده به اعتبارسنجی را تعیین می کنند. بیشتر در مورد گاز

شی تراکنش کمی شبیه به این خواهد بود:

اما یک شیء معامله باید با استفاده از کلید خصوصی فرستنده امضا شود. این ثابت می کند که معامله فقط می تواند از طرف فرستنده انجام شود و به طرز کلاهبرداری ارسال نشده است.

یک مشتری Ethereum مانند GETH این روند امضای را اداره می کند.

  • RAW معامله امضا شده در پیشوند طول بازگشتی (RLP) فرم رمزگذاری شده
  • TX معامله امضا شده به فرم JSON است

با هش امضا ، معامله را می توان به صورت رمزنگاری اثبات کرد که از فرستنده آمده و به شبکه ارسال می شود.

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

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

بقیه Calldata آرگومان هاست که در مشخصات ABI مشخص شده است.

به عنوان مثال ، اجازه می دهیم به این معامله نگاه کنیم. برای دیدن اطلاعات بیشتر برای دیدن CallData از روی کلیک استفاده کنید.

انتخاب عملکرد 0xa9059cbb است. چندین کارکرد شناخته شده با این امضای وجود دارد. در این حالت کد منبع قرارداد در Etherscan بارگذاری شده است ، بنابراین می دانیم که عملکرد انتقال است (آدرس ، UINT256).

بقیه داده ها:

با توجه به مشخصات ABI ، مقادیر عدد صحیح (مانند آدرس ها ، که عدد صحیح 20 بایت هستند) در ABI به عنوان کلمات 32 بایت ظاهر می شوند ، که در قسمت جلوی آن با صفرها قرار گرفته اند. بنابراین می دانیم که آدرس 4F6742BADB049791CD9A37EA913F2BAC38D01279 است. مقدار 0x3B059F4 = 990206452 است.

انواع معاملات

در Ethereum چند نوع معاملات مختلف وجود دارد:

  • معاملات منظم: معامله ای از یک حساب به حساب دیگر.
  • معاملات استقرار قرارداد: معامله بدون آدرس "به" ، جایی که از قسمت داده برای کد قرارداد استفاده می شود.
  • اجرای قرارداد: معامله ای که با یک قرارداد هوشمند مستقر در تعامل است. در این حالت ، آدرس "به" آدرس قرارداد هوشمند است.

همانطور که گفته شد ، معاملات برای اجرای گاز هزینه دارد. معاملات انتقال ساده به 21000 واحد گاز نیاز دارد.

بنابراین برای اینکه باب بتواند Alice 1 ETH را در Basefeepergas از 190 GWEI و MaxPriorityFeepergas از 10 GWEI ارسال کند ، باب نیاز به پرداخت هزینه زیر دارد:

حساب با ب-1. 0042 ETH (1 ETH برای آلیس + 0. 0042 ETH در هزینه گاز)

حساب آلیس اعتبار +1. 0 ETH اعتبار خواهد یافت

هزینه پایه سوزانده می شو د-0. 00399 ETH

اعتبار سنج نکته +0. 000210 ETH را نگه می دارد

گاز برای هر تعامل قرارداد هوشمند نیز مورد نیاز است.

Diagram showing how unused gas is refunded

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

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

پس از ارسال تراکنش، موارد زیر رخ می دهد:

  1. پس از ارسال تراکنش، رمزنگاری هش تراکنش ایجاد می کند: 0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017
  2. سپس تراکنش به شبکه پخش می شود و در یک استخر با بسیاری از تراکنش های دیگر گنجانده می شود.
  3. یک اعتبارسنجی باید تراکنش شما را انتخاب کند و آن را در یک بلوک قرار دهد تا تراکنش را تأیید کند و آن را "موفق" بداند.
  4. با گذشت زمان، بلوک حاوی تراکنش شما به "قابل قبول" و سپس "نهایی" ارتقا می یابد. این به‌روزرسانی‌ها باعث می‌شود که مطمئن شوید که تراکنش شما موفقیت‌آمیز بوده و هرگز تغییر نخواهد کرد. هنگامی که یک بلوک "نهایی" می شود، تنها با حمله ای که میلیاردها دلار هزینه دارد، قابل تغییر است.

آستین را تماشا کنید که شما را از طریق تراکنش‌ها، گاز و استخراج معادن راهنمایی می‌کند.

تایپ پاکت معامله

اتریوم در ابتدا یک فرمت برای تراکنش ها داشت. هر تراکنش حاوی nonce، قیمت گاز، محدودیت گاز، آدرس، مقدار، داده، v، r و s بود. این فیلدها با RLP کدگذاری شده اند و چیزی شبیه به این هستند:

RLP([nonce, gasPrice, gasLimit, to, value, data, v, r, s])

اتریوم به گونه‌ای تکامل یافته است که از چندین نوع تراکنش پشتیبانی می‌کند تا امکان پیاده‌سازی ویژگی‌های جدید مانند لیست‌های دسترسی و EIP-1559 بدون تأثیر بر قالب‌های تراکنش قدیمی را فراهم کند.

EIP-2718: Typed Transaction Envelope یک نوع تراکنش را تعریف می کند که یک پاکت برای انواع تراکنش های آینده است.

EIP-2718 یک پاکت عمومی جدید برای تراکنش های تایپ شده است. در استاندارد جدید، معاملات به صورت زیر تفسیر می شوند:

جایی که فیلدها به صورت زیر تعریف می شوند:

  • TransactionType - عددی بین 0 و 0x7f، برای مجموع 128 نوع تراکنش ممکن.
  • TransactionPayload - یک آرایه بایت دلخواه که توسط نوع تراکنش تعریف شده است.

منبعی از جامعه را می شناسید که به شما کمک کرده است؟این صفحه را ویرایش کنید و آن را اضافه کنید!

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.