המדריך השלם לפרוטוקול ביטקוין 3

//המדריך השלם לפרוטוקול ביטקוין 3

המדריך השלם לפרוטוקול ביטקוין (חלק 1, חלק 2 וחלק 3) מתאר לעומק את מערכת המטבע, ממש עד המידע הגולמי באופן מובן ומעניין. תוכן זה מכוון לקוראים בעלי ידע בתחום המטבעות הדיגיטליים ו/או קריפטוגרפיה ו/או תכנות, במידה ואתם לא בטוחים הקליקו כאן לכל המאמרים שכדאי לדעת קודם.

תהליך אשרור העסקאות ברשת ביטקוין ובמטבעות דומים המבוססים על הקוד של ביטקוין מכונה 'כרייה'. תהליך כריית ביטקוין נעשה בכדי:

  1. לעבד עסקאות: דרך בדיקת תקינות מכלול הרכיבים שיחדיו מרכיבים את פרוטוקול המטבע כולל עדכון שרשרת הבלוקים בסיום תהליך מוצלח של הנ"ל וכפועל יוצא מכך את הארנקים של משתמשי המטבע.
  2. להנפיק מטבעות חדשים: הכנסת מטבעות חדשים לשימוש באופן דמוקרטי ובקצב ידוע מראש. כל אחד יכול לעסוק בכרייה וגודל התמורה (למעט תוספת העמלות במידה וצורפו) ידוע מראש.
  3. אבטחה: לוודא שרשת המטבע מתנהלת כפי המתוכנן ע"י אכיפת הפרוטוקולים, שמירה על סדר כרונולוגי וקישור (אשרור חוזר) עסקאות (בלוקים)[1].

תהליך האישור, תהליך העיבוד המתחיל בתמצות של עסקאות (SHA-256). העסקאות עוברות תמצות שוב ושוב עד ליצירת פלט אחד ויחיד המכונה בלוק, כל בלוק מורכב (מכיל) כמות משתנה של עסקאות שמשקלם הכולל הוא לא יותר מ- 1 מגה בייט של מידע, זו מגבלה מובנית בפרוטוקול P2P בו נעשה שימוש בקוד המטבע הדיגיטלי כגון ביטקוין. יחד עם תמצות העסקאות וכבר בתחילת תהליך התמצות מצורפים מטבעות חדשים (התמצות שלהם נעשה עם העסקה הראשונה המרכיבה את הבלוק) בעזרת עסקה ללא אף קלט (Input) הנקראת 'Coinbase' או בתרגום חופשי עסקת בסיס מטבעות. התמצות, יצירת הבלוק נעשה ע"י הכורים, הכורה שיצר את הבלוק (בעזרת עסקאות המחכות לאישור) מכריז על כך לכלל רשת המטבע ומיד מתחיל תהליך פיצוח (הפיכת המידע המתומצת והמוצפן בבלוק למובן וקריא) עליו עובדים במקביל כל הכורים ברשת המטבע, הכורה שהצליח לפצח ראשון את הבלוק (הוכחת העבודה) זוכה באותם המטבעות שצורפו לבלוק יחד עם עמלות במידה וצורפו ע"י המשתמשים (אין חובה לשלם עמלה). כמות המטבעות החדשים המונפקים בכול בלוק משתנה בכל 4 שנים ברשת ביטקוין. הבלוק הראשון (מכונה גם בלוק בראשית) פורסם ופוצח ב 03/01/2009, בלוק זה הכיל 50 מטבעות חדשים. גמול המטבעות לפיצוח הבלוק קבוע בקוד ע"י יוצרי המטבע ואינו ניתן לשינוי:

  • 2009 גמול המטבעות לכל בלוק עמד על 50 מטבעות חדשים + עמלות של העסקאות המרכיבות את הבלוק.
  • 2013 גמול המטבעות לכל בלוק ירד ל 25 מטבעות חדשים + עמלות של העסקאות המרכיבות את הבלוק.
  • 2017 גמול המטבעות לכל בלוק ירד ל 12.5 מטבעות[2] חדשים + עמלות של העסקאות שירכיבו את הבלוק.
  • 2021 וכך הלאה…כל ארבע שנים.

הידעת?

digitalmoney.co.il

תהליך הצמצום ברשת ביטקוין

משמעו שבשנת 2140 לא יתווספו יותר מטבעות ולא יודפסו יותר מ 21 מיליון מטבעות ביטקוין. התמריץ לפיצוח בלוקים יהיה עמלות שיצורפו לעסקאות ע"י המשתמשים, עסקה ללא עמלה לא תעבור עיבוד (אלא אם כן הכורה יעשה זאת בהתנדבות).

Proof of Work

תהליך הוכחת העבודה (Proof of Work) הוא בפועל תחרות לאשרור עסקאות, מי שרוצה להשתתף בתחרות ובכך באפשרות לזכות במטבעות החדשים ובעמלות (אם צורפו) חייב להשקיע בכוח חישוב אותו הוא מביא לרשת המטבע, הסיכוי לפצח הוא ביחס לכוח החישוב של הרשת כולה, לכן היכולת של גוף אחד להטות, לזייף או לשלוט ברשת המטבע היא כמעט אפסית (אך תאורטית קיימת ומכונה התקפת 51%), כמובן שכמעט זה לא מספיק בכל הקשור למיזם מסוג זה ולכן ישנו צורך בפרוטוקולים נוספים בכדי למנוע  אפשרות להתקפות מעין אלו אפילו אם הם לא משתלמות או "הגיוניות".

סדר

באופן אידיאלי נרצה שרשת המטבע תהיה תמיד בהסכמה מלאה על הסדר שהעסקאות נעשו ולעבד בהתאם, שכן ללא הסכמה מעין זו לא יהיה אפשרי לדעת בכל רגע נתון היכן המטבעות ו/או יתרה בכל ארנק[5]). בכדי להשיג את הסדר הנכון רשת המטבע מחייבת כל בלוק חדש להיות מקושר לזה שלפניו שעבר עיבוד מלא, הקישור הוא למעשה תמצות הבלוק הקודם-הבלוק האחרון שעבר אישור מלא ולכן שרשרת הבלוקים היא ביטוי לינארי לכל העסקאות שנעשו, אחד אחרי השני כאשר כל בלוק חדש חייב להצביע לבלוק שלפניו.

תהליך כניסה לשרשרת בלוקים

יחד עם זאת יכול להיות מצב שיותר מבלוק אחד יכנס לתור האשרור,  מתרחשות זו יכולה להיות כאשר שני כורים או יותר סיימו ליצור בלוק (לאשרר שאשכול העסקאות שנכנסו לאותו הבלוק חוקיות) והם משדרים על כך במקביל לרשת כולה, ואז ללא פיקוח וניטור מתאים יכול להיווצר מצב שרשרת הבלוקים תעודכן לא באופן כרונולוגי ומוסכם ע"י כולם.

פיצול בתהליך כניסה לשרשרת בלוקים

במידה והמצב המתואר מעל היה מתרחש לא היה ניתן לקיים מיזם כגון ביטקוין מכיוון שאין דרך לדעת איזה בלוק הוא הבא בתור ולכן בלתי אפשרי לשמור על רצף נכון וסדר כרונולוגי מוסכם. בנקודה זו נכנס רכיב נוסף הפותר מצב מעין זה, עיקרון רכיב זה הוא: אם ישנה בעיה לקבוע סדר כניסה לשרשרת הבלוקים (כלומר אם ישנו פיצול) הרשת תעקוב אחר כולם אבל הכורים יעבדו/ימשיכו לעבוד על האפשרות הארוכה ביותר מכל האפשרויות המחכות לאישור.

המשך עיבוד בתהליך כניסה לשרשרת בלוקים לפי האפשרות הארוכה

בכדי להבהיר את הנקודה הנ"ל נניח שישנו פיצול בתור הבלוקים לאשרור, כאמור זה קורה כאשר חלק מן הכורים מקבלים את בלוק Q1 וחלק מקבלים את בלוק Q2 כפי שמופיע בסכמה מעל. הכורים ימשיכו את עבודתם בהתאם לבלוק שהם קבלו כאילו אין פיצול. לצורך הדוגמה נאמר שבלוק Q2 פוצח לפני בלוק Q1, מיד רשת המטבע מתעדכנת ומיד הבלוק הבא מגיע בתור לעיבוד אך מכיוון שבלוק Q2 פוצח קודם הבלוק הבא יקושר אליו ומכאן שאין טעם להמשיך לעבוד על בלוק Q1 וכל הרשת מתיישרת וממשיכה לעבוד על הבלוק הבא והפיצול שהיה (Q1 ו Q2 בתור לאישור) איננו עוד, מכאן שתמיד כולם יעבדו על האפשרות הארוכה ביותר בכדי לפתור מקרים מעין אלו ומכאן היכולת להגיע להסכמה כוללת ולקונצנזוס בנוגע לבלוקים ולסדר עבודה עליהם. ברשת ביטקוין עסקה תיחשב מאושרת באופן סופי רק אם:

  1. היא חלק מבלוק בפיצול הארוך ביותר מהאפשרויות הקיימות.
  2. לפחות חמישה בלוקים אושרו לאחר בחירת האפשרות הארוכה ביותר.[6] או במילים אחרות העסקה עברה שישה אשרורים.

עד כה ראינו את הדרך בעזרתה רשת המטבע יודעת לשמור על סדר כרונולוגי לעסקאות ואיך כמות בלתי מוגבלת של משתמשים יכולים להגיע להסכמה בלי להכיר או לבטוח אחד בשני. הכול נעשה בעזרת פרוטוקולים הבאים לידי ביטוי כשיש צורך בכך.

נחזור לבעיה העיקרית אותה ביטקוין פתר, אותה הבעיה שמנעה מכל הניסיונות הקודמים להצליח והיא הונאת "בזבוז כפול". אומנם עד כה ראינו איך ניתן למנוע זאת או יותר נכון איך כמעט ואפשר למנוע זאת…שכן ישנה עוד אפשרות לעקוף את המגבלות שהכרנו עד כה, בכדי להראות איך נחזור לדוגמה שלנו ונזכיר שישנו משתמש בשם סמי שמנסה בדרכים שונות לבצע הונאות ברשת ביטקוין, הוא מנסה את ההונאה השכיחה ביותר והיא "בזבוז כפול" והפעם סמי מנסה לבצע אותה (שוב…) ע"י יצירת 2 העברות שונות לאותו הסכום:

  • העברה מספר: 7yhGF087g מסמי לאבי.
  • העברה מספר: 6sfWN0p09 מסמי לצחי.

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

  • העברה מספר: 7yhGF087g מסמי לאבי.
  • העברה מספר: 6sfWN0p09 מסמי לסמי.

סמי מנסה לשלוח לעצמו, אם זה יצליח הוא ישלח את אותם מטבעות לאבי ושוב לעצמו וחוזר חלילה,  קודם סמי שולח לאבי ומחכה שהעסקה תוכנס לבלוק, בלוק יאושר לתהליך פיתוח וימתין לתורו כה הכול כשר אבל אז מיד לאחר קבלת האישור שהעסקה הוכנסה לבלוק המחכה לפיצוח סמי מנסה לשלוח לעצמו (כתובת ארנק אחרת שבבעלותו) ולגרום לפיצול ע"י הוספת בלוק עם העסקה החדשה (שליחה לעצמו). בכך הוא מנסה שהבלוק החדש שלו יכנס לפני האישור של העסקה הקודמת והרשת תעבור לאפשרות הפיצול החדשה שהוא מנסה ליצור, בכדי להצליח בכך הוא צריך להתחרות ברשת כולה מכיוון שהבלוק הקודם אושר באופן חוקי. המערכת בנויה כך שהתוקף (ואין זה משנה כמה כוח חישוב יש לו) חייב להתמודד עם כל רשת המטבע בכדי לבצע הונאה של בזבוז כפול או כל הונאה דומה.

הערות

[1] אישורים חוזרים: מכיוון שכל עסקה חדשה חייבת להיות מקושרת לעסקה קודמת בכדי לעבור אישור (שרשרת עסקאות או שרשרת בלוקים, כוונה זהה) המשמעות לכך היא שככל שעובר זמן העסקאות שנעשו הופכות יותר ויותר בטוחות מכיוון שהם נבדקות שוב ושוב וגם מכיוון שנעשה אליהם ומהם עוד ועוד קישורים (שרשרת) ולכן אין שום אפשרות לעשות שינויים לאחור ואין שום אפשרות להחליף בלוק או עסקה בשרשרת.

[2] גמול מטבעות חדשים לבלוק: מכיוון שהוחלט ע"י יוצרי ביטקוין שכל בלוק חדש יכיל מספר קבוע של מטבעות חדשים ומספר זה יופחת בחצי בכל 4 שנים ומכיוון שהבלוק הראשון פוצח בינואר 2009 בחישוב פשוט ניתן לדעת מתי תהיה ההפחתה, 2013 מספר המטבעות החדשים לבלוק ירד ל 25 ובשנת 2017 כמות המטבעות לבלוק מתוכננת לרדת ל 12.5 אבל מכיוון שהנ"ל מחושב ע"פ ממוצע של 10 דקות לפיצוח בלוק אין לדעת בדיוק מתי זה יקרה (סוף 2016, 2017 או תחילת 2018)

[3] 10 דקות ממוצע: ההחלטה על פרק הזמן הזה נעשתה ע"י יוצרי מטבע ביטקוין ולאחר שחרור הקוד ותחילת עבודתו אין אפשרות לשנות זאת, במטבעות אחרים זה שונה, כאמור זו החלטה של יוצרי המטבע. חשוב לזכור שמדובר בממוצע בלבד והוא נשמר באופן אוטומטי ע"י המערכת, קושי הפיצוח מתעדכן בהתאם לכוח החישוב ברשת המטבע בכדי לשמור על הממוצע הנ"ל.

[4]21 מיליון מטבעות: ההחלטה על הכמות הנ"ל נעשתה ע"י יוצרי מטבע ביטקוין בכל מטבע הכמות היא שונה. מכיוון שאנו יודעים את הכמות הסופית, את הזמן הממוצע לפיצוח בלוק ואת הכמות המטבעות החדשים בכל בלוק ניתן לחשב מתי (לערך) יודפסו 21 מיליון מטבעות ביטקוין, איפה שהוא בשנת 2140:

התחלה בינואר 2009 לפי 50 מטבעות לבלוק כאשר הממוצע לפיצוח בלוק הוא 10 דקות ובכל 4 שנים כמות המטבעות בכל בלוק תופחת בחצי וסה"כ המטבעות שיודפסו 21 מיליון = הנ"ל יסתיים ב 2140.

[5] בפועל אין רישום של יתרה בכל ארנק, בכדי לחשב את היתרה המקושרת לכתובת (המקושרת לארנק) יש לבדוק את הקלט (Inputs) המצביע לאותה הכתובת מינוס הפלט (Outputs) שיצא מאותה הכתובת.

[6] כמות האשרורים. מומלץ לחכות ללפחות 6 אישורים בכדי להחשיב עסקה (במיוחד בסכומים גדולים) כחוקית וכשרה מכיוון שככל שעסקאות (בלוקים) חדשות יותר וקרובות לסוף שרשרת הבלוקים הם בסיכון גבוה יותר. 6 אישורים לפחות מכיוון שקרה שהתאגדות כורים (Pool) בשם BTC Guild פיצחו 6 בלוקים ברצף (בגלל כוח החישוב האדיר שיש להתאגדות זו) למרות שלא נעשה שום שימוש לרעה עצם המקרה העלה את המודעות לעניין.

2017-12-14T09:50:51+00:00

Leave A Comment

This Is A Custom Widget

This Sliding Bar can be switched on or off in theme options, and can take any widget you throw at it or even fill it with your custom HTML Code. Its perfect for grabbing the attention of your viewers. Choose between 1, 2, 3 or 4 columns, set the background color, widget divider color, activate transparency, a top border or fully disable it on desktop and mobile.

This Is A Custom Widget

This Sliding Bar can be switched on or off in theme options, and can take any widget you throw at it or even fill it with your custom HTML Code. Its perfect for grabbing the attention of your viewers. Choose between 1, 2, 3 or 4 columns, set the background color, widget divider color, activate transparency, a top border or fully disable it on desktop and mobile.