BlockDAG
BlockDAG - איך אפשר לשמור עבודה שנעשתה במקביל?
בלוק חדש לא מגיע לכל המחשבים ברשת באותו רגע.
לכן יכול לקרות שכורה אחד מוצא בלוק חדש - ולפני שכורה אחר שמע עליו, גם הוא מוצא בלוק חדש שממשיך מאותו עבר.
עכשיו יש שני בלוקים תקינים שנוצרו בלי שאחד מהם ידע על השני.
השאלה היא:
מה עושים עם שניהם?
שני בלוקים יכולים להיווצר בלי שאחד מהם מכיר את השני
נניח ששני כורים מכירים את אותו עבר.
כורה אחד מוצא בלוק חדש ומפרסם אותו.
המידע מתחיל לעבור ברשת.
אבל לפני שהוא מגיע לכורה אחר, גם הכורה השני מוצא בלוק חדש.
הם לא חייבים להיווצר בדיוק באותה שנייה.
מספיק שהבלוק השני נמצא לפני שהמידע על הראשון הגיע לכורה שיצר אותו.
בשרשרת אחת, שני הבלוקים יוצרים שני ענפים
במבנה של Blockchain רגיל, כל בלוק ממשיך מבלוק קודם אחד.
לכן אם שני בלוקים ממשיכים מאותו עבר, נוצרים שני ענפים.
אפשר להמשיך לבנות על אחד מהם או על השני.
אבל בסופו של דבר שרשרת ראשית אחת צריכה להיות ההמשך שהרשת משתמשת בו.
ב-Bitcoin, למשל, העבודה המצטברת עוזרת לקבוע איזה ענף יישאר השרשרת הראשית.
הבלוק בענף השני יכול להיות תקין - ועדיין להישאר מחוץ לשרשרת הראשית.
ב-Kaspa אפשר להשאיר את שני הבלוקים מחוברים
Kaspa משתמשת במבנה אחר.
בלוק חדש יכול להפנות ליותר מבלוק קודם אחד.
לכן בלוק שמגיע מאוחר יותר יכול לומר למעשה:
“אני מכיר את שני הבלוקים האלה, ואני ממשיך משניהם.”
העבודה שנעשתה על שני הבלוקים לא חייבת להיעלם רק מפני שהם נוצרו במקביל.
היא יכולה להישאר מחוברת להיסטוריה.
המבנה הזה נקרא BlockDAG.
למה זה כבר לא Blockchain רגיל?
ב-Blockchain רגיל אפשר לצייר את ההיסטוריה בעיקר כקו:
בלוק → בלוק → בלוק → בלוק
ב-BlockDAG יכולים להיות גם כמה בלוקים שנוצרו במקביל, ובלוק מאוחר יותר יכול להתחבר לכמה מהם.
לכן ההיסטוריה נראית יותר כמו רשת של קשרים בין בלוקים מאשר כמו קו אחד.
ומה פירוש DAG?
השם נשמע מסובך יותר מהרעיון.
D - Directed - מכוון
כל חיבור מצביע בכיוון מסוים - מבלוק חדש לעבר שהוא מכיר.
A - Acyclic - ללא מעגלים
אי אפשר לעקוב אחורה דרך הבלוקים ובסוף לחזור לאותו בלוק שממנו התחלתם.
G - Graph - גרף
קבוצה של דברים שמחוברים זה לזה. כאן הדברים הם בלוקים.
לכן:
DAG = Directed Acyclic Graph - גרף מכוון ללא מעגלים.
לא צריך לזכור את ההגדרה כדי להבין את הרעיון:
בלוקים יכולים להיווצר במקביל ולהישאר מחוברים.
למה זה שימושי?
ככל שבלוקים נוצרים בתדירות גבוהה יותר, גדל הסיכוי שכורה ימצא בלוק לפני ששמע על בלוק שכורה אחר כבר מצא.
אם בכל פעם כזאת חייבים בסופו של דבר להשאיר רק ענף אחד כחלק מהמבנה הראשי, חלק מהעבודה המקבילה לא ממשיך איתו.
BlockDAG מאפשר ל-Kaspa לשמור יותר מהעבודה הזאת מחוברת.
וזה חלק חשוב מהיכולת שלה לעבוד עם קצב בלוקים גבוה.
אבל לשמור את שני הבלוקים עדיין לא פותר הכול
נניח שבבלוק אחד נמצאת עסקה שבה נועה שולחת כסף לדן.
ובבלוק המקביל נמצאת עסקה שבה נועה מנסה להשתמש באותו כסף כדי לשלם למאיה.
אפשר לשמור את שני הבלוקים במבנה.
אבל אי אפשר לקבל את שני התשלומים.
לכן עדיין צריך לענות על שאלה אחרת:
באיזה סדר צריך לבדוק את הבלוקים והעסקאות שבתוכם?
BlockDAG אומר איך הבלוקים מחוברים.
הוא עדיין לא אומר לבדו מה הסדר המוסכם שלהם.
אז מה BlockDAG בעצם עושה?
הוא מאפשר לשמור קשרים בין בלוקים שנוצרו במקביל, במקום לנסות לדחוס מיד את הכול לקו אחד.
בפשטות:
Blockchain: בעיקר שרשרת אחת של בלוקים.
BlockDAG: יכול לשמור גם בלוקים מקבילים מחוברים לאותה היסטוריה.
אבל אחרי שבנינו את הגרף, עדיין צריך דרך שבה כל המחשבים יגיעו לאותו סדר.
ולשם כך Kaspa משתמשת ב-GHOSTDAG.