آیا بیتکوین Smart Contract دارد؟
آیا بیتکوین Smart Contract دارد؟
بله، Bitcoin میتواند شرایط خرج برنامهپذیر مانند multisig، timelock، hashlock و Taproot script path داشته باشد؛ اما مدل آن از ماشینهای مجازی عمومی Smart Contract متفاوت است.
بیتکوین از ابتدا امکان تعریف شرایط خرجکردن برای خروجیهای تراکنش را داشته است. این شرایط با Bitcoin Script و قواعد اجماع شبکه بررسی میشوند و میتوانند مواردی مانند امضای یک یا چند کلید، گذشتن زمان مشخص یا ارائه یک Secret را الزامی کنند.
به همین دلیل میتوان روی بیتکوین قراردادهای دیجیتال و تراکنشهای شرطی ساخت؛ اما بهتر است آنها را با Smart Contractهای عمومی و Stateful شبکههایی که ماشین مجازی عمومی دارند یکسان ندانیم. Bitcoin Script عمداً محدودتر طراحی شده و برای اجرای برنامههای دلخواه، Loopهای نامحدود یا نگهداری State عمومی مشابه یک VM همهمنظوره ساخته نشده است.
در این مقاله بررسی میکنیم Bitcoin Script چه امکاناتی دارد، multisig و timelock چگونه کار میکنند، Taproot و Tapscript چه چیزی اضافه کردهاند و چه بخشی از «قرارداد هوشمند بیتکوین» مربوط به لایه پایه و چه بخشی مربوط به پروتکلهای بالاتر است. برای آشنایی با معماری خود شبکه نیز میتوانید مقاله شبکه بیتکوین چیست؟ را مطالعه کنید.
در Bitcoin، هر UTXO دارای یک شرط خرجکردن است. زمانی که کاربر میخواهد آن خروجی را خرج کند، داده لازم برای برآوردهکردن آن شرط را ارائه میدهد و Nodeها اعتبار آن را طبق قواعد Script و Consensus بررسی میکنند.
در سادهترین حالت، شرط میتواند فقط «ارائه امضای معتبر برای این کلید» باشد. در حالتهای پیچیدهتر میتوان چند امضا، Hash Lock، Time Lock یا ترکیبی از این شرطها را به کار برد.
بنابراین جمله فعلی «هر تراکنش بیتکوین یک قرارداد هوشمند است» بهتر است حذف شود. همه تراکنشها از Script/Spending Conditions استفاده میکنند، اما در کاربرد رایج، عبارت Smart Contract معمولاً برای Policyهای شرطی پیچیدهتر به کار میرود.
تفاوت اصلی در مدل برنامهپذیری است. Bitcoin Script یک زبان Stack-based و عمداً محدود است که برای مشخصکردن شرایط خرج UTXO طراحی شده است. در مقابل، برخی شبکههای Smart Contract محور محیطی عمومیتر برای اجرای برنامههای Stateful فراهم میکنند.
| موضوع | Bitcoin Script | Smart Contract عمومی |
|---|---|---|
| مدل اصلی | شرط خرج UTXO | اجرای برنامه/State عمومی |
| Loop عمومی | ندارد | بسته به VM ممکن است داشته باشد |
| دسترسی مستقیم به API خارجی | ندارد | معمولاً همچنان نیازمند Oracle است |
| تمرکز طراحی | اعتبارسنجی قابل پیشبینی شرایط پرداخت | برنامهپذیری عمومیتر |
برای تعریف عمومیتر Smart Contractها، مقاله قرارداد هوشمند چیست؟ مکمل این صفحه است.
P2SH یا Pay-to-Script-Hash در BIP16 معرفی شد تا فرستنده بتواند به Hash یک Redeem Script پرداخت کند و جزئیات شرایط خرجکردن هنگام Spend شدن خروجی ارائه شوند.
هدف اصلی P2SH انتقال مسئولیت تعریف شرایط پیچیده از فرستنده به دریافتکننده و کوتاهترکردن اطلاعات لازم برای Funding بود؛ نه تضمین «حریم خصوصی بیشتر» یا «کمترین کارمزد ممکن». BIP16 صریحاً توضیح میدهد که P2SH امکان Funding یک Script دلخواه را با یک Hash ثابتطول فراهم میکند. BIP16 - Pay to Script Hash
همچنین عبارت «P2SH همیشه با عدد 3 شروع میشود» فقط درباره آدرس Base58 رایج Mainnet صدق میکند و برای درک مفهوم Script ضروری نیست؛ بهتر است محور توضیح مقاله روی Mechanism باشد نه ظاهر Address.
Multisig اجازه میدهد خرجکردن یک Output به چند کلید وابسته باشد. برای نمونه در Policy دو از سه، هر دو امضا از میان سه کلید تعریفشده برای Spend کردن کافیاند.
این ساختار میتواند برای خزانه سازمانی، نگهداری مشترک یا بازیابی امنتر دارایی مفید باشد، اما امنیت آن به نحوه نگهداری کلیدها، Backup و طراحی Policy بستگی دارد. جمله فعلی که «گمشدن یک کلید باعث میشود سایرین نتوانند آن را دستکاری کنند» دقیق نیست؛ در یک 2-of-3، از دسترفتن یک کلید همچنان میتواند Spend معتبر را با دو کلید باقیمانده ممکن نگه دارد.
در Tapscript، opcode قدیمی OP_CHECKMULTISIG غیرفعال است و ساخت Policyهای چندکلیدی با سازوکارهای جدیدتری مانند OP_CHECKSIGADD انجام میشود.
Timelock اجازه میدهد یک مسیر خرج قبل از رسیدن به زمان یا ارتفاع بلاک مشخص معتبر نباشد. Bitcoin دو دسته مهم Time Constraint دارد:
BIP65 تصریح میکند که CLTV میتواند Output را تا زمان یا Block Height تعیینشده غیرقابل Spend کند. BIP65 - CHECKLOCKTIMEVERIFY
BIP112 نیز Relative Timelock را برای Script Pathها تعریف میکند و از کاربرد آن در قراردادهای چندمرحلهای و HTLCها یاد میکند. BIP112 - CHECKSEQUENCEVERIFY
برخلاف متن قبلی، تراکنش Timelocked لزوماً «در حالت انتظار داخل بلاکچین» باقی نمیماند؛ تا پیش از Final شدن ممکن است اصلاً قابل Mining/Relay طبق Policy مربوط نباشد.
Hashed Time-Locked Contract یا HTLC ترکیبی از Hash Lock و Time Lock است. یک مسیر Spend با ارائه Secret معتبر فعال میشود و مسیر دیگر پس از Timeout قابل استفاده است.
این ساختار یکی از اجزای مهم پروتکلهای پرداخت لایه بالاتر Bitcoin است. BIP112 نمونهای از HTLC را با ترکیب CHECKSEQUENCEVERIFY و CHECKLOCKTIMEVERIFY نمایش میدهد.
HTLC نمونه خوبی است که نشان میدهد «Smart Contract روی Bitcoin» بیشتر به ساخت Policyهای پرداخت شرطی مربوط است تا اجرای یک Application عمومی روی Base Layer.
خیر. Bitcoin Script نمیتواند مستقیماً API، قیمت بازار، نتیجه مسابقه یا داده خارجی را از اینترنت دریافت کند. بنابراین جمله فعلی که «Oracle کدی است که به بلاکچین بیتکوین اجازه دریافت اطلاعات برونزنجیرهای میدهد» باید حذف شود.
یکی از روشهای استفاده از رویداد خارجی، Discreet Log Contract یا DLC است. در DLC، Oracle نتیجه رویداد را با امضای رمزنگاریشده Attest میکند و طرفین از آن امضا برای انتخاب Outcome از پیشساختهشده قرارداد استفاده میکنند؛ Oracle تراکنش را مستقیماً اجرا یا وجوه را Custody نمیکند.
Specification رسمی DLC این مدل را برای قراردادهای Bitcoin وابسته به رویدادهای واقعی توضیح میدهد. معرفی فنی Discreet Log Contracts
Taproot در Mainnet بیتکوین فعال شد و BIP341/BIP342 مدل جدیدی برای Spend کردن Outputهای SegWit v1 فراهم کردند. یک Taproot Output میتواند از Key Path یا از Script Path خرج شود.
در Script Path، شرطهای مختلف میتوانند در یک Merkle Tree قرار بگیرند و هنگام Spend فقط شاخه لازم آشکار شود. این طراحی میتواند Privacy و Efficiency Policyهای چندشاخه را نسبت به آشکارکردن همه شرطها بهتر کند.
BIP342 نیز Tapscript را بهعنوان سیستم Script مربوط به Taproot تعریف میکند و مسیر ارتقای opcodeها را سادهتر میسازد. BIP342 - Validation of Taproot Scripts
برای جزئیات بیشتر خود ارتقا، مقاله Taproot بیتکوین چیست؟ را مطالعه کنید.
Miniscript یک زبان ساختاریافته برای بیان Subset مشخصی از Bitcoin Script است. هدف آن این است که Policyهای ترکیبی از Signature، Hash Lock و Time Lock راحتتر تحلیل، Compose و Sign شوند.
BIP379 Miniscript را برای نوشتن ساختاریافته Bitcoin Script تعریف میکند. BIP379 - Miniscript
Miniscript یک تغییر Consensus یا ماشین مجازی جدید نیست؛ ابزاری در سطح Wallet/Policy است که ساخت Scriptهای قابل تحلیل را سادهتر میکند. طبق مستند فعلی Bitcoin Core، پشتیبانی Miniscript از نسخه 26 بهصورت کامل پیادهسازی شده است. وضعیت پیادهسازی BIPها در Bitcoin Core
مقاله فعلی کاربردهایی مانند رأیگیری ملی، پرونده سلامت، مالیات و زنجیره تأمین را بهصورت مستقیم به Smart Contractهای Bitcoin نسبت میدهد. این موارد کاربردهای عمومی فناوری Blockchain/Smart Contract هستند و نباید بدون نمونه فنی مشخص به قابلیت Native لایه پایه Bitcoin نسبت داده شوند.
کاربردهایی که مستقیماً با قابلیتهای Script و Protocolهای Bitcoin همخوانی دارند عبارتاند از:
جمله فعلی «پس از اجرای قرارداد هیچ جزئیاتی را نمیتوان تغییر داد» باید با این توضیح دقیقتر جایگزین شود: شرط خرج یک UTXO ایجادشده ثابت است، اما Protocolهای چندمرحلهای میتوانند State خود را با ایجاد Transaction/Commitmentهای جدید بهروزرسانی کنند.
خیر. Consensus Security بیتکوین خطاهای طراحی Policy، از دسترفتن Key، Backup ناقص، انتخاب Timelock اشتباه یا Bug در نرمافزار Wallet را حذف نمیکند.
برای Policyهای پیچیده باید از Software و Libraryهای بررسیشده استفاده کرد و شرایط Spend، Recovery Path و Backup کلیدها پیش از Funding آزمایش شوند. برای شناخت نرمافزار مرجع پروتکل، مقاله Bitcoin Core چیست؟ مکمل این بخش است.
خیر. افزایش قابلیت فنی یا استفاده از Taproot، Script یا Protocolهای قراردادمحور بهتنهایی جهت آینده بازار را تعیین نمیکند.
اگر هدف بررسی Market Value است باید قیمت بیتکوین و عوامل مستقل عرضه، تقاضا، نقدینگی و شرایط بازار بررسی شوند. بخش فعلی مقاله که Bitcoin را به دلیل «خاصیت ضدتورمی» بهصورت کلی مناسب سرمایهگذاری معرفی میکند باید از این مقاله فنی حذف شود.
قابلیت قرارداد در Bitcoin بر پایه Script و مدل UTXO ساخته شده است. Multisig، Timelock، Hashlock، HTLC و Taproot نمونههایی هستند که اجازه میدهند Bitcoin فقط با یک امضای ساده Spend نشود و شرایط پیچیدهتری برای انتقال ارزش تعریف شود.
این قابلیتها قدرتمندند اما با محیطهای General-purpose Smart Contract متفاوتاند. برای تحلیل درست باید قابلیت Native Bitcoin، ابزارهایی مانند Miniscript و Protocolهای بالاتر مانند DLC از یکدیگر تفکیک شوند و درباره کاربردهایی که واقعاً روی Base Layer پیاده نشدهاند اغراق نشود.
بله، Bitcoin میتواند شرایط خرج برنامهپذیر مانند multisig، timelock، hashlock و Taproot script path داشته باشد؛ اما مدل آن از ماشینهای مجازی عمومی Smart Contract متفاوت است.
خیر. Script عمداً مجموعه عملیات محدود و بدون Loop عمومی دارد تا Validation تراکنشها قابل پیشبینی باقی بماند.
هر Spend باید شرایط Script خروجی قبلی را برآورده کند، اما در کاربرد رایج بهتر است Smart Contract را برای Policyهای شرطی پیچیدهتر به کار ببریم.
Taproot امکان Key-path و Script-path spending را فراهم میکند و در Policyهای چندشاخه میتواند فقط مسیر استفادهشده را آشکار کند.
خیر. برای وابستهکردن پرداخت به داده خارجی باید از ساختارهایی مانند Oracle Signature و DLC استفاده شود.
خیر. Miniscript روش ساختاریافتهای برای بیان و تحلیل Subset مشخصی از Bitcoin Script است و Consensus جدیدی ایجاد نمیکند.