תהליך ביצוע עסקת ביטקוין

//תהליך ביצוע עסקת ביטקוין

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

עסקת ביטקוין מורכבת מהוצאה של פלט (Output אחד או יותר) מתוך סה"כ הקלט (Inputs) / ה"יתרה" מאותו הארנק. לכל עסקה יהיה קלט (Input) ופלט (Output)

קלט ביטקוין מייצג עסקאות קודמות.

פלט ביטקוין מגדיר סכום עסקה עתידית.

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

ארנק הוא למעשה קוד ייחודי שיכול להכיל כתובת אחת או יותר, הארנק בדוגמה שלנו מכיל 3 כתובות שונות כאשר לכל כתובת הועברו מטבעות, להלן סכמה המתארת את היסטורית ההעברות שנעשו לכל אחת מן הכתובות המנוהלות ע"י ארנק זה (כאמור לשם הנוחות נקרא לו "ארנק 36"):

  • עסקה מספר 101 | שליחת 2.0 מטבעות | לכתובת 18 המנוהלת ע"י "ארנק 36"
  • עסקה מספר 102 | שליחת 2.5 מטבעות | לכתובת 18 המנוהלת ע"י "ארנק 36"
  • עסקה מספר 103 | שליחת 5.5 מטבעות | לכתובת 18 המנוהלת ע"י "ארנק 36"
  • עסקה מספר 104 | שליחת 1.5 מטבעות | לכתובת 24 המנוהלת ע"י "ארנק 36"
  • עסקה מספר 105 | שליחת 0.5 מטבעות | לכתובת 28 המנוהלת ע"י "ארנק 36"

לכל עסקה מהמתואר מעל פלט ייחודי. רק ציפי בעלת הארנק יכולה לדעת שכל העסקאות הללו מנוהלות ומשויכות לאותו המקור/בעלות ומנוהלות מאותו הארנק, כאמור ארנק "36". סה"כ כמות המטבעות:

  • כתובת 18 – סה"כ הועברו לכתובת זו 10 מטבעות בעסקאות מספר 101 עד 103 כולל
  • כתובת 24 – סה"כ הועברו לכתובת זו 1.5 מטבעות בעסקה מספר 104
  • כתובת 28 – סה"כ הועברו לכתובת זו 0.5 מטבעות בעסקה מספר 105

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

  • עסקה מספר 103 | 5.5 מטבעות | בכתובת 18
  • עסקה מספר 104 | 1.5 מטבעות | בכתובת 24
  • עסקה מספר 105 | 0.5 מטבעות | בכתובת 28

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

  • ארנק מספר 88 | בכתובת 50

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

  • עסקה מספר 106 | שליחת 5.5 מטבעות מעסקה מספר 103 | לכתובת 50 המנוהלת ע"י "ארנק 88"
  • עסקה מספר 106 | שליחת 1.5 מטבעות מעסקה מספר 104 | לכתובת 50 המנוהלת ע"י "ארנק 88"

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

  • מעבירה כל קלט המרכיב את סכום העסקה "מארנק 36" דרך אלגוריתם ECDSA בעזרת הצפנה מבוססת 'עקומים אליפטיים'  בכדי ליצור חותמת דיגיטלית לתמצית(Hash)  של עסקה מספר 106, החותמת נעשית בעזרת שימוש במפתח פרטי(Private Key)  המקושר לעסקאות מ"ארנק 36".
  • כל קלט מהנ"ל היה קודם פלט שנשלח מארנק אחר.
  • בשלב זה ציפי מודיעה על העסקה לכל צומת(Nodes)  ברשת המטבע.

אשרור ראשוני

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

דוגמה לעסקה עם קלט (Input) אחד ופלט (Output)אחד:

Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501

Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_

סימון Spent

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

הערות

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

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.