تراکنش
تراکنش (به انگلیسی: Transaction) جابجایی ارزش بیتکوین است که درون بلوک جا میگیرد و پس از چند پذیرش بازگشتناپذیر دانسته میشود. تراکنشهای روی زنجیرهی بیتکوین دربرگیرندهی یک یا چند درونداد و یک یا چند برونداد است. تراکنشهای روی زنجیره رمزنگاری نمیشوند و با نگاه به بلوکها میتوان همهی آنها را دید.
کاربرد هر درونداد نیازمند امضای همتای آن است و هر برونداد استاندارد با یک نشانی روشن میشود.
ریخت تراکنش بیتکوین فراگیر (درون بلوک) ویرایش
خانه | فرانمون | اندازه |
---|---|---|
شماره نگارش | اکنون 1 است. اگر OP_CHECKSEQUENCEVERIFY را بکار میبرید برای روشن کردن قفل زمانی 2 بگذارید. | 4 بایت |
پرچم | اگر باشد همیشه 0001 است و از بودن دادهی گواه خبر میدهد. | آرایهی دلبخواه ۲ بایتی |
شمارشگر درونداد | شمارهی درست مثبت | 1 - 9 بایت |
فهرست درونداد | نخستین درونداد نخستین تراکنش را «سکهنهاد» میگویند (در نگارشهای پیشین درونمایهاش نادیده گرفته میشد) | <شمارشگر برونداد>تا درونداد |
شمارشگر برونداد | شمارهی درست مثبت | 1 - 9 بایت |
فهرست برونداد | برونداد نخستین تراکنش بیتکوین استخراج شدهی بلوک را هزینه میکند | <شمارشگر برونداد>تا برونداد |
گواه | فهرستی از گواهها، یک گواه به ازای هر درونداد، اگر «پرچم» نباشد نادیده گرفته میشود. | گوناگون_گواهجدا را ببینید |
زمان قفل | اگر ناسِفر باشد و شمارهی دنباله کمتر از 0xFFFFFFFF باشد: شماره بلوک یا برچسبزمانیای که تراکنش از آن پس نهایی دانسته میشود | 4 بایت |
تراکنشی با نگارش ۰ نداریم و نگارشهای بیش از ۲ برای کاربردهای آیندهی پروتکل گذاشته شده. پرچم و گواه برای تراکنشهایی که دروندادِ سگویت دارند بایسته است و برای تراکنشهای کهنهی پیش از سگویت باید زدوده شوند.
نمونه تراکنش تنها با یک درونداد و یک برونداد ویرایش
داده ویرایش
Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501
Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG
فرانمون ویرایش
دروندادِ این تراکنش ۵۰ بیتکوین از برونداد شماره ۰ در تراکنش f5d8... میآورد و برونداد ۵۰ بیتکوین را به یک نشانی میفرستد(که اینجا با شمارهی شانزدهشانزدهی 4043... بجای پایه۵۸ بهنجار نشان داده شده). هنگامی که دریافتکننده میخواهد پولش را خرج کند برونداد شماره ۰ این تراکنش را در یکی از درونروندگان تراکنش خودش مینمارد.
درونداد ویرایش
خانه | فرانمون | اندازه |
---|---|---|
درهم برونداد | تراکنش پیشین که برونداد خرجپذیر دارد | 32 بایت |
نمایهی برونداد | نمایهی آرایهی برونداد تراکنش پیشین برای روشن کردن برونداد خرجپذیر | 4 بایت |
اندازهی دستورگان درونداد | شمارهی درست نامنفی | 1 - 9 بایت |
امضای دستورگان(دستورگان درونداد) | دانستنی نیاز برای خرج کردن برونداد | <اندازهیدستورگان>تا بایت |
شماره دنباله | بیشتر 0xFFFFFFFF است. بیهوده است مگر اینکه زمان قفل(lock_time)>0 | 4 بایت |
درونداد(Input) نمارشی به یک برونداد از یک تراکنش پیشین است. در بیشتر تراکنشها چندین درونداد فهرست میشود. همهی ارزشهای دروندادِ تراکنش (که همهی ارزش بروندادهای پیشینی است که نمارده شده) روی هم رفته و در بروندادها میآید، هرچه در بروندادها فرستاده نشود کارمزد استخراجکنندهی تراکنش گرفته میشود. تراکنش پیشین(Previous tx) درهم یک تراکنش پیشتر پذیرفته شده است. نمایه(Index) برونداد گزیدهی تراکنش پیشین را نشان میدهد. امضای دستورگان(scriptSig) نیمهی نخست یک دستورگان است.
دستورگان دو بخش دارد، یک امضا و یک کلید همهبین. کلید همهبین باید با درهم فراهم شده از دستورگان برونداد بکار رفته سازگار باشد. کلید همهبین برای راستیآزمایی امضای بکاربرنده،که بخش دوم است، بکار میرود. ریزتر،بخش دوم یک امضای ایسیدیاسای است بر روی درهم نگارش سادهشدهی تراکنش. این امضا به همراه کلید همهبین نشان میدهد که تراکنش را کسی که بیتکوینها را دارد ساخته است. پرچمهای گوناگون روشن میکنند که تراکنش چگونه ساده شده و میتوان آنها را برای ساخت گونههای گوناگون پرداخت بکار برد.
برونداد ویرایش
خانه | فرانمون | اندازه |
---|---|---|
ارزش | ارزش پولی برونداد به ساتوشی | 8 بایت |
اندازهی دستورگان برونداد | شمارهی درست نامنفی | 1 - 9 بایت |
دستورگان برونداد | چالشی که تراکنشهای آتی باید برای خرج این برونداد بگشایند | <اندازهیدستورگان>تا بایت |
برونداد (Output) دربرگیرندهی شیوهنامهی فرستادن بیتکوین است. ارزش (Value) شمار ساتوشیهایی است که این برونداد هنگام خرج خواهد داشت. کلیدهمهبین دستورگان (scriptPubKey) نیمهی دوم دستورگان است. میتوان بیش از یک برونداد داشت که ارزش روی هم رفتهی دروندادها را همزمان دارند. چون هر برونداد هر تراکنش را تنها یکبار میتوان با آوردن در دروندادِ تراکنش آتی خرج کرد، همهی ارزش روی هم رفتهی دروندادها باید در برونداد بیاید وگرنه از دست میرود. اگر درونداد ۵۰ بیتکوین ارزش داشته باشد و تنها ۲۵ بیتکوین بفرستید ۲۵ بیتکوین دیگر (به نام تتمه) در یک برونداد دیگر به خودتان برمیگردد و اگر ارزشی از درونداد در برونداد نیاید کارمزد تراکنش شناخته شده و هرکس که بلوک در برگیرندهی تراکنش را بسازد آن را در تراکنش سکهنهادی آن بلوک برای خود برمیدارد.
گواه ویرایش
در تراکنشهای سگویت در پِی بروندادها فهرستی از خانههای گواه هست که هر خانهی گواه همتای دروندادای با همان نمایه است. هر خانهی گواه دربرگیرندهی یک شمارهی درست است که شمار المانهای روی پشتهی گواه را نشان میدهد و المانهای پشته خود دربرگیرندهی جفت شمارههاییاند که نشاندهنده اندازهی داده و به دنبال آن خود داده است.
هنگام پیمایش یک تراکنش خام باید دانست که خانههای گواه در یک خانهی «گواه» در برونداد ساختاریافتهی از ریخت سریالی درآمده گرد نیامدهاند، که هر گواه در کلید «گواه» خود زیر دروندادِ همتای خود میآید.
تراکنشهایی که دروندادهای سگویت بومی ندارند (مانند پرداخت به گواه درهم کلید همهبین P2WPKH یا پرداخت به گواه درهم دستورگان P2WSH) باید به ریخت تراکنش کهنه باشند. خانههای گواه تنها برای دروندادهای سگویت بومی افزوده میشوند، پس تراکنشی بدون این دروندادها نمیتواند ریخت تراکنش سگویت، مانند خانهی نشانگر و پرچم را بکار ببرد. افزون بر این، هر خانهی گواه همتای دروندادِ سگویت بومی خود است که با چیدمانی که در تراکنش آمدهاند روشن میشوند. پس در تراکنش خام، نخستین خانهی گواه برای نخستین دروندادِ سگویت بومی در تراکنش است و به همین چیدمان برای دومی و سومی و... .
راستیآزمایی ویرایش
برای راستیآزمایی اینکه دروندادها میتوانند ارزشهای بروندادهای گزیدهشده را بردارند یا نه، بیتکوین سامانهی دستورگاننویسی فورت-مانندی را بکار میبرد. امضای دستورگان درونداد و کلیدهمهبین دستورگان برونداد نمارده شده (به این چیدمان) ارزیابی میشوند، برای این کار کلیدهمهبین دستورگان ارزشهایی که امضای دستورگان روی پشته جا گذاشته را بکار میبرد. درونداد میتواند ارزش برونداد را بردارد اگر کلیدهمهبین دستورگان مقدار «راست»(True) را برگرداند. با سامانهی دستورگاننویسی فرستنده میتواند شرطهای بسیار پیچیدهای برای کسی که میخواهد ارزش برونداد را بردارد بگذارد. برای نمونه، میتوان بروندادای ساخت که هرکس بتواند آن را خرج کند. همچنین میتوان بایسته ساخت که درونداد با ده کلید گوناگون امضا شده باشد یا با یک گذرواژه بجای کلید گشوده شود.
گونههای تراکنش ویرایش
پرداخت به درهم کلید همهبین ویرایش
scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptSig: <sig> <pubKey>
نشانی بیتکوین تنها یک درهم است، پس فرستنده نمیتواند کلید همهبین را درسته در کلیدهمهبیندستورگان بگذارد. هنگام برداشت سکههایی که به نشانی بیتکوین فرستاده شدهاند، دریافتکننده(برداشتکننده) است که باید هم امضا و هم کلیدهمهبین را بدهد. دستورگان بررسی میکند که درهم کلید همهبین داده شده با درهم داده شده در کلیدهمهبیندستورگان برابر باشد همچنین امضا را با کلید همهبین بررسی میکند.
روند بررسی:
پشته | دستورگان | فرانمون |
---|---|---|
خالی | <sigامضا> <pubKeyکلیدهمهبین> OP_DUP OP_HASH160 <pubKeyHashدرهمکلیدهمهبین> OP_EQUALVERIFY OP_CHECKSIG
|
امضای دستورگان و کلیدهمهبین دستورگان یکی میشوند |
<sigامضا > <pubKeyکلیدهمهبین>
|
OP_DUP OP_HASH160 <pubKeyHashدرهمکلیدهمهبین> OP_EQUALVERIFY OP_CHECKSIG
|
ثابتها روی پشته گذاشته میشود |
<sigامضا > <pubKeyکلیدهمهبین> <pubKeyکلیدهمهبین>
|
OP_HASH160 <pubKeyHashدرهمکلیدهمهبین> OP_EQUALVERIFY OP_CHECKSIG
|
بالاترین چیز روی پشته بازنویسی میشود |
<sigامضا > <pubKeyکلیدهمهبین> <pubHashAدرهم همهبین الف>
|
<pubKeyHashدرهمکلیدهمهبین> OP_EQUALVERIFY OP_CHECKSIG
|
بالاترین چیز روی پشته درهمسازی میشود |
<sigامضا > <pubKeyکلیدهمهبین> <pubHashAدرهم همهبین الف> <pubKeyHashدرهمکلیدهمهبین >
|
OP_EQUALVERIFY OP_CHECKSIG
|
ثابت افزوده میشود |
<sigامضا> <pubKeyکلیدهمهبین> | OP_CHECKSIG
|
برابری دو چیز بالای پشته بررسی میشود |
Trueراست | خالی | درستی امضای دو چیز بالای پشته بررسی میشود |
پرداخت به درهم دستورگان ویرایش
scriptPubKey: OP_HASH160 <scriptHash> OP_EQUAL
scriptSig: ..signatures... <serialized script>
m-of-n multi-signature transaction:
scriptSig: 0 <sig1> ... <script>
script: OP_m <pubKey1> ... OP_n OP_CHECKMULTISIG
نشانیهای پرداخت به درهم دستورگان P2SH با این انگیزه ساخته شدند که «کار گشودن چالش برداشت ارزش در تراکنش از دوش فرستندهی پول به دوش برداشتکننده جابجا شود. این نشانیها به فرستنده اجازه میدهند تا با درهم ۲۰بایتی پول را به تراکنشی دلبخواه پیچیده بفرستد.». نشانیهای پرداخت به درهم کلید همهبین هم به همین سان درهم ۲۰بایتی کلید همهبیناند.
پرداخت به درهم دستورگان بر وارونِ پرداخت به درهم کلیدهمهبین که چشمداشت روشنی از کلیدهمهبین دستورگان و امضای دستورگان دارد، راهی برای تراکنشهای پیچیده باز میکند. فرانمون این پرداخت هیچ کرانی روی دستورگان نمیگذارد و از این رو میتوان با بکار بستن این نشانیها به هر «پیمانی» پول فرستاد.
در تراکنش سازندهی برونداد، کلیدهمهبیندستورگان، دستورگانی است که تضمین میکند دستورگان داده شده در تراکنش خرجکنندهی برونداد به دستورگان بکار رفته برای ساخت نشانی درهم میشود.
در امضای دستورگان بالا، 'امضاها' به هر دستورگانی اشاره دارد که برای برآوردن دستورگان سریالیشدهی زیر کافی باشد.
روند بررسی:
پشته | دستورگان | فرانمون |
---|---|---|
خالی | 0 <sig1امضا> <sig2امضا> OP_2 <pubKey1کلیدهمهبین> <pubKey2کلیدهمهبین> <pubKey3کلیدهمهبین> OP_3 OP_CHECKMULTISIG | تنها امضایدستورگان بکار میرود |
0 <sig1امضا> <sig2امضا> OP_2 <pubKey1کلیدهمهبین> <pubKey2کلیدهمهبین> <pubKey3کلیدهمهبین> OP_3 | OP_CHECKMULTISIG | ثابتها به پشته افزوده میشوند |
Trueراست | خالی | امضاها به چینش کلیدهای همهبین در دستورگان سنجیده میشوند |
برای بیشتر خواندن، بیپ ۱۶ را ببینید
تراکنش ساخت ویرایش
تراکنشهای ساخت یک درونداد دارند و این درونداد به جای امضای دستورگان یک پارامتر «سکهنهاد» دارد. دادهی در «سکهنهاد» میتواند هر چیزی باشد؛ جایی بکار نمیرود. بیتکوین هدف کنونی ریختفشرده و شمارهی «تکبارافزوده»، که هر بار که تکبار سربرگ بلوک سرریز میشود، افزایش مییابد،با ریزبینی دلخواه را در آن میگذارد. بروندادها میتوانند هر چیزی باشند، اما بیتکوین یکی مانند تراکنش به نشانی آیپی میسازد. تکبارافزوده به بزرگ کردن دامنهی پردازهی اثبات کار کمک میکند. استخراجگران به سادگی میتوانند تکبار (۴بایتی)، برچسب زمانی و تکبار افزوده (۲ تا ۱۰۰بایتی) را ویرایش کنند.