כתובת ביטקוין נראית כמו קוד מערכת: רצף חסר משמעות שהאפליקציה פולטת ואתה מעתיק בפחד לטעות. זה ההפך מזה. הכתובת היא סוף של מתכון קצר, ציבורי וניתן לאימות, וכל שלב בו קיים מסיבה שניתן להסביר במשפט אחד.
נקודת ההתחלה היא המפתח הציבורי מהשיעור הקודם. הוא נכנס כולו לתוך SHA-256, והתוצאה של המעבר הראשון נכנסת לפונקציית hash שנייה, ה-RIPEMD-160 — שפורסמה ב-1996 על ידי הנס דוברטין ושני עמיתים ממעבדת COSIC, בלוון, בלגיה. היא מחזירה 160 ביטים, או עשרים בתים. לתוצאה של הכפולה הזו יש שם: hash160.
שתי פונקציות ממשפחות שונות, ברצף, פותרות שתי בעיות בו זמנית. הן מקצרות את הכתובת, כי עשרים בתים תופסים הרבה פחות מהמפתח הציבורי. והן מסתירות את המפתח הציבורי: מה שאתה מפרסם כשאתה מבקש תשלום אינו הוא, אלא התקציר שלו. המפתח מופיע רק ביום שבו אתה מוציא את המטבעות האלה.

ל-hash160 מוסיפים בית אחד מקדימה, בית הגרסה. אפס לכתובות רגילות, חמש לאלה שמתחילות ב-3. זה הבית שגורם לכל כתובת מסוג מסוים להתחיל תמיד באותו תו — זו לא קישוט, זהו הקידומת שאומרת לארנק איזה מתכון הוא צריך להחיל בצד השני.
לאחר מכן מגיע ה-checksum. לוקחים את הגרסה וה-hash160, מחילים SHA-256 פעמיים, וארבעת הבתים הראשונים של התוצאה מודבקים בסוף. סך הכל עשרים וחמישה בתים: אחד של גרסה, עשרים של hash וארבעה של אימות.
השלב האחרון הוא הכתיבה. המספר של עשרים וחמישה בתים מומר לבסיס 58, אלפבית שסאטושי הרכיב על ידי הסרת ארבע אותיות מהסט של שישים ושניים: האפס, ה-O הגדול, ה-i הגדול וה-L הקטן. הסיבה כתובה בקוד המקור המקורי, כהערה: אלו בדיוק התווים שמתבלבלים כאשר מישהו קורא מהמסך או מעתיק ביד.
וכאן ה-checksum עובד. כאשר מחליפים תו אחד בכתובת, ארבעת הבתים שבסוף מפסיקים להתאים למה שהחשבון מייצר, והארנק מסרב לפני שהוא מבצע כל עסקה. הסיכוי שכתובת שהוקלדה לא נכון תעבור בכל זאת הוא בערך אחד לארבעה מיליארד.

הכתובות שמתחילות ב-bc1 עוקבות אחרי כתיבה אחרת, ה-bech32, שהוצעה ב-2017 על ידי המפתח הבלגי פיטר ווילי. כולן באותיות קטנות, מה שמאפשר להן להתאים לקודי QR קטנים יותר, וה-checksum שלהן הוא ממשפחה חזקה יותר: בנוסף לזיהוי הטעות, הוא יכול להצביע על המיקום שבו הטעות נמצאת. ארנק מודרני לא רק אומר שהכתובת שגויה — הוא מדגיש את התו.

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