Smart Contract چیست؟
Smart Contract چیست؟
برنامهای Onchain است که Code و State دارد و در پاسخ به Transaction یا Call، Logic تعریفشده را اجرا میکند.
قرارداد هوشمند یا Smart Contract برنامهای است که روی یک شبکه بلاکچینی قابل برنامهریزی اجرا میشود و شامل مجموعهای از Functionها و State است. کاربر یا قرارداد دیگری میتواند با ارسال Transaction یا Message Call Function مشخصی را فراخوانی کند و شبکه نتیجه اجرای آن را طبق Rules یکسان اعتبارسنجی کند.
در Ethereum، Smart Contract در یک Address مشخص قرار دارد و Code و State آن توسط Ethereum Virtual Machine یا EVM پردازش میشود. Ethereum.org نیز Smart Contract را برنامهای تعریف میکند که روی Blockchain اجرا میشود و از Code و Data تشکیل شده است. معرفی رسمی Smart Contract در Ethereum.org
عنوان «قرارداد» ممکن است این تصور را ایجاد کند که هر Smart Contract الزاماً یک قرارداد حقوقی قابل اجرا در دادگاه است؛ چنین برداشتی درست نیست. Smart Contract در اصل کد اجرایی است و آثار حقوقی یک توافق به قانون، موضوع قرارداد، هویت طرفین و حوزه قضایی مربوط بستگی دارد.
Smart Contract برنامهای است که پس از Deploy شدن میتواند Logic مشخصی را در پاسخ به Transaction یا Call اجرا کند. برای مثال Contract میتواند بررسی کند آیا فرستنده مجوز لازم را دارد، مقدار کافی Token در اختیار او هست، Deadline نگذشته یا شرط دیگری برقرار است؛ سپس State را تغییر دهد یا Transaction را Revert کند.
تشبیه ساده «اگر X رخ داد، Y را انجام بده» برای شروع مفید است، اما Smart Contractهای واقعی میتوانند State، Access Control، چند Contract دیگر، Token Standard و منطق پیچیدهتری داشته باشند. برای درک زیرساختی که State و Transaction را ثبت میکند، مقاله بلاکچین چیست؟ مکمل این بخش است.
اصطلاح Smart Contract پیش از ظهور Bitcoin و Ethereum مطرح شده بود. Nick Szabo در سال ۱۹۹۴ Smart Contract را یک computerized transaction protocol برای اجرای شرایط یک توافق توصیف کرد. متن Smart Contracts نوشته Nick Szabo در ۱۹۹۴
آنچه Blockchainهای قابل برنامهریزی بعدها اضافه کردند، اجرای قابل Verify این Logic در یک State Machine توزیعشده بود؛ بهطوری که چند Node مستقل بتوانند به نتیجه یکسان برسند.
در Ethereum، EVM محیط اجرای این Bytecode است. جزئیات این State Machine در مقاله ماشین مجازی اتریوم چیست؟ توضیح داده شده است.
Ethereum.org نیز Contract را مجموعهای از Data و Function میداند که در Address مشخص قرار دارد و در پاسخ به Transaction اجرا میشود. ساختار Smart Contract در Ethereum.org
عبارت Self-executing گاهی گمراهکننده است. Contract معمولاً خودبهخود و بدون Trigger از خواب بیدار نمیشود. Function آن باید با Transaction، Call یا سازوکار Automation بیرونی فراخوانی شود.
برای مثال اگر Contract باید «در ساعت ۱۲ پرداخت انجام دهد»، خود Blockchain بهتنهایی یک Cron Job داخلی عمومی نیست که در آن ساعت Function را Call کند. معمولاً یک Actor یا Automation Service باید Transaction لازم را ارسال کند، سپس Contract شرط زمان را بررسی میکند.
بنابراین ویژگی صحیحتر Smart Contract، اجرای Deterministic Rules پس از دریافت Trigger معتبر است، نه اجرای خودکار بدون هیچ عامل آغازکننده.
اجرای Code روی Ethereum منابع محاسباتی مصرف میکند. Gas واحد اندازهگیری این Computational Effort است و Operationهای پیچیدهتر معمولاً Gas بیشتری نسبت به یک انتقال ساده مصرف میکنند.
Gas علاوه بر قیمتگذاری منابع، از اجرای نامحدود Computation و Spam جلوگیری میکند. حتی Transaction ناموفق نیز ممکن است Gas مصرف کند، چون Nodeها برای اجرای آن منابع صرف کردهاند. راهنمای رسمی Gas در Ethereum بنابراین Contract «رایگان» اجرا نمیشود و هزینه Execution یکی از محدودیتهای مهم طراحی Applicationهای Onchain است.
Smart Contract میتواند نیاز به اعتماد به یک Operator برای اجرای Rules مشخص را کاهش دهد، چون Code و State Onchain قابل Verify هستند. اما «حذف کامل اعتماد» ادعای درستی نیست.
اعتماد ممکن است به بخشهای دیگری منتقل شود:
Code یک Contract معمولی که در یک Address Deploy شده، بهصورت مستقیم قابل ویرایش نیست. اما این به معنی «تمام Smart Contractها برای همیشه غیرقابل تغییرند» نیست.
توسعهدهندگان میتوانند از چند معماری استفاده کنند:
Ethereum.org نیز توضیح میدهد Code در Address Deployشده Immutable است، اما Proxy و Migration امکان تغییر Logic اجرایی را فراهم میکنند. این قابلیت در عوض Trust Assumption جدیدی درباره Upgrade Authority ایجاد میکند. راهنمای Upgrade قراردادهای هوشمند
Smart Contract نمیتواند بهطور مستقیم Website، API، قیمت بازار، وضعیت آبوهوا یا سند دنیای واقعی را از اینترنت بخواند. Ethereum این محدودیت را عمداً برای حفظ Consensus دارد.
Oracle سازوکاری است که داده Offchain را به شکلی قابل استفاده برای Contract وارد میکند. اما Oracle Problem از بین نمیرود: Contract فقط میتواند دادهای را پردازش کند که به آن داده شده و صحت واقعیت بیرونی را بهطور مستقل «بداند».
Ethereum.org نیز تصریح میکند Smart Contract به تنهایی نمیتواند داده رویدادهای دنیای واقعی را Retrieve کند و برای این کار به Oracle نیاز دارد. راهنمای رسمی Oracle در Ethereum.org
نه لزوماً. Smart Contract یک Software Program است. ممکن است بخشی از یک توافق حقوقی را اجرا کند، اما اینکه Code بهتنهایی یک قرارداد الزامآور حقوقی محسوب شود به قانون قابل اعمال، قصد طرفین، شرایط قرارداد و الزامات شکلی بستگی دارد.
برای مثال انتقال یک Token میتواند در Blockchain قطعی باشد، اما اینکه همان انتقال مالکیت قانونی یک ملک فیزیکی را منتقل کند نیازمند سازگاری با نظام ثبت و قوانین مربوط به آن دارایی است.
این مزایا مطلق نیستند؛ یک Contract ممکن است Admin Key، Whitelist یا Upgrade Control داشته باشد و در نتیجه سطح Permissionlessness و Decentralization آن با Contract دیگر متفاوت باشد.
Ethereum.org نیز Smart Contract Security را موضوعی جدی میداند و روی Access Control، Testing، Recovery Plan و Upgrade Security تأکید میکند. راهنمای امنیت Smart Contract در Ethereum
خیر، نه بهطور پیشفرض. در Blockchain عمومی مانند Ethereum، Code، Storage و Transaction Data بسیاری از Contractها قابل مشاهده یا قابل استخراج از State عمومی هستند.
Hashing، Signature و Cryptography به معنی «Encrypted بودن تمام داده Onchain» نیست. اگر Application به Confidentiality نیاز دارد باید معماری جداگانهای برای Privacy طراحی کند.
تعامل دو حالت کلی دارد:
خواندن State بدون تغییر Blockchain معمولاً از طریق RPC انجام میشود و به Transaction Onchain یا Gas پرداختی کاربر نیاز ندارد.
تغییر State نیازمند Transaction معتبر است. کاربر Transaction را Sign میکند، شبکه آن را اجرا میکند و در صورت موفقیت State جدید ثبت میشود.
Ethereum.org نیز Read و Write را از هم تفکیک میکند: Readها State را تغییر نمیدهند، در حالی که Write عملیات State-changing و نیازمند Transaction است. راهنمای تعامل با Smart Contract
Smart Contract معمولاً Backend Onchain یک DApp است، اما DApp اجزای دیگری مثل Frontend، Wallet Integration، RPC، Indexer یا Oracle نیز دارد. برای شناخت معماری کامل Application، مقاله DApp چیست؟ را مطالعه کنید.
بله، اما مدل برنامهپذیری Bitcoin با EVM متفاوت است. Bitcoin Script برای Spending Conditionهایی مثل Multisig، Timelock، Hashlock و Taproot Script Path استفاده میشود و General-purpose VM مشابه Ethereum نیست. برای جلوگیری از Cannibalization، جزئیات فنی این موضوع در مقاله مستقل قرارداد هوشمند بیتکوین چیست؟ قرار دارد.
کاربردهایی مانند خرید ملک، بیمه یا زنجیره تأمین ممکناند، اما اتصال آنها به دنیای واقعی معمولاً به Oracle، هویت، Custody و چارچوب حقوقی نیاز دارد. Blockchain نمیتواند مالکیت قانونی یک دارایی فیزیکی را صرفاً با اجرای Code ایجاد کند، مگر نظام حقوقی مربوط آن را به رسمیت بشناسد.
قرارداد هوشمند مجموعهای از Code و State است که روی Blockchain قابل برنامهریزی اجرا میشود. کاربران با Transaction یا Call آن را Trigger میکنند و Nodeها نتیجه را طبق قواعد مشترک اعتبارسنجی میکنند.
مهمترین مزیت Smart Contract، اجرای قابل Verify و Composable Logic است؛ اما Bug، Gas، Oracle، Admin Key، Upgradeability و محدودیتهای حقوقی همچنان وجود دارند. بنابراین «بدون اعتماد»، «هکناپذیر»، «کاملاً تغییرناپذیر» یا «جایگزین قطعی واسطههای حقوقی» توصیفهای مناسبی برای این فناوری نیستند.
برنامهای Onchain است که Code و State دارد و در پاسخ به Transaction یا Call، Logic تعریفشده را اجرا میکند.
معمولاً خیر. Contract برای اجرای Function به Trigger نیاز دارد؛ Trigger میتواند کاربر، Contract دیگر یا Automation بیرونی باشد.
Code یک Contract عادی در همان Address قابل ویرایش مستقیم نیست، اما Migration و Proxy Pattern میتوانند Logic مورد استفاده کاربران را Upgrade کنند.
خیر. Bug، Access Control اشتباه، Oracle Manipulation، Upgrade Key و Interaction با Contractهای دیگر همگی میتوانند ریسک ایجاد کنند.
خیر. در Public Blockchain بسیاری از Codeها، Stateها و Transactionها قابل مشاهدهاند.
مستقیم خیر. برای داده Offchain معمولاً به Oracle یا سازوکار خارجی نیاز است.
نه بهصورت عمومی. Code میتواند اجرای بخشی از توافق را Automation کند، اما اعتبار حقوقی به قانون و شرایط قرارداد بستگی دارد.