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

در پایان این پست شما قراره بدونید که قراردادهای هوشمند یا اسمارت کانترکتها چی هستند؟ و چرا اونقدرهایی هم که میگن هوشمند نیستند و چرا بیت کوین یک جورهایی خسته کننده ست.سلام من اشکان هستم و شما سومین پست من، از سری پست های مرتبط با شبکه بلاکچین، کریپتو، اسمارت کانترکت و موارد مرتبط با اونها رو از دید برنامه نویسی مطالعه میکنید. طبق معمول اینجا نه قراره سیگنال بدیم نه مشاوره خرید و فروش و نه اینکه رشد و افت قیمت بیت کوین و آلت کوین ها برامون اهمیت داره، همه چیزی که ما بهش اهمیت میدیم تکنولوژی و ابداعات پشت صحنه این پروژه هاست.واقعا اگر یک فیچر از این تکنولوژی های مرتبط با رمزارزها و بلاکچین و... باشه که منو دیوونه کرد همین اسمارت کانترکته! بله بیت کوین هم خیلی باحاله و بلاکچین هم جالبه و این حرفا اما... اما دقیقا وقتی که من اسمارت کانترکت رو درک کردم بود که فهمیدم میخوام این راه رو ادامه بدم چون این مفهوم (اسمارت کانترکت) سنگ بنای همه فیچرهای خفنیه که این روزها میشنویم مثل NFT مثل tokenها مثل ICOها یا صرافی های غیر متمرکز و... خلاصه همه این خفنیجات بر پایه اسمارت کانترکت تعریف میشن.پس بیاید با این سوال شروع کنیم که اسمارت کانترکت چی هست؟برای اینکه بفهمیم اسمارت کانترکت چیه اول باید بفهمیم چرا بیت کوین بسیار بدوی و خسته کننده ست و پاسخ این سوال هم اینه که بیت کوین هیچ تعاملی با آدمیزاد نداره و فقط بلده پول بین مردم جابجا کنه همین!اما اسمارت کانترکت ها میتونن با کدها تعامل داشته باشند اگر شما بجای کد بگذارید روبات (که یکم به مفهوم آدمیزاد نزدیکش کرده باشیم) این یعنی چی؟ چکار مثلا میشه باهاش کردبرای مثال ما میتونیم بر اساس این کارایی اپلیکیشن های غیر متمرکز بسازیم یا Decentralized Apps اگر کلمه Dapp به گوشتون خورده باشه مخفف همین ترکیبه که یعنی من به عنوان یک دولوپر میتونم کدی بنویسم و بگذارمش روی یک سرور اشتراکی، یک کامپیوتری که همه شبکه بلاکچین مربوطه میتونن بهش دسترسی داشته باشند و اون کد رو اجرا کنند، ببینید فرق داره با وقتی که ما مثلا کدمون رو میذاریم روی آروان یا آمازون بعد سروره که میترکه اپلیکیشن ما هم باهاش میاد پایین.کد شما توی شبکه بلاکچینه، همه میتونن بخوننش (مثل دیتای ترنزاکشن های بیت کوین) ولی طبق خواص شبکه بلاکچین این کد append only هست یعنی کسی نمیتونه کد شما رو پاک یا دستکاری کنه.من یک کد مینویسم و میذارمش روی یک backendی که هیچ مالکی نداره، روی یک بکندی که همه بهش دسترسی دارند و میتونن اون رو همراه با امنیت فوق العاده ای که بلاکچین در اختیارمون میذاره وریفای کنند و اجرا کنند.فوق العاده نیست؟ میدونید مثلا چه کارهایی میشه باهاش انجام داد؟ مثلا شما میتونید یک قلک برای خودتون بسازید و یک اسمارت کانترکت بنویسید که 2 تا دستورالعمل داره اول اینکه پول که دریافت کردی ذخیره ش کن و دوم اینکه بعد از 30 سال این پول رو به من برگردون! دقت کنید شما هیچ مورد امنیتی عجیب و غریب یا قواعد پیچیده و آتنتیکیشن و... نیاز ندارید شما چند خط کد مینویسید و میفرستید توی بلاکچین و این دیگه می مونه توی شبکه برای همیشه! هیچکس نمیتونه تغییری توش ایجاد کنه، پول بفرستید به اون روبات و 30 سال براتون نگهش میداره و هیچ احدالناسی حتی خودتون هم نمیتونه تا 30 سال دیگه پول شما رو دست بزنه و شما میتونید 100 درصد مطمئن باشید که بعد از 30 سال حتما این کد اجرا میشه و به شما پول رو منتقل میکنه.فهمیدید من وقتی میگفتم خیلی خفنه در مورد چی صحبت میکردم؟ اگر هنوز نگرفتید قضیه چیه به مثال دیگه میزنم. فرض کنید شما از طریق یک وب سایت اجاره (از این مدل های کپی airbnb یا حتی خودش) یک ویلا درخواست کردید. این وب سایت واسط بین شما به عنوان کسی که برای 1 هفته مثلا توی فریدون کنار دنبال ویلا میگرده و صاحب اون ویلا خواهد بود. پس شما باید پول رو بدید به این وب سایت و اعتماد کنید که سایت با این آدم مرتبطه و وقتی شما رسیدید فریدون کنار صاحب خونه در رو به روی شما باز میکنه.این وسط شما به این سایت اعتماد کردید و صاحب ویلا هم به این سایت اعتماد کرده.حالا بیاید سایت رو با یک اسمارت کانترکت جایگزین کنیم مثلا یک اسمارت کانترکت مینویسیم که این برنامه (روبات یا هرچی) از طریق IOT (اینترنت اشیا) به در خونه بتونه دستور باز شدن یا قفل شدن بده یا مثلا دسترسی به تلویزیون یا دستگاه چایی ساز بتونه بده و زمان این دسترسی ها رو بر اساس مقدار پولی که بهش واریز شده تنظیم کنه! به همین راحتی شما میتونید واسطه رو از سر راه حذف کنید هم اعتمادتون به این شبکه بیشتر از یک فرده و هم هزینه ها رو کم کردید. پول واریز میشه، یک پسورد یک بار مصرف جنریت میشه و برای خریدار فرستاده میشه و وقتی طرف رسید به خونه با زدن پسورد در رو باز میکنه. حالا بشینید فکر کنید که چه کارهای دیگه ای انجام داد بی نهایت کار وجود داره بی نهایت ایده و موقعیت وجود داره که شما میتونید با چند خط کوتاه برنامه روی شبکه بلاکچینی که از اسمارت کانترکت ها پشتیبانی میکنه اجرا کنید مثلا فرض کنید شما میتونید اسمارت کانترکتی بنویسید که به وای فای خونه تون دسترسی ایجاد کنه و هر زمان یکی از همسایه ها بخواد استفاده کنه با پرداخت رمزارز به این اسمارت کانترکت بتونه موقتا از اینترنت شما استفاده کنه آقا من هرچی بگم کم گفتم چون من اصلا آدم بازاری ای نیستم و مطمئنم خیلی از شما میتونید ایده های خیلی بهتر از این بدید که به راحتی قابل اجرا هستند.البته من اول پست نوشتم که اسمارت کانترکت ها خیلی هم باهوش نیستند چون محدودیت های خاص خودشون رو هم دارند. بزرگ ترین محدودیتی که دارند هم اینه که نمیتونن هر کاری رو که بخوان انجام بدن و اگر خوب بهش فکر کنید اونها فقط میتونند توی شبکه غیر متمرکزی که توش قرار دارند فعالیت کنند، مثلا اگر من و شما با هم شرط ببندیم که فردا بارون میاد یا نه و پولمون رو بریزیم توی یک اسمارت کانترکت و قراردادش رو جوری ببندیم که فردا یک سنسور باران رو چک کنه و بر اساس جواب اون کل پول رو به حساب یکی از ما برگردونه. مشکل اینجاست که در این وضعیت اسمارت کانترکت ما داره به جواب یک سنسور باران اعتماد میکنه یعنی به یک شکل از هوشمندی خارج از شبکه بلاکچین خودش پس اون قضیه قابل اعتماد بودن رو ما از دست میدیم، امنیت رو از دست میدیم چون داریم به یک چیزی خارج از شبکه اعتماد میکنیم که خودش امنیت نداره و جوابش میتونه دستکاری بشه پس خیلی مهمه که ما بدونیم اگر قراره از شبکه اصطلاحا trustless بلاکچین خارج بشیم و به یک شبکه trustful متصل بشیم داریم اون قضیه امنیت رو از دست میدیم.البته برای این هم راه حلی وجود داره مثلا مفهومی داریم به نام Oracle در بلاکچین که ورودی اسمارت کانترکت ها رو به عهده میگیرند که شاید بعدا در موردش صحبت کنیم اما هدف این بود که شما بدونید اسمارت کانترکتها چی هستند و به شما چه امکاناتی میدهند و چطور میتونند مفهوم دلال یا واسطه رو از معاملات روزمره حذف کنند و احتمال کلاهبرداری یا خطا رو به صفر برسونند وقتی قراردادی نوشته میشه هیچ دولت و شخص و واسطه و هکری نمی تونه اخلالی توی اون به وجود بیاره.و در پایان بلاکچین های مختلفی وجود دارند که از اسمارت کانترکت ها پشتیبانی میکنند که البته معروف ترینشون اتریوم هست اما کاردانو و پولکادات و کوساما و کازماس و خیلی های دیگه هم هستند که شاید توی یک مقاله دیگه بیایم اینها رو با هم مقایسه کنیم اما فعلا مهم اینه که بدونیم مفاهیم اولیه و کانسپت بین اینها مشترکه.لطفا اگر نظری پیشنهادی انتقادی دارید برام بنویسید.