قرارداد هوشمند
امین محقق | 1395.07.08

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

منظور از قراردادهای هوشمند چیست؟

در مورد فن آوری بلاکچین و پول های رمزنگاری شده، قراردادهای هوشمند:

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

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

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

به سه روش مفید می توان آنرا ملموس و روشن ساخت:

  1. حساب های بانکی با دستورالعمل های منعقد.
  2. جایگزینی مفاد قانونی با کد کامپیوتری
  3. یک مثال از یک قرارداد هوشمند واقعی

 

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

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

دستورالعمل هایی وجود دارد که من در ارتباط با حساب بانکی تعیین کرده ام.

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

  1. جایگزینی مفاد قانونی با کد کامپیوتری

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

ایده این است که شما چیزی مانند یک قرارداد کاغذی معمولی با تبصره ها و بندهایی داشته باشید همانطور که وکلا از آن استفاده می کنند و سپس بندی داشته باشید که به یک قرارداد هوشمند روی بلاک چین اشاره دارد و می گوید که «این چیزی که هر دوی ما با اجرای آن موافقیم و نتایج اجرای کد را می پذیریم»

  1. یک نمونه از قرارداد هوشمند واقعی

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

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

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

سایت Ethereum.org اینرا به این صورت توضیح می دهد:

«این قراردادی است که برای ایجاد کننده این قرارداد 10000 واحد پولی ایجاد کرده و سپس هرکسی که بالانس کافی داشته باشد می تواند آنرا به دیگران ارسال کند. این پول ها حداقل واحد قابل تجارت هستند و نمی توانند به واحدهای خردتر تقسیم شوند، اما برای کاربران نهایی به صورت واحدهای 100 تایی ارائه می شود که هرجزء به صد واحد خرد قابل تقسیم است و به این ترتیب مالکیت یک واحد پولی به صورت یک صدم در صد از کل نمایش داده می شود.»

این با پرداخت خودکار بانکی چه تفاوتی دارد؟

کنترل

بانک من محافظ اصلی حساب بانکی من است. بانک کنترل کامل روی پول من دارد و اگر دلش بخواهد می تواند پول را به حساب من اضافه کند یا کسر کند. (در عمل بانک ها گاهی سرخود این کار را می کنند.)

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

کد

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

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

شفافیت

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

انعطاف

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

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

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

برای مثال وقتی دو بانک یک تجارت دوطرفه و پیچیده انجام می دهند و هیچ موسسه تهاتری هم آنرا رصد نمی کند، این یک تجارت OTC یا Over the Counter خوانده می شود. توافقاتی بین بانک ها و بدون نیاز به تایید اعتبار شخص ثالث وجود دارد. این تجارتها معمولا شبیه شرط بندی هستند برای مثال، اگر قبل از پایان سال این اتفاق افتاد، تو به من پول می پردازی در غیر این صورت من می پردازم.

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

عدم توافق گاهی رخ می دهد یعنی وقتی طرفین روی نتیجه تجارت به دلایلی مانند زیر توافق نداشته باشند:

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

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

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

برای مطالعه بخش اول مقاله به اینجا مراجعه کنید.

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

 

بلاک چین هایی بدون قرارداد هوشمند بلاک چین ها با قرارداد هوشمند بلاک چین هایی با قرارداد هوشمند تورینگ کامل
چه چیزی ذخیره توزیعی محاسبه توزیعی: منطق از پیش مشخصی را محاسبه می کند. محاسبه توزیعی: می تواند هر منطقی را محاسبه کند.
مثال بیت کوینلایت کوینمالتی چین NXT اتریومEris (خصوصی)Clearmatics (خصوصی)

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

 

زنجیره های جانبی (SideChains) : یعنی اینکه بلاک چین ها به بلاک چین اصلی بیت کوین وصل می شوند و می توانند قراردادهای هوشمند را انجام دهند: با داشتن یک بلاک چین متفاوت که موازی با بلاک چین بیت کوین اجرا می شود، و با امکان حرکت دوجانبه به زنجیره اصلی بیت کوین و بعد به زنجیره های جانبی، می توان قراردادهای هوشمند را میسر ساخت.

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

اتریوم:

مکانیزمهایی برای جلوگیری از سوءاستفاده وجود دارد و شما باید برای استفاده از قدرت محاسباتی مبلغی را با پول اتریوم یعنی ETH پرداخت کنید و این پول به حساب استخراج کنندگانی می رود که کد شما را اجرا می کنند.

نکاتی که جای سئوال دارد

غیرمتمرکزسازی گران است. هرچه کامپیوترهای بیشتر کد را اجرا کنند، برای استفاده نهایی گران تر تمام می شود. غیرمتمرکزسازی رایگان تمام نمی شود. اگر از سیستمی استفاده کنید که ده هزار کامپیوتر کد شما را اجرا می کنند، بخشی از این محاسبه ها را باید پرداخت کنید: عملگرهای کامپیوتری این کار را رایگان انجام نمی دهند.

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

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

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

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

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

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

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