معامله

ساخت وبلاگ

معامله به طور کلی یک واحد کار را در یک سیستم پایگاه داده نشان می دهد. در مورد blockchain ، یعنی زمانی که عملی امضا شده توسط یک حساب وضعیت خود را تغییر می دهد.

انواع معامله

نماد از انواع مختلف معامله پشتیبانی می کند. به عنوان مثال ، معاملات برای انتقال موزائیک ها بین حساب ها ، پیام ها یا پیکربندی مالکیت حساب ها (از جمله استفاده از قوانین multisig) و موارد دیگر وجود دارد.

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

& varr ؛ اندازه: 2 بایت = 0x2
طرح

شمارش انواع معاملات

0x414c account_key_link 0x424c node_key_link 0x4141 جمع شده_ کاملی 0x4241 جمع شده_بند 0x4143 RETING_KEY_LINK 0x4243 vrf_key_link 0x4148 HASH_LOCK 0x4152 مخفی 0x4252 مخفی 0x4144 حساب_متاداتا 0x4244 mosaic_metadata 0x4344 namespace_metadata 0x414d موزائیک_دفین 0x424d mosaic_supply_change 0x434d mosaic_supply_revocation 0x4155 multisig_account_modification 0x424e ADDREADE_ALIAS 0x434e موزائیک_الیاس 0x414e namespace_registration 0x4150 account_address_restriction 0x4250 Account_mosaic_restriction 0x4350 account_operation_restriction 0x4251 mosaic_address_restriction 0x4151 mosaic_global_restriction 0x4154 انتقال

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

تعریف یک معامله

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

همه معاملات باید مهلت و MAX_FEE را تعریف کنند:

  • مهلت: یک معامله قبل از رسیدن به مهلت خود ، یک پنجره زمانی دارد که باید پذیرفته شود. معامله با رسیدن به مهلت پایان می یابد و همه گره ها معامله را رد می کنند. به طور پیش فرض ، SDK مهلت را 2 ساعت تعیین می کند ، اما می تواند تا 6 ساعت (یا 48 برای معاملات پیوند شده کل) تمدید شود.
  • MAX_FEE: حداکثر مقدار ارز شبکه ای که فرستنده معامله مایل به پرداخت آن است تا معامله را پذیرفته شود. مستندات بعدی به شما نشان می دهد که چگونه می توانید مقدار بهینه max_fee را تنظیم کنید.

مخزن CatBuffer Schemas نحوه سریال سازی هر نوع معامله را مشخص می کند. در ترکیب با ژنراتورهای Catbuffer ، توسعه دهندگان می توانند کلاس های سازنده را برای مجموعه ای از زبانهای برنامه نویسی تولید کنند.

توصیه می کنیم از SDK برای تعریف معاملات جدید استفاده کنید.

// با آدرس گیرنده جایگزین کنید محاصره کردن خرمن = "TB6Q5E-YACWBP-CXKGIL-I6XWCH-DRFLTB-KUK34I-IJQ '; محاصره کردن آدرس گیرنده = نشانی.ایجاد FromRawAddress(خرمن); محاصره کردن انتقال = انتقال.ايجاد كردن( ضرب الاجل.ايجاد كردن(دوره تعدیل), آدرس گیرنده, [واحد پول.دفع کننده(10)], جبهه.ايجاد كردن("این یک پیام آزمایشی است"), نوع شبکه, uint64.از اوج(2000000), ); 

امضای معامله

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

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

یک حساب باید مراحل بعدی را برای امضای معامله دنبال کند:

  1. بایت های امضا را دریافت کنید ، که همه بایت معامله به جز اندازه ، امضا و امضا کننده هستند.
  2. دریافت HAH BLOCK BLOCK NEMESIS. می توانید node_url /node /info 'را پرس و جو کنید و مقدار meta. networkGenerationHash را کپی کنید.
  3. هش نسل بلوک Nemesis را به بایت های امضاء بپردازید.
  4. رشته حاصل را با کلید خصوصی امضا کننده امضا کنید. این به شما امضای معامله می دهد.
  5. امضای امضا کننده و کلید عمومی را به معامله اختصاص دهید تا بار پرداخت را بدست آورید.
  6. هش معامله را با استفاده از الگوریتم Hashing Sha3-512 در 32 بایت اول امضا ، کلید عمومی امضا کننده ، هش تولید بلوک Nemesis و بار باقیمانده معامله محاسبه کنید.
// با کلید خصوصی فرستنده جایگزین کنید محاصره کردن کلید خصوصی = '1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 11; محاصره کردن حساب = حساب.ایجاد fromPrivateKey(کلید خصوصی, نوع شبکه); محاصره کردن ترانزیت امضاء = حساب.امضا کردن( انتقال, شبکه, ); کنسول.ورود به سیستم('ظرفیت ترابری:', ترانزیت امضاء.ظرفیت ترابری); کنسول.ورود به سیستم("هش معامله:", ترانزیت امضاء.هش); 

اعلام معامله

معاملات امضا شده آماده اعلام به شبکه هستند. شما می توانید از سرویس SDK TransactionHttp استفاده کنید یا بار را به درخواست نقطه پایانی معامله اضافه کنید.

محاصره کردن بازپرداخت معاملات = مخزن.CreatetransactionRepository(); محاصره کردن واکنش = در انتظار بازپرداخت معاملات .اعلام(ترانزیت امضاء) .قول دادن(); کنسول.ورود به سیستم(واکنش); 
cur l-x pu t-h"نوع محتوا: برنامه/json"-d''http: // localhost: 3000/معامله

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

../_images/transaction-cycle.png

اعتبار سنجی

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

اعتبار دوم قبل از افزودن معامله در یک بلوک برداشت شده اتفاق می افتد. در صورت موفقیت ، هاروستر معامله را در یک بلوک ذخیره می کند و معامله به وضعیت تأیید شده می رسد. در این ایالت ، معامله به طور رسمی در دفترچه blockchain ثبت می شود ، اما هنوز به نهایی نرسیده است.

در شرایط خاص ، مانند خرابی شبکه یا پارتیشن ، بلوک های اخیراً تأیید شده را می توان به عقب برگرداند. از این رو ، معاملات تأیید شده که نهایی نشده اند توسط شبکه به رسمیت شناخته می شوند اما تغییر ناپذیر نیستند زیرا هنوز می توان آنها را معکوس کرد.

برای اینکه یک بلوک تغییر ناپذیر باشد ، باید روند نهایی سازی را انجام دهد. پس از نهایی شدن بلوک ، بلوک و معاملات شامل به طور دائم در دفترچه blockchain ثبت می شوند.

دریچه گاز

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

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

راهنماهای مرتبط

  • تبدیل اعلامیه معامله ناهمزمان به یک قطعه مفید همزمان برای اعلام معامله و صبر کنید تا این مسئله تأیید شود.
استراتژی برای تجارت گزینه های...
ما را در سایت استراتژی برای تجارت گزینه های دنبال می کنید

برچسب : نویسنده : فریبا کامران بازدید : 28 تاريخ : چهارشنبه 15 شهريور 1402 ساعت: 20:07