اسکریپت بیت کوین: مقدمه ای برای مبتدیان

ساخت وبلاگ

Bitcoin Script: An Introduction For Beginners

Bitcoin Script یک زبان برنامه نویسی ساده و مبتنی بر پشته است که پردازش معاملات را در blockchain بیت کوین امکان پذیر می کند. برای درک بیشتر در مورد اسکریپت بیت کوین ، ابتدا به ویژگی های آن و یک مثال اساسی در مورد نحوه کار این زبان برنامه نویسی خواهیم پرداخت.

اسکریپت بیت کوین (همچنین به عنوان زبان اسکریپت یا اسکریپت بیت کوین نیز شناخته می شود) یک زبان برنامه نویسی ساده و مبتنی بر پشته است که پردازش معاملات را در blockchain بیت کوین امکان پذیر می کند. برای درک بیشتر در مورد اسکریپت بیت کوین ، ابتدا به ویژگی های آن و یک مثال اساسی در مورد نحوه کار این زبان برنامه نویسی خواهیم پرداخت.

ما به بررسی برخی از متداول ترین کدهای عملکرد (Opcodes) برای اسکریپت و همچنین مزایا و مضرات تورینگ کامل می پردازیم. سرانجام ، ما چهار زبان برنامه نویسی blockchain اضافی را که امروزه در حال استفاده هستند ، برجسته خواهیم کرد.

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

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

قبل از شیرجه زدن هرگونه عمیق تر ، توجه به این نکته مهم است که نرم افزار بیت کوین (همچنین به عنوان Bitcoin Core نیز شناخته می شود) در واقع با اسکریپت بیت کوین نوشته نشده است. اسکریپت خود با استفاده از زبان برنامه نویسی که نرم افزار بیت کوین در آن نوشته شده است ، پیاده سازی شده است. اجرای اصلی نرم افزار بیت کوین در C ++ نوشته شده است. از آن زمان ، پیاده سازی های اضافی در پایتون ، جاوا و رفتن نوشته شده است. بنابراین ، برای نسخه نرم افزار بیت کوین که در Go نوشته شده است ، اسکریپت بیت کوین در داخل آن نیز با استفاده از GO اجرا می شود. همین مورد در مورد سایر پیاده سازی ها نیز صدق می کند.

Bitcoin Script یک زبان برنامه نویسی ساده است که برای تعامل با نرم افزار بیت کوین استفاده می شود. به طور خاص ، اسکریپت دستورالعمل های نرم افزاری بیت کوین را در مورد چگونگی هزینه سکه در یک UTXO (خروجی معاملات غیرقابل استفاده) ارائه می دهد. البته بیشتر کاربران هرگز نیازی به یادگیری اسکریپت بیت کوین ندارند. کیف پول و سایر برنامه های بیت کوین تمام پردازش های پشت صحنه را به طور خودکار انجام می دهند.

فیلمنامه توسط Satoshi Nakamoto در انتشار نسخه اصلی بیت کوین 0. 1 اجرا شد. با این حال ، چندین اشکال داشت. برخی از کاربران اظهار داشته اند که کد اولیه اسکریپت بیت کوین مانند یک اتفاق پس از آن به نظر می رسد و برای معاملات دنیای واقعی غیر عملی است ، اما پیشرفت هایی با نسخه های بعدی Bitcoin Core ارائه شده است.

اکنون ، بیایید برخی از جزئیات دقیق تر درباره اسکریپت بیت کوین را پوشش دهیم.

مبتنی بر پشته

اسکریپت بیت کوین از یک ساختار داده استفاده می کند که می توان به عنوان یک ساختار خطی که توسط یک پشته فیزیکی یا شمع ارائه شده است ، تصور کرد. موارد موجود در بالای پشته را می توان اضافه کرد (تحت فشار) یا حذف شده (ظاهر شد) در یک صف "آخرین در ، اول (LIFO)". تصور کنید که سه کتاب را جمع می کنید: کتاب A (بالا) ، کتاب B (میانه) و کتاب C (پایین). با اسکریپت بیت کوین ، کتاب A باید اولین کسی باشد که از پشته خارج شده است (ظاهر می شود) و به دنبال آن کتاب B و کتاب C ، هر چیزی را در انتهای پشته قرار می دهد (فشار داده شده). همین مفهوم تقریباً در عملیات در یک دنباله با اسکریپت اعمال می شود.

مثل چهارم

اسکریپت شباهت دارد ، یک زبان برنامه نویسی که برای اولین بار در سال 1970 ظاهر شد. چهارم در Bootloader Firmware Open ، برنامه های فضایی (از جمله فضاپیمای Philae) و انواع دیگر سیستم های تعبیه شده شامل تعامل با سخت افزار استفاده می شود.

نماد معکوس-رنگی (RPN)

همچنین به عنوان نماد Postfix شناخته می شود ، RPN روشی برای قرار دادن عملکرد عملکرد در انتهای یک جمله است. به عنوان مثال ، اضافه کردن 5 و 6 در اسکریپت باید به عنوان "5 6 +" به جای "5 + 6" نوشته شود.

تورینگ ناقص

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

Basic diagram of how Bitcoin Script works

اسکریپت بیت کوین - پشت صحنه معامله BTC

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

اسکریپت BTC - نمونه اصلی معاملات P2PKH

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

در یک معامله P2PKH ، آلیس کلید عمومی باب را نمی شناسد. او فقط آدرس باب را می شناسد ، که یک هش رمزنگاری رمزگذاری شده Base58Check از کلید عمومی باب است. آلیس می تواند با رمزگشایی آدرس باب به "Pubkey Hash" ، معامله را ایجاد کند.

هنگامی که آلیس 1 BTC را به BOB ارسال می کند ، یک اسکریپت قفل به نام ScriptPubkey روی وجوه قرار می گیرد. در آن مرحله ، تنها کسی که می تواند این 1 BTC را خرج کند ، شخصی است که ورودی را تأمین می کند (یعنی کلید عمومی) که هش Pubkey را تولید می کند که آلیس وجوه را برای آن ارسال می کند ، به همراه امضای دیجیتالی از کلید خصوصی بیت کوین مربوطهبشربه عبارت دیگر ، 1 BTC اکنون متعلق به باب است ، اما تنها اگر باب بتواند ثابت کند که او صاحب آدرس BTC است که به آلیس ارائه داد.

باب تعادل کیف پول خود را بررسی می کند و می یابد که شبکه بیت کوین 1 BTC ارسال شده از آلیس را به رسمیت شناخته است. اگرچه باب اکنون از نظر فنی این بودجه را "صاحب" می کند ، اما او هنوز نمی تواند آنها را خرج کند. او قبل از اینکه بتواند آنها را به شخص دیگری بفرستد ، باید مالکیت واقعی این 1 BTC را به شبکه تأیید کند.

بیایید فرض کنیم که باب می خواهد همان 1 BTC را به کریس ارسال کند. قبل از این که این اتفاق بیفتد ، BOB ابتدا باید ورودی (UTXO) را ارائه دهد که دو نیاز را برآورده کند. اول ، وجوهی که باب در تلاش است هزینه کند ، باید معامله ای را که در آن وجوه از آلیس توسط شناسه معامله خود (TXID) دریافت کرده است ، ارجاع دهد. دوم ، وجوهی که باب می خواهد خرج کند باید به همان شماره شاخص (که به عنوان یک بردار یا Vout نیز خوانده می شود) به عنوان وجوهی که آلیس در وهله اول برای او ارسال کرده است ، ارجاع دهد.

سرانجام ، باب یک اسکریپت باز قفل به نام ScriptsIg (ورودی معاملات اسکریپت بیت کوین) ایجاد می کند که وی را قادر می سازد تا بودجه را خرج کند. تا زمانی که باب اسکریپتیگ را که مطابق با شرایط تعیین شده توسط ScriptPubkey (خروجی معامله اسکریپت بیت کوین) است ، فراهم کند ، وی قادر به ارسال 1 BTC به کریس است. اگر کریس بخواهد به شخص دیگری بودجه ارسال کند ، چرخه استفاده از قفل و باز کردن اسکریپت ها همچنان ادامه دارد.

Bitcoin transaction structure

اسکریپت بیت کوین و خط فرمان

مثال فوق توضیحی ساده در مورد نحوه عملکرد اسکریپت بیت کوین برای پشتیبانی از معاملات در شبکه بیت کوین است که به الگوریتم هش SHA-256 متکی است. اگر یک اسکریپت قفل استاندارد را برای ScriptPubkey در پرداخت معامله Pubkey Hash (P2PKH) بررسی کنید ، چیزی پیچیده تر مانند:

op_dup op_hash160 op_equalverify op_checksig

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

نمونه های اسکریپت بیت کوین - Opcodes مشترک

در بالا ، ما به نمونه ای از نحوه نگاه یک فیلمنامه معمول استفاده کردیم. شاید متوجه شده باشید که "OP_" زیاد استفاده می شود. این پیشوند برای شناسایی کدهای عملیاتی استفاده می شود ، که بیشتر به عنوان opcodes گفته می شود. به عبارت ساده ، Opcodes دستوراتی هستند که گره ها را در شبکه بیت کوین می گویند که چگونه می توانند با هر درخواست معامله خاص مقابله کنند. بیایید به چند مورد از رایج ترین آنها نگاه کنیم.

OP_ADD: دو مورد را از پشته پاپ می کند ، آنها را به هم اضافه می کند و نتیجه را به سمت پشته سوق می دهد.

OP_EQUAL: دو مورد را از پشته جمع می کند و آنها را مقایسه می کند تا بررسی کنند که آیا آنها برابر هستند. اگر آنها برابر باشند ، نتیجه واقعی را به پشته فشار می دهد.

OP_RETURN: می توان برای ذخیره حداکثر 80 بایت از داده های دلخواه در blockchain بیت کوین و همچنین برای علامت گذاری یک خروجی معامله به عنوان نامعتبر استفاده کرد. خروجی های معاملات OP_RETURN به طور قابل توجهی غیرقابل تحمل هستند ، و این Opcode را به یک روش کارآمد برای سوزاندن BTC تبدیل می کند. همچنین باعث می شود مکانیسم امنیتی تأخیر در کار (DPOW) تأخیر در کار (DPOW) باشد.

OP_CHECKSIG: تأیید می کند که امضای ورودی معامله معتبر است.

OP_CHECKMULTISIG: معمولاً در معاملات پرداخت به اسکریپت هش (P2SH) استفاده می شود. op_checkmultisig به 3 کلید عمومی و 2 امضا در پشته نگاه می کند و آنها را یک به یک مقایسه می کند. وجوه فقط درصورتی که ترتیب امضاها با نظمی که کلیدهای عمومی در آن ارائه شده است ، هزینه می شود.

برنامه نویسی کامل با کومودو

همانطور که با زبان های برنامه نویسی بیشماری که در بالا استفاده می شود مشاهده می کنید ، پشتیبانی از برنامه نویسی blockchain از زمان راه اندازی اولیه Bitcoin Core در سال 2009 به طور قابل توجهی پیشرفت کرده است. حتی اسکریپت پیشرفت های بی شماری داشته است. یک نمونه مربوط به Komodo Op_CheckCryptoCondition است که معمولاً به عنوان OP_CCC برای کوتاه بودن نوشته می شود.

اگرچه در ابتدا در پروتکل بیت کوین اجرا نشده است ، این Opcode پیشرفت های عمده ای را به این فناوری می افزاید. اولین بار توسط تیم Komodo Dev ساخته شده است ، OP_CCC بر اساس استاندارد پیشنهادی معرفی شده توسط تیم Interledger به نام "Cryptoconditions" است. این Opcode اکنون می تواند برای افزودن شرایط منطقی لازم برای اجرای قراردادهای هوشمند استفاده شود.

قراردادهای سفارشی Komodo قراردادهای هوشمند مبتنی بر Uxto هستند که می توانند در هر زبان برنامه نویسی blockchain کامپایل شده نوشته شوند که می تواند یک کتابخانه با پیوند ایجاد کند که قادر به تماس با توابع C/C ++ باشد.

از آنجا که قراردادهای سفارشی کومودو در Daemon اجرا می شود ، توسعه دهندگان می توانند از محدودیت ها و دردسرهای لازم برای اجرای کد در یک ماشین مجازی جلوگیری کنند ، همانطور که در بسیاری از سیستم عامل های قرارداد هوشمند مبتنی بر گاز وجود دارد. از آنجا که آنها مبتنی بر UTXO هستند ، استفاده از یک ماژول برای جاری شدن سکه های زنجیره ای اصلی با سکه های نامشروع ، عملاً غیرممکن است. این یک چالش امنیتی است که در بین قراردادهای هوشمند متعدد مبتنی بر تعادل رایج است. علاوه بر این ، Komodo یک API باز را فراهم می کند که می تواند برای نوشتن برنامه ها و نرم افزارهای مبتنی بر blockchain به هر زبان برنامه نویسی استفاده شود.

خبرنامه کومودو

اگر می خواهید در مورد فناوری blockchain اطلاعات بیشتری کسب کنید و از پیشرفت کومودو پیروی کنید ، در خبرنامه ما مشترک شوید. سفر Blockchain خود را با Komodo امروز شروع کنید.

آموزش مقدماتی فارکس...
ما را در سایت آموزش مقدماتی فارکس دنبال می کنید

برچسب : نویسنده : علیرام نورایی بازدید : 31 تاريخ : چهارشنبه 15 شهريور 1402 ساعت: 19:14