یک تراکنش و چند امضا؛ بررسی طرح جدید BIP برای تراکنش های بیت کوین

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

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

پروپوزال BIP ۱۷۴ که سال گذشته توسط Andrew Chow پیشنهاد شد، اخیرا مورد علاقه توسعه دهندگان بیت کوین واقع شده است. هدف آن ایجاد یک قالب انعطاف پذیر استاندارد می باشد که کلاینت های مختلف بتوانند اعمال PSBT را آسان تر کنند تا برای امضا در میان کاربران منتقل شود و امضا های آنها را ترکیب کند.

امضای تراکنش ها با مثال

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

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

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

PSBT متشکل از جفت های ارزش کلیدی

قالب PSBT متشکل از جفت های ارزش کلیدی هستند یعنی <key>|<value>,، کلید ها اکثر اوقات فقط یک عدد صحیح هگزای یک بایتی هستند یا یک عدد صحیح هگزا می باشند که به یک کلید عمومی مرتبط است. آنها متشکل از “انواع جهانی” هستند که هم به ورودی ها و هم به خروجی ها اعمال می شوند و از انواع هر ورودی و هر خروجی می باشند. در حال حاضر هر ورودی و هر خروجی تعریف شده شامل Witness Script، Redeem Script و BIP 32 derivation path می باشد. انواع اضافی در فیلد per-input وجود دارد مانند Witness UTXO و non-witness UTXO، Sighash Type، Partial Signature، Finalized scriptSig و Finalized scriptWitness. قالب تراکنش مانند زیر خواهد بود:

{۰x70736274}|{0xff}|{global key-value map}|{input key-value map}|…|{input key-value map}

نام نوع ارزش توصیف
Magic Bytes Int32_t ۰x70736274 این یک عدد صحیح چهار بایت است که ASCII برای PSBT می باشد
Seperator Char ۰xff این همیشه ۰xff است تا هر گونه تلاش طبقه بندی از جانب یک طبقه کننده غیر PSBT را با شکست مواجه کند
Global Data Key-value map متنوع نقشه ارزش کلیدی برای همه داده های جهانی
Inputs Array of key value maps متنوع این ها جفت های ارزش کلیدی هستند که قبلا ذکر شد
Outputs Array of key-value maps متنوع این ها جفت های ارزش کلیدی هستند که قبلا مورد بحث قرار گرفتند

درخواست یک مدل ساده تر

اخیرا بحث هایی در Bitcoin-dev بر ضد مدل ارزش کلیدی (key-value) صورت گرفته است و یک مدل ساده تر درخواست شده است. ادعا شده که این می تواند سبب خواندن بهتر شود و کارایی فضایی بیشتری را ایجاد کند زیرا بعضی کلید ها می توانند افول داشته باشند اما این به احتمال زیاد اعمال نمی شود زیرا سبب تغییر برجسته ای از پیشنهاد BIP اولیه می شود.

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

کار نقش های مذکور

تراکنش روزانه بیت کوین

خالق (creator)؛ یک تراکنش امضا نشده را ایجاد می کند و آن را در یک PSBT جدید قرار می دهد و همراه با آن یک فیلد ورودی خالی را ایجاد می کند.

به روز رسانی کننده؛ PSBT را می پذیرد و اطلاعات را به آن اضافه می کند. آنها UTXO، redeemScript، WitnessScripts و BIP 32 derivation paths را اگر موجود باشد، اضافه می کنند.

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

ترکیب کننده (combiner) یک یا تعداد بیشتری PSBT را با هم ادغام می کند و هر جفت ارزش کلیدی تکراری را حذف می کند. ترکیب کننده لازم نیست درک کند که چگونه اسکریپت را تعبیر کند. ترکیب کننده تنها به کار ترکیب آنها بر طبق ویژگی ها و خصوصیات می پردازد.

نهایی گر (finalizer) تنهای یک PBST را می پذیرد و تعیین می کند که آیا ورودی داده های کافی برای انتقال اعتبار دارد و اگر داشته باشد، ScriptSig و ScriptWitness را می سازد و از همه داده ها به جز UTXO و فیلد های ناشناخته در نقشه ارزش کلیدی ورودی خلاص می شود.

استخراج گر تراکنش (Transaction Extractor) یک PSBT مجزا را می پذیرد و بررسی می کند که آیا همه ورودی ها ScriptSig و ScriptWitnesses کامل دارند. اگر چنین باشد، استخراج گر تراکنش ها را طبقه بندی می کند و یک تراکنش شبکه ای کاملا معتبر را تولید می کند.

کلام آخر

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

با توجه به رمزگذاری یک PSBT، می توان آن را توسط یک رشته Base64 و یا یک فایل باینری ساده با پسوند فایلی .psbt ارائه داد. نام نوع MIME زمانی که BIP ویرایش شود، اضافه می گردد.

این قالب جدید می تواند سطح پذیرش کاملا جدیدی را برای کیف پول های چند امضایی ایجاد کند. BIP هنوز هم به عنوان یک Draft لیست شده است و ما باید به زودی ببینیم که آن به Proposed ارتقا یافته و ممکن است هرازگاهی تعداد زیادی پیاده سازی قابل مشاهده باشد.

قبلی «
بعدی »

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *