מפת דרכים MultiChain 1.0 בטא 2 ו- 2.0

צומת המקור: 1742567

איפה אנחנו היום ולאן אנחנו הולכים מחר

היום אנו שמחים לשחרר את הבטא השנייה של MultiChain 1.0 עבור לינוקס, Windows ו- Mac (לעת עתה גרסת ה- Mac דורשת אוסף). זה מסכם את הפיתוח המתוכנן של MultiChain 1.0 - למעט כל תיקוני באגים, המהדורה הסופית של MultiChain 1.0 במהלך הקיץ תהיה ללא שינוי.

החודש מציין גם שנתיים מאז הוצאת אלפא הראשונה של MultiChain ביוני 2015. כמו בכל מוצר חדש, לא היינו בטוחים איך השוק יגיב, וידענו שיש רק דרך אחת לברר - שחרר מוצר מינימאלי אפשרי, כלומר גרסה ראשונית המספקת ערך משמעותי אך היא מקדימה על ידי תכנון. למרבה המזל, שלא כמו המוצר הראשון שלנו CoinSpark, MultiChain קיבלה תגובה חיובית ומיידית. זה לווה בצונאמי של בקשות תכונות הגיוניות, שרבות מהן יישמנו כעת. במקביל להתפתחות המוצר, השימוש צמח באופן יוצא דופן בכל קנה מידה. לדוגמה, אתר MultiChain קיבל פחות מ -3,000 מבקרים ביולי 2015, וכעת מכניס עשרה פעמים את המספר החודשי.

ביצועי MultiChain

במהלך השנתיים האחרונות השקענו מאמץ רב באופטימיזציה של MultiChain שממנו הושתל ליבת Bitcoin, יישום ההפניה לרשת הביטקוין הציבורית. להלן השוואה בין תפוקת העסקה עבור הגדרת צומת יחיד באמצעות חמש גרסאות של המוצר:

.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 ג'יגה זיכרון RAM, Seagate 2 TB 7200 סל"ד SATA, CentOS 6.4.

באופן טבעי, הקפיצה הגדולה ביותר הגיעה באלפא 22 כשאנחנו עבר לארנק מונע בסיס נתונים. אך מאז ההפצה, כמעט הכפלנו את המהירות של MultiChain שוב. אנו מקווים שהדגמנו כי המגבלה של bitcoin של 4 עסקאות בשנייה נובעת מפרמטרי הרשת הספציפיים שלה, ואין לה שום קשר לשרשרות חסימות באופן כללי.

כמובן, אופטימיזציה של ביצועים היא משימה בלתי נגמרת, ואין שום סיבה ש- MultiChain לא מצליחה להגיע ל -10,000 טקס / שניות על מעבד בעל 16 ליבות עם השינויים האדריכליים המתאימים. עם זאת, בהתבסס על שיחות עם המשתמשים והשותפים שלנו, נראה כי מעטים מצפים להזדקק ליותר מ -1,000 טקס שניה / לשנה הקרובות. אז אנו ממקדים מחדש את מאמצי הפיתוח שלנו על תכונות חדשות, שמביאות אותנו יפה לנושא MultiChain 2.0.

סקירה של MultiChain 2.0

גרסה 2.0 של MultiChain תהיה הראשונה שתגיע בשתי מהדורות - Community (קוד פתוח) ו- Enterprise (מסחרי). אני הולך להתמקד כאן במהדורת הקהילה החינמית, מכיוון שאנו דנים רק בפרטי MultiChain Enterprise השותפים שלנו. בכל מקרה, מהדורות הקהילה והארגונים יהיו תואמות מאוד בכך: (א) יישומים שנבנו במהדורת הקהילה יפעלו ללא שינוי ב- MultiChain Enterprise, ו- (b) שתי המהדורות יוכלו להתחבר ולטפל אחת עם השנייה. באותה שרשרת.

שלושת תחומי המפתח לפונקציונליות משופרת בשתי המהדורות של MultiChain 2.0 יהיו:

  • מודל נתונים עשיר יותר עבור זרמים, כולל מסמכי JSON.
  • מסנני עסקאות הניתנים לתכנות המותאמים אישית לאימות ברשת.
  • עדכון חלק של פרוטוקול הפרמטרים של blockchain.

בואו נפנה לדון בכל אחד מאלה בפירוט.

מודל נתונים עשיר יותר לזרמים

זרמי MultiChain הוצגו בספטמבר 2016 והוכחו פופולריים במיוחד. כמתואר ב הודעה זו, זרמים מספקים הפשטה טבעית ופשוטה לאחסון נתונים לשימוש כללי, אינדקס ושליפה על blockchain. Blockchain של MultiChain יכול להכיל כל מספר של זרמים ששמו, וכל אחד מהם יכול להיות פתוח לכל לכתיבה, או ניתן לכתיבה רק מכתובות מסוימות.

ב- MultiChain 1.0, לכל פריט בזרם יש מפרסם אחד או יותר (החותמים עליו), מפתח אופציונלי, עומס נתונים בינארי בגודל של עד 64 מגהבייט וחותמת זמן (הנגזרת מהבלוק בו הוא משובץ). כל צומת יכול להחליט בחופשיות לאילו זרמים להירשם, או יכול להירשם כמנוי לכל הזרמים באופן אוטומטי. אם צומת מנויים לזרם, הוא אינדקס את התוכן של הזרם בזמן אמת, ומאפשר אחזור יעיל על ידי מפרסם, מפתח, חסום, חותמת זמן או מיקום.

MultiChain 2.0 יעשיר את הפונקציונליות של זרמי זה במספר דרכים:

  • פריטי JSON. בנוסף לנתונים בינאריים, פריטי זרם יתמכו באובייקטים של JSON מובנים, המאוחסנים על ה- blockchain בפורמט סידורי יעיל כגון אובז'סון. מכיוון שממשק ה- API של MultiChain כבר משתמש ב- JSON לכל אורכו, אובייקטי JSON אלה ניתנים לכתיבה וקריאה באופן טבעי ומובן מאליו.
  • מספר מקשים. פריטי זרם יתמכו במפתחות רבים, יאפשרו יצירת אינדקס של נתונים בודדים בכמה דרכים לשליפה באמצעות liststreamkeyitems. אנו בודקים כל הזמן כמה פונקציונליות בסיסי נתונים לכלול בתוך MultiChain, ואיננו מצפים לתמוך באינדקס של רכיבי המשנה בתוך פריטי זרם JSON בגירסה 2.0. מתן מספר מקשים לפריט זרם מספק דרך לעקיפת הבעיה.
  • אטומי כותב על מספר פריטים. MultiChain 1.0 מאפשר לעסקה בודדת לכתוב למספר זרמים, אך לא לכתוב מספר פריטים לאותו זרם. MultiChain 2.0 יסיר מגבלה זו.
  • מיזוג JSON. ניתן לשטח או לסכם כל רשימה מסודרת של אובייקטים של JSON באופן טבעי כדי ליצור אובייקט "ממוזג". האובייקט הממוזג מכיל את כל המפתחות המופיעים באובייקטים בודדים, כאשר הערך המתאים לכל מפתח נלקח מהאובייקט האחרון בו מופיע מפתח זה. אם תרצה, האובייקט הממוזג הוא המצב הסופי של שורת מסד נתונים, שהעמודות שלהם מוגדרות על ידי האובייקט הראשון ומורחבות או מעודכנות על ידי אובייקטים מאוחרים יותר. MultiChain 2.0 יוסיף ממשקי API כדי לאחזר בקלות ובמהירות את האובייקט הממוזג עבור פריטי JSON בזרם עם מפתח או מפרסם מסוים.

תכונות אלה נגזרות מדרכים נפוצות בהן מפתחים משתמשים כיום בזרמים. במילים אחרות, אנו בוחנים את מה שאנשים רבים בונים על גבי MultiChain ברמת היישום, ומביאים את הפונקציונליות הזו ל- MultiChain עצמה - תבנית שאנו מתכוונים להמשיך ליישם. כעת, כשפריטים בזרם יכללו מידע על סוג, הם יכולים בקלות להרחיב בעתיד לתמוך בפורמטים אחרים של נתונים כמו XML, HDF5 ו Mimeתוכן מזוהה. שלא לדבר על האפשרויות של דחיסה והצפנה שקופות על גבי שרשרת.

MultiChain 2.0 יתמוך גם באובייקטים של JSON עבור מטא נתונים של טרנזקציות גולמיות (כלומר לא פריטי זרם) וכן במטא נתונים עבור הנפקת נכסים ואירועי יצירת זרם, במקום זוגות המפתח / ערך בלבד לטקסט המיושמים ב- MultiChain 1.0. ה listassets API יציע JSON להתמזג בין כל אירועי ההנפקה של הנכס, כך שמטא נתונים של כל הנפקה יוכלו לעדכן ביעילות את התיאור הסופי של הנכס.

מסנני עסקה מותאמים אישית

חשבנו רבות כיצד להוסיף כללים הניתנים לתכנות ל- MultiChain. אמנם פרדיגמת "החוזה החכם" של Ethereum פופולרית, אך יש לה מספר חסרונות עיקריים עבור מחסומי חסימת בעלי תפוקה גבוהה. ראשית, חוזים חכמים מייצרים תלות גלובלית בכל רחבי מדינת הבלוקצ'יין, מה שפוגע באופן דרמטי במקביל ובביצועים. שנית, חוזים חכמים אינם יכולים לעצור את הטמעת עסקאות שגויות בתוך blockchain, אלא רק למנוע מעסקאות אלה לעדכן את מצב מסד הנתונים blockchain. בעוד שבטווח הארוך אנו מצפים שמכונה וירטואלית תואמת Ethereum תוצע כהפשטה ברמה גבוהה בתוך MultiChain, אנו לא חושבים שזה הפיתרון הנכון לאימות ברמה נמוכה.

MultiChain 2.0 יציג פרדיגמה שונה הנקראת פילטרי טרנזקציה, אשר מאמתים עסקאות בודדות ללא התייחסות למדינה גלובלית כלשהי. אנו מצפים שמסננים ייכתבו ב- Javascript ויבוצעו בתוך מנוע זמן ריצה משובץ כמו v8, המשמש ב- Google Chrome הדפדפן וה - Node.js פּלַטפוֹרמָה. כמובן שנצטרך להבטיח שקוד הסינון יפעל באופן זהה בכל צומת ב- blockchain, וחוסם כל אחד מהם מקורות לא-דטרמיניזם כמו קריאת השעה, שימוש במספרים אקראיים, גישה לרשת או לדיסק או ביצוע פעולות מתמטיות התלויות בארכיטקטורת השרת המארח. יצירת סביבת זמן ריצה של ג'אווסקריפט דטרמיניסטית היא אתגר, אך (מבלי להסגיר יותר מדי) אנו מאמינים שזה יהיה מועיל לכמה תכונות MultiChain אחרות בעתיד.

למסננים יועברו אובייקט JSON המתאר עסקה פרטנית, מובנית כמו הפלט של decoderawtransaction אבל עם שדות נוספים. לדוגמא, כל קלט עסקה ב- JSON יכלול מבנה המתאר את פלט העסקה הקודם שהוא מוציא, וכל כתובת תלווה ברשימה של הרשאות שנמצאות כעת באותה כתובת. תפקידו של פילטר הוא להחזיר ערך בוליאני המציין אם העסקה מקובלת ואם לא, לספק שגיאה טקסטואלית המסבירה מדוע. ממשק ה- API של MultiChain יכלול פקודות ליצירת פילטרים, בדיקתם בעסקאות קודמות או חדשות והפעלתם בכפוף להסכמת מנהל.

שלא כמו חוזים חכמים, אם יתגלה באג בקוד למסנן, ניתן להחליף אותו בקלות בגירסה חדשה. עם זאת, כמו כל קוד ה- Turing המלא, המסננים עדיין מסתכנים בכניסה לולאה אינסופית. בעיה זו תיפתר בשני אופנים:

  • ניתן להתקין ולהפעיל מסננים רק על ידי מנהלי הרשת בכפוף להסכמה. זה נותן לכל מנהל אפשרות לבדוק לעומק את קוד המסנן לפני הצבעה להפעלתו.
  • כל הצמתים שהתנהגו היטב יאמתו עסקאות חדשות באמצעות המסננים הפעילים לפני שתעבירו אותם לצמתי העמיתים שלהם. כתוצאה מכך, אם עסקה שולחת פילטר לולאה אינסופית, אסור שהעסקה תתפשט מעבר לצומת שיצר אותה.

אנו צופים כי יישום פופולרי אחד למסננים יאמת פריטי זרם. לדוגמה, מסנן יכול להבטיח ששדות מסוימים בפריטי JSON של זרם מכילים מספרים בטווח ספציפי. ב- MultiChain 1.0 יש לבצע אימות מסוג זה ברמת היישום, אם בעת כתיבת פריטי זרם (אם מקור האמון) או בעת קריאתם. לעומת זאת, MultiChain 2.0 יאפשר להטמיע כללים אלה בתוך ה- blockchain עצמו, ולא כמו לבדוק אילוצים במסד נתונים יחסי.

MultiChain 2.0 יכלול שתי תכונות נוספות כדי להפוך את המסננים לעוצמתיים עוד יותר. ראשית, היא תציג הרשאות המוגדרות על ידי המשתמש, שקיימות לצד שמונה ההרשאות שהוגדרו על ידי MultiChain. בדומה להרשאות רגילות, אלה יוענקו לכתובות ספציפיות על ידי מנהלים (ובמקרים מסוימים, על ידי משתמשים עם activate הרשאות) וכללו לצד כתובות באובייקט JSON שהועברו למסנן. לדוגמה, מסנן יכול להבטיח שרק כתובות עם הרשאה מוגדרת על ידי משתמש מסוימות יכולות לכתוב סוגים מסוימים של נתונים לזרם, או לבצע פעולות בנכס מסוים מעל סף מסוים.

שנית, MultiChain 2.0 יתמוך במטא נתונים מותאמים אישית (בינאריים או JSON) בתפוקות עסקאות רגילות. זה יאפשר לכל פלט לפעול כשורת מסד נתונים כללית, "בבעלות" על ידי הכתובת שבתוכה. מסננים יראו מטא נתונים כלשהם בתפוקות שבוצעה וביצירה של עסקה כחלק מתיאור JSON שלה. כתוצאה מכך, MultiChain יהפוך למנוע מסד נתונים משותף אוניברסלי, כאשר תוקף העסקה נקבע על ידי פונקציה הניתנת להתאמה אישית של השורות שהיא יוצרת ומחיקה. (אם זה נשמע מעט מופשט, אנו בטוחים לספק כמה דוגמאות קונקרטיות.)

עדכון Blockchain

מכיוון שרוכסי הבלוק נועדו לפעול במשך שנים רבות, יתכן שיהיה צורך לשנות את המאפיינים שלהם לאורך זמן. הגרסה הנוכחית של MultiChain כבר מספקת גמישות נאותה, ומאפשרת שינויים בהרשאות (כולל של מנהלים וכורים בהסכמה), ניתן ליצור נכסים וזרמים חדשים ולהוסיף צמתים או להסיר אותם בצורה חלקה מהרשת. עם זאת, ב- MultiChain 1.0 בסיסי של blockchain פרמטרים, כמו גודל החסימה המרבי וזמן אישור היעד, קבועים בעת יצירת השרשרת ולא ניתן לשנותם לאחר מכן.

MultiChain 2.0 יוסיף את היכולת לעדכן blockchain, ויאפשר לשנות את פרמטרים רבים (אך לא את כולם) בזמן שהשרשרת ממשיכה לפעול. כמו פעולות חשובות אחרות, עדכון blockchain ידרוש רמה הניתנת להתאמה אישית של הסכמת מנהל, כאשר רמה זו עצמה היא פרמטר שניתן לשנות. עדכונים ייכנסו לתוקף מחסימה מסוימת ויחולו לאחר מכן על כל חסימה שלאחר מכן עד העדכון הבא.

פרמטרים של Blockchain הניתנים לעדכון יכללו:

  • גרסת פרוטוקול. זה יאפשר לשדרג blockchain שנוצר בגירסה אחת של MultiChain כך שיתמוך בתכונות בגירסה חדשה, כגון פריטי זרם JSON או מסנני טרנזקציות. אכן, גרסת הפרוטוקול 10008 שהוצג ב- MultiChain 1.0 alpha 29 (ומשמש בבטא) כבר הוכח בעתיד עם תמיכה ללא מסמכים לשדרוג מסוג זה. ברגע ששדרוג blockchain MultiChain 1.0 ישודרג לפרוטוקול 2.0, הוא יקבל גישה גם לשינויי הפרמטרים האחרים המתוארים כאן.
  • קנה מידה של Blockchain. מחזיקי חסימות שהופכים לפופולריים עשויים לגדול בערכים הראשוניים שנקבעו לזמן אישור היעד שלהם או למקסימום עסקאות וגודל חסימת שלהם. MultiChain 2.0 יאפשר להגדיל או להוריד את הערכים הללו בהתאם לצורך.
  • מודל הרשאה. MultiChain 2.0 יאפשר עדכון של פרמטרים רבים הנוגעים להרשאה וממשל, כולל: (א) anyone-can-* פרמטרים השולטים בדרכים בהן blockchain פתוח או סגור, (b) admin-consensus-* פרמטרים הקובעים את רמות הסכמת המנהלים הנדרשות לפעולות מסוימות, ו- (c) את mining-diversity פרמטר השולט בקפדנות של אלגוריתם הקונצנזוס סביב הרובין.

לאחר יישום פונקציונליות העדכון הזו, לא צריכה להיות שום סיבה ש- blockchain שנוצר ב- MultiChain לא יכול לפעול במשך עשרות שנים רבות או יותר.

להסתכל קדימה

כבר התחלנו לעבוד על MultiChain 2.0, ואנחנו מסתכלים קדימה אל המסירה במפת הדרכים הזו. ללא ספק שיפורים אחרים ייכללו גם כן. בדומה ל- MultiChain 1.0, יהיה לנו מהדורות אלפא לאורך הדרך, כך שמפתחים יוכלו להשתמש וללמוד תכונות חדשות בעת יישומן (וכמובן לדווח על כל בעיה או חסרונות). באופן טבעי, אנו נמשיך לשמור על גרסה 1.0 לאורך תקופה זו, נתקן את כל הבאגים המופיעים.

אני רוצה לסיים ולהודות לצוות הפיתוח שלנו, בראשות ד"ר מיכאל רוזנצב, על המשך המצוינות והעבודה הקשה שלהם. אנו רואים את MultiChain כפרויקט הנדסי תוכנה פשוט, בו איכות הקוד והבדיקה נחשבים מעל לכל. זו הפריבילגיה שלי לעבוד עם אנשים שיכולים להפוך חזון מוצר מורכב לתוכנת עבודה יציבה עם יעילות ומהירות כה מדהימה.

אנא פרסם הערות ב LinkedIn.

בול זמן:

עוד מ רב-שרשראות