هدف از این نمونه تخمین هزینه گاز یک معامله ساده و اصلاح مقادیر تعیین شده گاز و قیمت گاز است.
اتریوم و گاز: پرایمر
گاز سیستم قیمت گذاری است که برای اجرای تراکنش یا قرارداد در اتریوم استفاده می شود. سیستم گاز تفاوت زیادی با استفاده از کیلووات ساعت برای اندازه گیری مصرف برق خانگی ندارد. یک تفاوت با بازار واقعی انرژی این است که مبتکر معامله قیمت گاز را تعیین می کند که معدنچی می تواند آن را بپذیرد یا نه، این باعث پیدایش بازاری در اطراف گاز می شود. شما می توانید سیر تحول قیمت گاز را در آدرس زیر مشاهده کنید: https://etherscan. io/chart/gasprice.
قیمت گاز به ازای هر تراکنش یا هر قرارداد برای مقابله با ماهیت کامل تورینگ اتریوم و EVM آن (کد ماشین مجازی اتریوم) تنظیم شده است – ایده این است که از حلقه های بی نهایت جلوگیری شود. اگر اتر کافی در حساب برای انجام تراکنش یا پیام وجود نداشته باشد، نامعتبر تلقی می شود. ایده این است که حملات انکار سرویس را از حلقههای بینهایت متوقف کنیم، کارایی کد را تشویق کنیم – و مجبور کنیم مهاجم برای منابعی که استفاده میکند، از پهنای باند گرفته تا محاسبات CPU تا ذخیرهسازی، بپردازد.
در اینجا شرایط مورد نیاز برای تعریف هزینه گاز تراکنش وجود دارد:
محدودیت گاز به حداکثر مقدار بنزینی که مایلید برای یک معامله خاص خرج کنید اشاره دارد.
قیمت گاز به مقدار اتری که مایلید برای هر واحد گاز بپردازید اشاره دارد و معمولاً با "Gwei" اندازه گیری می شود.
ارسال تراکنش بدون اطلاع از هزینه آن در گاز دشوار خواهد بود، خوشبختانه اتریوم راه هایی را برای به دست آوردن تخمین گاز قبل از ارسال تراکنش ارائه می دهد.
مقاله زیر نحوه پیش بینی هزینه تراکنش ارسال نشده را با برگرداندن یک برآورد توضیح می دهد.
یک کلمه احتیاط
به دلیل کامل بودن تورینگ EVM، نوشتن توابعی که مسیرهای کد متفاوتی با هزینههای گاز بسیار متفاوت دارند، آسان است. برای مثال، یک تابع میتواند مسیرهای کد متفاوتی را با توجه به مقدار متغیر حالت جهانی انتخاب کند. مسیر کد واقعی گرفته شده در تابع تا زمان اجرای تراکنش مشخص نیست. بنابراین برآورد گاز فقط می تواند تقریبی از هزینه واقعی یک معامله را ارائه دهد.
با استفاده از زمین بازی Nethereum در لینک زیر می توانید کد زیر را مستقیماً در مرورگر خود اجرا کنید:
راه اندازی سریع محیط
Web3 یک پوشش تعاملی ساده با مشتریان اتریوم ارائه می دهد. برای ایجاد یک نمونه از Web3، باید حساب خود و uri RPC مشتری اتریوم را تهیه کنیم. در این سناریو، ما از زنجیره آزمایشی عمومی Nethereum، روی RPC پیشفرض "http://testchain. nethereum. com:8545" استفاده خواهیم کرد.
تنظیم و استقرار قرارداد
ابتدا بیایید قراردادهای هوشمند خود را BYTECODE، تعاریف توابع و قرارداد خود را اجرا کنیم.
تنظیم آدرس فرستنده
انتقال رمز
انجام یک انتقال وضعیت بلاک چین را تغییر می دهد، بنابراین در این سناریو باید با استفاده از تعریف TransferFunction یک TransactionHandler ایجاد کنیم.
در پیام انتقال، آدرس گیرنده To و TokenAmount را برای انتقال اضافه می کنیم.
مرحله آخر این است که درخواست را ارسال کنید، منتظر بمانید تا رسید "ماین" شود و در بلاک چین گنجانده شود.
قیمت گاز
Nethereum به طور خودکار GasPrice را در صورت عدم ارائه با استفاده از تماس "GasPrice" مشتریان تنظیم می کند که میانگین قیمت گاز را از بلوک های قبلی ارائه می دهد.
اگر میخواهید کنترل بیشتری روی GasPrice داشته باشید، این موارد را میتوانید در FunctionMessages و DeploymentMessages تنظیم کنید.
GasPrice در "WEI" تنظیم شده است که کمترین واحد در اتریوم است ، بنابراین اگر ما به واحدهای معمول "GWEI" عادت کنیم ، این امر باید با استفاده از برنامه های تبدیل Nethereum تبدیل شود.
تخمین گاز
Nethereum تخمین خودکار از کل گاز لازم برای انجام معامله عملکرد را با فراخوانی EthestimateGas در داخل با "CallInput" انجام می دهد.
در صورت لزوم ، این کار می تواند به صورت دستی ، با استفاده از TransactionHandler و عملکرد "انتقال" انجام شود.
اکنون معامله مقدار صحیحی از گاز را در گاز مناسب دارد:
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -->
Nethereum تحت مجوز MIT (MIT) مجوز دارد ، این مستندات readthedocs. org از mkdocs و موضوع مواد استفاده می کند.