معماری پارچه Hyperledger مزایای زیر را ارائه می دهد:
- انعطاف پذیری اعتماد به کد زنجیره ای. این معماری فرضیات اعتماد برای کدهای زنجیره ای (برنامه های blockchain) را از فرضیات اعتماد برای سفارش جدا می کند. به عبارت دیگر ، سرویس سفارش ممکن است توسط یک مجموعه از گره ها (سفارش دهنده ها) ارائه شود و برخی از آنها را برای ناکامی یا نادرست تحمل کنید و تأیید کنندگان ممکن است برای هر کد زنجیره ای متفاوت باشند.
- مقیاس پذیریاز آنجا که گره های تأیید کننده مسئول کد زنجیره ای خاص برای سفارش دهندگان متعامد هستند ، ممکن است سیستم بهتر از این باشد که این توابع توسط همان گره ها انجام شود. به طور خاص ، این نتیجه می گیرد که کد های زنجیره ای مختلف تأیید کننده های جداگانه را مشخص می کنند ، که یک پارتیشن بندی از کد های زنجیره ای بین تأیید کنندگان را معرفی می کند و امکان اجرای کد زنجیره ای موازی (تأیید) را فراهم می کند. علاوه بر این ، اجرای کد زنجیره ای ، که به طور بالقوه می تواند پرهزینه باشد ، از مسیر بحرانی سرویس سفارش حذف می شود.
- محرمانه بودناین معماری استقرار کدهای زنجیره ای را که دارای الزامات محرمانه بودن با توجه به محتوا و به روزرسانی های دولتی معاملات آن هستند ، تسهیل می کند.
- مدولار اجماع. معماری مدولار است و امکان اجرای اجماع قابل استفاده را (یعنی سرویس سفارش) فراهم می کند.
قسمت اول: عناصر معماری مربوط به پارچه Hyperledger v1
گردش کار اساسی تأیید معامله
قسمت دوم: عناصر پس از V1 معماری
بازرسی لجر (هرس)
1. معماری سیستم ¶
blockchain یک سیستم توزیع شده است که از بسیاری از گره ها تشکیل شده است که با یکدیگر ارتباط برقرار می کنند. blockchain برنامه هایی به نام Caincode را اجرا می کند ، داده های حالت و دفترچه را در اختیار دارد و معاملات را اجرا می کند. کد زنجیره ای عنصر اصلی است زیرا معاملات عملیاتی هستند که در کد زنجیره ای فراخوانی می شوند. معاملات باید "تأیید" شوند و فقط معاملات تأیید شده ممکن است انجام شود و بر دولت تأثیر بگذارد. ممکن است یک یا چند کد زنجیره ای خاص برای توابع و پارامترهای مدیریتی وجود داشته باشد ، که به طور جمعی به نام کدهای زنجیره ای سیستم نامیده می شوند.
1. 1معاملات
معاملات ممکن است از دو نوع باشد:
- استقرار معاملات باعث ایجاد کد جدید و برنامه به عنوان پارامتر می شود. هنگامی که یک معامله مستقر با موفقیت انجام می شود ، کد زنجیره ای "روی" blockchain نصب شده است.
- معاملات فراخوانی عملیاتی را در زمینه کد زنجیره ای که قبلاً مستقر شده است ، انجام می دهند. یک معامله فراخوانی به یک کد زنجیره ای و یکی از کارکردهای ارائه شده آن اشاره دارد. در صورت موفقیت ، کد زنجیره ای عملکرد مشخص شده را اجرا می کند - که ممکن است شامل اصلاح حالت مربوطه و بازگشت یک خروجی باشد.
همانطور که بعداً توضیح داده شد ، معاملات مستقر موارد ویژه ای از معاملات استیضاح است ، جایی که یک معامله مستقر که باعث ایجاد کد زنجیره ای جدید می شود ، با یک معامله فراخوانی در یک کد زنجیره ای سیستم مطابقت دارد.
نکته: این سند در حال حاضر فرض می کند که یک معامله یا کد زنجیره ای جدید ایجاد می کند یا عملیاتی را که توسط *یکی از کد های زنجیره ای مستقر شده است ، فراخوانی می کند. این سند هنوز شرح داده نشده است: الف) بهینه سازی معاملات پرس و جو (فقط خواندنی) (شامل در V1) ، ب) پشتیبانی از معاملات کد متقابل (ویژگی پس از V1).*
1. 2blockchain datastructureces¶
1. 2. 1. حالت¶
آخرین حالت blockchain (یا ، به سادگی ، حالت) به عنوان یک فروشگاه با ارزش کلیدی نسخه (KVS) مدل شده است ، جایی که کلیدها نام و مقادیر دارای حباب های دلخواه هستند. این مدخل ها توسط کدهای زنجیره ای (برنامه ها) که از طریق قرار دادن و دریافت KVS-Operations روی blockchain اجرا می شوند ، دستکاری می شوند. دولت به طور مداوم ذخیره می شود و به روزرسانی های دولت وارد می شود. توجه کنید که KVS نسخه ای به عنوان مدل دولتی اتخاذ شده است ، یک اجرای ممکن است از KVS های واقعی ، بلکه RDBMSS یا هر راه حل دیگر استفاده کند.
More formally, state s is modeled as an element of a mapping K >(v x n) ، جایی که:
- k مجموعه ای از کلیدها است
- v مجموعه ای از مقادیر است
- N is an infinite ordered set of version numbers. Injective function next: N >n یک عنصر N را می گیرد و شماره نسخه بعدی را برمی گرداند.
هر دو V و N حاوی یک عنصر خاص ⊥ (نوع خالی) هستند که در مورد N کمترین عنصر است. در ابتدا تمام کلیدها به (⊥ ، ⊥) نقشه برداری می شوند. برای s (k) = (v ، ver) ما V را با s (k) . Value ، و ver by s (k) نشان می دهیم.
عملیات KVS به شرح زیر است:
- قرار دادن (k ، v) برای k ∈ K و V ∈ V ، حالت blockchain s را می گیرد و آن را به s "s '(k) = (v ، next (s (k))) با s تغییر می دهد.(k ') = s (k') برای همه k '! = k.
- دریافت (k) S (k) را برگردانید.
دولت توسط همسالان نگهداری می شود ، اما نه توسط سفارش دهنده ها و مشتری ها.
پارتیشن بندی دولتی. کلیدهای موجود در KV ها را می توان از نام آنها برای تعلق به یک کد زنجیره ای خاص تشخیص داد ، به این معنا که تنها معامله یک کد زنجیره ای خاص ممکن است کلیدهای متعلق به این کد زنجیره ای را تغییر دهد. در اصل ، هر کد زنجیره ای می تواند کلیدهای متعلق به سایر کد های زنجیره ای را بخواند. پشتیبانی از معاملات کد متقابل ، که وضعیت متعلق به دو یا چند کد زنجیره ای را تغییر می دهد ، یک ویژگی پس از V1 است.
1. 2. 2 Ledger¶
لجر سابقه قابل اثبات از کلیه تغییرات موفق دولت (ما در مورد معاملات معتبر صحبت می کنیم) و تلاش های ناموفق برای تغییر دولت (ما در مورد معاملات نامعتبر صحبت می کنیم) ارائه می دهد ، که در طول عملکرد سیستم اتفاق می افتد.
Ledger توسط سرویس سفارش (به Sec 1. 3. 3 مراجعه کنید) به عنوان یک هشچین کاملاً سفارش داده شده از بلوک های معاملات (معتبر یا نامعتبر) ساخته شده است. Hashchain ترتیب کل بلوک ها را در یک دفترچه تحمیل می کند و هر بلوک شامل مجموعه ای از معاملات کاملاً سفارش داده شده است. این امر سفارش کل را در تمام معاملات تحمیل می کند.
لجر در همه همسالان و به صورت اختیاری در زیر مجموعه ای از سفارش دهندگان نگهداری می شود. در زمینه یک سفارش دهنده ، ما به Ledger به عنوان Ordererledger اشاره می کنیم ، در حالی که در زمینه یک همسالان ما به دفترچه به عنوان Peerledger اشاره می کنیم. Peerledger با سفارش دهنده متفاوت است زیرا همسالان به صورت محلی یک بیت ماسک را حفظ می کنند که معاملات معتبر را از موارد نامعتبر جدا می کند (برای اطلاعات بیشتر به بخش xx مراجعه کنید).
همسالان ممکن است Peerledger را همانطور که در بخش XX توضیح داده شده است ، هرس کنند. سفارش دهندگان برای تحمل گسل و در دسترس بودن (از Peerledger) سفارش دهنده را حفظ می کنند و ممکن است تصمیم بگیرند که در هر زمان هرس کنند ، مشروط بر اینکه خواص سرویس سفارش (به Sec 1. 3. 3 مراجعه کنید) حفظ شود.
دفترچه به همسالان این امکان را می دهد تا تاریخچه کلیه معاملات را دوباره پخش کنند و دولت را بازسازی کنند. بنابراین ، وضعیت همانطور که در Sec 1. 2. 1 شرح داده شده است ، یک دیتساخت اختیاری است.
1. 3گره ها
گره ها موجودات ارتباطی blockchain هستند."گره" فقط یک عملکرد منطقی است به این معنا که گره های مختلف از انواع مختلف می توانند روی همان سرور فیزیکی اجرا شوند. آنچه مهم است این است که چگونه گره ها در "حوزه های اعتماد" گروه بندی می شوند و با موجودات منطقی که آنها را کنترل می کنند ، مرتبط هستند.
سه نوع گره وجود دارد:
- مشتری یا مشتری ارائه دهنده: مشتری که یک انتقال واقعی معامله را به تأیید کنندگان ارسال می کند و پروانه های معامله را به سرویس سفارش پخش می کند.
- همکار: گره ای که مرتکب معاملات و حفظ دولت و یک نسخه از دفترچه می شود (به SEC ، 1. 2 مراجعه کنید). علاوه بر این ، همسالان می توانند نقش ویژه ای داشته باشند.
- Node یا سفارش دهنده سفارش دهنده: گره ای که سرویس ارتباطی را اجرا می کند که ضمانت تحویل را اجرا می کند ، مانند پخش اتمی یا کل سفارش.
انواع گره ها با جزئیات بیشتر توضیح داده می شوند.
1. 3. 1. مشتری¶
مشتری نماینده موجودی است که به نمایندگی از یک کاربر نهایی عمل می کند. برای برقراری ارتباط با blockchain باید به یک همکار متصل شود. مشتری ممکن است به هر یک از همسالان مورد نظر خود متصل شود. مشتریان ایجاد می کنند و از این طریق معاملات را فراخوانی می کنند.
همانطور که در بخش 2 به تفصیل شرح داده شده است ، مشتری ها با همسالان و سرویس سفارش ارتباط برقرار می کنند.
1. 3. 2. همسالان
یک همسالان به روزرسانی های دولتی سفارش داده شده را در قالب بلوک های سرویس سفارش دریافت می کند و دولت و دفترچه را حفظ می کند.
علاوه بر این ، همسالان می توانند نقش ویژه ای از همسالان تأیید کننده یا یک تأیید کننده را به عهده بگیرند. عملکرد ویژه یک همسالان تأیید کننده با توجه به یک کد زنجیره ای خاص رخ می دهد و شامل تأیید معامله قبل از انجام آن است. هر کد زنجیره ای ممکن است یک خط مشی تأیید را مشخص کند که ممکن است به مجموعه ای از همسالان تأیید کننده اشاره کند. این خط مشی شرایط لازم و کافی را برای تأیید معامله معتبر (به طور معمول مجموعه ای از امضاهای تأیید کنندگان) تعریف می کند ، همانطور که بعداً در بخش های 2 و 3 توضیح داده شده است. به عنوان یک سیاست تأیید کد زنجیره ای سیستم مشخص شده است.
1. 3. 3. سفارش گره های خدمات (سفارش دهنده ها)
سفارش دهندگان سرویس سفارش را تشکیل می دهند ، یعنی یک پارچه ارتباطی که ضمانت های تحویل را ارائه می دهد. سرویس سفارش می تواند به روش های مختلفی اجرا شود: اعم از یک سرویس متمرکز (به عنوان مثال در توسعه و آزمایش) تا پروتکل های توزیع شده که مدلهای مختلف گسل شبکه و گره را هدف قرار می دهند.
سرویس سفارش یک کانال ارتباطی مشترک را به مشتریان و همسالان ارائه می دهد و یک سرویس پخش برای پیام های حاوی معاملات ارائه می دهد. مشتریان به کانال متصل می شوند و ممکن است پیام هایی را از کانال پخش کنند که سپس به همه همسالان تحویل داده می شوند. این کانال از تحویل اتمی کلیه پیام ها ، یعنی ارتباط پیام با تحویل مرتبه کل و قابلیت اطمینان (خاص اجرای) پشتیبانی می کند. به عبارت دیگر ، کانال پیام های یکسانی را برای همه همسالان متصل وارد می کند و آنها را به همه همسالان در یک نظم منطقی می رساند. این ضمانت ارتباطات اتمی همچنین در زمینه سیستم های توزیع شده ، پخش سفارش کل ، پخش اتمی یا اجماع نامیده می شود. پیام های ابلاغ شده معاملات نامزد برای گنجاندن در حالت blockchain است.
پارتیشن بندی (کانال های سرویس سفارش). سرویس سفارش ممکن است از کانال های چندگانه شبیه به مباحث سیستم پیام رسانی انتشار/اشتراک (Pub/Sub) پشتیبانی کند. مشتریان می توانند به یک کانال معین متصل شوند و سپس می توانند پیام ارسال کنند و پیام هایی را که وارد می شوند به دست آورند. کانال ها را می توان به عنوان پارتیشن ها تصور کرد - مشتریانی که به یک کانال وصل می شوند از وجود کانال های دیگر بی خبر هستند ، اما مشتری ها ممکن است به چندین کانال متصل شوند. حتی اگر برخی از پیاده سازی های خدمات سفارش دهنده شامل پارچه هایپلدرگر از چندین کانال پشتیبانی می کنند ، برای سادگی در ارائه ، در بقیه این سند ، فرض می کنیم سرویس سفارش شامل یک کانال/موضوع واحد است.
سفارش API خدمات. همسالان از طریق رابط ارائه شده توسط سرویس سفارش ، به کانال ارائه شده توسط سرویس سفارش وصل می شوند. API سرویس سفارش شامل دو عملیات اساسی (به طور کلی رویدادهای ناهمزمان) است:
TODO بخشی از API را برای واکشی بلوک های خاص تحت شماره های توالی مشخص شده مشتری/همکار اضافه می کند.
- Broadcast (Blob): مشتری این کار را برای پخش یک حباب پیام دلخواه برای انتشار از طریق کانال فراخوانی می کند. این همچنین هنگام ارسال درخواست به یک سرویس ، در متن BFT نیز درخواست (Blob) نامیده می شود.
- تحویل (SEQNO ، PREVHASH ، Blob): سرویس سفارش این کار را به همسالان فرا می خواند تا پیام را با شماره توالی عدد صحیح غیر منفی مشخص شده (SEQNO) و هش از Blob که اخیراً تحویل داده شده است (PrevHash) تحویل دهد. به عبارت دیگر ، این یک رویداد خروجی از سرویس سفارش است. تحویل () نیز گاهی اوقات در سیستم های زیر میخانه () در سیستم های زیر میخانه یا متعهد () در سیستم های BFT نامیده می شود.
دفترچه و تشکیل بلوک. دفترچه (همچنین به Sec. 1. 2. 2 مراجعه کنید) شامل تمام خروجی داده ها توسط سرویس سفارش است. به طور خلاصه ، این یک توالی از وقایع تحویل (Seqno ، Prevhash ، Blob) است که با توجه به محاسبه Prevhash که قبلاً شرح داده شده است ، زنجیره هش را تشکیل می دهند.
بیشتر اوقات ، به دلایل کارآیی ، به جای خروج معاملات فردی (حباب) ، سرویس سفارش (دسته) (دسته ای) حباب ها و بلوک های خروجی را در یک رویداد تحویل واحد گروه بندی می کند. در این حالت ، سرویس سفارش باید یک سفارش قطعی از حباب ها را در هر بلوک تحمیل و منتقل کند. تعداد حباب های موجود در یک بلوک ممکن است با اجرای سرویس سفارش به صورت پویا انتخاب شود.
در ادامه، برای سهولت ارائه، ویژگی های خدمات سفارش (بقیه این بخش) را تعریف می کنیم و گردش کار تأیید تراکنش (بخش 2) را با فرض یک لکه در هر رویداد تحویل توضیح می دهیم. اینها به راحتی به بلوک ها تعمیم داده می شوند، با این فرض که یک رویداد تحویل برای یک بلوک مطابق با ترتیبی از رویدادهای تحویل فردی برای هر لکه در یک بلوک، مطابق با ترتیب قطعی ذکر شده در بالا، حباب ها در یک بلوک است.
سفارش املاک خدمات
ضمانت های سرویس سفارش (یا کانال پخش اتمی) مشخص می کند که برای یک پیام پخش شده چه اتفاقی می افتد و چه روابطی بین پیام های ارسال شده وجود دارد. این تضمین ها به شرح زیر است:
ایمنی (ضمانت های سازگاری): تا زمانی که همتاها برای مدت زمان کافی به کانال متصل باشند (می توانند قطع یا خراب شوند، اما دوباره راه اندازی می شوند و دوباره وصل می شوند)، یک سری یکسان از ارسال ها را مشاهده خواهند کرد (seqno، prevhash، blob)پیام ها. این بدان معناست که خروجی ها (رویدادهای deliver()) به یک ترتیب در همه همتایان و با توجه به شماره دنباله رخ می دهند و محتوای یکسانی (blob و prevhash) برای همان شماره دنباله دارند. توجه داشته باشید که این فقط یک دستور منطقی است و تحویل (seqno، prevhash، blob) در یک همتا لازم نیست در هیچ رابطه بلادرنگی برای تحویل (seqno، prevhash، blob) که همان پیام را در همتای دیگر خروجی می دهد، رخ دهد. به عبارت دیگر، با توجه به یک seqno خاص، هیچ دو همتای درستی مقادیر مختلف prevhash یا blob را ارائه نمی دهند. علاوه بر این، هیچ حباب مقداری تحویل داده نمی شود مگر اینکه برخی از مشتریان (همتایان) در واقع پخش (blob) نامیده شوند و ترجیحاً هر حباب پخش شده فقط یک بار تحویل داده شود.
علاوه بر این، رویداد deliver() حاوی هش رمزنگاری داده ها در رویداد deliver() قبلی (prevhash) است. وقتی سرویس سفارش دهنده ضمانت های پخش اتمی را اجرا می کند، prevhash هش رمزنگاری پارامترهای رویداد deliver() با شماره دنباله seqno-1 است. این یک زنجیره هش در میان رویدادهای deliver() ایجاد می کند، که برای کمک به تأیید صحت خروجی سرویس سفارش، همانطور که در بخش های 4 و 5 بعد بحث شد، استفاده می شود. در مورد ویژه اولین رویداد deliver()، prevhash یک مقدار پیش فرض دارد.
زنده بودن (ضمانت تحویل): ضمانت های زنده بودن سرویس سفارش توسط اجرای سرویس سفارش مشخص می شود. تضمین های دقیق ممکن است به مدل خطای شبکه و گره بستگی داشته باشد.
در اصل ، اگر مشتری ارسال کننده از بین نرود ، سرویس سفارش باید تضمین کند که هر یک از همسالان صحیح که به سرویس سفارش متصل می شود ، در نهایت هر معامله ارسالی را ارائه می دهد.
به طور خلاصه ، سرویس سفارش ویژگی های زیر را تضمین می کند:
- توافق. برای هر دو رویداد در همسالان صحیح (SEQNO ، PREVHASH0 ، BlOB0) و تحویل (SEQNO ، PREVHASH1 ، BlOB1) با همان SEQNO ، PREVHASH0 == PREVHASH1 و BLOB0 == Blob1 ؛
- یکپارچگی هاشچین. برای هر دو رویداد در همسالان صحیح (SEQNO-1 ، PREVHASH0 ، BlOB0) و تحویل (Seqno ، Prevhash ، Blob) ، PrevHash = Hash (Seqno-1 || PrevHash0 || Blob0).
- No skipping . If an ordering service outputs deliver(seqno, prevhash, blob) at a correct peer p , such that seqno>0 ، سپس P در حال حاضر تحویل رویداد (Seqno-1 ، PrevHash0 ، Blob0) را تحویل داده است.
- بدون خلقتهر رویدادی (Seqno ، Prevhash ، Blob) در یک همسالان صحیح باید قبل از یک رویداد پخش (Blob) در برخی از همسالان (احتمالاً مجزا) انجام شود.
- بدون تکثیر (اختیاری ، اما در عین حال مطلوب). برای هر دو رویداد پخش شده (Blob) و پخش (Blob ') ، هنگامی که دو رویداد (SEQNO0 ، PREVHASH0 ، BLOB) ارائه می دهند و تحویل (SEQNO1 ، PREVHASH1 ، Blob') در همسالان صحیح و Blob == Blob 'رخ می دهد ، سپس SEQNO0 == SEQNO1 و PREVHASH0 == PREVHASH1.
- زندگیاگر یک مشتری صحیح از یک رویداد پخش (Blob) فراخوانی کند ، هر یک از همسالان صحیح "در نهایت" یک رویداد را ارائه می دهد ( *، *، Blob) ، جایی که *یک مقدار دلخواه را نشان می دهد.
2. گردش کار اساسی تأیید معاملات
در ادامه ، ما جریان درخواست سطح بالا برای معامله را تشریح می کنیم.
توجه: توجه داشته باشید که پروتکل زیر *فرض نمی کند که تمام معاملات قطعی هستند ، یعنی این امکان را برای معاملات غیر تعیین کننده فراهم می کند. *
2. 1مشتری یک معامله ایجاد می کند و آن را برای تأیید همسالان مورد نظر خود ارسال می کند.
برای فراخوانی یک معامله ، مشتری یک پیام پیشنهادی را به مجموعه ای از همسالان تأیید کننده مورد نظر خود ارسال می کند (احتمالاً در همان زمان نیست - به بخش های 2. 1. 2 و 2. 3 مراجعه کنید). مجموعه ای از همسالان تأیید شده برای یک کادوی زنجیره ای معین از طریق همسالان در دسترس مشتری قرار می گیرد ، که به نوبه خود مجموعه ای از همسالان تأیید را از خط مشی تأیید می داند (بخش 3 را ببینید). به عنوان مثال ، معامله می تواند برای همه تأیید کنندگان یک کادوی زنجیره ای معین ارسال شود. گفته می شود ، برخی از تأیید کنندگان می توانند آفلاین باشند ، برخی دیگر ممکن است اعتراض کنند و تصمیم بگیرند که معامله را تأیید کنند. مشتری ارسال کننده سعی می کند بیان خط مشی را با تأیید کنندگان موجود برآورده کند.
در ادامه ، ما ابتدا جزئیات پیام را ارائه می دهیم و سپس در مورد الگوهای احتمالی تعامل بین ارسال مشتری و تأیید کنندگان بحث می کنیم.
2. 1. 1. قالب پیام را پیشنهاد دهید
قالب یک پیام پیشنهادی در جایی است که TX یک استدلال اختیاری اجباری و لنگر است که در زیر توضیح داده شده است.
- ClientID شناسه مشتری ارسال کننده است ،
- chaincodeid به کد زنجیره ای که معامله مربوط به آن است اشاره دارد ،
- txpayload بار پرداختی است که شامل معامله ارسالی شده است ،
- Timestamp یک عدد صحیح در حال افزایش (برای هر معامله جدید) است که توسط مشتری نگهداری می شود ،
- ClientSig در سایر زمینه های TX امضاء مشتری است.
جزئیات TxPayload بین معاملات فراخوانی و استقرار معاملات متفاوت خواهد بود (یعنی ، معاملات استناد به معاملات مربوط به یک کد زنجیره ای خاص مستقر). برای معامله فراخوانی ، TxPayload از دو قسمت تشکیل شده است
گزینه های باینری...
ما را در سایت گزینه های باینری دنبال می کنید
برچسب : نویسنده : سحر زکریا بازدید : 36 تاريخ : سه شنبه 3 مرداد 1402 ساعت: 17:53