معرفی چند زنجیره ای استریم

گره منبع: 1213525

برای پایگاه داده های کلید-مقدار و سری زمانی تغییرناپذیر مشترک

امروز ما مفتخریم که آخرین نسخه MultiChain را منتشر کنیم که مجموعه جدیدی از عملکردهای حیاتی به نام "streams" را اجرا می کند. استریم ها یک انتزاع طبیعی برای موارد استفاده از بلاک چین ارائه می دهند که به جای انتقال دارایی ها بین شرکت کنندگان، بر بازیابی کلی داده ها، مهر زمانی و بایگانی تمرکز دارند. جریان ها را می توان برای پیاده سازی سه نوع مختلف پایگاه داده بر روی یک زنجیره استفاده کرد:

  1. یک پایگاه داده یا ذخیره اسناد کلید-مقدار، به سبک NoSQL.
  2. یک پایگاه داده سری زمانی، که بر ترتیب ورودی ها تمرکز دارد.
  3. یک پایگاه داده مبتنی بر هویت که در آن ورودی ها بر اساس نویسنده خود طبقه بندی می شوند.

اینها را می توان به عنوان "چه"، "وقتی" و "چه کسی" یک پایگاه داده مشترک در نظر گرفت.

اصول اولیه استریم

هر تعداد استریم را می توان در یک بلاک چین MultiChain ایجاد کرد و هر جریان به عنوان مجموعه ای مستقل از آیتم ها عمل می کند. هر مورد در یک جریان دارای ویژگی های زیر است:

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

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

استریم ها به روش های مختلفی با سیستم مجوزهای MultiChain ادغام می شوند. اولاً، جریان‌ها را فقط کسانی می‌توانند ایجاد کنند که مجوز این کار را دارند، به همان ترتیبی که دارایی‌ها فقط می‌توانند توسط آدرس‌های خاصی صادر شوند. هنگامی که یک جریان ایجاد می شود، باز یا بسته است. جریان های باز توسط هر کسی که مجوز ارسال تراکنش بلاک چین را دارد قابل نوشتن است، در حالی که جریان های بسته به لیست قابل تغییر آدرس های مجاز محدود می شوند. در مورد دوم، هر جریان یک یا چند مدیر دارد که می توانند مجوزهای نوشتن را در طول زمان تغییر دهند.

هر بلاک چین یک جریان «ریشه» اختیاری دارد که در آن تعریف شده است پارامترهای و از لحظه ایجاد زنجیره وجود دارد. این به یک بلاک چین امکان می‌دهد تا بلافاصله برای ذخیره و بازیابی داده‌ها، بدون انتظار برای ایجاد جریانی صریح استفاده شود.

همانطور که من هستم قبلاً بحث شده، محرمانه بودن بزرگترین چالش در تعداد زیادی از موارد استفاده از بلاک چین است. این به این دلیل است که هر گره در یک بلاک چین یک کپی کامل از محتویات کل زنجیره را می بیند. استریم ها روشی طبیعی برای پشتیبانی از داده های رمزگذاری شده در بلاک چین ارائه می دهند، به شرح زیر:

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

این روشی کارآمد برای بایگانی داده ها در یک بلاک چین فراهم می کند، در حالی که آن را فقط برای شرکت کنندگان خاصی قابل مشاهده می کند.

بازیابی از جریان ها

ارزش اصلی جریان ها در نمایه سازی و بازیابی است. هر گره می‌تواند انتخاب کند که کدام جریان‌ها مشترک شوند، با بلاک چین تضمین می‌کند که همه گره‌هایی که مشترک یک جریان خاص هستند، موارد مشابهی را در درون خود ببینند. (یک گره همچنین می تواند پیکربندی شود تا به طور خودکار در هر جریان جدید ایجاد شده مشترک شود.)

اگر یک گره مشترک یک جریان باشد، اطلاعات را می توان به روش های مختلفی از آن جریان بازیابی کرد:

  • بازیابی موارد از جریان به ترتیب.
  • بازیابی اقلام با یک کلید خاص
  • بازیابی موارد امضا شده توسط یک ناشر خاص.
  • فهرست کردن کلیدهای مورد استفاده در یک جریان، با تعداد آیتم‌ها برای هر کلید.
  • فهرست کردن ناشران در یک جریان، با تعداد موارد.

همانطور که در ابتدا ذکر شد، این روش های بازیابی امکان استفاده از جریان ها را فراهم می کند پایگاه داده های کلیدی-مقدار, پایگاه های داده سری زمانی و پایگاه های اطلاعاتی هویت محور همه API های بازیابی ارائه می دهند شروع و تعداد دفعات مشاهده پارامترها، اجازه می دهد تا زیربخش های لیست های طولانی به طور موثر بازیابی شوند (مانند یک بند LIMIT در SQL). مقادیر منفی برای شروع اجازه می دهد جدیدترین موارد بازیابی شوند.

استریم ها می توانند حاوی چندین آیتم با یک کلید باشند و این به طور طبیعی تنش بین تغییرناپذیری بلاک چین و نیاز به به روز رسانی پایگاه داده را حل می کند. به هر «ورودی» موثر پایگاه داده باید یک کلید منحصر به فرد در برنامه شما اختصاص داده شود، که هر به روز رسانی آن ورودی با یک آیتم جریان جدید همراه با کلید آن نمایش داده می شود. سپس از APIهای بازیابی جریان MultiChain می توان برای موارد زیر استفاده کرد: (الف) بازیابی اولین یا آخرین نسخه یک ورودی مشخص، (ب) بازیابی تاریخچه نسخه کامل برای یک ورودی، (ج) بازیابی اطلاعات در مورد چندین ورودی، از جمله اولین و آخرین. نسخه های هر کدام

توجه داشته باشید که به دلیل معماری همتا به همتای یک بلاک چین، آیتم‌های موجود در یک جریان ممکن است به گره‌های مختلف با ترتیب‌های مختلف برسند، و MultiChain اجازه می‌دهد آیتم‌ها قبل از «تأیید» در یک بلوک، بازیابی شوند. در نتیجه، همه API های بازیابی بین سفارش جهانی (پیش فرض) یا محلی انتخاب می کنند. سفارش جهانی تضمین می کند که وقتی زنجیره به اجماع رسید، همه گره ها پاسخ های یکسانی را از فراخوانی های API یکسان دریافت می کنند. ترتیب محلی تضمین می کند که، برای هر گره خاصی، ترتیب آیتم های یک جریان هرگز بین تماس های API تغییر نخواهد کرد. هر اپلیکیشنی می تواند متناسب با نیاز خود انتخاب مناسبی داشته باشد.

استریم ها و نقشه راه چند زنجیره ای

با انتشار استریم‌ها، آخرین کار اصلی را برای MultiChain 1.0 تکمیل کرده‌ایم و اکنون کاملاً در مسیر بتا هستیم. ما انتظار داریم چند ماه آینده را صرف گسترش مجموعه آزمایشی داخلی خود کنیم (در حال حاضر بسیار بزرگ!)، تکمیل پورت های Windows و Mac، افزودن API های مفید بیشتر، و به روز رسانی جستجوگر برای استریم‌ها، اصلاح جنبه‌های مکانیسم توافق، انتشار نسخه نمایشی وب ما، و به طور کلی مرتب کردن کد و پیام‌های کمکی. مهمتر از همه، ما به رفع اشکالات به محض کشف آنها ادامه خواهیم داد تا اشتباهات ما در کار شما اختلال ایجاد نکند.

در بلندمدت، جریان‌ها در کجای نقشه راه MultiChain قرار می‌گیرند؟ با برداشتن یک قدم به عقب، MultiChain اکنون سه حوزه عملکرد سطح بالا را ارائه می دهد:

  • ویرایش برای کنترل افرادی که می توانند متصل شوند، تراکنش کنند، دارایی ها/جریان ها ایجاد کنند، استخراج کنند/تأیید کنند و مدیریت کنند.
  • دارایی از جمله صدور، انتشار مجدد، انتقال، مبادله اتمی، سپردن و تخریب.
  • جریانها دارای APIهایی برای ایجاد جریان، نوشتن، اشتراک، نمایه سازی و بازیابی.

پس از انتشار MultiChain 1.0 (و یک نسخه پرمیوم)، چه چیزی در این لیست قرار دارد؟ اگر به دستور API که برای ایجاد جریان استفاده می شود، متوجه یک پارامتر ظاهراً اضافی با مقدار ثابت می شوید. stream. این پارامتر به MultiChain اجازه می دهد تا در آینده از انواع دیگر موجودیت های سطح بالا پشتیبانی کند.

مقادیر احتمالی آینده برای پارامتر شامل evm (برای یک Ethereum-ماشین مجازی سازگار)، sql (برای یک پایگاه داده به سبک SQL) یا حتی wiki (برای متن ویرایش شده مشترک). هر موجودیت مشترکی که وضعیت آن توسط یک سری تغییرات منظم تعیین می شود، یک نامزد بالقوه است. هر یک از این موجودیت ها به این موارد نیاز دارند: (الف) APIهایی که انتزاع مناسب را برای به روز رسانی وضعیت خود ارائه می کنند، (ب) مکانیسم های مناسب برای گره های مشترک برای ردیابی آن وضعیت، و (ج) API هایی برای بازیابی موثر بخشی یا تمام وضعیت. ما منتظریم تا یاد بگیریم کدام یک از نهادهای سطح بالا مفیدتر هستند، تا توسط ما یا اشخاص ثالث از طریق معماری پلاگین پیاده سازی شوند.

قراردادهای هوشمند چطور؟

در یک مفهوم کلی، MultiChain رویکردی را اتخاذ می کند که در آن داده ها به طور تغییرناپذیر در یک بلاک چین تعبیه شده است، اما رمز برای تفسیر آن داده ها در لایه گره یا برنامه کاربردی. این به طور عمدی با پارادایم «قراردادهای هوشمند» متفاوت است، همانطور که اتریوم مثال می‌زند، که در آن کد در بلاک چین جاسازی شده و در یک ماشین مجازی اجرا می‌شود. در تئوری، زیرا قراردادهای هوشمند هستند تورینگ کامل است، آنها می توانند رفتار MultiChain یا هر پلتفرم بلاک چین دیگری را بازتولید کنند. با این حال، در عمل، قراردادهای هوشمند به سبک اتریوم دارای کاستی های دردناک بسیاری هستند:

  • هر گره باید هر محاسباتی را انجام دهد، چه مورد علاقه باشد و چه نباشد. در مقابل، در MultiChain هر گره تصمیم می گیرد که در کدام جریان ها مشترک شود و می تواند داده های موجود توسط دیگران را نادیده بگیرد.
  • ماشین مجازی مورد استفاده برای قراردادهای هوشمند عملکرد بسیار بدتری نسبت به کدهایی دارد که به صورت بومی برای یک معماری کامپیوتری کامپایل شده است.
  • کد قرارداد هوشمند به طور تغییرناپذیر در یک زنجیره جاسازی شده است و از اضافه شدن ویژگی ها و رفع اشکالات جلوگیری می کند. این به شدت در مرگ DAO.
  • معاملات ارسال شده به یک قرارداد هوشمند نمی تواند به روز شود وضعیت یک بلاک چین تا زمانی که ترتیب نهایی آنها مشخص شود، به دلیل ماهیت محاسبات با هدف کلی. این منجر به تاخیر (تا تایید تراکنش در یک بلوک) و همچنین برگشت‌های احتمالی (در صورت انشعاب در زنجیره) می‌شود. در مقابل، MultiChain می‌تواند هر نوع تراکنش تایید نشده را به روشی مناسب رفتار کند: (الف) دارایی‌های ورودی فوراً موجودی تایید نشده یک گره را به‌روزرسانی می‌کنند، (ب) موارد جریان ورودی فوراً در دسترس هستند و ترتیب کلی آنها متعاقباً نهایی می‌شود، (ج) تغییرات مجوزها بلافاصله اعمال می شوند و سپس در بلوک های ورودی دوباره پخش می شوند.

با این حال، همانطور که من قبلاً گفت، مطمئناً قراردادهای هوشمند را به عنوان یک الگوی مفید برای برنامه های بلاک چین رد نمی کنیم، اگر و زمانی که موارد استفاده قوی را مشاهده کنیم. با این حال، در MultiChain، قراردادهای هوشمند به جای پایین‌ترین سطح تراکنش، در یک لایه جریان مانند در بالای بلاک چین پیاده‌سازی می‌شوند. این کار عملکرد برتر MultiChain را برای موجودیت‌های بلاک چین ساده‌تر مانند دارایی‌ها و جریان‌ها حفظ می‌کند، در حالی که محاسبات درون زنجیره‌ای کندتر را در جایی که واقعاً مورد نیاز است ارائه می‌دهد. اما چنین مواردی کمتر از آن چیزی است که فکر می کنید.

 

لطفا هر نظری را ارسال کنید در LinkedIn.

 

ضمیمه فنی

تمام دستورات مربوط به استریم ها به طور کامل در فایل ثبت شده است صفحه MultiChain API، اما در اینجا خلاصه ای کوتاه آورده شده است:

  • ایجاد یک جریان با استفاده از create stream or createfrom ... stream
  • افزودن یک مورد به یک جریان با publish or publishfrom
  • فهرستی از جریان‌ها را با استفاده از آن بازیابی کنید liststreams
  • شروع یا توقف ردیابی یک جریان با subscribe و unsubscribe
  • بازیابی موارد جریان با استفاده از liststreamitems, liststreamkeyitems و liststreampublisheritems
  • فهرست کلیدهای جریان و ناشران با liststreamkeys و liststreampublishers
  • برای آیتم های جریانی بزرگ، داده های کامل را با استفاده از آن بازیابی کنید gettxoutdata (نگاه کنید به maxshowndata در زیر)
  • با تماس هایی مانند، مجوزهای هر جریان را کنترل کنید grant [address] stream1.write
  • با استفاده از مجوزهای یک جریان را مشاهده کنید listpermissions stream1.*

برخی از یادداشت‌های توسعه‌دهنده دیگر در رابطه با جریان‌ها:

  • La create مجوز به یک آدرس اجازه می دهد تا جریان ایجاد کند.
  • مجوزهای مربوط به هر جریان هستند write, admin و activate
  • جدید پارامترهای بلاکچین: root-stream-name (برای هیچکدام خالی نگذارید) root-stream-open, anyone-can-create, admin-consensus-create, max-std-op-returns-count
  • جدید پارامترهای زمان اجرا: autosubscribe برای اشتراک خودکار در جریان های جدید ایجاد شده و maxshowndata برای محدود کردن مقدار داده در پاسخ‌های API (نگاه کنید به gettxoutdata در بالا).
  • حداکثر اندازه داده های یک آیتم جریانی توسط max-std-op-return-size پارامتر بلاک چین و همچنین پارامتر کوچکتر maximum-block-size و max-std-tx-size مقادیر منهای چند صد بایت.
  • گره هایی که از قالب کیف پول قدیمی استفاده می کنند نمی توانند در جریان ها مشترک شوند و باید ارتقا یابد.

 

تمبر زمان:

بیشتر از چندتایی