בלוקצ'יין הוא פנקס רישום דיגיטלי שבו רשומות נאספות לחבילות הנקראות בלוקים, וכל בלוק נושא בכותרת שלו את טביעת האצבע הדיגיטלית של הבלוק שקדם לו. הקישור הזה, בשילוב עם אלפי מחשבים שמחזיקים כל אחד עותק עצמאי של השרשרת ומאמתים אותה בכוחות עצמם, הוא מה שהופך שינוי בדיעבד של רשומה ישנה למשימה יקרה עד כדי חוסר מעשיות. הדף מפרק את המנגנון לרכיביו: מבנה הבלוק, פונקציית הגיבוב, החוליה שמחברת בלוק לקודמו והדרך שבה רשת מבוזרת מגיעה להסכמה על גרסה אחת.
מה זו שרשרת בלוקים ולמה היא נקראת כך
במסד נתונים רגיל כל רשומה נשמרת בפני עצמה, ומי שמחזיק בהרשאה מתאימה יכול לשנות אותה או למחוק אותה בלי להשאיר סימן. בלוקצ'יין בנוי אחרת. הרשת אוספת רשומות שהצטברו בפרק זמן קצר, אורזת אותן יחד לחבילה אחת ומצרפת את החבילה לקצה מבנה קיים. חבילה כזו נקראת בלוק, והמבנה כולו נקרא שרשרת בלוקים.
המילה "שרשרת" אינה מטאפורה. בתוך כל בלוק קיים שדה ייעודי שמכיל את טביעת האצבע הדיגיטלית של הבלוק שקדם לו – ערך קצר שנגזר מתוכן הבלוק הקודם בשלמותו. הבלוק הראשון ברשת הביטקוין, בלוק הבראשית (Genesis Block), נוצר ב-3 בינואר 2009, ואין לפניו דבר, ולכן השדה הזה מכיל בו אפסים בלבד. כל בלוק שנוסף מאז מצביע אחורה אל קודמו, וכך נוצר רצף בלתי נפרד שמוביל מהקצה העדכני של השרשרת אחורה עד ליום הראשון.
רשת הביטקוין מכוונת לקצב ממוצע של בלוק אחד בכל עשר דקות בקירוב. הקצב אינו אחיד, משום שהתהליך שיוצר בלוקים הוא הסתברותי במהותו: לעיתים נוצרים שני בלוקים בהפרש של דקה, ולעיתים חולפת חצי שעה. כדי שהממוצע יישמר לאורך זמן, הרשת מכווננת מחדש את רמת הקושי כל 2,016 בלוקים – כשבועיים בקירוב. אם הבלוקים הקודמים נוצרו מהר מדי, הקושי עולה; אם לאט מדי, הוא יורד. מנגנון נפרד מקטין את התגמול לכורים במחצית כל 210,000 בלוקים, וקובע יחד עם כללי החלוקה תקרה של 21 מיליון יחידות. כל יחידה מתחלקת ל-100,000,000 סאטושי, ולכן הסכומים ברשת נשמרים כמספרים שלמים ולא כשברים עשרוניים.
אנטומיה של בלוק: מה בדיוק נשמר בפנים
בלוק ביטקוין מורכב משני חלקים נבדלים. הראשון הוא הכותרת (Block Header) – מבנה קומפקטי וקבוע בגודל 80 בתים בלבד. השני הוא הגוף, שמכיל את רשימת ההעברות המלאה. ההבחנה חשובה: הזהות של הבלוק, כלומר הגיבוב שמזהה אותו ומקשר אליו את הבלוק הבא, מחושבת מ-80 הבתים של הכותרת בלבד ולא מגוף הבלוק כולו.
| שדה בכותרת | גודל | מה הוא מכיל |
|---|---|---|
| גרסה (Version) | 4 בתים | מספר שמסמן לאילו כללים הבלוק מצהיר שהוא מציית |
| גיבוב הבלוק הקודם | 32 בתים | טביעת האצבע של כותרת הבלוק שקדם – זו החוליה עצמה |
| שורש מרקל (Merkle Root) | 32 בתים | ערך יחיד שמסכם את כל ההעברות שבגוף הבלוק |
| חותמת זמן (Timestamp) | 4 בתים | מספר השניות שחלפו מ-1 בינואר 1970 (זמן יוניקס) |
| יעד הקושי (nBits) | 4 בתים | ייצוג מקוצר של הסף שהגיבוב חייב להיות קטן ממנו |
| Nonce | 4 בתים | מונה בן 32 סיביות שנסרק שוב ושוב בחיפוש אחר גיבוב תקין |
שישה השדות מסתכמים בדיוק ב-80 בתים, ולכן כותרת בלוק היא יחידת מידע זעירה גם כשהבלוק עצמו מכיל אלפי העברות. חותמת הזמן אינה חייבת להיות מדויקת לשנייה, אך היא כפופה לשני כללים: היא חייבת להיות גדולה מהחציון של אחת-עשרה חותמות הזמן שקדמו לה, ואסור לה להקדים את הזמן המתואם של הרשת ביותר משעתיים. כך נשמר סדר כרונולוגי סביר גם ללא שעון מרכזי אחד.
שורש מרקל: איך אלפי העברות נדחסות ל-32 בתים
גוף הבלוק עשוי להכיל אלפי רשומות, אך הכותרת מקצה להן 32 בתים. הדחיסה מתאפשרת באמצעות מבנה בשם עץ מרקל. תחילה מחושב מזהה לכל העברה. אחר כך המזהים מסודרים בזוגות, כל זוג משורשר לערך אחד וממנו מחושב גיבוב חדש. השורה החדשה קצרה בחצי מקודמתה, והתהליך חוזר שכבה אחר שכבה עד שנותר ערך יחיד – שורש מרקל. כאשר מספר הפריטים בשכבה אינו זוגי, הפריט האחרון משוכפל כדי להשלים זוג.
למבנה הזה שתי תכונות מעשיות. הראשונה: שינוי בפרט אחד בהעברה בודדת משנה את המזהה שלה, ובעקבותיו משתנה כל ענף העץ עד לשורש – ולכן גם הכותרת. השנייה: כדי להוכיח שהעברה מסוימת אכן נכללת בבלוק, אין צורך בכל רשימת ההעברות אלא רק בשרשרת קצרה של גיבובים לאורך הענף. מספר הערכים הדרוש גדל לוגריתמית: עבור בלוק עם 4,096 העברות די בשנים-עשר ערכים. זו הסיבה שאפליקציות קלות יכולות לאמת קיום רשומה בלי להוריד את השרשרת כולה.
SHA-256: פונקציית הגיבוב שבבסיס הכול
SHA-256 שייכת למשפחת SHA-2 ופורסמה על ידי NIST בשנת 2001. היא מקבלת קלט באורך כלשהו – בית אחד או קובץ ענק – ומחזירה תמיד פלט באורך קבוע של 256 סיביות, כלומר 32 בתים, שנהוג להציג כ-64 תווים בכתיב הקסדצימלי. הפלט הזה נקרא גיבוב (Hash), ולעיתים "טביעת אצבע דיגיטלית".
- דטרמיניזם: אותו קלט בדיוק מפיק תמיד את אותו פלט, בכל מחשב ובכל זמן.
- אורך פלט קבוע: גודל הקלט אינו משפיע על גודל התוצאה.
- חד-כיווניות: מהפלט אי אפשר לשחזר את הקלט. הדרך היחידה למצוא קלט שמפיק פלט נתון היא ניסוי וטעייה.
- אפקט מפולת השלגים: שינוי של סיבית אחת בקלט משנה בממוצע כמחצית מסיביות הפלט. התוצאה החדשה אינה דומה לקודמת בשום צורה שניתן לנצל.
- עמידות להתנגשויות: אין שיטה ידועה שמאתרת שני קלטים שונים בעלי אותו פלט ביעילות טובה משמעותית מחיפוש עיוור במרחב ענק.
- חישוב זול: חישוב בודד מהיר מאוד. הקושי נובע ממספר החישובים הנדרש, לא מכובד חישוב יחיד.
ברשת הביטקוין הפונקציה מופעלת פעמיים ברצף (מכונה SHA256d) הן בחישוב גיבוב כותרת הבלוק והן בחישוב מזהי ההעברות ובבניית עץ מרקל. חשוב להבחין בין גיבוב להצפנה: הצפנה היא פעולה הפיכה שנועדה להסתיר מידע ולחשוף אותו בעזרת מפתח, ואילו גיבוב אינו הפיך כלל ואין בו מפתח. תפקידו לזהות ולאמת תוכן, לא להסתיר אותו.
איך הקישור בין הבלוקים יוצר חסינות לשינוי
כאן מתחברים שני הרכיבים. אם שדה בכותרת מכיל את הגיבוב של הכותרת הקודמת, וגיבוב מגיב לכל שינוי זעיר בקלט בשינוי מוחלט בפלט, אז כל עריכה של רשומה ישנה מפרקת את השרשרת מנקודת העריכה ואילך. שינוי בהעברה בודדת משנה את שורש מרקל של הבלוק שמכיל אותה; שורש מרקל חדש משנה את כותרת הבלוק; כותרת חדשה מפיקה גיבוב חדש – והבלוק הבא בשרשרת עדיין מצביע על הגיבוב הישן. אי-ההתאמה גלויה מיד לכל מי שמחזיק עותק של השרשרת.
הדגמה: מה קורה לשרשרת כששורה אחת משתנה
שלושה בלוקים מדומים. הגיבוב של כל בלוק מחושב מהתוכן שלו יחד עם הגיבוב של הבלוק שלפניו. לכן שינוי של תו בודד בבלוק 2 משנה את הגיבוב שלו – ומיד גם את זה של בלוק 3.
| בלוק | תוכן | גיבוב הבלוק הקודם | גיבוב הבלוק (SHA-256) |
|---|---|---|---|
| 1 | alice -> bob : 10 |
000000000000… |
8a967ef571cf… |
| 2 | bob -> carol : 4 |
8a967ef571cf… |
4247b7289eec… |
| 3 | carol -> dave : 1 |
4247b7289eec… |
fbef50a9b26f… |
אם המספר בבלוק 2 מוחלף מ-4 ל-5, הגיבוב שלו הופך ל-342a930add3d… ושל בלוק 3 ל-287c1ce1da20…. שני הבלוקים מפסיקים להתאים למה שהרשת כבר מחזיקה.
הרכיב הוא הדגמה טכנית של פונקציית גיבוב בלבד, אינו מתאר מצב שוק ואינו המלצה לפעולה.
עד כאן מדובר בזיהוי בלבד. מה שהופך את החישוב מחדש ליקר הוא הכלל הנוסף: כדי שבלוק יתקבל, הגיבוב של הכותרת שלו חייב להיות קטן מהיעד המספרי שהרשת קובעת באותה תקופה. מכיוון שאי אפשר לחשב לאחור איזה קלט יפיק פלט קטן מהסף, הדרך היחידה היא לשנות את שדה ה-Nonce ולחשב שוב, שוב ושוב. התהליך הזה נקרא כריית ביטקוין, וכל ניסיון בו צורך חשמל ממשי. שדה ה-Nonce הוא בן 32 סיביות ומאפשר כ-4.29 מיליארד ערכים בלבד; כשהם נגמרים, הכורה משנה נתון בהעברת הקוינבייס, שורש מרקל משתנה, ומרחב החיפוש נפתח מחדש.
לכן שינוי של רשומה ישנה מחייב לא רק לחשב מחדש את הבלוק שבו היא נמצאת, אלא לבצע מחדש את אותה עבודה עבור כל בלוק שנוסף אחריו – ובמקביל להשיג את שאר הרשת, שממשיכה להוסיף בלוקים חדשים בזמן הזה. ככל שהבלוק עמוק יותר, העלות גדלה, וזו המשמעות המדויקת של "חסינות לשינוי": לא בלתי אפשרי מתמטית, אלא יקר עד כדי חוסר תוחלת.
למה נהוג לחכות לכמה אישורים
רשומה שנכללה בבלוק אחרון מקבלת אישור אחד. כל בלוק שנוסף מעליה מוסיף אישור נוסף ומעמיק אותה בשרשרת. הנוהג המקובל לסכומים משמעותיים הוא להמתין לשישה אישורים, כלומר כשעה בקירוב, משום שאז כמות העבודה שיידרש לבטל אותה כבר גדולה מאוד. כלל מחמיר יותר חל על תגמול הכורים עצמו: הוא ניתן להעברה רק לאחר 100 בלוקים.
צמתים, עותקים מלאים והסכמה מבוזרת
שרשרת בלוקים אינה מאוחסנת בשרת מרכזי. היא מוחזקת במקביל על ידי מחשבים רבים ברחבי העולם, שנקראים צמתים (Nodes) ומחוברים זה לזה ברשת עמית-לעמית. כשצומת מקבל בלוק חדש, הוא אינו סומך על השולח אלא בודק אותו בעצמו: שהגיבוב אכן קטן מהיעד, שהחתימות תקינות, שהסכומים אינם עולים על מה שקיים, ששורש מרקל תואם לרשימת ההעברות, ושחותמת הזמן בטווח המותר. בלוק שנכשל באחת הבדיקות נדחה ואינו מועבר הלאה – גם אם הרוב המספרי שידר אותו.
| סוג צומת | מה הוא מחזיק | מה הוא מאמת בעצמו |
|---|---|---|
| צומת מלא ארכיוני | את כל השרשרת מבלוק הבראשית ואילך | כל כלל, לכל בלוק ולכל העברה, מהיום הראשון |
| צומת מלא מגוזם (Pruned) | מאגר היתרות הפתוחות והבלוקים האחרונים בלבד | אותם כללים בדיוק; בלוקים ישנים נמחקים רק אחרי שנבדקו |
| לקוח קל (SPV) | כותרות בלוקים בלבד – 80 בתים לכל בלוק | שיוך רשומה לבלוק באמצעות ענף מרקל, ללא בדיקת כללים מלאה |
ההסכמה המבוזרת נובעת מכך שכל הצמתים מפעילים את אותה מערכת כללים על אותם נתונים ומגיעים לאותה מסקנה, בלי לתאם ביניהם ובלי גורם מכריע. כשמתגלה יותר מהסתעפות אחת – למשל כששני כורים מוצאים בלוק תקין כמעט באותו רגע – כל צומת מאמץ זמנית את מה שהגיע אליו ראשון, אך הכלל המכריע הוא כמות העבודה המצטברת: הענף שנצבר בו סך המאמץ הגדול ביותר הוא הקובע. הענף השני ננטש, והרשומות שהיו בו וטרם נכללו במקום אחר חוזרות להמתנה. הסתעפויות קצרות כאלה הן חלק שגרתי מהפעולה התקינה של הרשת.
מה בלוקצ'יין לא עושה: מיתוסים נפוצים
- אינו מצפין את הנתונים. ההעברות שמורות בגלוי וכל אחד יכול לקרוא אותן. הקריפטוגרפיה משמשת לחתימה ולזיהוי, לא להסתרה.
- אינו אנונימי. הזיהוי נעשה באמצעות כתובת ביטקוין, שהיא כינוי ולא שם. כל התנועה הקשורה לכתובת גלויה לצמיתות וניתנת לניתוח.
- אינו מבטל עלויות. שיבוץ רשומה בבלוק מחייב תשלום לעמלות ביטקוין, שנקבע בשוק פתוח לפי הביקוש למקום בבלוק.
- אינו מוודא אמת חיצונית. השרשרת מבטיחה שרשומה נרשמה ולא שונתה. היא אינה יודעת אם ההצהרה שמאחוריה נכונה במציאות, ואינה יכולה לבדוק אירוע שהתרחש מחוץ לרשת.
- אינו מבטל טעויות אנוש. העברה ליעד שגוי או אובדן מפתח פרטי אינם ניתנים לביטול, משום שאין גורם מרכזי בעל סמכות להפוך רשומה שכבר אושרה.
- אינו זהה בכל הרשתות. "בלוקצ'יין" הוא שם למבנה נתונים, לא לתקן אחד. רשתות שונות משתמשות בפונקציות גיבוב אחרות, בכללי הסכמה אחרים ובמגבלות אחרות.
שאלות נפוצות
מה ההבדל המהותי בין בלוקצ'יין למסד נתונים רגיל?
מסד נתונים רגיל מאפשר לבעל ההרשאות לשנות שורה קיימת במקומה, ובדרך כלל יש גורם אחד שמחליט מה נכון. בלוקצ'יין מוסיף נתונים בקצה בלבד, מקשר כל בלוק לקודמו באמצעות גיבוב, ומאפשר לכל משתתף לבדוק את ההיסטוריה במלואה בעצמו. העלות היא ביצועים ונפח: אותו מידע נשמר ונבדק פעמים רבות במקביל.
האם אפשר לשנות או למחוק רשומה שכבר נכנסה לשרשרת?
לא בדרך רגילה. כל שינוי בתוכן בלוק משנה את הגיבוב שלו, ולכן מנתק את הבלוקים שאחריו. מי שירצה שהגרסה המתוקנת תתקבל יידרש לחזור על העבודה החישובית עבור הבלוק ההוא ועבור כל הבלוקים שנוספו מעליו, מהר יותר משאר הרשת יחד. עם כל בלוק נוסף העלות גדלה, ולכן רשומות עמוקות נחשבות סופיות למעשה.
מה קורה כששני בלוקים תקינים נוצרים כמעט באותו רגע?
נוצרת הסתעפות זמנית ושני חלקי הרשת עובדים על ענפים שונים. ברגע שאחד הענפים מקבל בלוק נוסף, כמות העבודה המצטברת שלו גדולה יותר וכל הצמתים עוברים אליו. הבלוק שננטש נקרא בלוק מיותם, והרשומות שהיו בו וטרם נכללו בענף שנבחר חוזרות לתור ההמתנה ונכנסות לבלוק מאוחר יותר.
האם צריך עותק מלא של השרשרת כדי לאמת רשומה?
לאימות מלא ועצמאי של כל הכללים נדרש צומת מלא. לבדיקה מצומצמת של שאלה אחת – האם רשומה מסוימת נכללה בבלוק – די בכותרות הבלוקים ובענף מרקל קצר, וזו שיטת ה-SPV. השרשרת המלאה תופסת מאות ג'יגה-בתים וממשיכה לגדול, ואילו צומת מגוזם יכול להסתפק בשטח קטן בהרבה משום שהוא מוחק בלוקים ישנים אחרי שבדק אותם.
החומר בדף זה הוא הסברי-טכני בלבד, נועד לתאר את אופן הפעולה של המנגנון, ואינו המלצה לפעולה מכל סוג.
להרחבה בנושאים קרובים: מדריך ביטקוין המלא · כריית ביטקוין · כתובת ביטקוין · עמלות ביטקוין