چرا من واکسن‌های خود را بر روی بلاکچین ثبت کردم؟ و چرا بهتر است شما هم این کار را انجام دهید؟

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

0 77

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

تا به حال چه واکسن‌هایی زده‌ای؟

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

Description: https://cdn-images-1.medium.com/max/1600/1*QA6pToiO55JYUVYmRuMbtg.jpeg

این تصویر همین کاغذ واکسیناسیون است که بیش از دو دهه از آن نگهداری کرده‌ام. خودکار درون تصویر برای نشان دادن اندازه‌ی کاغذ قرار داده شده است.

به همین ترتیب، زمانی که دکتر به من گفت که برای سفر خود به چهار واکسن احتیاج دارم، گفتم:

آن واکسن‌هایی که اگر دو بار بزنم مرا نمی‌کشند به من بده.

در نهایت، سه واکسن زدم و اطلاعات آن در سیستم ثبت شد. اکنون اطلاعات و سوابق واکسیناسیون من بین یک پایگاه‌ داده‌ آنلاین و یک تکه کاغذ کوچک تقسیم شده‌اند.

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

  • تغییرپذیری: پایگاه‌های داده سنتی به کاربران اجازه می‌دهند که داده‌های ذخیره‌شده‌ی خود را تغییر داده و یا حذف کنند. بنابراین، فردی که به این پایگاه داده دسترسی پیدا کند به راحتی می‌تواند تمام اطلاعات من را پاک کرده و یا بدون هیچ آگاهی آن‌ها را تغییر دهد. از آن‌ جایی که من نمی‌توانم تمام سوابق خود را به خاطر بسپارم (و به همین دلیل این مقاله را می‌نویسم)، ممکن است متوجه تغییرات انجام‌شده نشوم و این امر پیامدهای ناگواری را به دنبال داشته باشد (مثل مرگ در اثر دوبار زدن یک واکسن).
  • میزبانی: من برای دسترسی به پایگاه داده‌ی خود باید تا حدی میزبانی آن را بر عهده داشته باشم. بنابراین، باید به فردی اعتماد کنم و مطمئن باشم که این داده‌ها در زمان نیاز همیشه در دسترس من خواهند بود و بر اساس درخواست‌های خود، باید برای انجام این سرویس پول نیز پرداخت کنم.
  • حفظ و نگهداری: به منظور تضمین امنیت و دسترسی همیشگی به این داده‌ها، باید مسئولیت نگهداری و میزبانی از پایگاه داده را خود بر عهده داشته باشم. همچنین، اگر مشکلی رخ دهد، باید آن را در اسرع وقت برطرف کنم تا مطمئن باشم که برنامه به کار خود ادامه می‌دهد.

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

گام اول: قرارداد هوشمند

در ابتدا کار خود را با ایجاد یک قرارداد هوشمند به زبان Solidity آغاز کرده و از این طریق اطلاعات خود را ثبت کردم؛‌ طوری که تنها خودم می‌توانم این کارها را انجام دهم.

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

همین! اما پیش از ادامه‌ی مقاله باید چند نکته را در نظر داشته باشید:

  • من این احتمال که ممکن است دسترسی به یک آدرس را از دست بدهم در نظر گرفتم و به همین دلیل سه آدرسی تعریف کردم که امکان نوشتن و خواندن داده در آن‌ها وجود دارد. اما احتمال اینکه فرد دیگری بتواند به حساب‌های من دسترسی پیدا کرده و اطلاعاتم را تغییر دهد در نظر نگرفتم. مجددا تلاش کردم که آن را تا حد امکان ساده نگه دارم. در نهایت، زمانی که بفهمم یکی از ثبت‌ها توسط من انجام نگرفته، می‌توانم استفاده از قرارداد را متوقف کرده و یا کاری کنم که نرم‌افزار در هنگام نشان دادن اطلاعات، بعضی از ثبت‌ها را نادیده بگیرد. مهم‌تر از همه، می‌توانم مطمئن باشم که میزان مداخله کاهش یافته و هیچ فردی نمی‌تواند داده‌ها را حذف کند و تنها می‌تواند چیزهایی را به داده‌های قبل بیفزاید.
  • من به راحت می‌توانستم قابلیتی از جهت افزودن جداگانه و تک‌تک واکسن‌ها قرار دهم و سپس، آن‌ها را منظم کرده و یا از ساختاری با پارامترهای لازم استفاده کنم؛ ولی با این حال، از آن جایی که این نمونه تنها یک نمونه‌ی آزمایشی است، تصمیم گرفتم که در هزینه‌ها صرفه‌جویی کرده و به جای ایجاد این قابلیت در زبان Solidity، واکسن‌های مختلف را به زبان جاوا (JavaScrupt) دسته‌بندی کنم. این موضوع در قسمت بعد مشخص‌تر خواهد شد.
  • حتی با اینکه getData از مودیفایر onlyOwners برخوردار است – به این معنا که دیگران نمی‌توانند در آن دست ببرند – اما این معنای امن بودن داده نیست. تمام اطلاعات ذخیره‌شده در بلاکچین اتریوم را بقیه نیز می‌توانند ببینند.
  • کاربرد dataLength نیز وجود دارد، زیرا در بهینه‌سازی قابلیت‌های زبان جاوا بسیار موثر است.

گام دوم: زبان جاوا

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

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

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

“تاریخ، نام واکسن، تعداد واکسن، اطلاعات بیشتر”

“تاریخ” به زمان انجام واکسیناسیون، “نام” به بیماری مورد نظر (که واکسن در مقابل آن از بدن محافظت می‌کند) و “تعداد واکسن” نیز به واکسن‌هایی اشاره می‌کند که بیش از یک بار باید زده شوند. در قسمت “اطلاعات بیشتر” می‌توانم داده‌های بیشتری مثل مکان انجام واکسیناسیون یا عوارض جانبی را نیز ثبت کنم.

بنابراین، ثبت یک واکسن تقریبا به این شکل خواهد بود:

“2018/01/22، هپاتیت ب، فنلاند / 2018/04/16، تتانوس، 1، انگلستان”

با این روش می‌توانم تمام واکسن‌های خود را در یک لحظه تنها با یک عملکرد (فراخوانی تابع)‌ ثبت کنم. باید توجه داشت که کاماها و علامت / بسیار ضروری هستند، زیرا در زبان جاوا نشان‌دهنده‌ی یک واکسن جدید یا اطلاعاتی جدید هستند. با استفاده از این فرمت دیگر لازم نیست که پارامترهای مختلفی در زبان Solidity داشته باشم و می‌توانم با جدا کردن داده‌ها در زبان جاوا در هزینه نیز صرفه‌جویی کنم.

Description: https://cdn-images-1.medium.com/max/1600/1*3qhzYS_NSU9LLp9X4gM2Vg.png

ورودی‌های registerData

گام سوم: وبسایت

اکنون که مسئله‌ی ذخیره‌سازی داده حل شده است، به راهی برای نشان دادن آن احتیاج داریم. هدف از این کار این است که همیشه و از همه‌ جا به آسانی به داده‌های خود دسترسی داشته باشیم؛ بنابراین، انتخاب من یک وبسایت (قابل استفاده در موبایل) است. نتیجه شبیه به شکل زیر خواهد بود:

Description: https://cdn-images-1.medium.com/max/1600/1*0ByAgmaRFOix7YTgMe5SWw.png

Description: https://cdn-images-1.medium.com/max/800/1*Qy4Pt8qoOujCCrJYcT2bgA.jpeg

نسخه‌های موبایل و دسکتاپ وبسایت

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

بنابراین، هزینه‌های من (به دلار آمریکا) برای ثبت تمام واکسن‌ها در بلاکچین و ایجاد یک وبسایت برای نشان دادن آن‌ها تقریبا برابر خواهد بود با:

  • هزینه انتشار قرارداد: 0.28 دلار
  • هزینه فراخوان تابع: 0.53 دلار
  • هزینه کل: 0.81 دلار

ملاحظات (فنی) بیشتر

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

اول از هر چیز می‌خواهم توسعه‌دهندگان را به ارائه‌ی راه‌حل‌های سودمند مشابه تشویق کنم. ساختن dAppای که در این مقاله توصیف کردم کمتر از یک دلار هزینه برداشت و ‌ارزش زیادی برای من دارد؛ به علاوه اینکه در عرض یک روز و با کمتر از 300 خط کد ساخته شده است. سخت‌ترین بخش ساختن این dApp کشف نوشته‌های برزیلی در کارت واکسیناسیون بود.

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

در ارتباط با روند توسعه نیز باید بگویم که من نوشتن قرارداد هوشمند را شروع کرده و با استفاده از Truffle و Ganache آن را تست کرده‌ام. پس از انجام این کار، وبسایت خود را ایجاد کرده و آن را مجددا با استفاده از Ganache در مقیاسی کوچک مورد استفاده قرار دادم، اما ارتباط صحیح میان قرارداد هوشمند و نرم‌افزار را نیز بررسی کرده‌ام. این کار را با استفاده از کتابخانه web3.js انجام دادم. سپس، شبکه‌ی Ropsten را تست کرده و از کیف‌پول مای‌اتر برای ارتباط با قرارداد استفاده کردم. روشی برای فراخوان تابع registerData از خود وبسایت نساختم. پس از تست Ropsten، در نهایت از آن بر روی Mainnet استفاده کردم و از میزبانی رایگان برای اداره کردن وبسایت بهره بردم. برای Ropsten و Mainnet نیز در صورت نبود متاماسک، از نقطه پایانی Infura به عنوان یک مکانیزم تغییر موضع استفاده کردم. بدین ترتیب، کاربران (مثل خود من) برای دیدن داده از گوشی همراه، از مرورگر Dapp استفاده نمی‌کنند.

کدهای زبان جاوا به محض بارگذاری صفحه راه‌اندازی شده و به منظور بررسی تعداد واکسن‌ها از یک فراخوان تابع استفاده می‌کنند. سپس، به دفعات کافی (در این مورد یک بار) از یک فراخوان تابع getData برای گردآوری تمام داده‌های ثبت‌شده استفاده و آن‌ها را با هم یکی می‌کنند. این روند در داده تکرار شده و واکسن‌ها از یکدیگر جدا می‌شوند. سپس، اطلاعات واکسن‌های مختلف از هم جدا شده و به خانه‌های مخصوص خود در جدول افزوده می‌شوند.

در نهایت، برای نرم‌افزار نیز از Bootstrap استفاده کردم تا جدولی منظم داشته باشم، اما آن را با رنگ‌ها و طرح‌های مختلف شلوغ نکردم. البته HTML، CSS و JS (زبان جاوا) همگی در یک فایل قرار دارند.

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

نتیجه

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

داشتن هدفی مثل تغییر دادن دنیا بسیار آسان است، اما با تمرکز بر راه‌حل‌های کوچک و کاربردی می‌توانیم ارزش ایجاد کرده و از فناوری‌ها بهره ببریم. همچنین، نکته‌ی حائز اهمیت دیگر برای توسعه‌دهندگان طراحی صحیح است؛ دلیل اهمیت آن نیز علاوه بر دلایل امنیتی، کاهش هزینه‌‌ی پروژه‌هاست.

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

شما برای ساده‌تر کردن زندگی خود می‌خواهید چه چیزی بسازید؟

منبع: medium.com

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.