معاملات

ساخت وبلاگ

زیرمجموعه های زیر به طور خلاصه جزئیات معاملات اصلی را مستند می کنند.

Opcodes¶

Opcodes مورد استفاده در اسکریپت های Pubkey از معاملات استاندارد عبارتند از:

داده های مختلف فشار Opcodes از 0x00 به 0x4E (1-78). اینها به طور معمول به عنوان مثال نشان داده نمی شوند ، اما باید از آنها برای فشار دادن امضاها و کلیدهای عمومی روی پشته استفاده شود. برای توضیحات به لینک زیر این لیست مراجعه کنید.

OP_TRUE / OP_1 (0x51) و OP_2 از طریق OP_16 (0x52–0x60) ، که مقادیر 1 تا 16 را به پشته سوق می دهد.

"op_checksig" یک امضای و یک کلید عمومی کامل را مصرف می کند ، و اگر داده های معامله مشخص شده توسط پرچم آهاش با استفاده از همان کلید خصوصی ECDSA که باعث ایجاد کلید عمومی می شود ، روی پشته فشار می یابد. در غیر این صورت ، کاذب را روی پشته فشار می دهد.

"OP_DUP" کپی از بالاترین مورد پشته را به پشته فشار می دهد.

"OP_HASH160" بالاترین مورد را در پشته مصرف می کند ، هش RIPEMD160 (SHA256 ()) آن مورد را محاسبه می کند و آن هش را روی پشته فشار می دهد.

"OP_EQUAL" دو مورد برتر را در پشته مصرف می کند ، آنها را مقایسه می کند و اگر یکسان باشد ، اگر نه ، روی پشته فشار می یابد.

"op_verify" بالاترین مورد را در پشته مصرف می کند. اگر آن مورد صفر (نادرست) باشد ، اسکریپت را در خرابی خاتمه می دهد.

"op_checkmultisig" مقدار (n) را در بالای پشته مصرف می کند ، مصرف می کند که بسیاری از سطح پشته بعدی (کلیدهای عمومی) ، مقدار (M) را اکنون در بالای پشته مصرف می کند و بسیاری از موارد دیگر را مصرف می کندمقادیر (امضاها) به علاوه یک مقدار اضافی.

"یک مقدار اضافی" که آن را مصرف می کند ، نتیجه خطای خارج از یک در اجرای هسته بیت کوین است. این مقدار استفاده نمی شود ، بنابراین اسکریپت های امضاء لیست امضاهای SECP256K1 با یک OP_0 (0x00) را پیشوند می کنند.

"op_checkmultisig" اولین امضای را در برابر هر کلید عمومی مقایسه می کند تا اینکه یک مسابقه ECDSA پیدا کند. با شروع کلید عمومی بعدی ، امضای دوم را در برابر هر کلید عمومی باقی مانده مقایسه می کند تا اینکه یک مسابقه ECDSA پیدا کند. این روند تکرار می شود تا زمانی که تمام امضاها بررسی شوند یا کلیدهای عمومی کافی برای تولید نتیجه موفق باقی بمانند.

از آنجا که کلیدهای عمومی در صورت عدم موفقیت در مقایسه با امضای ، دوباره بررسی نمی شوند ، امضاها باید با استفاده از همان سفارش کلیدهای عمومی مربوطه در اسکریپت Pubkey یا Redeem Script در اسکریپت امضا قرار بگیرند. برای جزئیات بیشتر به هشدار "op_checkmultisig" در زیر مراجعه کنید.

"OP_RETURN" هنگام اجرای اسکریپت را در شکست خاتمه می دهد.

لیست کاملی از Opcodes را می توان در صفحه اسکریپت ویکی بیت کوین یافت ، با یک لیست معتبر در enum opcodeType از پرونده هدر اسکریپت Core Bitcoin

هشدار اصلاح اسکریپت امضا: اسکریپت های امضا امضا نمی شوند ، بنابراین هر کسی می تواند آنها را اصلاح کند. این بدان معناست که اسکریپت های امضا فقط باید حاوی داده ها و داده های صفحه ای باشند که بدون اینکه باعث خرابی اسکریپت Pubkey شوند ، نمی توانند اصلاح شوند. قرار دادن opcodes غیر داده شده در اسکریپت امضا در حال حاضر معامله ای را غیر استاندارد می کند و قوانین اجماع آینده ممکن است چنین معاملات را به طور کلی منع کند..

هشدار "op_checkmultisig": فرآیند تأیید multisig که در بالا توضیح داده شد ، مستلزم آن است که امضاهای موجود در اسکریپت امضا به همان ترتیب کلیدهای عمومی مربوطه در اسکریپت Pubkey یا Redeem Script ارائه شود. به عنوان مثال ، امضاء ترکیبی و اسکریپت PubKey زیر پشته و مقایسه های نشان داده شده را تولید می کند:

اما معکوس کردن ترتیب امضاها با هر چیز دیگری ، همانطور که در زیر آمده است:

تبدیل آدرس ¶

هش مورد استفاده در خروجی های P2PKH و P2SH معمولاً به عنوان آدرس های بیت کوین رمزگذاری می شوند. این روشی است که برای رمزگذاری آن هش ها و رمزگشایی آدرس ها است.

اول ، هش خود را بگیرید. برای P2PKH ، شما یک کلید عمومی ECDSA را که از کلید خصوصی 256 بیتی ECDSA (داده های تصادفی) گرفته شده است ، ripemd-160 (sha256 ()) می کنید. برای P2SH ، شما RIPEMD-160 (SHA256 ()) هش یک اسکریپت بازخرید شده با فرمت استفاده شده در معاملات خام (که در بخش زیر شرح داده شده است). گرفتن هش حاصل:

یک نسخه آدرس بایت را در مقابل هش اضافه کنید. بایت های نسخه که معمولاً توسط بیت کوین استفاده می شود عبارتند از:

0x00 برای آدرس های P2PKH در شبکه اصلی بیت کوین (MainNet)

0x6f برای آدرس های P2PKH در شبکه تست بیت کوین (TestNet)

0x05 برای آدرس های P2SH در Mainnet

0xc4 برای آدرس های P2SH در TestNet

یک نسخه از نسخه و هش ایجاد کنید. سپس هاش که دو بار با SHA256: SHA256 (SHA256 (نسخه هش))

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

چک را به نسخه و هش اضافه کنید و آن را به عنوان یک رشته Base58 رمزگذاری کنید: Base58 (نسخه. هش. چک)

رمزگذاری BISE58 بیت کوین ، به نام Base58Check ممکن است با سایر پیاده سازی ها مطابقت نداشته باشد. Tier Nolan الگوریتم رمزگذاری مثال زیر را به صفحه رمزگذاری Bitcoin Wiki Base58Check تحت مجوز Creative Commons Attribution 3. 0 ارائه داد:

کد شخصی بیت کوین را می توان با استفاده از پرونده هدر Base58 ردیابی کرد.

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

قالب معامله خام ¶

معاملات بیت کوین بین همسالان با فرمت بایت سریالی به نام Format Raw پخش می شود. این شکل از معامله ای است که برای ایجاد txid و در نهایت ریشه مرکل یک بلوک حاوی معامله - ساخت بخشی از قالب معامله از قوانین اجماع ، sha256 (sha256 ()) است.

Bitcoin Core و بسیاری از ابزارهای دیگر معاملات خام رمزگذاری شده به عنوان HEX را چاپ و می پذیرند.

از طریق Bitcoin Core 0. 9. 3 (اکتبر 2014) ، کلیه معاملات از قالب نسخه 1 که در زیر شرح داده شده است استفاده می کنند.(توجه: معاملات موجود در زنجیره بلوک مجاز به لیست نسخه بالاتر برای اجازه دادن به چنگال های نرم هستند ، اما با استفاده از نرم افزار فعلی به عنوان معاملات نسخه 1 رفتار می شوند.)

معامله خام دارای فرمت سطح بالا زیر است:

شماره نسخه معامله (توجه داشته باشید ، این امضا شده است) ؛در حال حاضر نسخه 1 یا 2. برنامه ها ایجاد معاملات با استفاده از قوانین اجماع جدید ممکن است از شماره نسخه های بالاتر استفاده کنند. نسخه 2 به این معنی است که BIP 68 اعمال می شود.

تعداد ورودی ها در این معامله.

ورودی های معاملهتوضیحات TXIN را در زیر مشاهده کنید.

تعداد خروجی ها در این معامله.

خروجی معاملاتتوضیحات TXOUT را در زیر مشاهده کنید.

یک معامله ممکن است دارای چندین ورودی و خروجی باشد ، بنابراین ساختارهای TXIN و TXOUT ممکن است در یک معامله عود کنند. اعداد صحیح بدون امضاء ، نوعی عدد صحیح با طول متغیر است. آنها در بخش CompactSize شرح داده شده است.

TXIN: ورودی معامله (غیر سکه)

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

نقطه قبلی که در آن هزینه شده است. توضیحات Outpoint را در زیر مشاهده کنید.

تعداد بایت در اسکریپت امضا. حداکثر 10،000 بایت است.

یک اسکریپت به زبان اسکریپت که شرایط موجود در اسکریپت PubKey Outpoint را برآورده می کند. فقط باید حاوی فشار داده باشد. هشدار اصلاح اسکریپت Signature را ببینید.

شماره ترتیب. پیش فرض برای هسته بیت کوین و تقریباً همه برنامه های دیگر 0xffffffف است.

Outpoint: قسمت خاص یک خروجی خاص

از آنجا که یک معامله واحد می تواند شامل چندین خروجی باشد ، ساختار Outpoint شامل یک TXID و یک شماره شاخص خروجی برای مراجعه به خروجی خاص است.

txid معامله که خروجی را برای خرج کردن دارد. txid هش است که در اینجا به ترتیب بایت داخلی ارائه شده است.

شماره شاخص خروجی خروجی خاص برای خرج کردن از معامله. اولین خروجی 0x00000000 است.

TXOUT: یک خروجی معامله

هر خروجی تعداد مشخصی از Satoshis را خرج می کند و آنها را تحت کنترل هر کسی قرار می دهد که بتواند اسکریپت PubKey را برآورده کند.

تعداد Satoshis برای خرج کردن. ممکن است صفر باشد ؛مجموع تمام خروجی ها ممکن است از مجموع ساتوشیس که قبلاً در قسمتهای ورودی در بخش ورودی صرف شده بود ، تجاوز نکند.(استثنا: معاملات Coinbase یارانه بلوک و هزینه های معامله را جمع می کند.)

تعداد بایت در اسکریپت Pubkey. حداکثر 10،000 بایت است.

شرایطی را که باید برای صرف این خروجی راضی باشد ، تعریف می کند.

مثال

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

ورودی Coinbase: ورودی اولین معامله در یک بلوک

اولین معامله در یک بلوک با نام معامله Coinbase ، باید دقیقاً یک ورودی داشته باشد ، به نام Coinbase. ورودی Coinbase در حال حاضر قالب زیر را دارد.

تحليلات الفوركس...
ما را در سایت تحليلات الفوركس دنبال می کنید

برچسب : نویسنده : یکتا ناصر بازدید : 61 تاريخ : سه شنبه 8 فروردين 1402 ساعت: 20:53