Mehran Kazeminia
Mehran Kazeminia
خواندن ۴ دقیقه·۴ سال پیش

یک «بلاکچین هوشمند» با سالیدیتی بسازید، و ببینید چگونه از«دوبار خرج کردن» جلوگیری می کند. - «بخش سوم: اضافه کردن فانکشن های جدید و تکمیل قرارداد»

Build a "Smart Blockchain" with Solidity

Understanding
Understanding

گام سوم - اضافه کردن فانکشن های جدید و تکمیل قرارداد

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

همانطورکه قبلا ملاحظه کردید؛ آدرس هایی که حداقل یکبار آکا توکن برای آنها ارسال شده است، به عنوان عضو شناخته می شوند و اطلاعات کامل حسابشان ( بالانس و ...) برای همیشه ذخیره شده و آپدیت می شود. حالا اگر یکی از اعضا، فانکشن myAccountInformation را کال کند، بدون پرداخت هزینه gas می تواند، بالانس حساب خودش، زمان عضو شدن خودش، زمان آخرین ارسال توکن توسط خودش و .... را دریافت کند.

اما فانکشن systemInformation را هر آدرس شبکه اتریوم می تواند کال کند. این فانکشن اطلاعات کلی از وضعیت توکن ها را بر می گرداند. یعنی به ترتیب؛ نام و سمبل توکن ها، تعداد کل توکن ها، قیمت فروش توکن براساس اتر(Wei)، موجودی آدرس قرارداد بر اساس اتر، تعداد کل اعضاء و حتی تعداد کل تراکنش های انجام شده را بر می گرداند.

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

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

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

تست قرارداد SmartCreator103.sol

شما می توانید دقیقا مانند مراحل قبلی، فایل SmartCreator103.sol را نیز روی شبکه تست Rinkeby دیپلوی کنید و این پنج فانکشن جدید را هم تست کنید. فقط هنگام تست فانکشن buyTokens توجه داشته باشید که در کدهای این قرارداد به عنوان پیش فرض، قیمت هر آکا توکن برابر 1e12 wei در نظر گرفته شده است. از طرف دیگر در این قرارداد مقدار decimals برابر صفر است و هیچ کسری برای آکا توکن تعریف نشده است. پس مبلغ پرداختی براساس wei حتما باید مضرب 1e12 باشد. در غیر اینصورت فانکشن buyTokens اجرا نمی شود.

خلاصه و جمع بندی:

فایل SmartCreator101.sol یک قرارداد هوشمند است که مطابق استاندارد ERC20 توکن تولید می کند.

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

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

فایل SmartCreator103.sol نسخه نهایی این قرارداد هوشمند است. این قرارداد، پنج فانکشن بیشتر از قرارداد مرحله دوم دارد و با این فانکشن ها، امکانات جدیدی به قرارداد اضافه شده است.

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

کلام آخر

محدودیت های قراردادهای هوشمند اتریوم بسیار زیاد هستند و معمولا برای کاربردهای دیگری استفاده می شوند. ولی با این حال ما توانستیم قرارداد هوشمندی را روی این شبکه دیپلوی کنیم که بتواند تراکنش های نامعتبر را شناسایی کند. البته امیدواریم که بلاکچین های آینده از همان ابتدا برای استفاده از قراردادهای BPSC ( قراردادهای هوشمند سازنده بلاک) برنامه ریزی شوند و این نوع قراردادهای هوشمند بتوانند جایگزین بسیار ارزانی برای روش های فعلی باشند. ما قبلا در مقاله دیگری پیشنهاد «بلاکچین هوشمند» را برای بلاکچین های آینده بررسی کرده ایم.

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

Somayyeh Gholami

Mehran Kazeminia



Cambridge Bitcoin Electricity Consumption Index



سالیدیتی
شاید از این پست‌ها خوشتان بیاید