הבעיה ש-proof of work פותר
פנקס דיגיטלי קל להעתקה וקל לעריכה. אם כל אחד יכול היה להוסיף עסקאות בחופשיות, הוא היה יכול גם להוציא את אותם מטבעות פעמיים — בעיית ה"הוצאה כפולה" הקלאסית. במערכת ללא מפעיל מרכזי, דרוש דרך שבה משתתפים עצמאיים יסכימו אילו עסקאות התרחשו ובאיזה סדר, גם כאשר חלקם אינם ישרים או מנותקים מהרשת.
ניסיונות מוקדמים למזומן דיגיטלי הסתמכו על גורם מהימן שינהל את הפנקסים. העיצוב של ביטקוין, המתואר במסמך הלבן (whitepaper) של 2008, החליף את אותו גורם מהימן בתחרות ציבורית: משתתפים מוציאים משאבים אמיתיים כדי לצרף בלוקים, והרשת עוקבת אחר כלל משותף לבחירת השרשרת המנצחת. הקונצנזוס צומח מתוך עלות ומתמטיקה ולא מתוך סמכות.
מה הכורים באמת מחשבים
כל בלוק מועמד מכיל אצווה של עסקאות, הפניה לבלוק הקודם, ומספר קטן שניתן לשינוי הנקרא nonce. הכורים מריצים את הנתונים האלה דרך פונקציית הגיבוב SHA-256, שהופכת כל קלט לפלט באורך קבוע ובעל מראה בלתי צפוי. המטרה היא למצוא קלט שמייצר האש מתחת לערך יעד מסוים — בפועל, האש המתחיל במספר מסוים של אפסים.
מכיוון שפלטי האש אינם ניתנים לחיזוי או להנדסה לאחור, הדרך היחידה למצוא האש תקף היא ניסוי וטעייה: לשנות את ה-nonce, לבצע האש שוב, לחזור, מיליארדי פעמים בשנייה. חיפוש הכוח הגס הזה הוא ה"עבודה". קשה בכוונה לבצע אותו אך פשוט מאוד לכל אחד אחר לבדוק — חישוב האש יחיד מאשר שהתשובה תקפה. אי-סימטריה זו (קשה לייצר, קל לאמת) היא לב ליבו של proof of work.
קושי והקצב של בערך עשר דקות
ביטקוין שואף לבלוק חדש בממוצע בערך כל עשר דקות. ככל שיותר כוח מחשוב (קצב האש) מצטרף לרשת, הבלוקים היו נוטים להגיע מהר יותר, ולכן הפרוטוקול מתאים מעת לעת את הקושי — כמה נמוך צריך להיות האש היעד — כדי לשמור על קצב ממוצע יציב. בערך כל שבועיים (2,016 בלוקים), כל צומת מחשב מחדש את הקושי מזמני הבלוקים האחרונים.
התאמה עצמית זו היא הסיבה לכך שיותר כוח כרייה אינו אומר ייצור בלוקים מהיר יותר לאורך זמן; זה בעיקר אומר שמושקעת יותר עבודה כדי לאבטח את אותו זרם יציב של בלוקים. התזמון המדויק של כל בלוק בודד הוא אקראי, ולכן עשר דקות הן ממוצע לטווח הארוך, לא לוח זמנים.
מבלוקים לקונצנזוס: השרשרת התקפה הארוכה ביותר
מציאת בלוק תקף היא רק חצי מהסיפור. הצמתים עדיין צריכים להסכים על היסטוריה אחת כאשר שני כורים מוצאים בלוקים כמעט באותו רגע. הכלל הוא שהצמתים עוקבים אחר השרשרת התקפה בעלת סך העבודה (proof of work) המצטברת הרבה ביותר — מסוכם לעיתים קרובות כ"שרשרת הארוכה ביותר", אף שהיא למעשה הכבדה ביותר מבחינת העבודה המצטברת.
כל צומת מלא מאמת באופן עצמאי כל בלוק מול הכללים של ביטקוין: חתימות תקפות, ללא הוצאה כפולה, תגמול בלוק נכון, והאש העומד ביעד. בלוקים שמפרים את הכללים פשוט נדחים, ללא קשר לכמה עבודה הושקעה בהם. אי-הסכמות זמניות (פיצולים) נפתרות כאשר הבלוק הבא מרחיב ענף אחד, והכורים הישרים מתכנסים אליו כי בנייה על השרשרת המקובלת היא המקום שבו נמצא התגמול.
מדוע זה מאבטח את הרשת
כדי לשכתב עסקה מהעבר, תוקף היה צריך לבצע מחדש את ה-proof of work עבור אותו בלוק וכל בלוק שאחריו, ואז להקדים את כל הרשת הישרה כדי לבנות שרשרת ארוכה יותר. ככל שעסקה קבורה עמוק יותר, כך יש לבצע מחדש יותר עבודה — ולכן סוחרים ממתינים לעיתים קרובות למספר אישורים. העלות מתרחבת עם סך קצב ההאש של הרשת.
זו האינטואיציה מאחורי "מתקפת 51%": שליטה ברוב כוח ההאש עשויה לאפשר למישהו לשנות סדר או לצנזר עסקאות אחרונות. אך יקר לרכוש ולהפעיל את החומרה הזו, היא אינה יכולה לזייף חתימות או לגנוב מטבעות ישירות, ומתקפה גלויה עלולה לערער את ערך אותו נכס עצמו שהתוקף מוציא משאבים כדי לכרות. התמריצים מיושרים כך שהשתתפות ישרה בדרך כלל רווחית יותר מתקיפה. האבטחה כאן היא כלכלית והסתברותית, לא ערובה מוחלטת.
פשרות והדיון הרחב יותר
החוזק של proof of work — עלות אמיתית וחיצונית — הוא גם המקור לביקורת הנפוצה ביותר עליו: צריכת אנרגיה. ההערכות לגבי שימוש החשמל של ביטקוין משתנות מאוד ומשתנות עם הזמן, והתמונה מסובכת בשל החלק הגובר של אנרגיה תקועה, עודפת או מתחדשת שחלק מהכורים משתמשים בה. אנשים סבירים חלוקים בדעתם, והפרטים משתנים; כדאי לבדוק מקורות עדכניים ואמינים במקום מספר בודד כלשהו.
עיצובי קונצנזוס חלופיים כמו proof of stake מאבטחים רשתות אחרות בהרבה פחות אנרגיה על ידי שימוש בבטוחה כלכלית במקום חישוב. הם כרוכים בהנחות ובפשרות שונות, והשוואה הוגנת ביניהם היא נושא בפני עצמו. עבור ביטקוין ספציפית, proof of work נותר המנגנון, והאבטחה שלו ולוח ההנפקה שלו קשורים אליו.