Bitcoin.com

زبان اسکریپت بیت‌کوین چیست؟

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

آخرین به‌روزرسانی
منتشر شده
زمان مطالعه۳ دقیقه مطالعه
نوشته
Neil Author
Neill Velardo
بازبینی توسط
Graham Stone Author Image
Graham Stone
What is the Bitcoin Script Language?

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

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

این مقاله به چگونگی کارکرد بیت‌کوین اسکریپت می‌پردازد، انواع اصلی تراکنش‌هایی را که این فناوری امکان‌پذیر می‌سازد بررسی می‌کند، ارتقای تاپ‌روت (Taproot) را که لایه اسکریپت را در سال ۲۰۲۱ مدرن کرد توضیح می‌دهد، و وضعیت بحث در مورد اپ‌کد عهد (covenant) را تا ژوئن ۲۰۲۶ پوشش می‌دهد.

بیت‌کوین خود را با خودنگهداری به‌طور ایمن مدیریت کنید اپلیکیشن کیف پول Bitcoin.com.

نکات کلیدی

  • اسکریپت بیت‌کوین یک زبان برنامه‌نویسی مبتنی بر پشته است که در پروتکل بیت‌کوین تعبیه شده و شرایطی را که تحت آن هر خروجی بیت‌کوین قابل خرج شدن است، تعریف می‌کند.
  • هر تراکنش بیت‌کوین شامل دو اسکریپت است: اسکریپت قفل (ScriptPubKey) که توسط گیرنده تعیین می‌شود و اسکریپت بازکردن (ScriptSig) که توسط خرج‌کننده ارائه می‌شود. برای معتبر بودن یک تراکنش، هر دو باید با موفقیت اجرا شوند.
  • اسکریپت بیت‌کوین عمداً تورینگ کامل نیست. این اسکریپت هیچ حلقه، هیچ وضعیت پایدار بین اجراها و محدودیت‌های سخت‌گیرانه‌ای در اندازه اسکریپت ندارد. این ویژگی تضمین می‌کند که هر اسکریپت قطعاً خاتمه می‌یابد که این یک ویژگی امنیتی است، نه یک محدودیت.
  • زبان اسکریپت‌نویسی از پنج قالب اصلی عبور کرده است: P2PK، P2PKH، P2SH، SegWit (P2WPKH/P2WSH) و Taproot (P2TR)، که هر یک امکانات بیشتری فراهم می‌کنند و در عین حال با نسخه‌های قبلی سازگار باقی می‌مانند.
  • تپ‌روت (نوامبر ۲۰۲۱) امضاهای شنور، مسیرهای خرج‌کردن مبتنی بر MAST برای حریم خصوصی، و تپسکریپت را به عنوان یک زبان اسکریپتی به‌روز شده با مکانیزم داخلی برای ارتقاءهای آینده تمیزتر معرفی کرد.
  • موارد استفاده واقعی مبتنی بر بیت‌کوین اسکریپت شامل کیف‌پول‌های امضای چندگانه، تراکنش‌های زمان‌بندی‌شده، قراردادهای قفل‌زمانی هش (پایه لایتنینگ)، اِس‌کراو و قراردادهای دفتر کل گزینشی هستند.
  • برخلاف قراردادهای هوشمند اتریوم، بیت‌کوین اسکریپت بدون حالت است: هر اسکریپت به‌طور کامل ایزوله اجرا می‌شود و از هیچ تراکنش دیگری اطلاعی ندارد. این یک انتخاب معماری عمدی است.
  • فعال‌ترین حوزه توسعه اسکریپت بیت‌کوین در سال ۲۰۲۶، اپ‌کدهای عهدنامه‌ای است، به‌ویژه OP_CTV (BIP-119) و OP_CAT (BIP-347)، که به اسکریپت‌ها امکان می‌دهند مشخص کنند تراکنش خرج‌کردن باید چگونه باشد. هیچ‌یک از آن‌ها هنوز در شبکه اصلی فعال نشده‌اند.

بیت‌کوین اسکریپت چیست؟

اسکریپت بیت‌کوین یک زبان اسکریپتی مبتنی بر پشته و بدون حالت است که در پروتکل بیت‌کوین تعبیه شده است. هر خروجی تراکنش در شبکه بیت‌کوین یک اسکریپت قفل‌کننده (که به آن ScriptPubKey گفته می‌شود) را حمل می‌کند که شرایط خرج کردن وجوه را مشخص می‌کند. هر کسی که بخواهد آن وجوه را خرج کند باید یک اسکریپت بازکننده (که به آن ScriptSig گفته می‌شود، یا در تراکنش‌های SegWit و Taproot، داده‌های شاهد) ارائه دهد که آن شرایط را برآورده کند.

این زبان ساختار خود را از فورث می‌گیرد، یک زبان برنامه‌نویسی مینیمالیستی مبتنی بر پشته که در دههٔ ۱۹۶۰ توسعه یافت. مانند فورت، بیت‌کوین اسکریپت از چپ به راست خوانده می‌شود، روی ساختار داده‌ای به نام استک عمل می‌کند و از نشانه‌گذاری معکوس پولیش (RPN) استفاده می‌کند، جایی که عملگرها به جای قرار گرفتن قبل از عملوندها، پس از آن‌ها می‌آیند. این زبان هر بار یک دستور را اجرا می‌کند، هیچ حلقه‌ای ندارد و بین اجراها هیچ حافظه پایداری را حفظ نمی‌کند.

آن نکتهٔ آخر همان چیزی است که بیشتر افراد هنگام یادگیری دربارهٔ Bitcoin Script در سطح پروتکل ابتدا با آن مواجه می‌شوند: این زبان عمداً تورینگ کامل نیست. یک زبان تورینگ کامل می‌تواند با در اختیار داشتن زمان و منابع کافی هر محاسبه‌ای را انجام دهد. Bitcoin Script از نظر طراحی قادر به این کار نیست و دلایل این انتخاب تأثیر زیادی بر نحوهٔ کار شبکه دارد.

نحوه کارکرد اسکریپت بیت‌کوین: مدل استک

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

وقتی یک نود بیت‌کوین یک تراکنش را اعتبارسنجی می‌کند، دو اسکریپت را پشت سر هم اجرا می‌کند:

  1. اسکریپت بازگشایی (ScriptSig یا شاهد) تأمین‌شده توسط شخصی که سکه‌ها را خرج می‌کند. این کار داده‌ها را روی پشته قرار می‌دهد، که معمولاً شامل یک امضای دیجیتال و یک کلید عمومی است.
  2. اسکریپت قفل‌گذاری (ScriptPubKey) پیوست به خروجی صرف‌شده. این شامل اپ‌کدهایی است که بر روی داده‌های استک عمل می‌کنند و بررسی می‌کنند که آیا شرایط صرف‌کردن برآورده شده است یا خیر.

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

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

گام‌به‌گام: یک تراکنش استاندارد P2PKH

پرداخت به هَشِ کلید عمومی (P2PKH) نوع اصلی تراکنش بیت‌کوین است که از سال ۲۰۰۹ مورد استفاده قرار می‌گیرد. آدرس‌های P2PKH با «۱» شروع می‌شوند. در عمل، ScriptPubKey و ScriptSig به این شکل هستند:

کد باز کردن (ScriptSig):

امضا کلید عمومی

اسکریپت قفل‌گذاری (ScriptPubKey):

OP_DUP OP_HASH160 <هَشِ کلید عمومی> OP_EQUALVERIFY OP_CHECKSIG

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

  • امضا و کلید عمومی از ScriptSig به روی پشته قرار می‌گیرند.
  • OP_DUP کلید عمومی را در بالای پشته کپی می‌کند
  • OP_هَش۱۶۰ هش تکراری را (SHA-256 به دنبال RIPEMD-160) هش می‌کند و یک هش ۲۰ بایتی تولید می‌کند.
  • هَشِ کلید عمومی از اسکریپت قفل‌گذاری به روی استک ارسال می‌شود.
  • تأیید برابری مطابقت دو هش را بررسی می‌کند. اگر مطابقت نداشته باشند، اجرا متوقف شده و تراکنش ناموفق می‌شود.
  • OP_CHECKSIG تأیید می‌کند که امضا برای کلید عمومی معتبر است.

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

توضیح کدهای عملیاتی بیت‌کوین

اپ‌کدهای بیت‌کوین دستورات مجزایی هستند که یک اسکریپت را تشکیل می‌دهند. هر یک یک بایت واحد است و ۲۵۶ جایگاه ممکن برای اپ‌کد فراهم می‌کند. از میان آن‌ها، تقریباً ۸۰ مورد در حال حاضر در شبکه اصلی فعال هستند. بقیه یا رزرو شده‌اند، یا غیرفعال هستند، یا به مکانیزم سازگاری رو به جلو OP_SUCCESS که با تاپ‌اسکریپت معرفی شد، اختصاص یافته‌اند.

اپ‌کدها در چند دسته قرار می‌گیرند:

  • اپ‌کدهای ارسال داده ارزش‌هایی مانند کلیدهای عمومی، امضاها و هش‌ها را روی پشته قرار دهید.
  • اپ‌کدهای حساب عملیات جمع، تفریق و مقایسه را انجام دهید. قابل توجه است که ضرب و تقسیم غیرفعال هستند.
  • اپ‌کدهای رمزنگاری شامل OP_SHA256، OP_HASH160، OP_SHA1 برای هش کردن، و OP_CHECKSIG برای تأیید امضا
  • اپ‌کدهای کنترل جریان منطق شرطی را فعال کنید: OP_IF, OP_ELSE, OP_ENDIF, OP_NOTIF
  • اپ‌کدهای دستکاری پشته شامل OP_DUP (تکثیر آیتم بالایی)، OP_DROP (حذف آیتم بالایی) و OP_SWAP (تعویض دو آیتم بالایی)

چندین اپ‌کد توسط ساتوشی ناکاموتو در سال ۲۰۱۰ غیرفعال شدند، پس از آنکه در پیاده‌سازی‌های اولیه آن‌ها آسیب‌پذیری‌هایی کشف شد. این اپ‌کدها شامل OP_CAT (ادغام دو آیتم روی پشته)، OP_MUL (ضرب) و OP_DIV (تقسیم) هستند. عدم وجود آن‌ها پیامدهای ماندگاری بر آنچه اسکریپت بیت‌کوین می‌تواند بیان کند داشته است، و چندین مورد از بحث‌برانگیزترین پیشنهادهای ارتقای بیت‌کوین در سال ۲۰۲۶ به فعال‌سازی مجدد برخی از آن‌ها مربوط می‌شود.

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

چرا عدم کامل بودن تورینگ یک ویژگی است

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

بحث عمیق‌تر درباره سطح حمله است. یک زبان تورینگ کامل می‌تواند هر محاسبه‌ای را بیان کند. این قدرت بیان، فضایی است که باگ‌ها در آن زندگی می‌کنند. سالیدیتیِ اتریوم برخی از گران‌قیمت‌ترین آسیب‌پذیری‌های نرم‌افزاری تاریخ را به وجود آورده است. هک DAO در سال ۲۰۱۶ از یک نقص ورود مجدد (reentrancy) در یک قرارداد هوشمند سوءاستفاده کرد و با قیمت‌های آن زمان، خسارتی در حدود ۶۰ میلیون دلار به بار آورد که در نهایت منجر به یک فورک سخت جنجالی در شبکه اتریوم شد. اکوسیستم گسترده‌تر دیفای (DeFi) در طول چندین سال شاهد سرقت صدها میلیون دلار از طریق سوءاستفاده‌های قرارداد هوشمند بوده است.

اسکریپت بیت‌کوین این نوع حمله را از نظر ساختاری غیرممکن می‌سازد. شما نمی‌توانید اسکریپتی در بیت‌کوین بنویسید که اسکریپت‌های دیگر را فراخوانی کند، تا زمانی که یک شرط تغییر کند حلقه بزند، یا وضعیت را بین تراکنش‌ها ذخیره کند. هر اسکریپت یک برنامه محدود، خاتمه‌یافته و قابل بازرسی است. حداکثر اندازه اسکریپت ۱۰٬۰۰۰ بایت است. حداکثر تعداد اپ‌کدهای غیرپوش (non-push) در هر اسکریپت ۲۰۱ عدد است. یک اعتبارسنج همیشه می‌تواند هزینه اجرای بدترین حالت را قبل از اجرای اسکریپت محاسبه کند.

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

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

انواع اسکریپت: تکامل از P2PKH تا Taproot

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

P2PK (پرداخت به کلید عمومی، ۲۰۰۹)

فرمت اصلی که در اولین تراکنش‌های بیت‌کوین از جمله پرداخت ساتوشی به هال فینی در بلاک ۱۷۰ استفاده می‌شد. وجوه مستقیماً به کلید عمومی کامل قفل می‌شدند نه هش آن. امروزه به ندرت در تراکنش‌های جدید استفاده می‌شود زیرا کلید عمومی را پیش از خرج کردن روی زنجیره آشکار می‌کند که از نظر امنیتی نسبت به هش‌کردن اولیه کلید ضعیف‌تر محسوب می‌شود.

P2PKH (پرداخت به هَشِ کلید عمومی، ۲۰۰۹)

فرمت استاندارد برای بیش از یک دهه. P2PKH وجوه را به جای خود کلید، به هش کلید عمومی قفل می‌کند، کلید عمومی را تا لحظه خرج کردن خصوصی نگه می‌دارد، یک آدرس کوتاه‌تر ۲۰ بایتی تولید می‌کند و اساس تمام آدرس‌هایی را که با «۱» شروع می‌شوند، تشکیل می‌دهد. بر اساس داده‌های آن-چین از Unchained (آوریل ۲۰۲۶)، آدرس‌های P2PKH در حال حاضر تقریباً ۴۳٪ از کل عرضه استخراج‌شده بیت‌کوین را در اختیار دارند.

پی‌تو‌اِش (پرداخت به هَش-اسکریپت، ۲۰۱۲، BIP ۱۶)

P2SH که در تاریخ ۱ آوریل ۲۰۱۲ از طریق یک فورک نرم معرفی شد، بار اسکریپت‌های پیچیده خرج را از فرستنده به گیرنده منتقل کرد. به جای درج یک اسکریپت قفل‌گذاری کامل در خروجی، P2SH یک commit به هش ۲۰ بایتی از «اسکریپت بازخرید» را خروجی می‌دهد. اسکریپت کامل تنها هنگام خرج شدن سکه‌ها آشکار می‌شود. این امر امضای چندگانه را برای کاربران عادی عملی کرد: در یک پیکربندی امضای چندگانه ۲ از ۳، دیگر لازم نبود که هر سه کلید عمومی در زمان پرداخت برای فرستنده قابل مشاهده باشند. آدرس‌های P2SH با «3» شروع می‌شوند.

برای تفکیک دقیق نحوه کارکرد اعتبارسنجی P2SH در سطح پروتکل، راهنمای تراکنش‌ها در developer.bitcoin.org مکانیزم اسکریپت redeem را گام به گام بررسی می‌کند.

P2WPKH و P2WSH (سگ‌ویت بومی، ۲۰۱۷، BIP 141)

Segregated Witness که در اوت ۲۰۱۷ در بلوک ۴۸۱٬۸۲۴ فعال شد، داده‌های امضا را از بدنه اصلی تراکنش به ساختار شاهد جداگانه‌ای منتقل کرد. داده‌های شاهد از تخفیف وزنی ۷۵٪ برخوردار می‌شوند که تراکنش‌های SegWit را به‌طور قابل‌توجهی ارزان‌تر می‌کند. یک تراکنش استاندارد P2WPKH با یک ورودی و دو خروجی، بر اساس ...، وزنی معادل تقریباً ۱۴۱ بایت مجازی دارد، در مقایسه با ۲۲۶ بایت مجازی برای تراکنش معادل P2PKH. تحلیل انواع آدرس‌های بیت‌کوین اسپارک از مارس ۲۰۲۶. SegWit همچنین قابلیت تغییرپذیری تراکنش را برطرف کرد که پیش‌نیاز شبکه لایتنینگ بود. آدرس‌های بومی SegWit با «bc1q» شروع می‌شوند.

پی‌تو‌تاپ‌روت (پرداخت به تاپ‌روت، ۲۰۲۱، BIPهای ۳۴۰/۳۴۱/۳۴۲)

تپ‌روت در نوامبر ۲۰۲۱ در بلوک ۷۰۹٬۶۳۲ فعال شد و مهم‌ترین به‌روزرسانی لایه اسکریپت‌زنی بیت‌کوین از زمان SegWit است. این به‌روزرسانی امضاهای شنور، یک نوع خروجی جدید با پشتیبانی از MAST و تپ‌اسکریپت را به عنوان یک زبان اسکریپت‌زنی به‌روزشده معرفی کرد. آدرس‌های تپ‌روت با «bc1p» شروع می‌شوند.

تَپ‌روت و تَپسکریپت: چگونه زبان اسکریپت‌نویسی بیت‌کوین در سال ۲۰۲۱ تغییر کرد

تاپ‌روت یک تغییر واحد نیست. این سه پیشنهاد بهبود بیت‌کوین هستند که با هم طراحی شده و به‌طور همزمان فعال می‌شوند.

BIP 340: امضاهای شنور

بیت‌کوین در ابتدا از ECDSA (الگوریتم امضای دیجیتال منحنی بیضوی) استفاده می‌کرد. ساتوشی تا حدی آن را انتخاب کرد چون امضاهای ش‌نور در آن زمان تحت حمایت پتنت بودند. آن پتنت در سال ۲۰۰۸ منقضی شد و در نهایت تپ‌روت امضای ش‌نور را به پروتکل آورد.

امضاهای شنور با ۶۴ بایت، در مقابل ۷۱ تا ۷۳ بایت برای ECDSA، کوچکتر هستند. مهم‌تر اینکه، آن‌ها از طریق طرحی به نام MuSig2 از تجمیع کلید پشتیبانی می‌کنند. تجمیع کلید به چندین امضاکننده اجازه می‌دهد تا کلیدها و امضاهای فردی خود را در یک کلید و امضای تجمیعی واحد ترکیب کنند که از نظر زنجیره‌ای (on-chain) از یک پرداخت معمولی با یک امضا قابل تشخیص نیست. یک کیف پول امضای چندگانه ۲ از ۳ که از طریق مسیر کلید مشترک تاپ‌روت خرج می‌کند، در بلاک‌چین دقیقاً شبیه به یک پرداخت استاندارد به نظر می‌رسد. این یک دستاورد واقعی در زمینه حریم خصوصی برای هر کسی است که بیت‌کوین را در یک ساختار امانی پیچیده نگهداری می‌کند.

BIP 341: پرداخت به تاپ‌روت و MAST

P2TR یک نوع خروجی جدید با دو مسیر هزینه را معرفی می‌کند:

  • یک مسیر کلیدی هزینه کردن با استفاده از امضای شنور، زمانی استفاده می‌شود که همه طرف‌ها موافق باشند و ساده‌ترین و ارزان‌ترین مسیر را بخواهند.
  • یک مسیر اسکریپت هزینه کردن با استفاده از MAST (درخت نحوی انتزاعی مرکل‌شده، که پیاده‌سازی تاپ‌روت این مفهوم است)

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

تا سال ۲۰۲۴، سهم تپ‌روت از تراکنش‌های بیت‌کوین به حدود ۴۲٪ افزایش یافته بود که عمدتاً به دلیل فعالیت‌های اوریدینالز و حکاکی BRC-20 بود، طبق داده‌های گلس‌نود که اسپارک در مارس ۲۰۲۶ به آن استناد کرده است. از آن زمان، این سهم با شرایط بازار نوسان داشته است، اما زیرساخت اکنون در کیف‌پول‌ها و صرافی‌های اصلی استاندارد شده است. صفحه موضوعی تاپ‌روت در بیت‌کوین آپتک پیشرفت‌های جاری در توسعه پروتکل پیرامون تاپ‌روت را دنبال می‌کند.

BIP 342: تاپ‌اسکریپت

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

  • OP_CHECKMULTISIG و OP_CHECKMULTISIGVERIFY منسوخ شده‌اند. اپ‌کد قدیمی چندامضایی یک ویژگی عجیب داشت که به‌عنوان راه‌حل موقت نیاز بود یک عنصر بی‌معنی به پشته ارسال شود. تاپسکریپت آن را حذف می‌کند و با جایگزین می‌کند. OP_CHECKSIGADD، که امضاهای شنور را یکی‌یکی تأیید می‌کند و یک شمارش را جمع‌آوری می‌کند. طرح‌های چندامضایی آستانه‌ای برای اجرا تمیزتر و ارزان‌تر می‌شوند.
  • محدودیت‌های اندازه اسکریپت برای هر برگ MAST حذف شده‌اند. اسکریپت‌های مجزا در یک شاخه Taproot می‌توانند به طور دلخواه بزرگ باشند.
  • اپ‌کدهای OP_SUCCESS این تغییر از همه آینده‌نگرتر است. در اسکریپت قدیمی، مواجهه با یک اپ‌کد تعریف‌نشده باعث شکست اسکریپت می‌شود. در تاپسکریپت، اپ‌کدها در محدوده OP_SUCCESS باعث موفقیت بی‌قید و شرط اسکریپت می‌شوند. فورک‌های نرم‌افزاری آینده می‌توانند با افزودن محدودیت‌هایی بر زمان موفقیت این اپ‌کدها، رفتار واقعی را به آن‌ها اختصاص دهند، بدون آنکه نیازی به نسخه جدید اسکریپت یا یک چرخه استقرار مجدد کامل در سراسر اکوسیستم باشد. قابلیت‌های جدید می‌توانند به لایه اسکریپتینگ بیت‌کوین تمیزتر از هر زمان دیگری در تاریخ پروتکل اضافه شوند.

مینی‌اسکریپت

در کنار Tapscript، پروژه‌ای مرتبط به نام Miniscript برای توسعه‌دهندگان اهمیت فزاینده‌ای یافته است. Miniscript روشی ساختاریافته برای نوشتن زیرمجموعه‌ای از Bitcoin Script است که قابل تحلیل، قابل ترکیب و به‌طور کلی قابل امضا است. در حالی که اسکریپت خام نیازمند ساخت دستی است و بررسی آن دشوار است، اسکریپت‌های مینی‌اسکریپت می‌توانند به‌طور خودکار از نظر صحت تأیید شوند و در سیاست‌های بزرگ‌تر ترکیب شوند. این فناوری قابلیت‌های اسکریپت را گسترش نمی‌دهد، بلکه آنچه را که هم‌اکنون انجام می‌دهد برای توسعه‌دهندگانی که کیف‌پول‌ها و ابزارهای نگه‌داری می‌سازند، به‌طور قابل‌توجهی دسترس‌پذیرتر می‌کند.

آنچه بیت‌کوین اسکریپت فراهم می‌کند: موارد استفاده در دنیای واقعی

امروز انواع تراکنش‌های زیر در شبکه اصلی بیت‌کوین فعال هستند، که همگی بر پایهٔ ابتدایی‌های اسکریپت بیت‌کوین ساخته شده‌اند:

کیف‌پول‌های چندامضایی (multisig) برای تأیید یک هزینه، نیاز به امضای M از N کلید خصوصی است. خزانه‌داری یک شرکت ممکن است برای هر برداشت، تأیید ۳ نفر از ۵ نفر را الزامی کند. یک زوج متأهل ممکن است برای پس‌انداز مشترک از تأیید ۲ نفر از ۲ نفر استفاده کنند. با Taproot و تجمیع کلید Schnorr، هزینه‌های چندامضایی مشارکتی اکنون در زنجیره از تراکنش‌های امضای تکی استاندارد قابل تشخیص نیستند.

معاملات زمان‌بندی‌شده از OP_CHECKLOCKTIMEVERIFY (CheckLockTimeVerify، یا CLTV) و OP_CHECKSEQUENCEVERIFY (CheckSequenceVerify، یا CSV) برای جلوگیری از جابجایی وجوه قبل از ارتفاع بلاک یا زمان سپری‌شده‌ی مشخص استفاده کنید. کاربردها شامل برنامه‌ریزی ارث، برنامه‌های تخصیص توکن کارکنان، سازوکارهای پس‌انداز اجباری و تراکنش‌های جریمه‌ای مورد استفاده در کانال‌های شبکه لایتنینگ است.

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

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

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

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

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

ویژگی
اسکریپت بیت‌کوین
قراردادهای هوشمند اتریوم
مدل اجرایی
مبتنی بر پشته، بدون حالت، محدود
مبتنی بر پشته (EVM)، دارای حالت، دارای گازشمار
تورینگ کامل؟
خیر. بدون حلقه، پایان‌یافتن تضمین‌شده.
بله. محاسبه دلخواه.
پایداری ایالتی
هیچ. هر اسکریپت به‌طور مستقل اجرا می‌شود.
قراردادها وضعیت را به‌صورت آن-چین ذخیره و تغییر می‌دهند.
هدف اصلی
هزینه مشروط UTXOها
کاربردهای قابل برنامه‌ریزی عمومی‌منظور
محافظت در برابر DoS
ساختاری: بدون حلقه، محدودیت‌های سخت‌گیرانه در اندازه
محدودیت‌های گاز در هزینهٔ اجرای حکم
حریم خصوصی لایه پایه
بهبود یافته با تَپ‌روت و MAST
پیش‌فرض همهٔ ایالت‌ها عمومی است
سوابق امنیتی
در ۱۶ سال گذشته هیچ سوءاستفاده‌ای از لایه اجماع صورت نگرفته است.
سوءاستفاده‌های قابل توجه در سطح قرارداد، میلیاردها از دست رفت
ابزارهای توسعه‌دهنده
اپ‌کدهای سطح پایین؛ مینی‌اسکریپت؛ تاپ‌اسکریپت
سولیدیتی (سطح بالا)، کامپایل‌شده به بایت‌کد EVM
ویژگی
مدل اجرایی
اسکریپت بیت‌کوین
مبتنی بر پشته، بدون حالت، محدود
قراردادهای هوشمند اتریوم
مبتنی بر پشته (EVM)، دارای حالت، دارای گازشمار
ویژگی
تورینگ کامل؟
اسکریپت بیت‌کوین
خیر. بدون حلقه، پایان‌یافتن تضمین‌شده.
قراردادهای هوشمند اتریوم
بله. محاسبه دلخواه.
ویژگی
پایداری ایالتی
اسکریپت بیت‌کوین
هیچ. هر اسکریپت به‌طور مستقل اجرا می‌شود.
قراردادهای هوشمند اتریوم
قراردادها وضعیت را به‌صورت آن-چین ذخیره و تغییر می‌دهند.
ویژگی
هدف اصلی
اسکریپت بیت‌کوین
هزینه مشروط UTXOها
قراردادهای هوشمند اتریوم
کاربردهای قابل برنامه‌ریزی عمومی‌منظور
ویژگی
محافظت در برابر DoS
اسکریپت بیت‌کوین
ساختاری: بدون حلقه، محدودیت‌های سخت‌گیرانه در اندازه
قراردادهای هوشمند اتریوم
محدودیت‌های گاز در هزینهٔ اجرای حکم
ویژگی
حریم خصوصی لایه پایه
اسکریپت بیت‌کوین
بهبود یافته با تَپ‌روت و MAST
قراردادهای هوشمند اتریوم
پیش‌فرض همهٔ ایالت‌ها عمومی است
ویژگی
سوابق امنیتی
اسکریپت بیت‌کوین
در ۱۶ سال گذشته هیچ سوءاستفاده‌ای از لایه اجماع صورت نگرفته است.
قراردادهای هوشمند اتریوم
سوءاستفاده‌های قابل توجه در سطح قرارداد، میلیاردها از دست رفت
ویژگی
ابزارهای توسعه‌دهنده
اسکریپت بیت‌کوین
اپ‌کدهای سطح پایین؛ مینی‌اسکریپت؛ تاپ‌اسکریپت
قراردادهای هوشمند اتریوم
سولیدیتی (سطح بالا)، کامپایل‌شده به بایت‌کد EVM

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

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

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

بحث پیمان: چه چیزی می‌تواند در اسکریپت بیت‌کوین تغییر کند

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

پیشنهادهای پیشرو تا ژوئن ۲۰۲۶ عبارتند از:

  • OP_CTV (BIP-119, CheckTemplateVerify)، نوشتهٔ جرمی روبین، یک اپ‌کد واحد اضافه می‌کند که یک UTXO را به یک الگوی خرج‌کردن مشخص و از پیش تعیین‌شده متعهد می‌سازد، شامل نسخهٔ تراکنش، زمان قفل، تعداد ورودی‌ها، توالی‌ها، تعداد خروجی‌ها و خروجی‌ها. این پیشنهاد به‌صورت غیربازگشتی طراحی شده است، به‌عنوان محافظه‌کارترین پیشنهاد اصلی محسوب می‌شود و عمدتاً بر گاوصندوق‌ها، کنترل ازدحام و برخی بهبودهای لایتنینگ متمرکز است. تا آوریل ۲۰۲۶، OP_CTV دارای پارامترهای پیاده‌سازی مشخصی برای یک پنجره سیگنال‌دهی Speedy Trial است، اما طبق ... هنوز به اجماع گسترده جامعه مورد نیاز برای فعال‌سازی دست نیافته است. تحلیل عهدنامه آوریل ۲۰۲۶ بلاک‌ایدن.
  • OP_CAT (BIP-347)پیشنهادی توسط ایتن هیلمن و آرمین صبوری، یک اپ‌کد را که ساتوشی در سال ۲۰۱۰ غیرفعال کرده بود، مجدداً فعال می‌کند. OP_CAT دو آیتم روی استک را به هم متصل می‌کند که از نظر توصیف ساده اما از نظر پیامدها گسترده است. هنگامی که با امضاهای شنور ترکیب شود، امکان درون‌نگرانی تراکنش به سبک عهدنامه را فراهم می‌آورد. طبق تحلیل آن-چین sCrypt در اواخر سال ۲۰۲۴، در شبکه آزمایشی سگِنت بیت‌کوین، OP_CAT به طور قابل توجهی تراکنش‌های توسعه‌دهنده‌ای بیشتری نسبت به APO یا CTV تولید کرده بود. OP_CAT در حال حاضر در شبکه لیکوئید و فرکتال بیت‌کوین فعال است و هیچ سوءاستفاده‌ای به آن نسبت داده نشده است. BIP-347 دارای شماره پیشنهاد رسمی و تحقیقات فعالی در پس آن است، اما فعال‌سازی شبکه اصلی به اجماع جامعه نیاز دارد که هنوز وجود ندارد.
  • ارتقا OP_CTV را با OP_CHECKSIGFROMSTACK (CSFS) و OP_INTERNALKEY ترکیب می‌کند و بر بهبودهای خاصی در ساخت کانال شبکه لایتنینگ، از جمله باز کردن غیرتعاملی کانال‌ها و مدیریت کارآمدتر کانال‌های چندجانبه، تمرکز دارد.

هیچ‌یک از این موارد تا ژوئن ۲۰۲۶ در شبکه اصلی بیت‌کوین فعال نشده‌اند. اختلافات فنی بین آن‌ها تا حد زیادی قابل حل هستند. مسئله دشوارتر، مکانیک‌های فعال‌سازی است. فرایند سافت‌فورک بیت‌کوین نیازمند اجماع گسترده است و بحث قرارداد (covenant) تنش‌های باقیمانده از ارتقاءهای جنجالی پیشین را به همراه دارد. آنچه از این بحث روشن است این است که لایه اسکریپت‌زبان بیت‌کوین در چارچوب محافظه‌کارانه خود فضای قابل‌توجهی برای رشد دارد. پرسشی که در حال بررسی است مربوط به ترتیب‌بندی و توافق جامعه است، نه اینکه آیا زبان اسکریپت آینده‌ای دارد یا خیر.

نتیجه‌گیری

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

لایه اسکریپت از آن زمان به طور قابل توجهی رشد کرده است، با P2SH که خرج‌های پیچیده را عملی می‌کند، SegWit که کارمزدها را کاهش داده و لایتنینگ را فعال می‌سازد، و Taproot که امضاهای Schnorr، حریم خصوصی مبتنی بر MAST و طراحی اپ‌کد سازگار با آینده Tapscript را به ارمغان می‌آورد. پیشنهادهای عهدنامه‌ای که اکنون در بحث فعال قرار دارند، فصل بعدی احتمالی را نشان می‌دهند. اینکه آیا هیچ‌یک از آن‌ها فعال خواهند شد و در چه بازه زمانی، تا اواسط سال ۲۰۲۶ همچنان به‌طور واقعی نامشخص است.

درک اسکریپت نیازمند برنامه‌نویس بودن نیست. اما مستلزم آن است که دریابیم محافظه‌کاری بیت‌کوین، محدودیت‌های عمدی، سرعت کند به‌روزرسانی‌ها و نامکمل بودن تورینگ، نقصی نیست. ویژگی‌هایی که اسکریپت بیت‌کوین را قابل‌پیش‌بینی می‌کنند، همان ویژگی‌هایی هستند که لایه اجماع را در شانزده سال گذشته پاک نگه داشته‌اند.

Frequently Asked Questions

What does Bitcoin Script actually do?
Bitcoin Script defines the spending conditions attached to every transaction output on the network. When you receive bitcoin, the transaction includes a locking script specifying what must be provided to spend those funds. When you spend them, your wallet produces an unlocking script satisfying those conditions. Every full node validates this independently.
Why doesn't Bitcoin Script have loops?
What is the difference between ScriptSig and ScriptPubKey?
How did Taproot change Bitcoin Script?
Can Bitcoin do smart contracts?
What are Bitcoin covenant opcodes?
What is a UTXO and how does it relate to Bitcoin Script?
What is Miniscript?

سرمایه‌گذاری امن را با کیف پول Bitcoin.com آغاز کنید.

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

A screenshot of the Bitcoin.com Wallet app

اسکن کنید تا کیف پول Bitcoin.com دانلود شود.

این کد QR را با دستگاه همراه خود اسکن کنید، به طور خودکار به صفحه فروشگاه مربوطه هدایت خواهید شد.