بیت کوین اسکریپت (Bitcoin Script) زبانی است که بیت کوین برای انجام هر کاری از آن استفاده میکند، از ارسال پول از کیف پول گرفته تا اجازه ایجاد حسابهای چند کاربره. همه این قابلیتهای موجود در یک ابزار ساده، قابل توسعه و قدرتمند است که در ادامه به آن خواهیم پرداخت.
بیت کوین اسکریپت (Bitcoin Script) چیست؟
Bitcoin Script یک زبان برنامه نویسی ساده است که برای پردازش تراکنشهای شبکه بیت کوین استفاده میشود. این زبان بر اساس یک سری ساختارهای خطی است که به عنوان stack شناخته میشوند و حاوی دادههای موجود به ترتیب LIFO (Last In – Firt Out) هستند. یعنی آخرین ورودی به عنوان اولین خروجی پردازش میشود. هر دستورالعمل در این زبان به طور متوالی یکی پس از دیگری اجرا میشود.
این زبان، تورینگ کامل نیست. زیرا عملکرد آن محدود است و نمیتواند حلقه لوپ داشته باشد. بنابراین توانایی حل هر نوع مشکلی مانند ماشینهای تورینگ را ندارد. با این حال، این محدودیت عمدی است زیرا برای جلوگیری از حلقههای بینهایت و اجرای خطا، تعبیه شده است. این زبان در مواردی که قسمتهای مخرب برنامه ممکن است عملیاتی پیچیده با مصرف میزان هش و کاهش سرعت سیستم بیت کوین از طریق حلقههای بینهایت انجام دهند، میتواند موثر باشد.
بیت کوین اسکریپت، یک زبان برنامه نویسی ضروری است زیرا به ما امکان میدهد برنامه بنویسیم تا کامپیوترها خواستههای ما را اجرا میکنند. در بیت کوین به منظور برقراری ارتباط با خواستههای ما، کدهای عملیاتی (OP CODES)، عملکردهای مختلفی را ارائه میدهند. مانند دستکاری حافظه، عملیات ریاضی، حلقهها، فراخوانیها و بسیاری موارد دیگر.
بنابراین، Bitcoin Script اساساً مجموعهای از دستورالعملهای برنامهریزیشده است که با هر تراکنش انجامشده کار میکند. این دستورالعملها نحوه دسترسی کاربران و استفاده از بیتکوینهای موجود در شبکه را توصیف میکند.
OP_CODE یا کد عملیاتی چیست؟
در محاسبات، OP_CODE (کد عملیاتی) بخشی از دستورالعمل زبان ماشین است که عملیاتی را که باید انجام شود مشخص میکند. مشخصات و قالب آن توسط معماری مجموعه دستورالعمل (ISA) از مؤلفه پردازش کننده دستورالعمل تعیین میشود. بهطورکلی این پردازش توسط سختافزار رایانه (معمولاً CPU) انجام میشود.
اما همچنین میتواند نرمافزاری باشد که مخصوصاً برای شبیهسازی عملکرد پردازنده و پردازش این دستورالعملها تهیه شده است. بهطورکلی، یک دستورالعمل کامل زبان ماشین شامل OP_CODE و به صورت اختیاری، مشخصات یک یا چند عملوند است که کد عملکرد باید بر اساس آن عمل کند.
نقش آپ کد در بیت کوین
در بیت کوین و بسیاری از رمز ارزهای دیگر، OP_CODE ها ستون فقرات سیستم است که به شما امکان میدهد دستورالعملهای تراکنش را برنامهریزی کنید. به یاد داشته باشیم که بیت کوین (و سایر ارزهای دیجیتال حاصل از آن) پول قابل برنامهریزی است. و در اینجا کلمه کلیدی «قابل برنامهریزی» است، زیرا Bitcoin Script در واقع یک زبان برنامه نویسی است که در آن دستورالعملهایی به صورت آپ کد داده میشود که شبکه بیت کوین قبلاً برای عملکرد خود تعریف کرده است. در حقیقت، با توجه به ساختاری که بیت کوین در آن ایجاد شده است، امکان تعریف 256 OP_CODE وجود دارد که متشکل از تعداد 0 تا 255 است. از این 256 OP_CODE، در مجموع 116 تا در حال حاضر فعال هستند.
این OP_CODE ها به شما امکان میدهد عملیات مختلفی را در بیت کوین و برنامهریزی تراکنشهای آن مانند کنترل جریان داده، مدیریت ثابتها، مدیریت پشته، مدیریت منطقی، حساب، time lock، عملیات رمزنگاری و رزرو شده انجام دهید. میتوانید لیست کاملی و به روز شده از OP_CODEهای مختلف را مستقیماً در کد بیت کوین مشاهده کنید.
بخشهای اساسی بیت کوین اسکریپت
در شبکه بیت کوین، هر اسکریپت بیت کوین به دو نوع اسکریپت، scriptSig و scriptPubKey تقسیم میشود.
scriptSig
اسکریپت باز کردن قفل است که به یک کلید عمومی و یک امضای دیجیتال نیاز دارد. در واقع، پس از شناسایی مشکلات مختلف در نسخههای اولیه نرمافزار بیت کوین، تایید امضا هم مورد بررسی قرار گرفت. بنابراین، سیستم فقط در صورت انجام تراکنشها میپذیرد که امضاها و تأیید آنها مطابق با یک سری قوانین ثابت شده باشد که رفتار مناسب در شبکه را تضمین میکند.
[irp posts=”4899″ name=”امضای دیجیتال (Digital Signature) چیست؟”]
scriptPubKey
اسکریپت قفل کردن است که حاوی یک هش کلید عمومی است که به آن آدرس Bitcoin نیز گفته میشود. برخی از اسکریپتهای بیت کوین به چندین امضا یعنی اجازه چندین کاربر برای انجام تراکنش نیاز دارند. در این حالت، اسکریپت پیچیدهتر است. در واقع، زمانبندی تراکنشهای بیت کوین در این قسمت از اسکریپت ذخیره شده است.
[irp posts=”5105″ name=”تابع هش در بلاکچین”]
هدف از ایجاد اسکریپت
هدف از ایجاد یک زبان اسکریپت در بیت کوین ارائه یک سری پارامترهای آسان و انعطافپذیر برای فعال کردن یک تراکنش است. بنابراین وقتی Satoshi Nakamoto بیت کوین را توسعه داد، عملکردهای مختلف از جمله ضرب را غیرفعال کرد. بنابراین بیت کوین اسکریپت از نظر برنامه نویسی ساده نگه داشته میشود. این زبان برنامه نویسی است که تعیین میکند عملیاتی انجام شود یا خیر. یعنی اگر این عمل برای انتقال وجوه مجاز باشد.
به زبان ساده، ایجاد بیت کوین اسکریپت همان چیزی است که به ماهیت بیت کوین قابلیت برنامهریزی میبخشد. همچنین به ما امکان میدهد برای مثال، فقط در صورت تحقق برخی شرایط معتبر تراکنشی را ارسال کنیم. این خاصیت منحصر به بیت کوین و ارزهای دیجیتال است، چیزی که پول دیجیتالی امروز نمیتواند به آن برسد، چه برسد به پول فیزیکی سنتی. این نشان از تکامل پول است که به جایی رسیده است که حتی میتواند به طور مستقل و غیرمتمرکز، به سادگی و با حضور در برنامههای جاسازی شده در آن عمل کند.
علاوه بر این، بیت کوین اسکریپت همچنین از ایجاد خطا در سیستم و استفاده غیرضروری از تراکنشهای بسیار پیچیده جلوگیری میکند. در حقیقت، اسکریپت محاسبه تراکنشها را نسبتاً آسان میکند. همانطور که در ابتدا ذکر شد، حلقههای بینهایت نیاز به قدرت محاسباتی بسیار بیشتری دارند و باعث کندی سرعت شبکهها میشوند.
قبل از ادامه بررسی بیشتر در مورد عناصر مختلفی که یک اسکریپت بیت کوین را تشکیل میدهند، بیایید یک نمونه کوچک از آن را ببینیم. در ادامه یک اسکریپت بیت کوین کوچک مشاهده میکنیم که امروزه به طور گسترده برای تراکنشهای بیت کوین استفاده میشود.
مثال: تراکنشها در بیت کوین با استفاده از اسکریپت P2PKH
اسکریپت بیت کوین در تمام عملیات بیت کوین وجود دارد. واقعیت این است که هر عملیاتی در بیت کوین توسط اسکریپت خاصی انجام میشود که مشخص میکند چه کاری انجام میشود. خارج از آنچه آن کد میگوید هیچ اتفاقی نمیافتد.
به عنوان مثال، اگر میخواهیم تراکنشی انجام دهیم، اسکریپت مربوط به آن به شرح زیر است:
نمونهای از بیت کوین اسکریپت (Bitcoin Script)
تمام مطالب فوق یک تراکنش ساده بیت کوین از نوع P2PKH (پرداخت با کلید عمومی هش) است. این نوع اسکریپتها یک اسکریپت استاندارد هستند و در واقع بیشترین استفاده را برای ارسال بیت کوین دارند. در نگاه اول به عنوان کدی بسیار رمزآلود و با فهم سخت نشان داده میشود. حقیقت این است که در پس چنین پیچیدگی، یک سیستم ساده وجود دارد که در ادامه توضیح خواهیم داد.
توضیح کامل تراکنش
اسکریپت قبلی بیت کوین در دو قسمت مشخص شده است: scriptPubKey و scriptSig.
برای scriptPubKey، اقداماتی برای انجام وجود دارد، در حالی که scriptSig حاوی امضا و کلید عمومی برای تأیید صحت این اقدامات است. این موارد اطمینان میدهد فقط کسانی که به وجوه دسترسی دارند میتوانند با آنها هر عملیاتی را انجام دهند. از طرف دیگر، OP_CODEهایی در این عملیات وجود دارد که به شرح زیر است:
OP_DUP: آیتم موجود در بالای پشته بالا را کپی میکند.
OP_HASH160: ورودی دو بار رمزگذاری میشود: ابتدا با SHA-256 و سپس با RIPEMD-160.
OP_EQUALVERIFY: تأیید میکند که دادههای وارد شده صحیح و معتبر هستند.
OP_CHECKSIG: خروجیها، ورودیها و اسکریپت کل تراکنش در یک هش خلاصه میشود. امضای استفادهشده باید یک امضای معتبر برای این هش باشد و باید در کنار کلید عمومی باشد.
آنچه در هنگام اجرای اسکریپت اتفاق میافتد به شرح زیر است:
- ابتدا، کلید عمومی اصلی مالک پول (که در scriptSig است) کپی میشود.
- سپس کلید عمومی کپی شده یک فرآیند هش کردن را طی میکند. در این فرآیند، ابتدا یک هش SHA-256 و یک RIPEMD-160 به نتیجه اعمال میشود.
- نتیجه هش ها با هش کلید عمومی که در scriptPubKey وجود دارد مقایسه میشوند تا مطمئن شوید EQUALVERIFY است (یعنی همان کلید است و معتبر است).
- اگر مطابقت داشته باشد، اسکریپت همچنان اجرا میشود و CHECKSIG برای تأیید امضا با کلید عمومی انجام میشود.
- بهاینترتیب، هر آنچه در کد نشان داده شده است، به روشی ایمن و برنامهریزیشده انجام میشود.
زبان قرارداد هوشمند بیت کوین
بسیاری از افراد تصور میکنند که بیت کوین قادر به اجرای قراردادهای هوشمند نیست. واقعیت این است که این درست نیست، زیرا با بیت کوین اسکریپت (Bitcoin Script) میتوانید قراردادهای هوشمند ایجاد کنید. ولی مطمئناً تواناییهای شما در مقایسه با آنچه میتوانید با اتریوم انجام دهید محدود است، اما این بدان معنا نیست که Bitcoin Script توانایی ایجاد قراردادهای هوشمند را ندارد.
همانطور که گفتیم، بیت کوین اسکریپت زبان تورینگ کامل نیست. این به این دلیل است که برای انجام عملکردهای مورد نظر خود به پیچیدگی بیشتری احتیاج ندارد. اما، یکی از دلایل اصلی این است که از آنجا که هیچ حلقهای وجود ندارد، شما میتوانید با اطمینان بدانید که چه زمانی و چگونه یک برنامه خاص پایان مییابد. امکان اجرای خطاها وجود ندارد، که به شما امنیت بیشتری میبخشد. همچنین امکان مسدود شدن برنامهها یا مسدود شدن اجرای آنها وجود ندارد.
اهمیت این محافظتها این است که با اسکریپت بیت کوین، ایجاد اسکریپتهایی که برای همیشه اجرا شوند غیرممکن است. در حقیقت، اسکریپتی که برای همیشه اجرا شود، درهای حمله به شبکه را با استفاده از حمله (DoS) باز میکند.
اما این واقعیت که Bitcoin Script این نوع عملیات را محدود میکند و شبکه را از چنین حملاتی محافظت میکند. بنابراین هیچ شانسی وجود ندارد که یک برنامه اسکریپت با یک حلقه مداوم بتواند از عملکرد صحیح بیت کوین جلوگیری کند.
امکانات بیت کوین اسکریپت
- زبان بیت کوین اسکریپت (Bitcoin Script) دارای چندین ویژگی است که از جمله آنها میتوان به موارد زیر اشاره کرد:
- ساده است و به حداقل پردازش نیاز دارد.
- عملکرد آن محدود است، که امنیت بیشتری را برای سیستم فراهم میکند.
- چون یک زبان ناقص تورینگ است، حلقهای ندارد، بنابراین اطمینان حاصل میکند که برنامه پایان مییابد. بنابراین، از احتمال خطا و کدهای مخرب در شبکه بیت کوین جلوگیری میشود.
- سادگی آن اجازه میدهد تا در طیف وسیعی از دستگاهها اجرا شود.
- قبل یا بعد از اجرای اسکریپت هیچ حالتی وجود ندارد. تمام اطلاعات لازم برای اجرای اسکریپت باید در آن موجود باشد.
- زبان برنامه نویسی بیت کوین بسیار کمحجم است. این زبان فقط شامل 256 دستورالعمل است، که هر دستورالعمل در یک بایت بیان میشود.
نتیجه گیری
بیت کوین اسکریپت (Bitcoin Script) یک زبان برنامه نویسی ساده است که در بیت کوین برای پردازش تراکنشها استفاده میشود. Bitcoin Script اساساً مجموعهای از دستورالعملهای برنامهریزیشده است که با هر تراکنش انجامشده کار میکند. این دستورالعملها نحوه دسترسی کاربران و استفاده از بیتکوینهای موجود در شبکه را توصیف میکند.
بیت کوین اسکریپت یک زبان برنامه نویسی ساده است که برای پردازش تراکنشهای شبکه بیت کوین استفاده میشود.
الگوی Scrypt به دلیل نیاز به حافظه ذخیرهسازی بالا در مقایسه با دیگر الگوریتمهای معروف مثل SHA-256 و bCrypt، هزینه حمله به شبکه و رمزگشایی پسوردها را شدیدا افزایش میدهد که باعث افزایش امنیت آن میشود.