تفاوت بین معامله و تماس چیست؟

ساخت وبلاگ

تفاوت بین معامله و تماس چیست؟در برخی از رابط ها ، من می توانم از طریق تماس یا از طریق معاملات با قراردادها ارتباط برقرار کنم. تفاوت بین این دو چیست و آیا قراردادها نیز می توانند معاملات و تماس ها را انجام دهند؟

دنبال کردن 2،259 19 19 نشان نقره 40 40 نشان برنز از 30 ژانویه 2016 در 19:32 پرسید Mkoeppelma Mkoeppelma 7،416 8 8 نشان طلا 35 35 نشان نقره 48 48 نشان برنز

توجه داشته باشید برای اجتناب از سردرگمی: تماس در این سؤال نه تماس با کد و نه استحکام . call () ، که در حالت های قرارداد تغییراتی ایجاد می کند ، اما Web3. js API Web3. eth. call () ، که هیچ تغییری در حالت ایجاد نمی کند.

16 نوامبر 2017 در 11:06

2 پاسخ 2

مرتب شده توسط: تنظیم مجدد به طور پیش فرض

زنگ زدن

تماس یک دعوت محلی از یک تابع قرارداد است که هیچ چیزی را در blockchain پخش یا منتشر نمی کند.

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

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

JSON-RPC اساسی آن ETH_CALL است

معامله

معامله به شبکه پخش می شود ، توسط معدنچیان پردازش می شود و در صورت اعتبار ، در blockchain منتشر می شود.

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

این غیر همزمان است ، زیرا این امکان وجود دارد که هیچ معدنچی معامله را در یک بلوک قرار دهد (به عنوان مثال ، قیمت گاز برای معامله ممکن است خیلی پایین باشد). از آنجا که ناهمزمان است ، ارزش بازده فوری یک معامله همیشه هش معامله است. برای به دست آوردن "ارزش بازگشت" یک معامله به یک عملکرد ، باید از رویدادها استفاده شود (مگر اینکه مورد 4 مورد بحث در زیر باشد). برای ethers. js مثالی: گوش دادن به رویدادهای قرارداد با استفاده از ethers. js؟

API Web3. JS آن Web3. eth. SendTransaction است و اگر یک عملکرد استحکام ثابت نشود ، استفاده می شود.

JSON-RPC اساسی آن ETH_SENDTRANSACTION است

SendTransaction در صورت نیاز به فعل مورد استفاده قرار می گیرد ، زیرا واضح تر از معامله ساده است.

توصیه برای تماس ابتدا ، سپس SendTransaction

از آنجا که یک ارسال SendTransaction برای اتر هزینه دارد ، "آزمایش آبها" با صدور تماس ابتدا ، قبل از SendTransaction یک عمل خوب است. این یک روش رایگان برای اشکال زدایی و برآورد در صورت بروز هرگونه مشکلی در SendTransaction است ، به عنوان مثال در صورت بروز استثناء گاز از بین می رود.

این "خشک" معمولاً خوب کار می کند ، اما در بعضی موارد توجه داشته باشید که تماس یک تخمین است ، به عنوان مثال یک تابع قرارداد که blockhash قبلی را برمی گرداند ، بر اساس زمان انجام تماس ، نتایج متفاوتی را برمی گرداند و چه زمانی معامله است. در واقع استخراج شده است.

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

Case4: آیا قراردادها می توانند معاملات ایجاد کنند؟

4 مورد برای نحوه استفاده از عملکرد قرارداد وجود دارد.

در اینجا 4 مورد آورده شده است ، و 3 مورد اول در بالا پوشش داده شده است:

  1. فراخوانی مستقیم یک تابع قرارداد ، سرچشمه گرفتن از تماس
  2. فراخوانی مستقیم یک تابع قرارداد ، با SendTransaction سرچشمه گرفته است
  3. فراخوانی قرارداد یک تابع قرارداد ، سرچشمه با تماس

4- فراخوانی قرارداد از یک تابع قرارداد ، با SendTransaction سرچشمه گرفته است

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

معامله: قطعه ای از داده ، که توسط یک بازیگر خارجی امضا شده است. این یا یک پیام یا یک شیء خودمختار جدید را نشان می دهد. معاملات در هر بلوک از blockchain ثبت می شود.

در اوایل فوق ، بیان شد که برای به دست آوردن ارزش بازده یک عملکرد قرارداد ، از وقایع استفاده می شود ، که با SendTransaction سرچشمه گرفته است. این مربوط به Case2 است و صادق است. برای Case4 ، قرارداد به طور مستقیم ارزش بازده یک عملکرد قرارداد را بدست می آورد و می تواند از آن استفاده کند. در اینجا چگونه کاغذ زرد آن را به صورت پررنگ می گوید:

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

با این تعاریف از کاغذ زرد ، می توان دریافت که Case4 یک تماس پیام در یک معامله است (بنابراین تغییر دولت) ، هیچ لانه سازی معاملات وجود ندارد ، و اینکه یک واحد فعالیت در blockchain Ethereum همه در یک معامله واحد استاین ممکن است حاوی چندین تماس پیام باشد.

بروزرسانی: از آنجا که تماس با یک تابع می تواند مبهم باشد (آیا این یک ETH_CALL است یا ETH_SENDTRANSACTION؟) ، پیشنهادی برای ETH_SIMULATETRANSACTION وجود دارد.

فارکس بازار مدرن...
ما را در سایت فارکس بازار مدرن دنبال می کنید

برچسب : نویسنده : امین زندگانی بازدید : <-PostHit-> تاريخ : چهارشنبه 15 شهريور 1402 ساعت: 3:16