تراکنش های چند امضایی
اخبار ارز دیجیتال مقالات

تراکنش های چند امضایی در بیت کوین

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

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

انتشار کدهای آزمایشی
تراکنش های چند امضایی برای ارتقاء بلاک چین بیت کوین

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

یک مثال از یک تراکنش های چند امضایی

فرض کنید من باب هستم و می خواهم پنج بیت کوین را به آلیس در عوض یک سرویس بپردازم. اما من به آلیس اعتماد ندارم و هر دوی ما به مارک اعتماد داریم. بنابراین ما یک آدرس چند امضایی 2 از 3 را با پنج بیت کوین بین آلیس، باب و مارک ایجاد می کنیم. حال اگر آلیس سرویس را ارائه نداد و من بخواهم پولم را پس بگیرم، من یک PBST ایجاد می کنم و آن را به مارک می فرستم. مارک به عنوان یک شخص ثالث در اختیار دارنده ضمانت، در مورد امنیت کوین هایش دقت می کند و بنابراین او تراکنش 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. قالب تراکنش مانند زیر خواهد بود:

قالب تراکنش به شرح زیر است:

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

نامنوعارزشتوصیف
Magic BytesInt32_t0x70736274این یک عدد صحیح چهار بایت است که ASCII برای PSBT می باشد
SeperatorChar0xffاین همیشه 0xff است تا هر گونه تلاش طبقه بندی از جانب یک طبقه کننده غیر PSBT را با شکست مواجه کند
Global DataKey-value mapمتنوعنقشه ارزش کلیدی برای همه داده های جهانی
InputsArray of key value mapsمتنوعاین ها جفت های ارزش کلیدی هستند که قبلا ذکر شد
OutputsArray 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 ارتقا یافته و ممکن است هرازگاهی تعداد زیادی پیاده سازی قابل مشاهده باشد.

Short link : https://arzmonitor.com/?p=4553

دیدگاهتان را بنویسید

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