یک مثال ساده برای که معمولا در نوشتههای مربوط به معرفی قراردادهای هوشمند استفاده میشود، مثال دستگاههای فروش خودکار یا vending machine است. این دستگاهها در جاهایی مثل فرودگاهها و ایستگاههای مترو کاربرد دارند و به ازای دریافت وجهی، نوشیدنی، قهوه یا حتی کتاب به مشتری تحویل میدهند. وقتی شما با این دستگاه مواجه میشوید، با فرض اینکه دستگاه روشن و سالم باشد، به محض انداختن سکه توسط شما، نوشیدنی یا قهوه ارائه خواهد داد. یعنی یک سیستم بسته و بدون احتیاج به دخالت بیرونی به طوری که شما می توانید به تصویری که از ماشین فروش دارید اعتماد کنید و به راحتی با آن کار کنید. این مثال را می توان برای عملکرد قراردادهای هوشمند استفاده کرد. Smart contract یا قرارداد هوشمند منطق برنامه شماست. آن کدی که نوشته شده تا بتواند روند اتفاقهایی که در قرارداد هوشمند میافتد را مدیریت نماید.
قرارداد هوشمند بیت کوین (!)
بیت کوین اولین قرارداد هوشمندی بود که به دنیا عرضه شد و یک قابلیت داشت و آن ثبت تراکنش بود. وقتی بخواهید مقداری بیت کوین از نفر X به نفر Y منتقل شود، این تراکنش در قالب منطقی که در قرارداد هوشمندِ بیت کوین وجود دارد، ذخیره میشود. در چه بستری؟ بر روی شبکهای از کامپیوترهایی (مثلا ۱۰,۰۰۰ یا ۲۰,۰۰۰ دستگاه) که در سراسر دنیا پراکندهاند (غیر متمرکز بودن شبکه). در گام بعد کامپیوترها با منطقی که بین آنها تعریف شده، میتوانند تائید کنند که آیا X این میزان بیت کوین دارد یا نه. چنانچه این اجماع صورت بگیرد که X این میزان بیت کوین دارد، این انتقال انجام میپذیرد.موفقیتی که بیت کوین داشت باعث شد توسعهدهندههای IT به این فکر بیفتند که از این قابلیت نه فقط برای ذخیره سازی تراکنشهای مالی، بلکه برای ذخیره تراکنشهای هر نوع برنامهای استفاده شود. تصور کنید مثلا برنامهها یا اپلیکیشنهای تحت وب را در یک هاست متمرکز ذخیره میکنیم و آن هاست یک سری سرویسها را ارائه میکند تا آن برنامه یا اپلیکیشن اجرا بشود. در نسل دوم بلاکچینها که با اتریوم شروع شد، به برنامهنویسها این اجازه را دادند که با استفاده از زبانهای مخصوصی که خودشان توسعه دادند (مثل زبان برنامه نویسی سالیدتی) برنامهای در قالب یک smart contract بنویسند و آن را بر روی شبکه بلاکچین اتریوم منتشر کنند. زمانی که برنامهای روی بلاک چین منتشر شد، قابلیتهای بلاک چین نیز روی آن اعمال میشود.
قابلیتهای قراردادهای هوشمند
برخی از این قابلیتهای قراردادهای هوشمند عبارتند از:
عدم تمرکز؛
تغییر ناپذیری؛
در دسترس بودن؛
قابلیت بررسی؛
شفافیت؛
حل مشکل اعتماد؛
امنیت.
یعنی برنامهای که در بلاک چین منتشر شد، دیگر قابل تغییر نیست. این برنامه بعد از انتشار عمومی محسوب میشود و همه میتوانند کد آن را ببینند و این میتواند برای سایرین اعتماد جلب کند. به همین خاطر در محیط هایی که نیازمند اعتماد است، میتوان از قابلیت «شفاف بودن» بلاکچین کمک گرفت و برنامه را در قالب یک قرارداد هوشمند منتشر نمود تا کاربران، بتوانند از آن استفاده کنند.
تفاوتهای برنامهنویسی قراردادهای هوشمند با برنامهنویسی متعارف
برنامه نویسی اسمارت کارنتکت تفاوتهایی با برنامهنویسی معمولی دارد که در اینجا به یک جنبهی آن اشاره میکنیم:ذخیره هر چیز در بلاکچین هزینه دارد و شما بعنوان کسی که میخواهید چیزی روی بلاک چین ذخیره کنید باید هزینه آنرا بپردازید. این هزنیه در شبکه ترون در قالب «پهنای باند»، «انرژی» یا «ترون» میتواند پرداخت شود. هر چیز که در بلاک چین ذخیره میشود هزینه بر است یعنی اگر در اسمارت کانترکت، تابعی بنویسید که «یک کلمه» را در بلاکچین ذخیره کند، یک هزینهای باید برای آن بپردازید و برای درج «پنج کلمه» هزینهای بیشتر. شما بعنوان یه برنامه نویس Smart Contract باید بدانید که مانند برنامه نویسی معمولی نیست که یک دیتابیس نامحدود در اختیارتان باشد و شما بتوانید کدهایی که بهینه نیستند در آن بکار ببرید. یا مثلا دادههایی در آن ذخیره کنید که بیش از یک بار در دیتابیس ذخیره شوند. اینها مواردی ست که باید به دقت بهشان فکر کرد، تا قرارداد بهینه باشد.از طرف دیگر عمدتا عادت داریم یک فضای توسعه در اختیار داشته باشیم و همه چیز تحت کنترل خودمان باشد و اگر جایی کدها بهینه نبود یا حتی اگر باگی وجود داشت، اجازهی تغییر و اصلاح داشته باشیم. در حالیکه وقتی قرارداد هوشمند منتشر میشود دیگر قابل اصلاح نیست حتی اگر باگهای بزرگی در آن وجود داشته باشد. چون در بستر بلاکچین ذخیره شده و دادههای بلاکچین غیر قابل تغییر است.این موارد باعث میشود بعنوان یک برنامهنویس که وارد فضای برنامهنویسی در حوزه قرارداد هوشمند میشویم با چالشهایی روبرو شویم.
قراردادهای هوشمند بلاکچین ترون
بلاکچین ترون در ابتدا انشعابی از بلاکچین اتریوم بود و در ادامه تفاوتهایی در آن ایجاد شد. این شبکه در توسعه قراردادهای هوشمند بسیار موفق بود.زبانی که برای توسعه قرارداد هوشمند در بستر بلاکچین ترون استفاده میشود زبان برنامهنویسی Solidity است. Solidity سالیدیتی زبانی است که توسط توسعه دهندگان بلاکچین اتریوم برای نوشتن قرارداد هوشمند روی بلاکچین اتریوم، ابداع شد. با توجه انشعاب بلاکچین ترون از اتریوم، از همان زبان برای توسعه DApp های ترون استفاده گردید.ما در گروه آموزشی فردانش در دوره «آموزش برنامه نویسی solidity جهت توسعه قراردادهای هوشمند ترون» طی پروژهای عملی و گام به گام به این موضوع میپردازیم.