مقیاس بندی بلاک چین ها با داده های خارج از زنجیره

گره منبع: 1738525

وقتی یک هش یک میلیون کلمه می ارزد

در حال حاضر واضح است که بسیاری از موارد استفاده از بلاک چین هیچ ارتباطی با تراکنش های مالی ندارند. درعوض، هدف زنجیره فعال کردن تجمیع غیرمتمرکز، سفارش‌گذاری، مهر زمانی و بایگانی هر نوع اطلاعات، از جمله داده های ساختار یافته، مکاتبات یا اسناد. ارزش اصلی بلاک چین این است که شرکت‌کنندگان را قادر می‌سازد تا بدون تکیه بر یک واسطه قابل اعتماد، به‌طور ثابت و دائمی درباره اینکه دقیقاً چه داده‌هایی، چه زمانی و توسط چه کسی وارد شده‌اند، توافق کنند. به عنوان مثال، SAP به تازگی راه اندازی شده است سکوی blockchainکه از MultiChain و Hyperledger Fabric پشتیبانی می کند، طیف گسترده ای از زنجیره تامین و سایر برنامه های کاربردی غیر مالی را هدف قرار می دهد.

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

به عنوان مثال، MultiChain 1.0 اجازه می دهد تا یک یا چند "جریان" با نام روی یک بلاک چین ایجاد شود و سپس برای ذخیره و بازیابی داده های خام استفاده شود. هر جریان مجموعه ای از مجوزهای نوشتن خاص خود را دارد و هر گره می تواند آزادانه انتخاب کند که کدام جریان ها مشترک شوند. اگر گره‌ای مشترک یک جریان باشد، محتوای آن جریان را به‌صورت هم‌زمان فهرست‌بندی می‌کند، و اجازه می‌دهد آیتم‌ها به سرعت بر اساس ترتیب، مهر زمانی، شماره بلوک یا آدرس ناشر، و همچنین از طریق یک «کلید» (یا برچسب) بازیابی شوند. که توسط آن می توان موارد را برچسب گذاری کرد. MultiChain 2.0 (از آلفا 1) جریان‌هایی را برای پشتیبانی از متن یونیکد یا داده‌های JSON و همچنین چندین کلید در هر مورد و چندین مورد در هر تراکنش گسترش داد. همچنین توابع خلاصه‌سازی مانند «ادغام JSON» را اضافه کرد که موارد را با یک کلید یا ناشر به روشی مفید ترکیب می‌کند.

محرمانه بودن و مقیاس پذیری

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

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

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

اگر یک مورد ساده را در نظر بگیریم، که در آن هر آیتم یک ساختار کوچک JSON 100 بایتی است، خروجی کلی داده 100 کیلوبایت در ثانیه خواهد بود که از 500 × (100+100) محاسبه می شود. این به معنای کمتر از 1 مگابیت بر ثانیه پهنای باند است که به راحتی در ظرفیت هر اتصال اینترنتی مدرن است. داده ها با سرعتی در حدود 3 ترابایت در سال جمع می شوند که مقدار کمی نیست. اما با هارد 12 ترابایتی الان به طور گسترده در دسترس استو RAID کنترل‌کننده‌هایی که چندین درایو فیزیکی را در یک درایو منطقی ترکیب می‌کنند، به راحتی می‌توانیم 10 تا 20 سال داده را در هر گره بدون دردسر یا هزینه زیاد ذخیره کنیم.

با این حال، اگر اطلاعات بزرگتری مانند اسناد اسکن شده را ذخیره کنیم، اوضاع بسیار متفاوت به نظر می رسد. یک اسکن JPEG با کیفیت معقول از یک صفحه کاغذ A4 ممکن است 500 کیلوبایت باشد. این را در 500 تراکنش در ثانیه ضرب کنید، و ما در حال بررسی توان عملیاتی 250 هستیم. مگابایت در هر ثانیه این به معنای 2 گیگابیت بر ثانیه پهنای باند است که سریعتر از بسیاری از شبکه های محلی است، چه رسد به اتصال به اینترنت. در ارزان ترین خدمات وب آمازون قیمت منتشر شده 0.05 دلار به ازای هر گیگابایت، به معنای صورتحساب پهنای باند سالانه 400,000 دلار برای هر گره است. و هر گره 8000 ترابایت داده جدید تولید شده سالانه را در کجا ذخیره می کند؟

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

راه حل هش

پس چگونه مشکل مقیاس پذیری داده ها را حل کنیم؟ چگونه می‌توانیم از محضر غیرمتمرکز داده‌های بلاک چین استفاده کنیم، بدون اینکه آن داده‌ها را در هر گره در زنجیره تکرار کنیم؟

پاسخ با یک تکه فناوری هوشمندانه به نام "هش" است. هش یک عدد طولانی است (256 بیت یا حدود 80 رقم اعشاری را در نظر بگیرید) که به طور منحصر به فرد یک قطعه داده را شناسایی می کند. هش از داده ها با استفاده از a محاسبه می شود عملکرد یک طرفه که دارای یک ویژگی رمزنگاری مهم است: با توجه به هر قطعه داده، محاسبه هش آن آسان و سریع است. اما با توجه به یک هش خاص، از نظر محاسباتی غیرممکن است که قطعه‌ای از داده را پیدا کنیم که آن هش را ایجاد کند. و وقتی می گوییم "از نظر محاسباتی غیرممکن"، منظور ما محاسبات بیشتر از اتم های موجود در جهان شناخته شده است.

هش ها با شناسایی منحصر به فرد تراکنش ها و بلاک ها، نقش مهمی در تمام بلاک چین ها ایفا می کنند. آنها همچنین زمینه ساز چالش محاسباتی در سیستم های اثبات کار مانند بیت کوین هستند. بسیاری از توابع هش مختلف با نام‌های gobbledygook مانند BLAKE2، MD5 و RIPEMD160 توسعه یافته‌اند. اما برای اینکه هر تابع هش قابل اعتماد باشد، باید بررسی و آزمایش آکادمیک گسترده را تحمل کند. این آزمایش‌ها به شکل حملات تلاش شده، مانند «preimage» (یافتن ورودی با هش داده‌شده)، «پیش تصویر دوم» (پیدا کردن ورودی دوم با همان هش ورودی داده‌شده) و «تصادف» (پیدا کردن هر کدام دو ورودی متفاوت با هش یکسان). زنده ماندن از این دستکش بسیار آسان نیست، با سابقه طولانی و غم انگیز توابع هش شکسته که این اصل معروف را ثابت می کند: «کریپتو خود را رول نکنید».

برای بازگشت به مشکل اصلی خود، می‌توانیم مقیاس‌پذیری داده‌ها را در زنجیره‌های بلوکی با جاسازی هش‌های قطعات بزرگ داده در تراکنش‌ها، به جای خود داده، حل کنیم. هر هش به عنوان یک «تعهد» به داده‌های ورودی خود عمل می‌کند و خود داده‌ها در خارج از زنجیره بلوکی یا «خارج از زنجیره» ذخیره می‌شوند. به عنوان مثال، با استفاده از تابع هش محبوب SHA256، یک تصویر JPEG 500 کیلوبایتی را می توان با یک عدد 32 بایتی نشان داد که کاهشی بیش از 15,000× است. حتی با نرخ 500 تصویر در ثانیه، این ما را به راحتی در قلمرو پهنای باند و نیازهای ذخیره سازی قابل اجرا، از نظر داده های ذخیره شده در خود زنجیره، قرار می دهد.

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

یک سوال در مورد تحویل

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

چگونه محتوای اصلی خارج از زنجیره را به گره هایی که به آن نیاز دارند، تحویل دهیم، اگر نه از طریق خود زنجیره؟

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

یک امکان امیدوارکننده تر، ارتباط نقطه به نقطه است، که در آن گره ای که به برخی داده های خارج از زنجیره نیاز دارد مستقیماً از گره ای که آن را منتشر کرده است، درخواست می کند. این امر از تکیه بر یک واسطه قابل اعتماد اجتناب می کند، اما از سه نقص جایگزین رنج می برد:

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

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

برای کسانی که تجربه دارند اشتراک فایل به همتا پروتکل هایی مانند Napster، Gnutella یا BitTorrent، همه اینها بسیار آشنا به نظر می رسند. در واقع، بسیاری از اصول اولیه یکسان هستند، اما دو تفاوت اساسی وجود دارد. اولاً، با فرض اینکه از بلاک چین خود در زمینه سازمانی استفاده می کنیم، سیستم به جای اینترنت به عنوان یک کل، در یک گروه بسته از شرکت کنندگان اجرا می شود. دوم، بلاک چین یک ستون فقرات سفارش، مهر زمانی و محضری غیرمتمرکز اضافه می‌کند و به همه کاربران این امکان را می‌دهد که یک نمای ثابت و مقاوم در برابر دستکاری از آنچه دقیقاً، چه زمانی و توسط چه کسی اتفاق افتاده است، داشته باشند.

چگونه ممکن است یک توسعه‌دهنده برنامه بلاک چین به این ارائه غیرمتمرکز محتوای خارج از زنجیره دست یابد؟ یکی از گزینه‌های رایج این است که از یک پلت‌فرم اشتراک‌گذاری فایل همتا به همتا استفاده کنید، مانند پلتفرم با نام سرگرم‌کننده سیستم فایل بین پلانتری (IPFS) و از آن همراه با بلاک چین استفاده کنید. هر یک از شرکت‌کنندگان هم یک گره بلاک چین و هم یک گره IPFS را اجرا می‌کنند، با برخی میان‌افزار که بین این دو هماهنگ می‌شوند. هنگام انتشار داده های خارج از زنجیره، این میان افزار داده های اصلی را در IPFS ذخیره می کند، سپس یک تراکنش زنجیره بلوکی حاوی هش آن داده ها ایجاد می کند. برای بازیابی برخی از داده های خارج از زنجیره، میان افزار هش را از بلاک چین استخراج می کند، سپس از این هش برای واکشی محتوا از IPFS استفاده می کند. گره IPFS محلی به طور خودکار محتوای بازیابی شده را در برابر هش تأیید می کند تا مطمئن شود که تغییر نکرده است.

در حالی که این راه حل ممکن است، همه آن نسبتا ناشیانه و ناخوشایند است. ابتدا، هر شرکت‌کننده باید سه نرم‌افزار جداگانه (گره بلاک چین، گره IPFS و میان‌افزار) را نصب، نگهداری و به‌روزرسانی کند، که هر کدام داده‌های خود را در مکانی جداگانه ذخیره می‌کنند. دوم، دو شبکه همتا به همتا جداگانه وجود خواهد داشت که هر کدام دارای پیکربندی، پورت های شبکه، سیستم هویت و مجوزهای خاص خود هستند (البته باید توجه داشت که IPFS هنوز از شبکه های بسته پشتیبانی نمی کند). در نهایت، اتصال محکم IPFS و بلاک چین به یکدیگر، میان افزار را پیچیده تر می کند. برای مثال، اگر می‌خواهیم داده‌های خارج از زنجیره ارجاع‌شده توسط برخی از تراکنش‌های زنجیره بلوکی فوراً بازیابی شوند (با تکرار خودکار)، میان‌افزار باید دائماً راه‌اندازی و اجرا شود و وضعیت پیچیده خود را حفظ کند. آیا خوب نیست که گره بلاک چین همه این کارها را برای ما انجام دهد؟

داده های خارج از زنجیره در MultiChain 2.0

امروز ما از انتشار آن خوشحالیم نسخه پیش نمایش سوم (آلفا 3) MultiChain 2.0، با یک راه حل کاملا یکپارچه و بدون درز برای داده های خارج از زنجیره. هر بخش از اطلاعات منتشر شده در یک جریان می تواند به دلخواه در زنجیره یا خارج از زنجیره باشد، و MultiChain از همه چیز مراقبت می کند.

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

  1. گره MultiChain منتشر کننده داده های جدید را در حافظه محلی خود می نویسد، و اقلام بزرگ را برای هضم و تحویل آسان به قطعات تکه می کند.
  2. تراکنش برای انتشار آیتم های جریان خارج از زنجیره به طور خودکار ساخته می شود و شامل هش(های) تکه و اندازه(ها) در بایت است.
  3. این تراکنش امضا شده و به شبکه پخش می شود و بین گره ها انتشار می یابد و به روش معمول وارد بلاک چین می شود.
  4. وقتی یک گره مشترک در یک جریان، ارجاع به برخی از داده های خارج از زنجیره را می بیند، هش های تکه ای آن داده را به صف بازیابی خود اضافه می کند. (هنگام اشتراک در یک جریان قدیمی، یک گره همچنین هر آیتم خارج از زنجیره منتشر شده قبلی را برای بازیابی در صف قرار می دهد.)
  5. به عنوان یک فرآیند پس‌زمینه، اگر تکه‌هایی در صف بازیابی یک گره وجود داشته باشد، پرس‌وجوها به شبکه فرستاده می‌شوند تا آن تکه‌ها را که با هش‌هایشان شناسایی می‌شوند، پیدا کنند.
  6. این پرس‌وجوهای تکه به گره‌های دیگر شبکه به صورت همتا به همتا منتشر می‌شوند (فعلاً به دو پرش محدود می‌شود - جزئیات فنی را در زیر ببینید).
  7. هر گره‌ای که داده‌های یک قطعه را داشته باشد، می‌تواند پاسخ دهد، و این پاسخ در همان مسیری که پرس و جو انجام می‌شود، به مشترک ارسال می‌شود.
  8. اگر هیچ گره ای به پرس و جوی chunk پاسخ ندهد، قطعه برای امتحان مجدد بعدی به صف برگردانده می شود.
  9. در غیر این صورت، مشترک امیدوارکننده‌ترین منبع را برای یک قطعه انتخاب می‌کند (بر اساس پرش و زمان پاسخ)، و درخواستی برای داده‌های آن قطعه، دوباره در همان مسیر همتا به همتای پاسخ قبلی برای آن ارسال می‌کند.
  10. گره منبع داده های درخواست شده را با استفاده از همان مسیر دوباره تحویل می دهد.
  11. مشترک اندازه و هش داده ها را در برابر درخواست اصلی تأیید می کند.
  12. اگر همه چیز بررسی شود، مشترک داده ها را در حافظه محلی خود می نویسد و آن را بلافاصله برای بازیابی از طریق API های جریانی در دسترس قرار می دهد.
  13. اگر محتوای درخواستی دریافت نشد، یا با هش یا اندازه مورد نظر مطابقت نداشت، این قطعه برای بازیابی در آینده از منبع دیگری به صف بازگردانده می‌شود.

مهمتر از همه، همه اینها بسیار سریع اتفاق می افتد. در شبکه‌هایی با تأخیر کم، قطعات کوچکی از داده‌های خارج از زنجیره در کسری از ثانیه تراکنش به مشترکان می‌رسند. و برای برنامه های کاربردی با بار بالا، آزمایش ما نشان می دهد که MultiChain 2.0 alpha 3 می تواند نرخ بیش از 1000 آیتم خارج از زنجیره یا 25 مگابایت داده خارج از زنجیره بازیابی شده در هر ثانیه را روی یک سرور میان رده (Core i7) با یک سرور مناسب حفظ کند. اتصال اینترنت. همه چیز با اقلام خارج از زنجیره تا اندازه 1 گیگابایت به خوبی کار می کند، بسیار فراتر از محدودیت 64 مگابایتی برای داده های زنجیره ای. البته، امیدواریم با صرف زمان برای بهینه سازی MultiChain 2.0 در مرحله بتا، این اعداد را بیشتر بهبود ببخشیم.

هنگام استفاده از داده های خارج از زنجیره به جای داده های درون زنجیره ای در جریان ها، توسعه دهندگان برنامه MultiChain باید دقیقاً دو کار را انجام دهند:

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

البته، برای جلوگیری از بازیابی هر گره از هر آیتم خارج از زنجیره، اقلام باید به روشی مناسب در جریان‌ها گروه‌بندی شوند و هر گره مشترک آن جریان‌های مورد علاقه باشد.

موارد درون زنجیره ای و غیر زنجیره ای را می توان در یک جریان استفاده کرد و توابع مختلف پرس و جو و خلاصه سازی جریان به طور یکسان به هر دو نوع داده مربوط می شوند. این به ناشران اجازه می‌دهد تا بدون تأثیرگذاری بر بقیه برنامه، انتخاب مناسب را برای هر مورد در یک جریان داشته باشند. برای مثال، جریانی از موارد JSON درباره فعالیت‌های افراد ممکن است از داده‌های خارج از زنجیره برای شناسایی شخصی اطلاعات و از داده‌های درون زنجیره‌ای برای بقیه استفاده کند. مشترکین می توانند از ادغام JSON MultiChain برای ترکیب هر دو نوع اطلاعات در یک JSON برای خواندن استفاده کنند.

اگر می‌خواهید آیتم‌های استریم خارج از زنجیره را امتحان کنید، کافی است برنامه معمولی MultiChain را دنبال کنید شروع شدن آموزش، و مطمئن شوید که بخش 5 را نادیده نگیرید.

پس چی؟

با پشتیبانی یکپارچه از داده های خارج از زنجیره، MultiChain 2.0 یک گام بزرگ به جلو برای برنامه های بلاک چین متمرکز بر مهر زمانی داده ها در مقیاس بزرگ و ثبت اسناد رسمی ارائه می دهد. در بلندمدت، ما در حال فکر کردن در مورد تعداد زیادی از پیشرفت‌های احتمالی آینده برای این ویژگی برای نسخه‌های انجمن و/یا Enterprise MultiChain هستیم:

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

ما دوست داریم بازخورد خود را بشنوید در لیست بالا و همچنین اقلام خارج از زنجیره به طور کلی. با توجه به اینکه MultiChain 2.0 هنوز به طور رسمی در آلفا است، زمان زیادی برای بهبود این ویژگی قبل از انتشار نهایی آن وجود دارد.

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

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

جزییات فنی

در حالی که استفاده از آیتم های جریان خارج از زنجیره در MultiChain 2.0 ساده است، اما حاوی تصمیمات طراحی و ویژگی های اضافی است که ممکن است مورد توجه باشد. لیست زیر عمدتاً مربوط به توسعه دهندگانی است که برنامه های بلاک چین را ایجاد می کنند و می توان از انواع کمتر فنی آن صرف نظر کرد:

  • سیاست های هر جریان هنگامی که یک جریان MultiChain ایجاد می شود، می توان آن را به صورت اختیاری محدود کرد تا فقط داده های درون زنجیره ای یا خارج از زنجیره را مجاز کند. چندین دلیل ممکن برای انجام این کار وجود دارد، نه اینکه به هر ناشر اجازه داده شود خودش تصمیم بگیرد. به عنوان مثال، اقلام روی زنجیره تضمین در دسترس بودن آهنی را ارائه می دهند، در حالی که اقلام قدیمی خارج از زنجیره ممکن است اگر ناشر و سایر مشترکین آنها از شبکه خارج شوند غیرقابل بازیابی شوند. از طرف دیگر، آیتم های روی زنجیره را نمی توان بدون اصلاح بلاک چین «فراموش کرد»، در حالی که موارد خارج از زنجیره انعطاف پذیرتر هستند. این می تواند از نظر قوانین حفظ حریم خصوصی داده ها، مانند مقررات جدید GDPR اروپا، مهم باشد.
  • فراداده روی زنجیره برای اقلام خارج از زنجیره، تراکنش روی زنجیره همچنان حاوی ناشر(ها)، کلید(ها)، قالب (JSON، متن یا باینری) و اندازه کل مورد است. همه اینها فضای بسیار کمی را اشغال می کند و به توسعه دهندگان برنامه کمک می کند تا تعیین کنند که آیا در دسترس نبودن یک آیتم خارج از زنجیره برای یک جستار جریان خاص نگران کننده است یا خیر.
  • محدودیت دو پرش. هنگام انتقال پرس و جوهای تکه ای در سراسر شبکه همتا به همتا، بین قابلیت دسترسی و کارایی تعادل وجود دارد. در حالی که خوب است هر پرس و جو در هر مسیر منتشر شود، این می تواند شبکه را با "گفتگو" غیر ضروری مسدود کند. بنابراین در حال حاضر پرس و جوهای تکه به دو پرش محدود می شوند، به این معنی که یک گره می تواند داده های خارج از زنجیره را از هر همتای همتای خود بازیابی کند. در شبکه‌های کوچک‌تر از کمتر از 1000 گره که تمایل دارند بلاک چین‌های سازمانی را مشخص کنند، ما معتقدیم که این کار به خوبی کار می‌کند، اما اگر اشتباه کنیم، تنظیم این محدودیت (یا ارائه آن به عنوان یک پارامتر) برای ما آسان است.
  • ذخیره سازی محلی هر گره MultiChain داده های خارج از زنجیره را در دایرکتوری "chunks" دایرکتوری بلاک چین معمولی خود با استفاده از یک فرمت باینری کارآمد و شاخص LevelDB ذخیره می کند. یک زیردایرکتوری جداگانه برای موارد موجود در هر یک از جریان های مشترک و همچنین موارد منتشر شده توسط خود گره استفاده می شود. در هر یک از این زیر شاخه ها، تکه های تکراری (با همان هش) فقط یک بار ذخیره می شوند. هنگامی که یک گره اشتراک خود را از یک جریان لغو می کند، می تواند انتخاب کند که داده های خارج از زنجیره بازیابی شده برای آن جریان را پاک کند یا نه.
  • کش باینری هنگام انتشار قطعات بزرگ داده های باینری، چه در زنجیره یا خارج از زنجیره، ممکن است برای توسعه دهندگان برنامه کاربردی نباشد که آن داده ها را در یک درخواست JSON-RPC به API MultiChain ارسال کنند. بنابراین MultiChain 2.0 یک کش باینری را پیاده‌سازی می‌کند، که این امکان را فراهم می‌آورد که قطعات بزرگی از داده‌ها را در چندین تماس API ایجاد کرده و سپس در مرحله نهایی کوتاه منتشر شود. هر آیتم در کش باینری به عنوان یک فایل ساده در فهرست فرعی “cache” دایرکتوری بلاک چین ذخیره می‌شود و اجازه می‌دهد تا گیگابایت داده نیز مستقیماً از طریق سیستم فایل ارسال شود.
  • نظارت بر API ها MultiChain 2.0 alpha 3 دو API جدید برای نظارت بر بازیابی ناهمزمان داده های خارج از زنجیره اضافه می کند. اولین API وضعیت فعلی صف را توصیف می‌کند و نشان می‌دهد که چه تعداد از تکه‌ها (و چه مقدار داده) در انتظار هستند یا در حال جستجو یا بازیابی هستند. دومین API آماری را برای همه پرس و جوها و درخواست‌های ارسالی از زمان راه‌اندازی گره، از جمله تعداد انواع مختلف شکست، ارائه می‌کند.
  • فلاش در هنگام انتشار. هنگام انتشار یک آیتم خارج از زنجیره، MultiChain اطمینان حاصل می کند که نسخه محلی آن داده ها به طور کامل روی درایو دیسک فیزیکی نوشته شده است (یا "فلاش شده") قبل از اینکه تراکنش ارجاع داده به شبکه پخش شود. در غیر این صورت، اگر گره به اندازه کافی بدشانس بود که بلافاصله پس از پخش تراکنش، برق را از دست داد، داده های خارج از زنجیره ممکن است برای همیشه از بین بروند. این مسئله برای خود MultiChain نیست، زیرا تاخیر بین تلاش‌های بازیابی یک تکه به طور خودکار در طول زمان افزایش می‌یابد. اما می تواند در سطح برنامه مشکلاتی ایجاد کند، جایی که همه از وجود برخی از داده ها می دانند اما هیچ کس قادر به یافتن آنها نیست.
  • عملکرد انتشارات. با انتقال داده های خارج از زنجیره به دیسک به این روش، MultiChain می تواند جریمه عملکردی را متحمل شود، زیرا دیسک های فیزیکی کند هستند. به عنوان مثال، یک هارد دیسک متوسط ​​7200 دور در دقیقه فقط می‌تواند حدود 100 نوشتن تصادفی داده در ثانیه انجام دهد، که به نوبه خود سرعت انتشار اقلام خارج از زنجیره را توسط یک گره محدود می‌کند. سه راه حل ممکن برای این مشکل وجود دارد. اولین و ساده‌تر از همه، گره‌ها می‌توانند از یک درایو دستگاه حالت جامد (SSD) به جای یک هارد دیسک معمولی استفاده کنند که از 10,000 عملیات نوشتن تصادفی در ثانیه پشتیبانی می‌کند. دوم، چندین آیتم خارج از زنجیره را می توان در یک تراکنش با استفاده از "createrawsendfrom" API منتشر کرد. در این مورد، MultiChain تمام داده های خارج از زنجیره ارجاع شده توسط یک تراکنش را در یک عملیات دیسک می نویسد. در نهایت، MultiChain را می توان طوری پیکربندی کرد که قبل از پخش تراکنش که به آن ارجاع می دهد، داده های خارج از زنجیره را روی دیسک تخلیه نکند. از این گزینه با احتیاط استفاده کنید.
  • ادغام پول بومی برای موارد استفاده ای که به آن نیاز دارند، MultiChain همیشه گزینه استفاده از یک ارز بومی در بلاک چین را برای جلوگیری از هرزنامه تراکنش و/یا تشویق اعتباردهنده های بلوک ("ماینرها") ارائه کرده است. در این موارد، تراکنش‌ها باید حداقل کارمزدی را که متناسب با اندازه آن‌ها بر حسب بایت است، به ماینرها ارائه دهند تا بتوانند روی زنجیره ارسال و تأیید شوند. این مکانیسم برای جلوگیری از هرزنامه های خارج از زنجیره، با الزام حداقل هزینه اضافی به ازای هر کیلوبایت داده خارج از زنجیره که در تراکنش ارجاع داده می شود، گسترش یافته است.
  • بایگانی گره ها اگر یک گره بخواهد در هر جریانی مشترک شود، و بنابراین هر آیتم خارج از زنجیره منتشر شده را بازیابی و ذخیره کند، می‌توان آن را برای انجام این کار با استفاده از پارامتر زمان اجرا «اشتراک خودکار» پیکربندی کرد. چنین گره ای به عنوان یک پشتیبان برای کل شبکه عمل می کند و تضمین می کند که موارد خارج از زنجیره از بین نخواهند رفت یا در دسترس نیستند، مهم نیست که کدام گره های دیگر ناپدید شوند. می توان تصور کرد که شرکت های شخص ثالث این را به عنوان یک خدمات تجاری ارائه می دهند.

جزئیات کامل همه فراخوانی‌ها و پارامترهای API مربوطه را می‌توانید در این قسمت پیدا کنید صفحه پیش نمایش MultiChain 2.0.

تمبر زمان:

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