نقشه راه MultiChain 1.0 بتا 2 و 2.0

گره منبع: 1742567

امروز کجا هستیم و فردا به کجا خواهیم رفت

امروز خوشحالیم که دومین بتا MultiChain 1.0 را برای لینوکس، ویندوز و مک منتشر کنیم (در حال حاضر نسخه مک نیاز به کامپایل دارد). این به توسعه برنامه ریزی شده MultiChain 1.0 پایان می دهد - به استثنای هر گونه رفع اشکال، نسخه نهایی MultiChain 1.0 در تابستان بدون تغییر خواهد بود.

این ماه همچنین دو سال از اولین انتشار آلفا MultiChain در ژوئن 2015 می گذرد. ​​مانند هر محصول جدیدی، ما مطمئن نبودیم که بازار چه واکنشی نشان خواهد داد و می دانستیم که تنها یک راه برای کشف این موضوع وجود دارد - انتشار یک محصول جدید حداقل محصول مناسب، به معنای نسخه اولیه ای است که ارزش قابل توجهی ارائه می دهد اما از نظر طراحی اولیه است. خوشبختانه برخلاف اولین محصول ما CoinSpark، MultiChain یک پاسخ مثبت قوی و فوری دریافت کرد. این با سونامی از درخواست‌های ویژگی معقول همراه بود که بسیاری از آنها را اکنون پیاده‌سازی کرده‌ایم. به موازات توسعه محصول، استفاده نیز با هر معیاری رشد چشمگیری داشته است. به عنوان مثال، وب سایت MultiChain در جولای 3,000 کمتر از 2015 بازدیدکننده داشت و اکنون ده برابر این تعداد در ماه به ارمغان می آورد.

عملکرد چند زنجیره ای

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

.throughput td,.throughput th {text-align:right;}
کل معاملات 1.0 آلفا 3 1.0 آلفا 21 1.0 آلفا 22 1.0 بتا 1 1.0 بتا 2
100 6.5 ثانیه 7.8 541.7 830.6 1465.7
1,000 7.0 7.6 583.9 889.4 1199.6
10,000 4.1 6.4 566.9 746.6 1071.2
100,000 - 6.6 558.0 771.9 1034.2
1,000,000 - - 548.6 773.6 1055.4

میانگین تراکنش ها در هر ثانیه، شامل سربار API و ساخت، امضا، استخراج و تأیید تراکنش ها و بلوک ها.
تست های انجام شده با استفاده از ab ابزار محک زدن سرور HTTP که دو درخواست همزمان را به سرور ارسال می کند sendtoaddress API
مشخصات سرور: Intel Core i7-4770، 4 هسته @ 3.4 مگاهرتز، 32 گیگابایت رم، Seagate 2 TB 7200 RPM SATA، CentOS 6.4.

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

البته، بهینه سازی عملکرد یک کار بی پایان است و دلیلی وجود ندارد که MultiChain نتواند به 10,000 tx/sec در یک دستگاه برسد. پردازنده 16 هسته ای با تغییرات معماری مناسب با این حال، بر اساس مکالمه با کاربران و شرکای ما، به نظر می رسد که تعداد کمی از آنها انتظار دارند تا چند سال آینده به بیش از 1,000 تن در ثانیه نیاز داشته باشند. بنابراین ما تلاش‌های توسعه خود را بر روی ویژگی‌های جدید متمرکز می‌کنیم، که ما را به خوبی به موضوع MultiChain 2.0 می‌آورد.

بررسی اجمالی MultiChain 2.0

نسخه 2.0 MultiChain اولین نسخه ای است که در دو نسخه ارائه می شود - Community (متن باز) و Enterprise (تجاری). من در اینجا بر روی نسخه رایگان انجمن تمرکز می کنم، زیرا ما فقط در مورد جزئیات MultiChain Enterprise با آن صحبت می کنیم. شرکای ما. در هر صورت، نسخه‌های Community و Enterprise بسیار سازگار خواهند بود، به این صورت که: (الف) برنامه‌های ساخته شده در نسخه Community بدون تغییر در MultiChain Enterprise اجرا می‌شوند، و (ب) هر دو نسخه می‌توانند با یکدیگر ارتباط برقرار کرده و با یکدیگر معامله کنند. روی همان زنجیره

سه حوزه کلیدی عملکرد پیشرفته در هر دو نسخه MultiChain 2.0 عبارتند از:

  • مدل داده غنی‌تر برای جریان‌ها، از جمله اسناد JSON.
  • فیلترهای تراکنش قابل برنامه ریزی سفارشی برای اعتبارسنجی زنجیره ای.
  • به روز رسانی یکپارچه پروتکل و پارامترهای یک بلاک چین.

بیایید به بحث در مورد هر یک از این موارد با جزئیات بپردازیم.

مدل داده های غنی تر برای جریان ها

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

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

MultiChain 2.0 عملکرد این استریم را از طرق مختلفی غنی می کند:

  • موارد JSON. علاوه بر داده‌های باینری، آیتم‌های جریانی از اشیاء JSON ساختاریافته پشتیبانی می‌کنند که در یک قالب سریال‌سازی کارآمد در زنجیره بلوکی ذخیره می‌شوند. UBJSON. از آنجایی که MultiChain API قبلاً از JSON استفاده می کند، این اشیاء JSON به روشی طبیعی و واضح قابل نوشتن و خواندن خواهند بود.
  • کلیدهای متعدد. آیتم‌های جریان از چندین کلید پشتیبانی می‌کنند و این امکان را فراهم می‌کنند که یک تکه داده به روش‌های مختلف برای بازیابی با استفاده از فهرست نمایه شود. liststreamkeyitems. ما دائماً در حال ارزیابی میزان عملکرد پایگاه داده در MultiChain هستیم و انتظار نداریم از فهرست‌بندی عناصر فرعی در موارد جریان JSON در نسخه 2.0 پشتیبانی کنیم. اجازه دادن به کلیدهای متعدد در هر مورد جریان، راه حل معقولی را ارائه می دهد.
  • اتمی چندین مورد را می نویسد. MultiChain 1.0 به یک تراکنش اجازه می دهد تا در چند جریان بنویسد، اما نمی تواند چندین مورد را در یک جریان بنویسد. MultiChain 2.0 این محدودیت را حذف خواهد کرد.
  • ادغام JSON. هر فهرست مرتب شده ای از اشیاء JSON را می توان به طور طبیعی مسطح یا خلاصه کرد تا یک شی "ادغام شده" ایجاد شود. شی ادغام شده شامل تمام کلیدهایی است که در اشیاء منفرد ظاهر می شوند، جایی که مقدار مربوط به هر کلید از آخرین شی ای که آن کلید در آن ظاهر می شود گرفته می شود. اگر دوست دارید، شی ادغام شده حالت نهایی یک ردیف پایگاه داده است که ستون های آن توسط اولین شی تعریف شده و توسط اشیاء بعدی گسترش یا به روز می شوند. MultiChain 2.0 برای بازیابی آسان و سریع شی ادغام شده برای موارد JSON در یک جریان با یک کلید یا ناشر خاص، APIها را اضافه می کند.

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

MultiChain 2.0 همچنین به جای جفت‌های کلید/مقدار فقط متنی که در MultiChain 1.0 پیاده‌سازی شده‌اند، از اشیاء JSON برای ابرداده‌های تراکنش خام (یعنی نه موارد جریان) و همچنین ابرداده برای رویدادهای صدور دارایی و ایجاد جریان پشتیبانی می‌کند. را listassets API ادغام JSON را در تمام رویدادهای صدور دارایی ارائه می دهد، به طوری که فراداده هر انتشار می تواند به طور موثر توضیحات نهایی دارایی را به روز کند.

فیلترهای تراکنش سفارشی

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

MultiChain 2.0 پارادایم متفاوتی به نام فیلترهای تراکنش را معرفی می کند که تراکنش های فردی را بدون ارجاع به هیچ وضعیت جهانی تأیید می کند. ما انتظار داریم که فیلترها با جاوا اسکریپت نوشته شوند و در یک موتور زمان اجرا جاسازی شده مانند اجرا شوند v8، که در گوگل استفاده می شود کروم مرورگر و Node.js و سکو. البته، ما باید اطمینان حاصل کنیم که کد فیلتر به طور یکسان بر روی هر گره در بلاک چین اجرا می شود و هر گرهی را مسدود می کند. منابع غیر جبرگرایی مانند خواندن زمان، استفاده از اعداد تصادفی، دسترسی به شبکه یا دیسک، یا انجام عملیات ریاضی که به معماری سرور میزبان بستگی دارد. ایجاد یک محیط زمان اجرا جاوا اسکریپت یک چالش است، اما (بدون صرف هزینه زیاد) ما معتقدیم که برای چندین ویژگی MultiChain دیگر در آینده مفید خواهد بود.

فیلترها به یک شی JSON ارسال می شوند که یک تراکنش فردی را توصیف می کند، ساختاری مانند خروجی آن decoderawtransaction اما با زمینه های اضافی به عنوان مثال، هر ورودی تراکنش در JSON شامل ساختاری است که خروجی تراکنش قبلی را که صرف می‌کند، توصیف می‌کند، و هر آدرس با لیستی از مجوزهایی که در حال حاضر توسط آن آدرس نگهداری می‌شود، همراه خواهد بود. وظیفه فیلتر برگرداندن یک مقدار بولی است که نشان می‌دهد آیا تراکنش قابل قبول است یا خیر، و در غیر این صورت، یک خطای متنی برای توضیح دلیل ارائه می‌دهد. API MultiChain شامل دستوراتی برای ایجاد فیلترها، آزمایش آنها بر روی تراکنش‌های قبلی یا جدید و فعال‌سازی آن‌ها با اجماع مدیران است.

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

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

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

MultiChain 2.0 شامل دو ویژگی اضافی برای قدرتمندتر کردن فیلترها می شود. ابتدا، مجوزهای تعریف شده توسط کاربر را معرفی می کند که در کنار هشت مجوز تعریف شده توسط MultiChain وجود دارد. مانند مجوزهای معمولی، این مجوزها توسط مدیران (و در برخی موارد، توسط کاربرانی که activate امتیازات) و در کنار آدرس‌های موجود در شی JSON به یک فیلتر ارسال می‌شود. به عنوان مثال، یک فیلتر می‌تواند اطمینان حاصل کند که فقط آدرس‌هایی با مجوز تعریف‌شده توسط کاربر خاص می‌توانند انواع خاصی از داده‌ها را در یک جریان بنویسند یا در یک دارایی خاص بالاتر از یک آستانه خاص تراکنش انجام دهند.

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

به روز رسانی بلاک چین

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

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

پارامترهای بلاک چین که می توانند به روز شوند عبارتند از:

  • نسخه پروتکل. این کار بلاک چین ایجاد شده با یک نسخه از MultiChain را قادر می‌سازد تا برای پشتیبانی از ویژگی‌های نسخه جدید، مانند موارد جریان JSON یا فیلترهای تراکنش، ارتقا یابد. در واقع، نسخه پروتکل 10008 معرفی‌شده در MultiChain 1.0 alpha 29 (و در نسخه بتا استفاده می‌شود) قبلاً با پشتیبانی غیرمستند برای این نوع ارتقاء در آینده اثبات شده است. هنگامی که یک بلاک چین MultiChain 1.0 به پروتکل 2.0 ارتقا یافت، به سایر تغییرات پارامتر که در اینجا توضیح داده شده است نیز دسترسی خواهد داشت.
  • مقیاس بندی بلاک چین. بلاک چین هایی که محبوب می شوند ممکن است از مقادیر اولیه تعیین شده برای زمان تأیید هدف یا حداکثر اندازه تراکنش و بلوک بیشتر شوند. MultiChain 2.0 امکان افزایش یا کاهش این مقادیر را در صورت لزوم فراهم می کند.
  • مدل مجوز. MultiChain 2.0 امکان به روز رسانی بسیاری از پارامترهای مربوط به مجوز و حاکمیت را فراهم می کند، از جمله: (الف) anyone-can-* پارامترهایی که راه های باز یا بسته شدن یک بلاک چین را کنترل می کنند، (ب) admin-consensus-* پارامترهایی که سطوح اجماع مدیران مورد نیاز برای عملیات خاص را تعیین می کنند، و (ج) mining-diversity پارامتری که سختی الگوریتم اجماع دور را کنترل می کند.

هنگامی که این قابلیت به روز رسانی اجرا شد، نباید دلیلی وجود داشته باشد که بلاک چین ایجاد شده در MultiChain نمی تواند برای چندین دهه یا بیشتر اجرا شود.

با نگاه به آینده

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

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

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

تمبر زمان:

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