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

ساخت وبلاگ

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

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

  • تنظیم یک blockchain محلی
  • استقرار یک قرارداد هوشمند
  • تعامل از کنسول
  • تعامل برنامه ای

دستورالعمل ها برای هر دو ترافل و هاردهات در دسترس است. ترجیح خود را با استفاده از این ضامن انتخاب کنید!

تنظیم یک blockchain محلی

قبل از شروع ، ابتدا به محیطی احتیاج داریم که بتوانیم قراردادهای خود را مستقر کنیم. blockchain Ethereum (که اغلب "Maiet" نامیده می شود ، برای "شبکه اصلی") برای استفاده از آن ، به شکل اتر (ارز بومی آن) نیاز به هزینه واقعی برای استفاده از آن دارد. این امر هنگام تلاش برای ایده ها یا ابزارهای جدید ، این یک انتخاب ضعیف است.

برای حل این مسئله ، تعدادی از "تستات" (برای "شبکه های تست") وجود دارند: این موارد شامل Sepolia و blockchains Goerli است. آنها بسیار مشابه با Maiet کار می کنند ، با یک تفاوت: شما می توانید اتر را برای این شبکه ها به صورت رایگان دریافت کنید ، به طوری که استفاده از آنها هزینه ای برای شما ندارد. با این حال ، شما هنوز هم نیاز به مقابله با مدیریت کلید خصوصی ، بلوک های در محدوده 5 تا 20 ثانیه و در واقع گرفتن این اتر رایگان دارید.

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

اگر می خواهید نحوه استقرار و استفاده از قراردادها را در یک blockchain عمومی ، مانند Ethereum Testnets ، یاد بگیرید ، به راهنمای شبکه های تست عمومی ما می روید.

محبوب ترین blockchain محلی Ganache است. برای نصب آن بر روی پروژه خود ، اجرا کنید:

$ npm نصب-Save-Dev Ganache-Cli

پس از راه اندازی ، Ganache مجموعه ای تصادفی از حساب های قفل نشده را ایجاد می کند و به آنها اتر می دهد. برای به دست آوردن همان آدرس هایی که در این راهنما استفاده می شود ، می توانید Ganache را در حالت قطعی شروع کنید:

$ npx ganache-cli-تعیین کننده

Ganache لیستی از حساب های موجود و کلیدهای خصوصی آنها را به همراه برخی از مقادیر پیکربندی blockchain چاپ می کند. از همه مهمتر ، آدرس خود را نشان می دهد ، که ما برای اتصال به آن استفاده خواهیم کرد. به طور پیش فرض ، این 127. 0. 0. 1:8545 خواهد بود.

به خاطر داشته باشید که هر بار که Ganache را اجرا می کنید ، یک blockchain محلی جدید ایجاد می کند - وضعیت اجرای قبلی حفظ نمی شود. این برای آزمایش های کوتاه مدت خوب است ، اما این بدان معنی است که برای مدت زمان این راهنماها باید یک پنجره باز در حال اجرا داشته باشید. از طرف دیگر ، می توانید Ganache را با گزین ه-db اجرا کنید ، دایرکتوری را برای ذخیره داده های خود در بین اجراها تهیه کنید.

ترافل دارای نسخه گرافیکی از Ganache-Cli است که به آن Ganache نیز گفته می شود.

Hardhat با یک blockchain محلی داخلی ، شبکه Hardhat همراه است.

پس از راه اندازی ، Hardhat Network مجموعه ای از حساب های قفل شده را ایجاد می کند و به آنها اتر می دهد.

$ npx node hardhat

شبکه Hardhat آدرس خود ، http://127. 0. 0. 1:8545 را به همراه لیستی از حساب های موجود و کلیدهای خصوصی آنها چاپ می کند.

به خاطر داشته باشید که هر بار که شبکه Hardhat را اجرا می کنید ، یک blockchain محلی با نام تجاری جدید ایجاد می کند - وضعیت اجرای قبلی حفظ نمی شود. این برای آزمایش های کوتاه مدت خوب است ، اما این بدان معنی است که برای مدت زمان این راهنماها باید یک پنجره باز در حال اجرا شبکه Hardhat داشته باشید.

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

استقرار یک قرارداد هوشمند

در راهنمای قراردادهای هوشمند در حال توسعه ، محیط توسعه خود را تنظیم کردیم.

اگر قبلاً این تنظیم را ندارید ، لطفاً پروژه را ایجاد و تنظیم کرده و سپس قرارداد هوشمند جعبه ما را ایجاد و کامپایل کنید.

با کامل تنظیم پروژه ما اکنون آماده استقرار یک قرارداد هستیم. ما از راهنمای در حال توسعه قراردادهای هوشمند در حال استقرار خواهیم بود. اطمینان حاصل کنید که یک نسخه از جعبه را در قراردادها/Box. Sol دارید.

ترافل از مهاجرت برای استقرار قراردادها استفاده می کند. مهاجرت شامل پرونده های JavaScript و یک قرارداد مهاجرت ویژه برای ردیابی مهاجرت در زنجیره است.

ما برای استقرار قرارداد جعبه خود یک مهاجرت JavaScript ایجاد خواهیم کرد. ما این پرونده را به عنوان مهاجرت/2_deploy. js ذخیره خواهیم کرد.

// مهاجرت/2_deploy. js const box = artifacts. require ('جعبه') ؛module. exports = عملکرد async (استقرار);

Hardhat در حال حاضر سیستم استقرار بومی ندارد ، در عوض ما از اسکریپت ها برای استقرار قراردادها استفاده می کنیم.

ما یک اسکریپت برای استقرار قرارداد جعبه خود ایجاد خواهیم کرد. ما این پرونده را به عنوان Scripts/Deploy. js ذخیره خواهیم کرد.

// Scripts/Deploy. js عملکرد Async اصلی ()main() .then(() => process.exit(0)) .catch(error => );

ما در اسکریپت خود از اترها استفاده می کنیم ، بنابراین باید آن را نصب کنیم و افزونه @nomiclabs/hardhat-ethers.

$ npm نصب-save-dev @nomiclabs/ethers hardhat-ethers

قبل از استقرار ، باید اتصال به Ganache را پیکربندی کنیم. ما باید یک شبکه توسعه را برای LocalHost و Port 8545 اضافه کنیم که همان چیزی است که blockchain محلی ما از آن استفاده می کند.

// truffle-config. js module. exports =<. networks: <. development: , . 

ما باید پیکربندی خود را اضافه کنیم که از افزونه @nomiclabs/hardhat-ethers استفاده می کنیم.

// hardhat. config. js نیاز دارد ('@omiclabs/hardhat-ethers') ؛بشرmodule. exports =<.>;

با استفاده از دستور مهاجرت ، می توانیم قرارداد جعبه را به شبکه توسعه (Ganache) مستقر کنیم:

$ npx truffle migrate --network development Compiling your contracts. ===========================> Everything is up to date, there is nothing to compile. Starting migrations. ======================> Network name: 'development'> Network id: 1619762548805> Block gas limit: 6721975 (0x6691b7) 1_initial_migration.js ====================== Deploying 'Migrations' ---------------------- . 2_deploy.js =========== Deploying 'Box' -------> transaction hash: 0x25b0a326bfc9aa64be13efb5a4fb3f784ffa845c36d049547eeb0f78e0a3108d> Blocks: 0 Seconds: 0>آدرس قرارداد: 0xCFEB869F69431E42CDB54A4F4F105C19C080A601. 
Truffle قراردادهای مستقر شما را پیگیری می کند ، اما همچنین آدرس آنها را هنگام استقرار نشان می دهد (به عنوان مثال ما ، 0xCFEB869F69431E42CDB54A4F105C19C080A601). این مقادیر هنگام تعامل با آنها به صورت برنامه ای مفید خواهد بود.

با استفاده از دستور Run ، می توانیم قرارداد جعبه را به شبکه محلی (شبکه هاردهات) مستقر کنیم:

$ NPX Hardhat Ru n-Network LocalHost Scripts/Deploy. js کادر استقرار. جعبه مستقر در: 0x5FBDB2315678AFECB367F032D93F642F64180AA3
Hardhat قراردادهای مستقر شما را پیگیری نمی کند. ما آدرس مستقر را در اسکریپت خود نمایش دادیم (در مثال ما ، 0x5FBDB2315678AFECB367F032D93F642F64180AA3). این کار هنگام تعامل با آنها به صورت برنامه ای مفید خواهد بود.

تمام شد! در یک شبکه واقعی ، این روند چند ثانیه طول می کشد ، اما در بلاکچین های محلی تقریباً فوری است.

اگر خطای اتصال دارید ، حتماً در یک ترمینال دیگر یک blockchain محلی را اجرا کنید.
به یاد داشته باشید که blockchains محلی وضعیت خود را در طول چندین اجرا ادامه نمی دهد! اگر مراحل محلی blockchain خود را ببندید ، باید قراردادهای خود را دوباره به کار بگیرید.

تعامل از کنسول

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

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

$ npx truffle console --network development truffle(development)>جعبه const = Await Box. Deployed () ؛تعریف نشده

ما از کنسول Hardhat برای تعامل با قرارداد جعبه مستقر در شبکه LocalHost خود استفاده خواهیم کرد.

ما باید آدرس قرارداد جعبه خود را که در اسکریپت استقرار خود نمایش داده ایم مشخص کنیم.
این مهم است که ما صریحاً شبکه را برای هاردهات تنظیم کنیم تا جلسه کنسول خود را به آن متصل کنیم. اگر اینگونه نباشیم ، هاردهات به طور پیش فرض به استفاده از یک شبکه جدید زودگذر ، که قرارداد جعبه ما به آن اعزام نمی شود ، پیش فرض خواهد کرد.
$ npx hardhat console --network localhost Welcome to Node.js v12.22.1. Type ".help" for more information.> const Box = await ethers.getContractFactory('Box'); undefined>جعبه const = await box. attach ('0x5FBDB2315678AFECB367F032D93F642F64180AA3')

ارسال معاملات

اولین عملکرد جعبه ، ذخیره ، مقدار عدد صحیح را دریافت می کند و آن را در ذخیره قرارداد ذخیره می کند. از آنجا که این عملکرد حالت blockchain را اصلاح می کند ، برای اجرای آن باید معامله ای را به قرارداد ارسال کنیم.

ما معامله ای برای تماس با عملکرد فروشگاه با مقدار عددی ارسال خواهیم کرد:

truffle(development)>Await Box. Store (42)]>

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

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

برچسب : نویسنده : پرویز حبّی بازدید : <-PostHit-> تاريخ : شنبه 31 تير 1402 ساعت: 20:28