כריית ביטקוין היא התהליך שבו חומרה ייעודית מקבצת עסקאות ממתינות לתוך בלוק אחד, ומחפשת בכוח גס ערך מספרי שיגרום לגיבוב של כותרת הבלוק ליפול מתחת לסף מוגדר. הכורה הראשון שמוצא ערך כזה משדר את הבלוק לרשת, ושאר הצמתים בודקים אותו מול כללי הפרוטוקול לפני שהם מצרפים אותו לשרשרת. אישור העסקאות אינו נתון בידי גורם יחיד: הכורים קובעים סדר, והצמתים קובעים תקפות.
מה עושה כורה בפועל
המילה "כרייה" מטעה מעט. הכורה אינו מחלץ דבר מהאדמה ואינו פותר חידה מתמטית שימושית. הוא מבצע פעולה חישובית פשוטה מאוד, שוב ושוב, במיליארדי חזרות בשנייה, עד שהתוצאה עומדת בתנאי מספרי שהפרוטוקול קבע. כל הניסיונות שנכשלו נזרקים לפח מיד. אין צבירה של התקדמות, אין זיכרון בין ניסיון לניסיון, ואין דרך לקצר את הדרך.
מהממפול אל הבלוק המועמד
עסקה שנשלחת לרשת מגיעה תחילה לצמתים, עוברת בדיקת תקפות בסיסית, ונשמרת בזיכרון זמני שנקרא ממפול. הכורה בוחר מתוך הממפול את העסקאות שייכנסו לבלוק שלו. הבחירה מוגבלת בגודל: בלוק אינו יכול לחרוג ממשקל של 4,000,000 יחידות משקל, שהן כמיליון בייטים וירטואליים. מכיוון שמקום הבלוק מוגבל, הכורה ממיין את העסקאות לפי שיעור הדמים שהן מציעות לכל בייט וירטואלי, ולא לפי הסכום המוחלט שצורף להן. עסקה קטנה עם שיעור דמים גבוה תיכנס לפני עסקה גדולה עם שיעור נמוך. הנושא מפורט במאמר על עמלות ביטקוין.
העסקה הראשונה בכל בלוק היא מיוחדת ונקראת עסקת קוינבייס. אין לה מקור כספי קודם: היא יוצרת יש מאין את תגמול הבלוק, ומצרפת אליו את כל דמי העסקאות שנאספו. הפלט שלה נעול למשך 100 בלוקים ואינו ניתן להעברה לפני כן, כדי שפיצול זמני בשרשרת לא ייצור כסף שנעלם בדיעבד.
שמונים הבייטים של כותרת הבלוק
כל העסקאות בבלוק נדחסות לערך יחיד באמצעות עץ מרקל, ושורש העץ נכנס לכותרת הבלוק. הכותרת עצמה קטנה מאוד, ורק היא נכנסת לחישוב החוזר. אופן הקישור בין הכותרות לשרשרת אחת מוסבר בהרחבה במאמר על איך עובד בלוקצ'יין.
| שדה בכותרת | גודל בבייטים | תפקיד |
|---|---|---|
| גרסה | 4 | מסמן על אילו כללים הבלוק מאותת |
| גיבוב הבלוק הקודם | 32 | מקבע את מקומו בשרשרת ונועל את ההיסטוריה |
| שורש מרקל | 32 | מייצג את כל העסקאות בבלוק בערך אחד |
| חותמת זמן | 4 | שניות מאז 1970, כפופה לכללי סבירות |
| nBits | 4 | קידוד דחוס של היעד שיש לרדת מתחתיו |
| נונס | 4 | השדה החופשי שמשתנה בכל ניסיון |
| סך הכול | 80 | הקלט הקבוע של חישוב הגיבוב |
הוכחת עבודה: היעד, הגיבוב והנונס
פונקציית הגיבוב שבשימוש היא SHA-256. היא מקבלת קלט באורך כלשהו ומחזירה פלט קבוע של 256 ביט, כלומר 32 בייטים. הפלט נראה אקראי לחלוטין, שינוי של ביט אחד בקלט משנה אותו כולו, ואין דרך ידועה לחשב לאחור מהי הכותרת שתייצר פלט רצוי. בדיוק בגלל זה החיפוש מתבצע בניחוש: הכורה מציב ערך בשדה הנונס, מחשב, בודק אם התוצאה קטנה מהיעד, ואם לא, מציב ערך אחר.
למה SHA-256 מופעל פעמיים
בפועל הפרוטוקול מחשב SHA-256 על התוצאה של SHA-256, ולא פעם אחת בלבד. השכבה הכפולה נועדה לחסום משפחה של התקפות הרחבה על מבנה הפונקציה. מבחינת הכורה זו פשוט עבודה כפולה על אותם 80 בייטים, והיא נכללת בכל מדידה של קצב גיבוב.
כשמרחב הנונס נגמר
שדה הנונס תופס 4 בייטים, כלומר כ-4.29 מיליארד ערכים אפשריים בסך הכול. חומרה מודרנית סורקת את כל המרחב הזה בשבריר שנייה, ואז אין לה יותר מה לנסות באותה כותרת. הפתרון הוא לשנות שדה אחר ולהתחיל מחדש: הכורה מעדכן שדה נוסף בתוך עסקת הקוינבייס שנקרא אקסטרה-נונס, וכל שינוי כזה מייצר שורש מרקל חדש ולכן כותרת חדשה לגמרי. גם עדכון חותמת הזמן או שינוי אוסף העסקאות בבלוק פותחים מרחב חיפוש טרי.
סימולטור הוכחת עבודה לפי רמת קושי
בהוכחת עבודה מחפשים ערך אקראי (Nonce) שיביא את גיבוב הבלוק להתחיל במספר מוגדר של אפסים. ככל שנדרשים יותר אפסים, מספר הניסיונות הממוצע גדל פי 16 בכל שלב.
| אפסים מובילים נדרשים | ניסיונות ממוצעים | משמעות |
|---|---|---|
| 1 | 16 | נמצא כמעט מיד |
| 2 | 256 | חלקיק שנייה |
| 3 | 4,096 | מורגש בדפדפן |
| 4 | 65,536 | שניות ספורות |
| 5 | 1,048,576 | עשרות שניות |
ברשת האמיתית הקושי גבוה בסדרי גודל, והוא מכויל מחדש כל 2,016 בלוקים כדי לשמור על קצב ממוצע של בלוק כל עשר דקות.
הסימולציה רצה בדפדפן בלבד, בקנה מידה מוקטן מאוד, ואינה המלצה לפעולה.
הטבלה שלמעלה ממחישה נקודה מרכזית: כל תו נוסף שנדרש בתחילת הגיבוב מכפיל את מספר הניסיונות הממוצע פי 16, מפני שכל תו הקסדצימלי מייצג ארבעה ביטים. ברשת האמיתית היעד אינו מנוסח כמספר אפסים עגול אלא כמספר בינארי מדויק, אך העיקרון זהה: ככל שהסף נמוך יותר, כך נדרשים יותר ניסיונות בממוצע.
כיוון הקושי כל 2,016 בלוקים
הפרוטוקול מכוון לבלוק אחד כל עשר דקות בממוצע. כוח החישוב ברשת משתנה כל הזמן, ולכן סף קבוע היה מייצר בלוקים מהר מדי או לאט מדי. הפתרון הוא כיול אוטומטי: כל 2,016 בלוקים כל צומת מחשב מחדש את היעד. 2,016 בלוקים בקצב מתוכנן של עשר דקות שווים 20,160 דקות, כלומר בדיוק שבועיים. אם החלון האחרון נמשך פחות משבועיים, הקושי עולה; אם נמשך יותר, הקושי יורד.
שני פרטים טכניים ראויים לציון. הראשון: החישוב מודד את הפרש הזמן בין הבלוק הראשון לאחרון בחלון, ולכן הוא מכסה 2,015 הפרשים בין בלוקים ולא 2,016. זהו אי-דיוק היסטורי שנשמר בפרוטוקול מטעמי תאימות, והשפעתו זעירה. השני: השינוי חסום בגורם של פי ארבעה לכל כיוון, כך שגם נפילה חדה בכוח החישוב אינה יכולה להקפיא את הרשת בבת אחת.
חשוב להפריד בין שני מושגים שמתבלבלים תדיר. קצב הגיבוב הוא מדידה של כמה ניסיונות מבצעת הרשת בשנייה, והוא נאמד בדיעבד מקצב מציאת הבלוקים. הקושי הוא פרמטר של הפרוטוקול, קבוע לאורך כל החלון, ומשקף את קצב הגיבוב של העבר ולא של ההווה. לכן קיים תמיד פיגור בין שינוי אמיתי בכוח החישוב לבין התגובה של הרשת אליו.
תגמול הבלוק מול דמי העסקאות
הכורה שמצא בלוק תקף מקבל שני רכיבים שונים לגמרי באופיים. הרכיב הראשון הוא תגמול הבלוק, מטבעות חדשים שנוצרים בעסקת הקוינבייס. הרכיב השני הוא סכום דמי העסקאות שכל שולחי העסקאות בבלוק צירפו. הרכיב הראשון נקבע מראש בלוח זמנים קשיח; השני נקבע בכל רגע נתון על ידי הביקוש למקום בבלוק.
תגמול הבלוק נחצה כל 210,000 בלוקים, אירוע שנקרא האלבינג ומתרחש בערך כל ארבע שנים. מאחר שמטבע אחד מתחלק ל-100,000,000 סאטושי, החצייה מתבצעת בחשבון שלמים על יחידות הסאטושי. המנגנון הזה הוא שמגביל את הכמות הכוללת למעט פחות מ-21 מיליון מטבעות, והוא מוסבר לעומק במאמר על האלבינג ביטקוין.
| גובה הבלוק | תגמול הבלוק | מועד |
|---|---|---|
| 0 | 50 BTC | 2009 |
| 210,000 | 25 BTC | 2012 |
| 420,000 | 12.5 BTC | 2016 |
| 630,000 | 6.25 BTC | 2020 |
| 840,000 | 3.125 BTC | 2024 |
| 1,050,000 | 1.5625 BTC | לפי קצב הבלוקים, סביב 2028 |
מה קורה כשהתגמול יורד לאפס
מכיוון שהתגמול נחצה שוב ושוב בחשבון שלמים, אחרי 33 חציות הוא מגיע לאפס סאטושי. הדבר יקרה סביב גובה בלוק 6,930,000, ולפי קצב הבלוקים המתוכנן זה נופל בסביבות שנת 2140. מאותה נקודה עסקת הקוינבייס תכיל אך ורק את דמי העסקאות שנאספו בבלוק. המשמעות המבנית היא שהתקציב שמממן את אבטחת הרשת יעבור בהדרגה מהנפקה חדשה לשוק של מקום בבלוק, ומגבלת המשקל של הבלוק היא שיוצרת את התחרות על המקום הזה. זהו מעבר איטי מאוד ומדורג, ולא אירוע חד.
חומרה: ממעבד לכרטיס מסך ומשם ל-ASIC
בשנים הראשונות הכרייה רצה על מעבד רגיל של מחשב ביתי. מעבד כללי מיועד למשימות מגוונות, ולכן הוא בזבזני מאוד עבור פעולה אחת שחוזרת על עצמה. השלב הבא היה כרטיסי מסך, שמכילים אלפי ליבות חישוב פשוטות ומסוגלים להריץ את אותה פעולה במקביל. אחריהם הגיעו רכיבי FPGA, מעגלים שניתן לתכנת מחדש ברמת החומרה, ולבסוף ASIC: מעגל שנצרב מראש ויודע לעשות דבר אחד בלבד, SHA-256 כפול, ולא שום דבר אחר.
| דור חומרה | סדר גודל ליחידה | מאפיין מרכזי |
|---|---|---|
| מעבד כללי | מיליוני גיבובים בשנייה | גמיש לחלוטין, בזבזני לחלוטין |
| כרטיס מסך | עשרות עד מאות מיליוני גיבובים בשנייה | מקביליות גבוהה, צריכה גבוהה |
| FPGA | מיליארדי גיבובים בשנייה | ניתן לתכנות מחדש, יעיל יותר |
| ASIC דור ראשון | מיליארדי גיבובים בשנייה | ייעודי, ללא גמישות |
| ASIC עדכני | עשרות עד מאות טריליוני גיבובים בשנייה | יעילות אנרגטית נמוכה בסדרי גודל |
המדד שמבדיל בין הדורות אינו רק המהירות אלא היחס בין המהירות לחשמל, שנמדד בג'אול לכל טרה-גיבוב. ככל שהמספר קטן יותר, כך היחידה מבצעת יותר עבודה על אותה כמות אנרגיה. חומרה ייעודית משיגה יחס טוב בסדרי גודל מכל חומרה כללית, ולכן ברשת בוגרת כמעט כל קצב הגיבוב מגיע ממעגלים ייעודיים.
מאגרי כרייה וחלוקת התגמול
מציאת בלוק היא אירוע בינארי: או שנמצא, או שלא. ההסתברות של יחידה בודדת לפגוע ביעד ביום נתון פרופורציונלית לחלקה בקצב הגיבוב הכולל של הרשת, ולכן עבור חומרה קטנה מדובר במאורע נדיר מאוד עם פיזור עצום. מאגר כרייה מאחד כוח חישוב של משתתפים רבים תחת תבנית בלוק אחת, ומחלק את התמורה לפי תרומה מדודה.
מה נחשב "מנה"
המאגר אינו יכול למדוד ישירות כמה ניסיונות ביצע כל משתתף, ולכן הוא מציב יעד קל בהרבה מיעד הרשת. כל גיבוב שעומד ביעד הקל נשלח למאגר ונרשם כמנה. מנות אינן שוות דבר בפני עצמן, אך מספרן משקף באופן סטטיסטי מהימן את כמות העבודה שבוצעה. מדי פעם, במקרה, מנה כלשהי עומדת גם ביעד הקשה של הרשת עצמה, וזה הרגע שבו נמצא בלוק אמיתי. התקשורת בין החומרה למאגר מתנהלת בפרוטוקול Stratum; בגרסה השנייה שלו נוספה גם היכולת שהמשתתף יקבע בעצמו אילו עסקאות ייכנסו לתבנית שהוא עובד עליה, במקום להסתמך כולו על המאגר.
שיטות חלוקה נפוצות
- PPS – תשלום קבוע לכל מנה, ללא תלות בשאלה אם המאגר מצא בלוק. המאגר סופג את הפיזור וגובה עמלה גבוהה יותר בתמורה.
- PPLNS – התמורה מחולקת רק כשנמצא בלוק, לפי המנות שנרשמו בחלון האחרון. הפיזור נשאר אצל המשתתפים, והעמלה נמוכה יותר.
- FPPS – תשלום קבוע על רכיב התגמול, בתוספת מרכיב ממוצע שמשקף את דמי העסקאות.
ריכוז קצב גיבוב במספר קטן של מאגרים הוא נושא שנדון תדיר בהקשר של עמידות הרשת, מפני שמאגר גדול שולט בבחירת העסקאות של חלק ניכר מהבלוקים. מנגד, המשתתפים עצמם חופשיים לעבור בין מאגרים בכל רגע, וזהו האיזון המעשי שמגביל את הריכוזיות הזו.
צריכת חשמל והמדדים שמודדים אותה
צריכת החשמל של הרשת אינה נמדדת ישירות, אלא נאמדת. השיטה המקובלת מכפילה את קצב הגיבוב הכולל ביעילות ממוצעת משוערת של תמהיל החומרה הפעילה, ומקבלת הספק בוואט. הכפלה בזמן נותנת אנרגיה בקילוואט-שעה. שני נעלמים נכנסים לחישוב הזה: איזה חומרה בדיוק פעילה, ומה תוספת האנרגיה של הקירור והתשתית סביבה, שנמדדת במדד PUE.
מדד שמופיע לעיתים קרובות ומטעה מבחינה הנדסית הוא "אנרגיה לכל עסקה". החשבון פשוט: מחלקים את אנרגיית הרשת במספר העסקאות. הבעיה היא שהאנרגיה נצרכת ביחס לזמן ולקושי, ולא ביחס למספר העסקאות בבלוק. בלוק שמכיל אלף עסקאות ובלוק שמכיל עשרת אלפים עסקאות דורשים אותה עבודת גיבוב בדיוק. שינוי המכנה אינו משנה את המונה, ולכן היחס אינו מתאר יחס סיבתי.
מאפיין תפעולי נוסף הוא גמישות העומס. מתקן כרייה יכול להיכבות בתוך שניות ולחזור לפעולה באותה מהירות, בלי נזק לתהליך ייצור כלשהו. התכונה הזו הופכת אותו לצרכן שניתן לנתק בשעות שיא ברשת החשמל, ולכן חלק מהמתקנים פועלים בהסכמי היענות לביקוש. מגמות טכניות נוספות כוללות קירור בטבילה בנוזל דיאלקטרי במקום קירור אוויר, וניצול חוזר של החום הנפלט לחימום מבנים או תהליכים תעשייתיים.
שאלות נפוצות
כמה זמן לוקח לכרות בלוק אחד?
עשר דקות בממוצע, וזהו יעד מתוכנן ולא ערובה. כל ניסיון גיבוב בלתי תלוי בקודמיו, ולכן זמני הבלוקים מתפלגים באופן מעריכי: בלוקים בהפרש של דקה ובלוקים בהפרש של שעה שניהם תקינים לחלוטין. מנגנון כיוון הקושי שומר על הממוצע לאורך זמן, לא על כל בלוק בנפרד.
האם אפשר לכרות ביטקוין ממחשב ביתי?
התוכנה תרוץ, אך ההסתברות לתוצאה משמעותית זניחה. קצב הגיבוב של מעבד או כרטיס מסך ביתי נמוך בסדרי גודל רבים מקצב הגיבוב הכולל של הרשת, וההסתברות למצוא בלוק פרופורציונלית לחלק היחסי הזה. גם בהצטרפות למאגר, מספר המנות שחומרה כזו תרשום יהיה קטן מכדי לכסות את עלות החשמל שלה.
מי מאשר את העסקאות בפועל – הכורים או הצמתים?
שניהם, בתפקידים שונים. הכורים קובעים אילו עסקאות ייכנסו לבלוק ובאיזה סדר, ומספקים את העבודה שמקבעת את הסדר הזה. הצמתים בודקים כל בלוק מול כללי הפרוטוקול, ובלוק שמפר כלל נדחה גם אם נדרשה עבודה חישובית עצומה כדי לייצר אותו. שרשרת נבחרת לפי סך העבודה המצטברת שבה, ולכן ככל שנוספים בלוקים מעל עסקה, כך שינוי שלה בדיעבד נעשה יקר יותר.
מה ההבדל בין קצב גיבוב לבין קושי?
קצב גיבוב הוא כמות הניסיונות שהרשת מבצעת בשנייה, והוא נאמד סטטיסטית מקצב מציאת הבלוקים. קושי הוא פרמטר מספרי של הפרוטוקול, שנגזר מהיעד שבשדה nBits ונשאר קבוע לאורך חלון של 2,016 בלוקים. הקושי מגיב לשינויים בקצב הגיבוב בפיגור, ולעולם לא בזמן אמת.
החומר בעמוד זה הוא הסברי-טכני בלבד, נועד להבהיר כיצד פועל מנגנון הכרייה ברמת הפרוטוקול, ואינו המלצה לפעולה מכל סוג שהוא.
להרחבה בנושאים קרובים: מדריך ביטקוין המלא · איך עובד בלוקצ'יין · האלבינג ביטקוין · עמלות ביטקוין