חוזים חכמים: הטובים, הרעים והעצלנים

מדוע חסימות פרטיות לא צריכות להיות להוטות להריץ קוד

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

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

אז האם העתיד מזהיר לחוזים חכמים ב- blockchains פרטיים? ובכן, סוג של, אבל לא ממש. אתה מבין, הבעיה היא:

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

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

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

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

הבנת אתרום

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

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

לאחר שהיה מעורב בכמה מהפרויקטים האלה, ויטליק בוטרין הציג שאלה פשוטה אך מבריקה: במקום הרבה בלוקצ'יקים ספציפיים ליישומים, מדוע לא תהיה בלוקצ'יין ציבורי אחד שניתן לתכנת לעשות כל מה שנרצה? ה- über-blockchain זה ניתן להרחבה אין קץ, מוגבל רק על ידי דמיונם של המשתמשים בו. עולמם של חובבי הקריפטו השתכנע כמעט פה אחד על ידי רעיון חזק זה. וכך, עם 18 מיליון דולר במימון קהל ולהתרגשות רבה, Ethereum נולד.

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

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

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

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

לשבור אותו

כעת כשאנחנו יודעים כיצד חוזים חכמים של Ethereum נוכל לחלק אותם לחמישה חלקים מכוננים:

  1. ביטוי היגיון עסקי כתוכנות מחשב.
  2. ייצוג האירועים המפעילים את ההיגיון הזה כהודעות לתוכניות.
  3. שימוש בחתימות דיגיטליות כדי להוכיח מי שלח את ההודעות.
  4. הצבת התוכניות, ההודעות והחתימות על blockchain.
  5. ביצוע כל תוכנית עבור כל הודעה בכל צומת.

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

מה עם חתימות דיגיטליות ובלוקצ'יינים? אלה נמנעים מהצורך ברשות מרכזית שתוכל לקבוע אילו הודעות נשלחו, באיזה סדר ועל ידי מי. במקום זאת, כל משתתף יוצר זוג של מפתחות פרטיים וציבוריים, ומפיץ את המפתח הציבורי שלה פעם למשתתפים האחרים. בעקבות זאת, הם סִימָן כל הודעה עם המפתח הפרטי שלהם לפני הפצת ההודעה ברשת. המשתתפים האחרים יכולים לאמת את מקור ההודעה באמצעות המפתח הציבורי של השולח בלבד. זה דברים קריפטוגרפיים חכמים. לבסוף, על ידי הצבת התוכנית והודעות חתומות על בלוקצ'יין, אנו יכולים להבטיח שלכל משתתף תהיה השקפה זהה של מי עשה מה ומתי. בשילוב עם חישוב דטרמיניסטי, פירוש הדבר המשתתפים אינם יכולים לחלוק על התוצאה העסקית הסופית.

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

הבעיה עם החישוב

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

  1. לקבוע x למספר חד ספרתי לבחירתך
  2. לקבוע y ל 123 * x + 567
  3. לקבוע x לשתי הספרות האחרונות של y, כלומר מודולו y 100
  4. If x זה יותר מ 2 ואז חזור לשלב 2
  5. אחרת תעצור ותפוק את הערך של x

פשוט מספיק, נכון? אז הנה שאלה עבורך: האם אי פעם התוכנית הזו תסתיים? או שזה יתקע בתוך לולאה אינסופית? לא כל כך בטוח? ובכן תן לי להוציא אותך מהסבל שלך: זה תלוי בערך ההתחלתי של x.

If x is 0, 1, 2, 5, 6, 7 or 8, התוכנית נעצרת די מהר. אבל אם x is 3, 4 or 9, זה ממשיך ללא הגבלת זמן. אל תאמין לי? פתח את Excel ונסה בעצמך (תזדקק לפונקציה "MOD").

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

לאלו מאיתנו שיעדיפו לחיות בלי מסכים כחולים של מוות ו מסתובב כדורי חוף, הכל די לא נוח. אבל לחיות עם זה אנחנו עושים, למרבה הפלא, רוב התוכנות עובדות בצורה חלקה לרוב. ואם לא, מערכות הפעלה מודרניות כמו Windows מגנות עלינו מפני קוד בורח בכך שהן מאפשרות לנו לסיים תוכניות באופן ידני. עם זאת לא ניתן לעשות את אותו הדבר בבלוקצ'יין כמו את'ריום. אם נאפשר לצמתים בודדים לסיים חישובים לפי רצונם, לצמתים שונים יהיו דעות שונות לגבי התוצאה של חישובים אלה. במילים אחרות, ה הסכמה ברשת תישבר. אז מה צריך לעשות blockchain?

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

חוזים חכמים לעומת מקבילים

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

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

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

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

עכשיו חשבו על העולם בו צומת בלוקצ'יין חי. עסקאות מגיעות מעמיתים שונים, ללא סדר מסוים, מכיוון שאין תור בניהול מרכזי. בנוסף, במרווחים ממוצעים של בין 12 שניות (Ethereum) ל- 10 דקות (bitcoin), נכנס חסימה חדשה המאשרת מערך עסקאות בסדר מסוים. כנראה שצומת כבר ראה את רוב עסקאות החסימה, אך חלקן עשויות להיות חדשות. כך או כך, סביר להניח שסדר העסקאות בגוש לא ישקף את סדר הגיעם בנפרד. ומכיוון שסדר העסקאות עשוי להשפיע על התוצאה, פירוש הדבר לא ניתן לעבד עסקאות עד לאישור ההזמנה שלהם ב- blockchain.

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

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

כדי להשתמש במינוח רשמי של מדעי המחשב, יש לבצע עסקאות Ethereum מסודר לחלוטיןכלומר, יש להגדיר את הסדר היחסי בין כל זוג עסקאות. לעומת זאת, עסקאות ביטקוין יוצרות א גרף acyclic מכוונת וזה רק מסודר חלקית, כלומר, אי-בהירות בהזמנת עסקאות מותרת. כשמדובר במקביל, זה עושה את ההבדל בעולם.

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

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

לטובת אתרום

אם אתה מעוניין רק בצד אחד של הוויכוח, תוכל להפסיק לקרוא כאן. אבל ייתכן שאתה תוהה: האם יוצרי את'ריום טיפשים? מדוע לכל הרוחות הם ידרשו ביצוע גלובלי במאגר מידע מופץ ציבורי, אם כל צומת יכול פשוט לבחור אילו תוכניות דואגות להריץ? האם יש סיבות טובות לדרך את'ריום?

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

מניעת דואר זבל של עסקאות

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

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

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

הוכחות נתונים קומפקטיות

בבלוקצ'יין, בלוקים ממולאים בעיקר על ידי העסקאות שהם מאשרים. עם זאת לכל בלוק יש גם "כותרת" קומפקטית, המכילה מידע חשוב כגון חותמת זמן וקישור לחסימה הקודמת. עבור חסימות ציבוריות המבוססות על הוכחה לחיפושי עבודה, הקלט לאלגוריתם הגיבוב הוא כותרת החסימה הזו בלבד. המשמעות היא שניתן להעריך את סמכותה של רשת על ידי "לקוח קל משקל" מבלי להוריד את מרבית התוכן שלה. לדוגמא, נכון לנובמבר 2015, הגודל של כותרות הביטקוין הוא 30 מגהבייט בהשוואה ל 45 GB עבור השרשרת המלאה. זהו יחס של 1500: 1, מה שהופך את ההבדל המכריע למכשירים ניידים עם רוחב פס ואחסון מוגבלים.

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

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

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

הכרעת הדין בגין מעצורים פרטיים

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

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

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

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

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

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

רשתות חסימות דו-קומתיות

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

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

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

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

חוזים חכמים בחסימות ציבוריות

כפי שטענתי קודם, ב ציבורי טיול בלוקים שלמים כמו את'ריום, שם יש לו סיבות טובות לביצוע גלובלי. אבל הנה שאלה נוספת: מה זה מפעל להשתמש במקרה עבור רשתות אלה? בואו נדמיין זמן עתידי שבו ארגונים יש אמון מספיק בחסימות הציבוריות כדי להשתמש בהם לתהליכים עסקיים אמיתיים. אם קבוצת חברות רוצה להטמיע לוגיקה חישובית בבלוקצ'יין ציבורי, יש להן שתי אפשרויות: (1) להשתמש בבלוקצ'יין בסגנון את'ריום עם ביצוע גלובלי, או (2) להשתמש כל blockchain כשכבת אחסון פשוטה והפעלת הקוד בעצמם. ובהינתן האפשרויות הללו, מדוע הם יבחרו (1)?

הבחירה הרציונאלית תהיה הבלוקצ'יין הציבורי עם (א) המחיר הזול ביותר לבייט אחסון, ו / או (ב) רמת האבטחה הגבוהה ביותר המבוססת על כוח הכרייה הכולל. מכיוון שהחישוב הוא דטרמיניסטי, החברות צריכות לשלם רק לרשת חנות החוזה וההודעות שלהם, לא ממש תהליך אוֹתָם. בנוסף, על ידי שימוש בבלוקצ'יין לאחסון בלבד, הם יכולים להשתמש כל שפת תכנות שהם רוצים. זה יכול להיות קוד byte של Ethereum, JavaScript / ECMAScript לקריאות או אפילו קוד המכונה לביצועים גבוהים. למעשה, אתריום חוזים ניתן כבר לאחסן באמצעות מטא נתונים ב- blockchain bitcoin. זו בדיוק הגישה הדו-שכבתית שהצעתי.

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

אֶפִּילוֹג

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

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

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

אם חוזים חכמים אינם יכולים להבטיח את הבטחתם, מדוע אנו משלמים את מחירם?

תודה שקראת.

בול זמן:

עוד מ רב-שרשראות