הצגת זרמי MultiChain

צומת המקור: 1213525

למסדי נתונים משותפים של ערכי מפתח וסדרות זמן בלתי משתנות

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

  1. בסיס נתונים או מאגר מסמכים בעל ערך מפתח, בסגנון NoSQL.
  2. מאגר סדרות זמן, המתמקד בהזמנת ערכים.
  3. מאגר נתונים מונע זהות בו מסווגים הערכים לפי המחבר שלהם.

אלה יכולים להיחשב כ'מה ',' מתי 'ו'מי' של בסיס נתונים משותף.

יסודות זרמים

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

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

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

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

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

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

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

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

אחזור מהזרמים

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

אם צומת מנויים לזרם, ניתן לאחזר מידע מהזרם בכמה דרכים:

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

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

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

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

נחלים ומפת הדרכים של MultiChain

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

בטווח הרחוק יותר, איפה נחלים משתלבים במפת הדרכים של MultiChain? אם אתה לוקח צעד אחורה, מציעה MultiChain כעת שלושה תחומים של פונקציונליות ברמה גבוהה:

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

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

ערכים עתידיים אפשריים לפרמטר כוללים evm (עבור Ethereumמכונה וירטואלית תואמת), sql (עבור בסיס נתונים בסגנון SQL) או אפילו wiki (לטקסט שנערך בשיתוף פעולה). כל גורם משותף שמדינתו נקבעת על ידי סדרת שינויים מסודרת הוא מועמד פוטנציאלי. כל ישות כזו תצטרך: (א) ממשקי API המספקים את ההפשטה הנכונה לעדכון מצבה, (ב) מנגנונים מתאימים לצמתים מנויים כדי לעקוב אחר מצב זה, ו- (ג) ממשקי API להשגת יעילות של חלק או כל המדינה. אנו מחכים ללמוד אילו ישויות ברמה גבוהה ביותר יהיו היעילות ביותר, ליישום על ידינו או על ידי צדדים שלישיים באמצעות ארכיטקטורת פלאגין.

מה עם חוזים חכמים?

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

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

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

 

אנא פרסם הערות ב 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.*

כמה הערות מפתחים אחרות הנוגעות לזרמים:

  • אל האני 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 פרמטר blockchain, כמו גם הקטן ביותר של maximum-block-size ו max-std-tx-size ערכים מינוס כמה מאות בתים.
  • צמתים המשתמשים בפורמט הארנק הישן אינם יכולים להירשם כמנוי לזרמים, ו- יש לשדרג.

 

בול זמן:

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