به عنوان یک تامین کننده اترها، اهمیت برآورد دقیق داده های استقرار قرارداد را هنگام کار با بلاک چین اتریوم درک می کنم. در این پست وبلاگ، اطلاعاتی را در مورد چگونگی به دست آوردن تخمین داده های استقرار قرارداد با استفاده از ethers.js، یک کتابخانه محبوب جاوا اسکریپت برای تعامل با بلاک چین اتریوم، به اشتراک خواهم گذاشت.
آشنایی با استقرار قرارداد در اتریوم
قبل از اینکه به جزئیات فنی تخمین دادههای استقرار قرارداد بپردازیم، اجازه دهید به طور خلاصه بفهمیم که استقرار قرارداد در اتریوم شامل چه مواردی میشود. هنگامی که یک قرارداد هوشمند را بر روی بلاک چین اتریوم مستقر می کنید، اساساً در حال ایجاد یک نمونه جدید از کد قرارداد و ذخیره آن در بلاک چین هستید. این فرآیند مستلزم ارسال یک تراکنش به شبکه است که شامل بایت کد قرارداد و هر آرگومان سازنده لازم است.
هزینه استقرار یک قرارداد بر اساس مقدار گاز مورد نیاز برای اجرای معامله استقرار تعیین می شود. گاز یک واحد اندازه گیری برای کار محاسباتی مورد نیاز برای اجرای تراکنش در شبکه اتریوم است. هرچه کد قرارداد پیچیده تر باشد و استدلال های سازنده بزرگتر باشد، گاز بیشتری برای استقرار مورد نیاز خواهد بود.
پیش نیازها
برای دنبال کردن مثالهای موجود در این پست وبلاگ، باید موارد زیر را داشته باشید:
- Node.js روی دستگاه شما نصب شده است
- درک اولیه جاوا اسکریپت و بلاک چین اتریوم
- آشنایی با ethers.js
با اجرای دستور زیر می توانید ethers.js را با استفاده از npm نصب کنید:
npm اترها را نصب کنید
تخمین داده های استقرار قرارداد با ethers.js
برای تخمین دادههای استقرار قرارداد، باید مراحل زیر را انجام دهیم:
- برای دریافت بایت کد و ABI قرارداد هوشمند را کامپایل کنید.
- یک نمونه جدید از ethers.js ایجاد کنید
کارخانه قراردادکلاس - استفاده کنید
کارخانه قراردادتخمین گاز مورد نیاز برای استقرار
بیایید هر مرحله را با جزئیات مرور کنیم.
مرحله 1: قرارداد هوشمند را تدوین کنید
اولین قدم کامپایل قرارداد هوشمند برای دریافت بایت کد و ABI است. می توانید از ابزاری مانند استفاده کنیدsolc(کامپایلر Solidity) تا قرارداد شما را جمع آوری کند. در اینجا مثالی از نحوه کامپایل قرارداد ساده Solidity با استفاده از آن آورده شده استsolcدر یک اسکریپت Node.js:
const solc = require('solc'); const fs = require('fs'); // کد منبع قرارداد را بخوانید const sourceCode = fs.readFileSync('SimpleContract.sol', 'utf8'); // کامپایل قرارداد const input = { language: 'Solidity', sources: { 'SimpleContract.sol': { content: sourceCode } }, settings: { outputSelection: { '*': { '*': ['abi', 'evm.bytecode'] } } } }; const output = JSON.parse(solc.compile(JSON.stringify(input))); const contract = output.contracts['SimpleContract.sol']['SimpleContract']; const bytecode = contract.evm.bytecode.object; const abi = contract.abi; console.log('Bytecode:', bytecode); console.log('ABI:', abi);
در این مثال، ما در حال خواندن کد منبع یک قرارداد ساده Solidity از فایلی به نام هستیمSimpleContract.sol. سپس با استفاده از قرارداد جمع آوری می کنیمsolcو بایت کد و ABI را از خروجی کامپایل استخراج کنید.
مرحله 2: یک نمونه جدید از the ایجاد کنیدکارخانه قراردادکلاس
هنگامی که بایت کد و ABI را در اختیار داریم، می توانیم یک نمونه جدید از آن ایجاد کنیمکارخانه قراردادکلاس از ethers.js. راکارخانه قراردادکلاس برای استقرار نمونه های جدید قرارداد هوشمند استفاده می شود. در اینجا یک مثال است:
const { ethers } = require('ethers'); // اتصال به ارائه دهنده const شبکه اتریوم = new ethers.providers.JsonRpcProvider('https://mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID'); const wallet = new ethers.Wallet('YOUR_PRIVATE_KEY'، ارائه دهنده); // ایجاد یک نمونه ContractFactory جدید const contractFactory = new ethers.ContractFactory(abi, bytecode, wallet);
در این مثال، ما با استفاده از یک ارائه دهنده Infura به شبکه اصلی اتریوم متصل می شویم. شما باید جایگزین کنیدYOUR_INFURA_PROJECT_IDبا شناسه واقعی پروژه Infura شما. ما همچنین در حال ایجاد یک نمونه کیف پول جدید با استفاده از یک کلید خصوصی هستیم. جایگزین کنیدYOUR_PRIVATE_KEYبا کلید خصوصی واقعی شما
مرحله 3: تخمین گاز مورد نیاز برای استقرار
هنگامی که ما داریمکارخانه قراردادبه عنوان مثال، ما می توانیم از آن برای تخمین گاز مورد نیاز برای استقرار استفاده کنیم. راکارخانه قراردادکلاس متدی به نام داردgetDeployTransactionکه یک شی تراکنش نشان دهنده تراکنش استقرار را برمی گرداند. سپس می توانیم از آن استفاده کنیمتخمین گازروش ارائه دهنده برای برآورد گاز مورد نیاز برای معامله. در اینجا یک مثال است:
// تخمین گاز مورد نیاز برای استقرار const deployTransaction = contractFactory.getDeployTransaction(); const تخمین زده گاز = await provider.estimateGas(deployTransaction); console.log('گاز تخمینی برای استقرار:', تخمین زده شدهGas.toString());
در این مثال، ما را صدا می کنیمgetDeployTransactionروش ازContractFactoryبرای دریافت شی تراکنش استقرار. سپس ازتخمین گازروش ارائه دهنده برای برآورد گاز مورد نیاز برای معامله. گاز تخمین زده شده به صورت یک بازگردانده می شودBigNumber، بنابراین قبل از ورود به کنسول آن را به یک رشته تبدیل می کنیم.
عوامل موثر بر تخمین گاز استقرار قرارداد
تخمین گاز برای استقرار قرارداد می تواند تحت تأثیر عوامل مختلفی قرار گیرد، از جمله:


- پیچیدگی قرارداد: هرچه کد قرارداد پیچیده تر باشد، گاز بیشتری برای استقرار مورد نیاز خواهد بود.
- استدلال سازنده: اگر قرارداد شما دارای آرگومان های سازنده باشد، اندازه و پیچیدگی این آرگومان ها نیز می تواند بر تخمین گاز تأثیر بگذارد.
- ازدحام شبکه: وضعیت فعلی شبکه اتریوم نیز می تواند بر تخمین گاز تأثیر بگذارد. در دورههای ازدحام بالای شبکه، قیمت گاز ممکن است بالاتر باشد، که میتواند هزینه کلی استقرار را افزایش دهد.
نتیجه گیری
تخمین دادههای استقرار قرارداد گام مهمی در فرآیند استقرار یک قرارداد هوشمند در بلاک چین اتریوم است. با استفاده از ethers.js، میتوانیم به راحتی گاز مورد نیاز برای استقرار را تخمین بزنیم و تراکنشهای خود را بر اساس آن برنامهریزی کنیم.
اگر علاقه مند به خرید اترها برای پروژه های بلاک چین خود هستید، ما یک تامین کننده قابل اعتماد اترها هستیم. ما اترهای با کیفیت بالا مانندمتیل ترت بوتیل اتر (MTBE)،اتیلن گلیکول مونوبوتیل اتر (BCS، EB)، وتری اتیلن گلیکول مونوبوتیل اتر (TBG, TB). با ما تماس بگیرید تا در مورد نیازهای تدارکاتی خود صحبت کنید و یک مشارکت موفق را شروع کنید.
مراجع
- مستندات ethers.js: https://docs.ethers.io/v5/
- مستندات استحکام: https://docs.soliditylang.org/
- وب سایت رسمی اتریوم: https://ethereum.org/





