قرارداد هوشمند (Smart Contract) برنامه‌ای است که روی بلاک‌چین ذخیره شده و هر وقت شرط‌هایش برقرار شود، کاری را که در کدش نوشته شده خودکار انجام می‌دهد. نه بانکی لازم است که تأییدش کند و نه کارمندی که دکمه‌ای را بزند. این برنامه آدرس و موجودی دارد، می‌تواند پول نگه دارد و طبق قاعده‌هایش آن را جابه‌جا کند. بعد از انتشار هم معمولاً هیچ‌کس، حتی سازنده‌اش، نمی‌تواند وسط کار جلویش را بگیرد یا قاعده‌اش را یواشکی عوض کند.

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

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

قرارداد هوشمند به زبان ساده

اصطلاح قرارداد هوشمند را نیک سابو (Nick Szabo)، رمزنگار و حقوق‌دان آمریکایی، سال‌ها پیش از بیت‌کوین مطرح کرد. او در نوشته‌ای که سال ۱۹۹۶ میلادی منتشر کرد، دستگاه فروش خودکار را «جد ابتدایی» قرارداد هوشمند می‌داند. سکه را می‌اندازید، دستگاه حساب می‌کند، خوراکی و بقیه پولتان را می‌دهد و اگر پولتان کم باشد، چیزی بیرون نمی‌آید. فروشنده‌ای در کار نیست، چون قاعده فروش داخل خود دستگاه ساخته شده است.

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

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

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

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

عمر یک قرارداد هوشمند معمولاً از این چند مرحله می‌گذرد:

  1. نوشتن. برنامه‌نویس قاعده‌ها را به زبان برنامه‌نویسی می‌نویسد. روی اتریوم بیشتر با Solidity می‌نویسند و گاهی با Vyper. روی سولانا زبان رایج Rust است و روی TON زبان‌های Tolk و FunC.
  2. انتشار. کد را به زبان ماشین (بایت‌کد) تبدیل می‌کنند و با یک تراکنش روی بلاک‌چین می‌فرستند. این تراکنش کارمزد دارد و از همین لحظه قرارداد آدرس خودش را دارد، درست مثل یک کیف پول. فرقش این است که کلید خصوصی ندارد و هیچ آدمی کنترلش نمی‌کند.
  3. صدا زدن. هر کسی می‌تواند به آدرس قرارداد تراکنش بفرستد و یکی از دستورهایش را اجرا کند؛ مثلاً «این مقدار توکن را به آن آدرس بفرست». کیف پولتان پیش از فرستادن تراکنش از شما امضا می‌خواهد.
  4. اجرا. نودهای شبکه کد را اجرا می‌کنند. روی اتریوم این کار را ماشین مجازی اتریوم (EVM) انجام می‌دهد. اگر شرط‌ها برقرار نباشد، تراکنش ناموفق می‌شود و هیچ تغییری ثبت نمی‌شود.
  5. پرداخت کارمزد. هر قدم محاسبه هزینه دارد. روی اتریوم به این هزینه «گس» می‌گویند و روی ترون «انرژی». تراکنش ناموفق هم کارمزد محاسبه‌ای را که تا آن لحظه انجام شده، می‌پردازد. دلیل بالا و پایین رفتن این هزینه را در چرا کارمزد اتریوم زیاد می‌شود توضیح داده‌ایم.
  6. ثبت نتیجه. موجودی‌ها و داده‌های قرارداد در بلاک بعدی به‌روز می‌شود و همه آن را می‌بینند.

قرارداد هوشمند از دنیای بیرون خبر ندارد

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

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

قرارداد هوشمند با قرارداد کاغذی و اپلیکیشن بانک چه فرقی دارد؟

برای اینکه جای قرارداد هوشمند روشن شود، آن را کنار دو چیز آشنا بگذاریم: قراردادی که روی کاغذ امضا می‌کنید و اپلیکیشن بانک یا صرافی که با آن پول جابه‌جا می‌کنید.


قرارداد کاغذی

اپلیکیشن بانک یا صرافی

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

چه کسی اجرایش می‌کند؟

خود طرفین؛ اگر نکردند، دادگاه

شرکت، روی سرورهای خودش

نودهای بلاک‌چین، طبق کد

می‌شود قاعده‌اش را عوض کرد؟

با توافق طرفین

شرکت هر وقت بخواهد

فقط اگر راهش از اول در کد گذاشته شده باشد

اگر اشتباهی رخ دهد

داور یا دادگاه رسیدگی می‌کند

پشتیبانی بررسی می‌کند و گاهی برمی‌گرداند

معمولاً راه برگشتی نیست

چه کسی متن یا کدش را می‌بیند؟

طرفین

فقط شرکت

همه

از دنیای بیرون خبر دارد؟

بله، آدم‌ها قضاوت می‌کنند

بله

نه، مگر با اوراکل

به چه چیزی اعتماد می‌کنید؟

طرف مقابل و دادگاه

شرکت

درستی کد و کسی که کلید مدیریتش را دارد

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

احتمالاً همین حالا هم از قرارداد هوشمند استفاده کرده‌اید

تتری که روی شبکه ترون (TRC20) یا اتریوم (ERC20) دارید، در واقع عددی است که در داده‌های قرارداد تتر ثبت شده است. این قرارداد جدولی دارد که می‌گوید هر آدرس چقدر تتر دارد. وقتی تتر می‌فرستید، دستور `transfer` همین قرارداد را صدا می‌زنید و به آن می‌گویید «از موجودی من کم کن و به موجودی این آدرس اضافه کن».

همین نکته چند چیز آشنا را توضیح می‌دهد:

  • چرا برای فرستادن تتر روی ترون TRX لازم است. روی ترون فقط تراکنش‌هایی که یک قرارداد را صدا می‌زنند انرژی مصرف می‌کنند. فرستادن خود TRX قراردادی را صدا نمی‌زند و فقط پهنای باند می‌خواهد، ولی فرستادن تتر قرارداد را صدا می‌زند و انرژی می‌خواهد. اگر انرژی نداشته باشید، کیف پول برایش TRX می‌سوزاند. جزئیاتش در ترون چیست آمده است.
  • چرا تتر جعلی وجود دارد. هر کسی می‌تواند قرارداد تازه‌ای بسازد و اسم و نمادش را Tether و USDT بگذارد. چیزی که تتر واقعی را از جعلی جدا می‌کند اسم نیست، آدرس قرارداد است. روش بررسی‌اش را در تتر فیک چیست ببینید.
  • چرا تتر روی هر شبکه فرق دارد. تتر ترون و تتر اتریوم دو قرارداد جدا روی دو بلاک‌چین جدا هستند و از هم خبر ندارند. برای همین انتخاب شبکه اشتباه دردسر درست می‌کند. فرقشان را در تتر TRC20 چیست و چه تفاوتی با ERC20 دارد نوشته‌ایم.

برای اینکه همه کیف پول‌ها بتوانند با همه توکن‌ها کار کنند، قرارداد توکن‌ها از استانداردهای مشترکی پیروی می‌کنند. روی اتریوم مهم‌ترینشان ERC-20 است. این استاندارد می‌گوید هر توکن باید دستورهایی مثل «موجودی این آدرس چقدر است؟» (`balanceOf`)، «این مقدار را بفرست» (`transfer`) و «به فلان قرارداد اجازه بده از موجودی من خرج کند» (`approve`) داشته باشد.

مثال اول: قرارداد امانی برای خرید گوشی دست‌دوم

فرض کنید در یک سایت آگهی، گوشی دست‌دومی را از فروشنده‌ای در شهر دیگر به قیمت ۵۰۰ تتر پسندیده‌اید. مشکل همیشگی این معامله‌ها را می‌دانید: اگر اول پول بدهید، ممکن است گوشی هرگز نرسد؛ اگر فروشنده اول گوشی را بفرستد، ممکن است پولش را نگیرد. معمولاً یک واسطه امین این گره را باز می‌کند. ببینیم قرارداد هوشمند چطور می‌تواند جای این واسطه را بگیرد. (عددها فرضی‌اند.)

قاعده‌های قرارداد را این‌طور می‌نویسیم:

  1. خریدار ۵۰۰ تتر به آدرس قرارداد می‌فرستد. پول در قرارداد می‌ماند و نه خریدار می‌تواند پسش بگیرد، نه فروشنده می‌تواند برش دارد.
  2. فروشنده وقتی می‌بیند پول در قرارداد قفل شده، با خیال راحت گوشی را پست می‌کند.
  3. خریدار بعد از تحویل گوشی، دستور «تحویل گرفتم» را در قرارداد صدا می‌زند و ۵۰۰ تتر خودکار به آدرس فروشنده می‌رود.
  4. اگر تا هفت روز کسی کاری نکرد، قرارداد پول را به خریدار برمی‌گرداند.

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

کجای کار می‌لنگد؟

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

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

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

درسی که این مثال می‌دهد از تعریف‌های کتابی مهم‌تر است: قرارداد هوشمند واسطه را فقط برای کارهایی حذف می‌کند که کاملاً روی بلاک‌چین اتفاق می‌افتند. برای همین بهترین کاربردهایش جایی است که هر دو سر معامله دارایی دیجیتال باشد؛ مثل تبدیل یک توکن به توکن دیگر در یک صرافی غیرمتمرکز. آنجا قرارداد همه‌چیز را خودش می‌بیند و به هیچ داوری نیاز ندارد.

مثال دوم: قرارداد واقعی تتر را باز کنیم

حالا برویم سراغ یک قرارداد واقعی که احتمالاً هر روز با آن کار می‌کنید. قرارداد تتر روی اتریوم در آدرس `0xdAC17F958D2ee523a2206206994597C13D831ec7` منتشر شده و اسمش در کد TetherToken است. کدش در صفحه این قرارداد در Etherscan عمومی است و هر کسی می‌تواند فهرست دستورهایش را ببیند.

بخشی از این دستورها همان‌هایی است که استاندارد ERC-20 می‌خواهد: `transfer` برای فرستادن، `balanceOf` برای دیدن موجودی و `approve` برای اجازه خرج کردن. ولی کنار آن‌ها دستورهایی هم هست که فقط صاحب قرارداد، یعنی شرکت تتر، می‌تواند صدا بزند:

  • `issue` و `redeem`: ساختن تتر تازه و از بین بردن تتر موجود. عرضه تتر با همین دو دستور کم و زیاد می‌شود.
  • `pause` و `unpause`: متوقف کردن و دوباره راه انداختن انتقال‌ها.
  • `addBlackList` و `destroyBlackFunds`: گذاشتن یک آدرس در فهرست سیاه و از بین بردن موجودی آن آدرس.
  • `deprecate`: معرفی یک قرارداد تازه به‌جای این قرارداد.
  • `transferOwnership`: سپردن مالکیت قرارداد به آدرس دیگر.

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

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

چه کسی می‌تواند یک قرارداد را عوض یا متوقف کند؟

مثال تتر نشان داد پیش از اعتماد به هر قرارداد باید یک سؤال ساده بپرسید: کلیدش دست کیست؟ بیشتر قراردادهایی که با آن‌ها سروکار پیدا می‌کنید در یکی از این سه دسته‌اند:

نوع قرارداد

چه کسی کنترل دارد

خوبی‌اش

ریسکش

بدون مالک و تغییرناپذیر

هیچ‌کس

هیچ‌کس نمی‌تواند قاعده را عوض کند یا پول شما را مسدود کند

باگش هم برای همیشه می‌ماند

با کلید مدیریت (توقف، فهرست سیاه)

صاحب کلید، مثلاً شرکت صادرکننده

اگر هکی رخ دهد، می‌شود جلوی ضرر بیشتر را گرفت

صاحب کلید می‌تواند دارایی شما را هم مسدود کند

قابل ارتقا

صاحب کلید ارتقا یا رأی دارندگان توکن

باگ را می‌شود بعداً درست کرد

منطق قرارداد ممکن است بی‌خبر عوض شود

قرارداد هوشمند در اتریوم به‌طور پیش‌فرض تغییرناپذیر است. ولی به گفته ethereum.org، با الگوهایی مثل «پراکسی» می‌شود منطق قرارداد را بعداً با کد تازه عوض کرد. روی سولانا هم برنامه‌ها تا وقتی «اختیار ارتقا» (upgrade authority) دارند قابل تغییرند و اگر این اختیار لغو شود، برای همیشه ثابت می‌مانند.

هیچ‌کدام از این سه دسته ذاتاً بد نیست. مهم این است که بدانید با کدامشان سروکار دارید. خیلی از پروژه‌ها در سایتشان می‌گویند «غیرمتمرکز»، ولی کلید ارتقای قراردادشان دست یک نفر است.

قرارداد هوشمند در کدام شبکه‌ها اجرا می‌شود؟

اولین بلاک‌چینی که قرارداد هوشمند همه‌کاره را عملی کرد اتریوم بود که ۸ مرداد ۱۳۹۴ راه افتاد. امروز بیشتر شبکه‌های بزرگ قرارداد هوشمند دارند، ولی هر کدام به روش خودش:

شبکه

قرارداد را چه چیزی اجرا می‌کند

زبان رایج

نکته‌ای که باید بدانید

اتریوم

ماشین مجازی اتریوم (EVM)

Solidity، Vyper

پیشگام قراردادهای هوشمند؛ کارمزد با گس

BNB Smart Chain

سازگار با EVM

Solidity

قرارداد اتریوم معمولاً با تغییر کم اینجا هم کار می‌کند

ترون

ماشین مجازی ترون (TVM)

Solidity

ارتقاهای EVM را مرحله‌به‌مرحله دنبال می‌کند؛ کارمزد با انرژی

سولانا

ماشین مجازی سولانا (sBPF)

Rust

به قرارداد «برنامه» می‌گویند و داده‌ها در حساب‌های جدا نگه داشته می‌شوند

TON

ماشین مجازی TON

Tolk، FunC

قراردادها فقط با فرستادن پیام به هم کار می‌کنند

بیت‌کوین

زبان Script

—

عمداً محدود است؛ حلقه ندارد و برای شرط‌های ساده مثل چندامضایی ساخته شده

دو نکته از این جدول به کار روزمره می‌آید. اول اینکه شبکه‌های سازگار با EVM (اتریوم، BNB Smart Chain و خیلی از لایه‌دوم‌ها) آدرس هم‌شکل دارند. یک آدرس `0x...` روی همه‌شان معتبر به نظر می‌رسد، ولی دارایی هر شبکه جداست. دوم اینکه ویکی بیت‌کوین صریحاً می‌گوید Script بیت‌کوین عمداً «تورینگ‌کامل» نیست؛ یعنی نمی‌شود با آن هر برنامه‌ای نوشت. برای همین دیفای و NFT به‌جای خود بیت‌کوین بیشتر روی شبکه‌هایی مثل اتریوم ساخته شده‌اند.

قرارداد هوشمند به چه کاری می‌آید؟

بیشتر چیزهایی که در دنیای رمزارز اسمشان را می‌شنوید، در اصل یک یا چند قرارداد هوشمندند:

  • توکن‌ها و استیبل‌کوین‌ها. تتر، USDC و هزاران توکن دیگر روی شبکه‌هایی مثل اتریوم و ترون قرارداد هوشمندند. انواع استیبل‌کوین و فرق پشتوانه‌هایشان را در استیبل‌کوین چیست توضیح داده‌ایم.
  • صرافی غیرمتمرکز. در صرافی‌هایی مثل یونی‌سواپ، قرارداد دو توکن را در یک استخر نگه می‌دارد و قیمت را با فرمول تعیین می‌کند. یک سواپ واقعی را قدم‌به‌قدم در اتریوم چیست دنبال کرده‌ایم.
  • وام با وثیقه رمزارز. قرارداد وثیقه شما را نگه می‌دارد و اگر ارزشش از حدی پایین‌تر برود، خودکار می‌فروشدش. این بخش از کاربردها را در دیفای چیست با مثال عددی توضیح داده‌ایم.
  • NFT. مالکیت هر NFT در قراردادی ثبت شده که می‌گوید هر شماره متعلق به کدام آدرس است.
  • کیف پول چندامضایی. قراردادی که پول را فقط وقتی جابه‌جا می‌کند که مثلاً دو نفر از سه نفر امضا کنند. شرکت‌ها و پروژه‌ها خزانه‌شان را این‌طور نگه می‌دارند.
  • سازمان‌های خودگردان (DAO). قراردادی که خزانه یک گروه را نگه می‌دارد و فقط با رأی دارندگان توکن خرج می‌کند.
  • دارایی‌های توکنیزه. سهام، طلا یا اوراقی که نسخه توکنی‌شان روی بلاک‌چین ساخته شده و مثل هر توکن دیگری جابه‌جا می‌شود. نمونه‌اش را در سهام توکنیزه و xStocks ببینید.

ریسک‌های قرارداد هوشمند

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

باگ در کد

قرارداد فرق «کاری که سازنده می‌خواست» با «کاری که سازنده نوشت» را نمی‌فهمد. ethereum.org تخمین می‌زند پولی که تا امروز به خاطر ضعف‌های امنیتی قراردادهای هوشمند دزدیده شده یا از دست رفته، به‌راحتی از یک میلیارد دلار بیشتر است. دو نمونه معروفش این‌هاست:

  • The DAO در سال ۱۳۹۵. مهاجم از حفره‌ای در کد استفاده کرد و حدود ۳٫۶ میلیون ETH بیرون کشید. ماجرا آن‌قدر بزرگ بود که اتریوم برای برگرداندن پول‌ها قاعده شبکه را عوض کرد (هارد فورک). بخشی از جامعه که با این کار مخالف بود، روی زنجیره قبلی ماند و اتریوم کلاسیک از همان‌جا به وجود آمد.
  • کیف پول‌های Parity. یک اشتباه در قرارداد مشترک این کیف پول‌ها باعث شد بیش از ۳۰۰ میلیون دلار ETH برای همیشه قفل شود. پولی دزدیده نشد، ولی هیچ‌کس هم دیگر نمی‌تواند خرجش کند.

حسابرسی کد (audit) کمک می‌کند، ولی تضمین نیست. خود مستندات اتریوم هشدار می‌دهد که حسابرسی همه باگ‌ها را پیدا نمی‌کند و نباید آن را راه‌حل همه‌چیز دانست.

قرارداد مخرب و اجازه خرج کردن

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

داده غلط و دستکاری قیمت

قراردادی که قیمت را از یک منبع ضعیف می‌خواند، فریب می‌خورد. ethereum.org نمونه‌ای را شرح می‌دهد که در آن مهاجم با وام لحظه‌ای (flash loan) قیمت یک توکن را در یک صرافی غیرمتمرکز موقتاً بالا می‌برد و از قرارداد وام بیشتر از سهمش قرض می‌گیرد.

کلید مدیریت

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

پیش از کار با یک قرارداد هوشمند چه چیزهایی را چک کنیم؟

اگر می‌خواهید کیف پول شخصی‌تان را به یک صرافی غیرمتمرکز، بازی یا پروژه تازه وصل کنید، این چک‌لیست جلوی بیشتر ضررها را می‌گیرد. فهرست کامل‌تر ترفندهای کلاهبرداران را هم در ۱۰ کلاهبرداری رایج ارز دیجیتال جمع کرده‌ایم.

  1. آدرس قرارداد را از منبع رسمی بگیرید. از سایت یا مستندات خود پروژه، نه از لینکی که در پیام خصوصی، گروه تلگرامی یا تبلیغ جست‌وجو دیده‌اید. سایت‌های جعلی معمولاً ظاهری کاملاً شبیه سایت اصلی دارند.
  2. قرارداد را در اکسپلورر شبکه باز کنید. در Etherscan، Tronscan یا BscScan ببینید کد قرارداد منتشر و تأیید (Verified) شده است یا نه. قراردادی که کدش را پنهان کرده، دلیلی برای اعتماد به شما نداده است.
  3. بپرسید کلیدش دست کیست. پروژه باید بگوید قرارداد مالک دارد یا نه، قابل ارتقاست یا نه و کلید ارتقا دست کیست.
  4. گزارش حسابرسی را ببینید، ولی آن را ضمانت ندانید.
  5. اجازه خرج کردن را محدود بدهید. اگر کیف پول اجازه نامحدود پیشنهاد کرد، مقدار را به همان مبلغ معامله کم کنید و بعد از کار، اجازه‌های قدیمی را لغو کنید.
  6. اول با مبلغ کم امتحان کنید. کارمزد یک تراکنش آزمایشی خیلی کمتر از ضرر یک اشتباه است.
  7. عبارت بازیابی را هرگز در هیچ سایتی وارد نکنید. هیچ قرارداد و هیچ پروژه معتبری برای کار کردن به عبارت بازیابی شما نیاز ندارد. نمونه یکی از رایج‌ترین فریب‌ها را در کلاهبرداری پیام ۱۲ کلمه ببینید.

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

پرسش‌های رایج

«هوشمند» یعنی قرارداد هوش مصنوعی دارد؟

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

بیت‌کوین قرارداد هوشمند دارد؟

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

می‌شود قرارداد هوشمند را تغییر داد یا پاک کرد؟

به‌طور پیش‌فرض نه. کدی که روی اتریوم منتشر شد، همان‌جا می‌ماند. ولی سازنده می‌تواند از اول راهی برای ارتقا یا توقف در کد بگذارد؛ مثلاً با الگوی پراکسی یا دستوری مثل `pause` در قرارداد تتر. پس جواب دقیق را فقط خود کد قرارداد می‌دهد.

قرارداد هوشمند از نظر حقوقی معتبر است؟

بیشتر قراردادهای هوشمند اصلاً سند حقوقی نیستند و فقط برنامه‌اند. ولی می‌شود از آن‌ها برای اجرای یک قرارداد حقوقی واقعی هم استفاده کرد. اعتبارش به قانون هر کشور بستگی دارد. برای نمونه، کمیسیون حقوقی انگلستان و ولز (Law Commission) در گزارشی که ۴ آذر ۱۴۰۰ به دولت داد نتیجه گرفت قوانین فعلی انگلستان و ولز می‌توانند از این «قراردادهای حقوقی هوشمند» پشتیبانی کنند و برای این کار به قانون تازه نیازی نیست.

اوراکل چیست و چرا مهم است؟

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

قرارداد هوشمند با دپ (dApp) چه فرقی دارد؟

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

برای یاد گرفتن نوشتن قرارداد هوشمند از کجا شروع کنم؟

بیشتر آموزش‌ها از Solidity و اتریوم شروع می‌کنند، چون همین زبان روی شبکه‌های سازگار با EVM مثل BNB Smart Chain و روی ترون هم به کار می‌رود. مستندات توسعه‌دهندگان اتریوم نقطه شروع خوبی است. قراردادهای اولتان را روی شبکه‌های آزمایشی (testnet) منتشر کنید که پول واقعی در آن‌ها نیست.

برای خرید تتر در سواپ‌ولت باید با قرارداد هوشمند کار کنم؟

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