101 قرارداد هوشمند و برنامه های غیر متمرکز در اتریوم

  • 2021-05-4

قراردادهای هوشمند روشی جدید برای ساخت برنامه های غیر متمرکز در یک blockchain است.

پابلو سیبررو

بنیانگذار Agilesight

به ما در سانفرانسیسکو در Oktane ، رویداد هویت سال بپیوندید

blockchain چیست؟

ما احتمالاً تقریباً یک دهه پیش شروع به شنیدن درباره blockchain کردیم که شخصی تحت نام مستعار Satoshi Nakamoto اولین اجرای مرجع بیت کوین را منتشر کرد. اگر هرگز تعجب کرده اید که ساتوشی کیست ، تنها نیستید ، و من کاملاً مطمئن هستم که این یک راز است. هیچ کس آن را در سالهای آینده فاش نمی کند. بیت کوین نه تنها یک ارز دیجیتالی را معرفی کرد ، همانطور که امروزه آن را می شناسیم بلکه تئوری را در پشت یکی از مهمترین اختراعات در دهه گذشته ، فناوری blockchain محبوب کرد. اما بلاکچین دقیقاً چیست؟ما سعی خواهیم کرد تعریفی را ارائه دهیم که تمام کلمات کلیدی را پشت سر بگذارد. یک blockchain نمایانگر یک دفترچه توزیع شده از معاملات در یک شبکه همتا به همسالان است ، جایی که آن معاملات ، پس از تأیید ، نمی توانند حذف یا اصلاح شوند.

What is Blockchain

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

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

معاملات و بلوک ها

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

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

Transactions and Blocks

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

یکی دیگر از جنبه های مهم مربوط به کلیدهای خصوصی/عمومی این است که تغییر وضعیت blockchain به معنای هزینه ای است که هرکسی که معاملات را ارسال می کند باید به نوعی بپردازد. هر blockchain از ارز بومی یا نشانه هایی برای بیان چگونگی ارائه بودجه استفاده می کند (به عنوان مثال ، اتر را در اتریوم ، بیت کوین در بیت کوین یا ADA در Cardano خواهیم دید). ما نمی توانیم به سادگی معاملات دلخواه را به یک blockchain ارسال کنیم. ما همچنین باید برای پرداخت این هزینه با کلید خصوصی خود در ارتباط باشیم.

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

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

معضل مرغ و تخم مرغ. اگر یک معدنچی می خواهد برای ارتکاب بلوک به دفترچه پرداخت کند ، وقتی یک شبکه blockchain شروع به کار می کند و هیچ نشانه ای در دسترس نیست ، چگونه می توان آنها را پرداخت کرد؟راز بر روی جوایز یا نشانه های صادر شده توسط شبکه است. اولین بلوک های متعهد به هر blockchain فقط دارای معاملات Coinbase هستند که به معدنچیان پاداش می پردازند. معدنچیان بعداً این وجوه را به سایر کاربران منتقل می کنند و باعث می شوند که نشانه ها از طریق شبکه شروع می شوند.

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

پروتکل های اجماع

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

اثبات کار

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

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

اثبات سهام

مشکل اصلی اثبات پروتکل کار ، مصرف انرژی است که باعث شد بسیاری از گروه های کاری در blockchain شروع به جستجوی گزینه های ارزان تر کنند. اینگونه است که "اثبات سهام" وارد تصویر شد. به عنوان یک شروع کننده ، این پروتکل مانع ورود برای معدنچیان را معرفی می کند. آنها باید تعداد مشخصی از نشانه ها را در معرض خطر قرار دهند تا معدنچی یا اعتبار سنج شوند ، همانطور که در این پروتکل خوانده می شوند. در Ethereum 2. 0 ، این تعداد حداقل 32 نشانه را نشان می دهد ، که تعداد قابل توجهی است و نه چیزی که هر کسی می تواند داشته باشد. کسانی که این الزام را برآورده نمی کنند ، هنوز هم می توانند نشانه هایی را با استخرهای سهام ایجاد شده برای این منظور به اشتراک بگذارند. استخر سهام در پایان کار معدنکار یا اعتبار سنجی را به پایان می رساند. از نظر اجرای ، این پروتکل اجازه می دهد تا اعتبار سنج ها بر اساس رتبه بندی تعیین شده توسط تعداد نشانه های موجود در معرض خطر و شهرت ، بلوک ها را در دفترچه تحت فشار قرار دهند. این رتبه بندی می تواند تحت تأثیر تصمیمات بد باشد یا هنگامی که یک گره نتواند اعتبار معاملات را تأیید کند (به عنوان مثال ، آفلاین می شود) ، و باعث می شود اعتبار سنج نشانه های را در معرض خطر قرار دهد.

کیف پول

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

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

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

اتر

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

قراردادهای هوشمند

یک قرارداد هوشمند یک برنامه کوتاه است که می تواند مستقر شود و روی یک blockchain اجرا شود. این واکنش به معاملات ارسال شده به آن با اجرای کد واکنش نشان می دهد و همچنین می تواند دولت و صندوق/نشانه ها (اتر) را در دفترچه نگه دارد. به عبارت دیگر ، شما می توانید آن را به عنوان یک دستگاه دولتی که در blockchain با یک آدرس عمومی کار می کند ، مشاهده کنید که در آن می توانید حالت را فشار داده یا بکشید. این معاملات می توانند هم صندوق و هم داده ها را منتقل کنند.

آنها برای دو هدف استفاده می شوند ،

  • وجوه و ایالت را نگه دارید ، که در blockchain تحت آدرس قرارداد ذخیره می شوند
  • منطق/کدی را اجرا کنید که اقدامات را با آن وجوه انجام می دهد یا وضعیت قرارداد را به روز می کند.

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

از دیدگاه اجرای ، ویتالیک و بقیه خدمه یک ماشین مجازی را برای اجرای کد بایت در blockchain طراحی کردند ، همچنین به عنوان دستگاه مجازی Ethereum یا EVM شناخته می شوند. هر گره در شبکه این VM را اجرا می کند و آماده اجرای هر کد دلخواه است.

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

ما همچنین باید در مورد سه جنبه مهم قراردادهای هوشمند بحث کنیم.

  1. زمینه اعدام
  2. گاز
  3. تغییر ناپذیری

زمینه اعدام

قراردادهای هوشمند به روشی منزوی اجرا می شوند. آنها فقط می توانند داده های موجود در blockchain را مشاهده کنند یا با سایر قراردادهای هوشمند تماس بگیرند. آنها نمی توانند از خارج تماس بگیرند و از خارج استفاده کنند.

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

اجرای کد در EMV با قیمت همراه است. منابع محاسباتی و ذخیره سازی کمیاب هستند و به صورت رایگان نمی آیند. هزینه استفاده از آن خدمات در واحد معروف به گاز بیان شده است ، که نشان دهنده کسری کوتاه از اتر (وی یا 10x18) است. برای هر معامله ای که ارسال می کنید ، باید بنزین بپردازید.

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

تغییر ناپذیری

قراردادهای هوشمند تغییر ناپذیر هستند. تعریف آنها (کد بایت) پس از استقرار در BlockChain قابل تغییر یا به روز رسانی نیست. اگر می‌خواهید یک قرارداد هوشمند موجود را تغییر دهید، باید نسخه جدید را در یک آدرس جدید مستقر کنید. به همین دلیل، باید به کیفیت کد و تست آن توجه ویژه ای داشته باشید تا مطمئن شوید که باگ هایی را معرفی نمی کنید که هرگز برطرف نمی شوند.

برنامه های غیرمتمرکز (با نام مستعار DApps)

اگر قراردادهای هوشمند را به‌عنوان APIهای بک‌اند در نظر بگیرید که در بلاک چین اجرا می‌شوند، برنامه‌های غیرمتمرکز بخش جلویی یا UX هستند. آنها لایه قابل مشاهده ای را نشان می دهند که کاربران یا سایر برنامه ها را با قراردادهای هوشمند در حال اجرا در بلاک چین متصل می کند.

هر گره اتریوم متصل به بلاک چین، یک رابط RPC-JSON را از طریق HTTPS یا سوکت های وب نشان می دهد که هر Dapp می تواند از آن برای اتصال و ارسال تراکنش ها استفاده کند.

تنها شرط لازم این است که یک کتابخانه مشتری به زبان ترجیحی خود داشته باشید که بداند چگونه با آن رابط صحبت کند.

به عنوان بخشی از این مقاله، یکی از رایج ترین پیاده سازی های جاوا اسکریپت، Web3. js را خواهیم دید.

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

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

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

Solidity یک زبان شی گرا و ایستا است که تحت تأثیر C++ یا جاوا اسکریپت قرار گرفته است. اگر یک توسعه دهنده وب با تجربه در هر زبانی مانند جاوا اسکریپت هستید، انتقال به Solidity برای شما آسان تر خواهد بود.

نمونه زیر یک قرارداد هوشمند اجرا شده با Solidity را نشان می دهد.

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

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

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

نقشه برداری یک ساختار خاص در استحکام است که به عنوان فرهنگ لغت یا هش برای جفت های کلید/ارزش عمل می کند. تفاوت اصلی با یک هش معمولی در این است که شما نمی توانید کلیدها یا مقادیر را ذکر کنید. آدرس و uint انواع خاصی از داده ها هستند که به ترتیب یک آدرس عمومی و یک عدد صحیح بدون امضا را نشان می دهند. Balances یک متغیر خصوصی (ذخیره شده در ذخیره سازی) است که تعادل در نشانه ها را برای یک آدرس معین حفظ می کند.

انتقال رویدادی است که توسط قرارداد آن منتشر شده است که بار آن شامل دو آدرس (از/به) و یک مقدار است. از آنجا که قراردادها به طور غیر همزمان یک بار اعتبار سنجی را انجام می دهند ، هیچ پاسخی را برنمی گردانند. راهی برای تقلید پاسخ ها انتشار رویدادها است. این موارد در یک گزارش معامله ثبت شده است که هر گره متصل در شبکه می تواند پرس و جو کند. همچنین ، کتابخانه های مشتری معمولاً راهی برای پیوستن به آن رویدادها ارائه می دهند.

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

این روش نشانه ها را از یک آدرس (مالک) به آدرس دیگر (آدرس گیرنده) منتقل می کند. همانطور که با "TX" اتفاق می افتد ، "MSG" متغیر دیگری است که دسترسی به زمینه اجرای را فراهم می کند. این پیاده سازی از متغیر MSG برای استنباط فرستنده معامله استفاده می کند. بررسی می کند که آیا فرستنده در تعادل در دسترس است و سپس آن را به آدرس گیرنده منتقل می کند. اگر تعادل در دسترس نباشد ، نادرست باز می گردد و معامله به پایان می رسد. سرانجام ، این رویداد "انتقال" را منتشر می کند و برای نهایی کردن معامله صادق است.

GetBalance تعادل را در نشانه های مرتبط با یک آدرس برمی گرداند. کلمه کلیدی "View" بیان می کند که این روش هیچ تغییری ایجاد نمی کند و فقط داده ها را از دفترچه بیرون می کشد. گره ای که این روش را اجرا می کند فقط می تواند دفترچه را بدون ارائه هرگونه معامله پرس و جو کند ، بنابراین گاز لازم نیست.

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

کامپایلر استحکام منبع باز است و در C ++ اجرا می شود. با این حال ، چندین اتصال یا پورت کامپایلر را پیدا می کنید. برای این مقاله ، ما از JavaScript Binding استفاده خواهیم کرد که از طریق NPM توزیع می شود.

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

پس از نصب ، شما آن را به عنوان solcjs از خط فرمان ارجاع می دهید.

تدوین یک قرارداد موجود به سادگی اجرای Solcjs و عبور از مسیر قرارداد ما است.

کامپایلر SOLC می تواند دو خروجی تولید کند ، یک نمایش باینری از قرارداد استقرار در blockchain و یک رابط برنامه ای یا ABI برای فراخوانی قرارداد از DAPP با استفاده از کتابخانه های مشتری. ABI یک سند JSON است که تمام روش های موجود در یک قرارداد را با آرگومان ها و مقادیر برگشتی توصیف می کند. این می تواند معادل یک سند WSDL برای خدمات صابون قدیمی یا OpenAPI برای API های وب باشد.

همانطور که مشاهده می کنید ، ABI ها به معنای مصرف مستقیماً به عنوان مستندات توسط یک توسعه دهنده مصرف نمی شوند ، بلکه یک کتابخانه مشتری است که می تواند آن را تجزیه کند و در ابزار توسعه مورد نظر شما IntelliSense را نشان دهد.

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

شما می توانید سطل قرارداد (خروجی از کامپایلر SOLC) را در هر یک از شبکه های اتریوم موجود یا در شبیه سازهای توسعه دهنده که مانند گره های معمولی رفتار می کنند و همان رابط JSON-RPC را در معرض دید قرار می دهید ، مستقر کنید. من به شبکه های Ethereum در جمع اشاره کردم زیرا شما شبکه اصلی (یا MainNet) و سایر شبکه های آزمایش (یا TestNets) را که توسط جامعه نگهداری می شوند (به عنوان مثال ، Ropsten ، Rinkeby ، Koban یا Goerly) دارید. هر دو Mainnet و TestNets برای پرداخت گاز و استقرار قراردادها به اتر واقعی نیاز دارند. تفاوت اصلی این است که TestNets قراردادهای هوشمندانه ای به نام Faucets را ارائه می دهد ، جایی که می توانید معاملات را ارسال کنید و تعداد محدودی از نشانه ها را برای بازی دریافت کنید. این شیرها از طریق DAPP هایی که نیاز به تأیید اعتبار دارند ، در معرض دید قرار می گیرند و حداقل 8 ساعت طول می کشد تا نشانه ها به کلید خصوصی شما اختصاص دهند. هنگامی که در حال توسعه هستید ، استفاده از شبیه سازها برای استقرار قراردادها در پرواز از ایستگاه کاری خود بدون برخورد با الزامات یک شبکه واقعی ، همیشه ساده تر است. همچنین می توانید یک گره را در حالت توسعه دهنده اجرا کنید ، که به همان روش شبیه ساز رفتار می کند.

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

ما فقط از ابزار خط فرمان بدون UI برای اجرای یک گره محلی استفاده خواهیم کرد. دستور زیر را اجرا کنید تا آن را در ایستگاه کاری خود به عنوان یک ابزار جهانی نصب کنید.

پس از نصب ، می توانید آن را مستقیماً به عنوان "Ganache-Cli" و بدون استدلال اجرا کنید. برخی از اطلاعات مربوط به گره ، مانند حساب های موجود/کلیدهای خصوصی که می توانید از آنها استفاده کنید و درگاه گوش دادن را صادر می کند.

اسکریپت زیر نشان می دهد که چگونه می توان قرارداد ساده "mycoin" ما را با استفاده از node. js در Ganache مستقر کرد.

بیایید در مورد هر قسمت بیشتر در مورد جزئیات بحث کنیم.

این اسکریپت از کتابخانه Web3. JS برای تجزیه قرارداد هوشمند و اتصال به شبیه ساز محلی Ganache استفاده می کند. همچنین از "FS" برای بارگیری پرونده های ABI و BIN قرارداد استفاده می کند.

GetWeb3 نمونه جدیدی از Web3 ایجاد می کند و به شبیه ساز متصل می شود.

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

GetMyCoIncontract پرونده های سطل و ABI را تجزیه می کند و نمونه جدیدی از قرارداد را ایجاد می کند.

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

برنامه را با دستورات زیر اجرا کنید ،

اگر برنامه به درستی اجرا شود ، این خروجی را در Ganache دریافت خواهید کرد.

این قرارداد با موفقیت در شبیه ساز محلی در "0XFD2215F9E02C635B56084F1339949DD66C1552" مستقر شد.

معاملات امضا شده توسط DAPPS همچنین به عنوان معاملات خام شناخته می شوند. گره های عمومی مانند Infura فقط معاملات از این نوع را می پذیرند.

از طرف دیگر ، شما همچنین می توانید یک کلید خصوصی را به یک گره اختصاص دهید تا معاملات را به طور خودکار برای شما امضا کند.

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

مرحله آخر در این سفر فراخوانی روش هایی با قراردادی است که قبلاً در blockchain مستقر شده است. شما یک DAPP دارید که کسانی را در زندگی واقعی صدا می کنند ، اما برای ساده تر کردن آن برای این مقاله ، ما نشان خواهیم داد که چگونه این کار را از یک اسکریپت Node. js ساده انجام دهیم.

اسکریپت زیر معامله ای را برای افزایش تعادل در هر یک از حساب های دیگر ایجاد شده توسط Ganache ارسال می کند و بعداً تعادل جدید را بررسی می کند.

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

GetReceiver آدرس حساب است که نشانه ها را دریافت می کند. این لیست از لیست آدرس های در معرض Ganache در کنسول کپی شد.

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

GetMyCoIncontract نمونه قرارداد را از ABI و آدرس قرارداد در شبیه ساز آغاز می کند. همچنین آدرس حساب ارسال معامله را در استدلال "از" دریافت می کند.

از نمونه قرارداد برای برقراری تماس با روش "GetBalance" در قرارداد ما استفاده می شود و مانده موجودی حساب "به" را برمی گرداند. همانطور که قبلاً گفتیم ، این یک تماس فقط خواندنی به blockchain است و هیچ معامله ای ایجاد نمی کند.

این بار از نمونه قرارداد برای ارسال معامله به روش "SendCoin" استفاده می شود ، که انتظار دارد دو آرگومان ، آدرس مقصد (به) و تعداد نشانه ها (1) باشد. حد گاز نیز به عنوان یک استدلال تعیین شده است.

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

نتیجه

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

پابلو سیبررو

پابلو یک متخصص و کارآفرین شناخته شده بین المللی با بیش از 22 سال تجربه در طراحی و اجرای سیستم های بزرگ توزیع شده با فناوری های مایکروسافت و سیستم MVP متصل است. طی چند سال گذشته ، پابلو به بسیاری از تیم های مایکروسافت کمک کرده است تا ابزارها و چارچوبی را برای ساخت برنامه های خدمات محور و وب با . NET ایجاد کنند. اکنون پابلو روی فناوری هایی تمرکز دارد که توسعه دهندگان را قادر می سازد تا سیستم های بزرگ و برنامه های وب را بر روی ابر بسازند ، مانند HTML5 ، Node. js ، ASP. NET ، Windows Azure و Amazon AWS.

پابلو سیبررو

پابلو یک متخصص و کارآفرین شناخته شده بین المللی با بیش از 22 سال تجربه در طراحی و اجرای سیستم های بزرگ توزیع شده با فناوری های مایکروسافت و سیستم MVP متصل است. طی چند سال گذشته ، پابلو به بسیاری از تیم های مایکروسافت کمک کرده است تا ابزارها و چارچوبی را برای ساخت برنامه های خدمات محور و وب با . NET ایجاد کنند. اکنون پابلو روی فناوری هایی تمرکز دارد که توسعه دهندگان را قادر می سازد تا سیستم های بزرگ و برنامه های وب را بر روی ابر بسازند ، مانند HTML5 ، Node. js ، ASP. NET ، Windows Azure و Amazon AWS.

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.