בתור חובב מערכות אקולוגיות ממוקדות, תמיד התעניינתי בפתרונות המשפרים יכולת פעולה הדדית של רול-אפ. יתרה מכך, הסיבה היחידה שיצרתי את דוח המחקר הזה הייתה כדי לקדם מסר של חשיבותה של יכולת פעולה הדדית בתחום זה. ואז, הבנתי שכתיבת מאמרים היא דרך מצוינת לגבש את ההבנה שלי בנושא מסוים ולעזור לאנשים להבין אותו, ועכשיו אני כאן.
מכיוון שכל יום בקריפטו לומד דברים חדשים, זה צריך להיראות ברור שהיום אני רואה את החזון של "יכולת פעולה הדדית של Rollup היא חיונית לעתיד Ethereum" - בעידן שלי די מיושן. מתוך ה-POV של הפילוסופיה, אני עדיין עוקב אחר אותו חזון** - יכולת פעולה הדדית של רול-אפ היא חיונית לחלוטין לעתיד של Ethereum**, וכל המערכת האקולוגית צריכה לעבוד על פתרונות המשפרים אותה. מה-POV של הטכנולוגיה, לעומת זאת, למדתי הרבה רעיונות חדשים על הנושא הזה ושיניתי את דעתי לגבי כמה דברים.
כדי להבין את החומר להלן, כדאי שתהיה לך הבנה בסיסית של רכיבים ובעיית הפעולה ההדדית שלהם. אם לא, המאמר שלי "Dr. דנקשרד או איך למדתי להפסיק לדאוג ולאהוב רולאפים" היא הקדמה מצוינת.
זה בערב של 13 בנובמבר, היום הראשון של Devconnect Istanbul . כמעריץ עצום של ZkSync , החלטתי להשתתף ב-zkSync Connect כאירוע הראשון שלי בפסגה הזו, הראשונה בחיי. שם, פגשתי בחור, ויחד יצאנו ל"מוסיו קופי", כפי שנאמר בעמוד Luma של zkCafe. היו שניים מהם באזור הזה, ומצאנו את המקום הנכון רק לקראת הערב.
זה היה הרבה יותר חשוך מאשר בתמונה למעלה והיה גשם שוטף. נשארתי בקצה הגג שעליו היה מתחם האוכל ושתיתי קפה שקנינו בחינם ב- Clave , סיפרתי לחבר החדש שלי על הרעיון שלי לפרויקט האקתון.
ישנם "מיני-חשבונות": חשבונות ERC-4337 , שהלוגיקה המאמתת שלהם אינה בדיקת חתימה אלא קיומו של ה-hash של הפעולה בגשר הדואר הנכנס היחיד ב-L2 שלו. ה-hash חייב להישלח מכתובת האב שלו בשרשרת מקור ספציפית. כתובת האב היא הארנק החכם הראשי שלך בכל L2 או Ethereum L1. כדי ליצור אינטראקציה עם L2 אחר, אתה:
פרוס את המיני-חשבון בו והגדר את הארנק הראשי שלך ככתובת האב. כל אחד יכול לבצע את הפריסה; לפיכך, זה יכול להיות ממומן על ידי הפרוטוקול או ספק הארנק שלך.
שלח את ה-hash של פעולת המשתמש שברצונך לשלוח לגשר תיבת הדואר הנכנס ב-L2 שלך והגדר את מזהה שרשרת היעד.
הגיבוב הזה נצרף עם חשישים אחרים ונשלח ל-L1. החוזה החכם ב-L1 מעביר את החבילה הזו ליעד L2, וגשר תיבת הדואר הנכנס מפרק את הגיבובים כדי שחשבונות המיני יוכלו לקרוא אותם.
השולח מוסיף עמלה קטנה ל-hash שלו כדי לתמרץ את יוזמי העסקאות בחוזים החכמים של הפרוטוקול.
כאשר ה-hash מגיע ליעד L2, אתה שולח את פעולת המשתמש שלך ל- AA mempool ב-L2 זה. על ידי שימוש בתקן ERC-4337, איננו צריכים להטמיע מחדש את mempool המיני שלנו לחשבון וניתן לשלב את הפרוטוקול בקלות בארנקים עם בסיס קוד קיים כבר.
בקיצור, התכוונתי ליצור גשר מבוסס L1 ששולח עסקאות מהארנק החכם ב-L2 שלך לכל L2 שאתה רוצה ליצור איתו אינטראקציה. בסופו של דבר כמעט יישמתי אותו בהאקתון אבל לא הצלחתי לסיים אותו בגלל ניסיון מועט ועבודה סולו. לאחר שהסביר את זה לחבר, הוא שאל אותי:
למה אי אפשר פשוט לשנות את הרשת בארנק ולהשתמש בגשרי אסימונים כדי להעביר את הכספים הדרושים לרשת הדרושה?
עניתי : זו בהחלט אפשרות אם משתמשים בארנק EOA. ארנקי EOA פועלים אותו דבר בכל רשתות ה-EVM וחולקים את אותה כתובת, כך שתוכל לשלוח עסקאות בכולן רק על ידי שינוי הרשת בהגדרות הארנק שלך.
עם זאת, האזור עובר לחשבונות חכמים מבוססי הפשטה. חשבונות אלה מאפשרים לנו להוסיף כל פונקציונליות שאנו רוצים לארנקים שלנו באופן תוכנתי:
חתימות P256 מאפשרות להשתמש בשבבים מאובטחים בטלפונים שלנו כדי לחתום על עסקאות.
באמצעות התאוששות חברתית, אנו יכולים להוסיף את קרובי משפחתנו כאפוטרופוסים המורשים לשחזר את הארנקים שלנו, ולבטל ביטויי זרע לא בטוחים.
טכנולוגיית Paymaster מאפשרת לנו לשלם את דמי הגז בכל אסימון או אפילו לגרום למישהו לשלם עבורנו את העמלה .
כאשר מחשבים קוונטיים מתחילים לשבור סכימות חתימה קלאסיות, אנחנו יכולים פשוט לשנות את הסכימה בארנקי ה-AA שלנו לזו בטוחה לקוונטית מבלי ליצור ארנק חדש.
ניתן להמשיך ברשימה זו בלי סוף, מכיוון שהפשטת חשבונות בעצם מאפשרת לנו להשתמש בתוכנות הפעלה כרנקים מן המניין. אבל לכל זה יש מחיר: אי אפשר להעביר בקלות את הארנקים לרשת אחרת, כי מלבד העברת הכספים דרך הגשר, זה דורש פריסה מחדש של כל החשבון עם כל המפתחות, האפוטרופוסים וההגדרות. במקרים מסוימים, זה עשוי להיות מסובך מדי או אפילו בלתי אפשרי; נגיד, ב-rollups שאינם תומכים ב-P256 precompile (סכימת חתימה זו עשויה להיות יקרה מדי לשימוש).
זו הסיבה שעשיתי את הפרוטוקול הזה. בעיקרו של דבר, יש לך חשבונות AA בהרבה L2s. כדי לשלוח מהם עסקה, עליך לאמת את כוונתך על ידי שליחת hash שלה מהחשבון הראשי שלך ב-L2 ספציפי לאותם "מיני-חשבונות" דרך הודעות הגשר של L1. למעשה, בדרך זו, אתה לא נפטר ממספר ארנקים; אתה פשוט מעביר את כל היגיון האימות לחשבון "הורה" יחיד.
פרט מעניין נוסף של פרוטוקול כזה הוא שהוא מאפשר יכולת פעולה הדדית לא רק עם L2s אלא עם כל ה-L1s (שרשרת צד) שיש להם גשרים עם Ethereum - Polygon PoS, Ronin, Gnosis ו-Avalanche הם מה שאני יכול לחשוב עליהם. עם זאת, הוא תוכנן כפרוטוקול יכולת פעולה הדדית ממוקדת , כך שזו רק עובדה טכנולוגית מהנה.
בעוד שהרעיון של הפרויקט היה חכם למדי, ליישום המעשי היה חסרון משמעותי: מהירות . העיצוב כולו מסתמך על גשרי רול-אפ קנוניים המחוברים ל-Ethereum L1. גשרי רול-אפ הם מיוחדים בכך שהם מוכיחים את מדינתם לחוזים החכמים שלהם על Ethereum כדי לרשת את הביטחון שלו. כפי שאתה אולי כבר יודע, אופטימיות ואימות ZK הן שתי הדרכים הפופולריות ביותר לעשות זאת.
אימות אופטימי פועל על ידי פתיחת "חלון אתגר", בדרך כלל כשבעה ימים, שבהם המתמודדים יכולים לשלוח הוכחת הונאה שמצביעה על כל חלק לא חוקי באצווה העסקה. אם ההוכחה הזו תקפה, האוסף מארגן מחדש את הבלוקצ'יין שלו כדי למחוק אצווה זו. לאחר שבעה ימים ללא הוכחות הונאה, האצווה נחשבת אוטומטית לתקינה, וכל ההודעות והמשיכות מסתיימות ב-Ethereum.
כנראה שכבר הבנת את זה. בשל עיכוב של שבעה ימים בהעברת הודעות ל-L1, שליחת עסקאות צולבות שרשרת מאוסף אופטימי הוא רעיון נורא . מַדוּעַ? ובכן, האם תחכה להחלפת ה-DEX שלך במשך שבוע? מה הולך לקרות עם המחיר עד הפעם?
שליחת עסקאות חוצות שרשרת לאוסף האופטימי היא הרבה יותר טובה. למרות שהרצף OP Stack ממתין כמה בלוקים לפני עיבוד ההודעה כדי למזער את האפשרות של ארגון מחדש, המתנה של כמה דקות לעסקה שלך כבר מקובלת במקצת עבור כמה משימות.
יתרה מכך, קהילת Ethereum עובדת כעת על סופיות של משבצת בודדת , שתגרום לכל בלוק להסתיים בנפרד, מה שהופך אותם לבלתי הפיכים עד הבלוק הבא שלהם. לאחר היישום, העברת ההודעות מ-L1 ל-L2 תימשך כ-12 שניות.
אירוח חשבונות כאלה באוסף ZK יהיה טוב יותר, אך עדיין לא שמיש במיוחד. כפי שאנו יכולים לראות מהסטטיסטיקה למטה, עידן ZKsync מסתיים בעוד 21 שעות, Linea תוך 5 שעות, Starknet בעוד 9 שעות וכו'.
אבל למה זה ככה? האם יצירת הוכחה ZK אינה מהירה באשכולות רבי עוצמה? בקיצור, יש שתי בעיות:
המתנה של שעה או שעתיים לעסקה היא עדיין ארוכה מדי. מה אנחנו יכולים לעשות בנידון?
קודם כל, בואו נשכח את פרויקט ההאקתון שלי בן שמונה חודשים וננסה לחסל את המודל המנטלי שכל עסקה צריכה להיות יזומה מהארנק החכם הראשי שלנו. למה אנחנו בכלל צריכים לחלוק את היגיון הארנק החכם שלנו בכל אוסף? למה שלא ניצור EOAs זמניים, נגשר על הכספים מהארנק החכם הראשי שלנו שם, נעשה איזו עבודה שאנחנו רוצים לעשות, ונגשר על מה שנשאר בחזרה?
ל-Clave שלי (או כל ארנק חכם שאתה משתמש בו) יש חתימה מאובטחת של מובלעת והתאוששות חברתית, כך שתמיד אוכל להיות בטוח לגבי הכספים שלי שם, גם אם אאבד את הטלפון שלי. ולמי אכפת מה קורה עם החשבונות הזמניים האלה? כבר עשיתי איתם את הדברים שלי; כל הכספים נמצאים כעת ב-Clave שלי.
עם זאת, לגישה זו יש בעיה מהותית: ההנחה שאינך יכול להשתמש באותו ארנק ברשתות אחרות על בסיס קבוע מגבילה מאוד את מספר המשימות שאתה יכול לבצע בהן. לדוגמה, אתה לא יכול:
בעיקרו של דבר, כל מה שאתה יכול לעשות כמשתמש הוא לפזר כספים למספר נמענים מבלי לגשר בכל פעם ולקבל נזילות טובה יותר עבור החלפה לאסימון שניתן לגשר בחזרה לשרשרת הראשית שלך.
לפיכך, כדי להפוך את הארנקים הללו לשימושיים, עלינו לגשת אליהם באמצעות אותם כללים שאנו משתמשים בארנקים החכמים העיקריים שלנו - מובלעות מאובטחות, התאוששות חברתית וכו'. לכן, נחזור לרעיון שלמעלה ולחוסר כדאיות שלו. עם זאת, ישנו אמצעי פליאטיבי אפשרי שיכול להעניק לחשבונות המיני האלה רק מאפייני שחזור של הארנק הראשי שלנו:
אנו יוצרים את אותם מיני-חשבונות שתוארו קודם לכן אך מאפשרים מפתח אחד לשלוח מהם עסקאות ישירות. ארנק האב שלנו יכול כעת לשנות את המפתח הזה דרך הגשר מבוסס L1 או לגרום לחשבון המיני לקרוא אותו מהמצב של האב L2. בדרך זו, אם המפתח הזמני יאבד, ארנק האב יכול ליזום שינוי מפתח דרך הגשר האיטי אך האטומי מבוסס L1.
אטומיות - המאפיין של פעולה שאינה מאפשרת לה להיכשל במהלך הביצוע. או שזה לא היה יזום, או שזה נעשה. גשרים מבוססי L1 הם אטומיים מכיוון שלא ניתן לאבד את ההודעה אם היא נשלחת. הזמנה, זמינות ואותנטיות מובטחות על ידי Ethereum L1.
זה הרבה יותר טוב! כעת, עסקאות רגילות לוקחות זמן רק לגישור סמלי. לאחר שהאסימונים נמצאים ביעד, שליחת העסקאות היא מהירה כאילו זו השרשרת הראשית שלך. אם תאבדו את המפתח, תצטרכו להמתין בין מספר שעות לשבעה ימים, תלוי בשרשרת של ארנק האב, אך לא תשתמשו בו לעתים קרובות במיוחד, כך שההחלפה מקובלת ברוב מקרי השימוש. כמו כן, ניתן ליישם בארנקים גם היום. אפילו הכנתי את היישום שלי , אבל הוא לא מאובטח בשום אופן או מוכן לייצור והוא נועד רק למטרות הדמיה.
טכניקה דומה משמשת בפלטפורמות מסחר עתידיות של Web3: אתה מאשר את האסימון בזוג (בדרך כלל USDC) לחוזה החכם ומקצה מפתח זמני להוצאה, המאוחסן בחזית הפלטפורמה. זה מאפשר למשתמשים לבצע פעולות מהירות מבלי לחתום על כל פעולה עם הארנק הראשי שלהם. אם תשנה את המכשיר שלך או תנקה את הנתונים בדפדפן שלך, תוכל פשוט להקצות מחדש את המפתח באמצעות הארנק הראשי שלך.
אבל, בדיוק כמו בכל דבר בקריפטו, גם הגישה הזו אינה מושלמת. יש לו שני חסרונות:
למרות שגשרים מודרניים יכולים להעביר כספים תוך שניות ספורות , הם א) לוקחים עמלה שיכולה להיות גבוהה מאוד בהעברות גדולות , ב) אינם אטומיים, ואינם יורשים את מאפייני האבטחה של Ethereum. חשוב במיוחד לשים לב למאפייני האבטחה של גשרי בלוקצ'יין .
השימוש בגשרים חיצוניים להעברת אסימונים מקובל במידה מסוימת, בניגוד לשימוש בהם להעברת הודעות להפעלת מיני-חשבונות. הסיבה היא המקרים הגרועים ביותר שלהם, ככל הנראה עקב התקפה עליהם:
ככזה, הסתמכות על גשרים חיצוניים עבור גישור אסימון היא כמעט אופציה כל עוד אין דרך יעילה לגשר ביניהם בצורה אטומית באמצעות L1. זוהי למעשה האפשרות בה משתמשים משתמשים רבים המקיימים אינטראקציה עם רשתות רולאפ כיום.
נניח שאנו רוצים לאמת את כל העסקאות במקום אחד, למשל, כדי להעביר אסימונים טבעיים בין חשבונות או לאמת חתימות עם קומפילציה מוקדמת ייחודית. במקרה כזה, אנו עומדים בפני הסופיות האיטית של אוסף ה-ZK של היום. נחזור קצת כדי לחשוב מה ניתן לשפר בטכניקה הקודמת.
מדוע ל-Rollups יש סופיות גשר איטית? ניקח את רשימת ה-ZK כיעד מכיוון שעם אלה אופטימיים, הסיבה כבר ברורה:
עם זאת, יש יוצא מן הכלל; Scroll מציעה את המצב בערך כל דקה , אבל א) אימות ההוכחה עדיין נעשה כל כמה שעות, כך שהוא נשאר לא מאומת, וב) Scroll הוא אחד מהאוסףים היקרים ביותר לשימוש כיום.
אם ננסח את זה בצורה פשוטה יותר, הבעיות הן הוכחת עלויות ואימות עלויות. בואו נסתכל על כל בעיה ודרכים לפתור אותה.
בעיקרו של דבר, המשימה שלנו היא לגרום לארנק החכם שלנו ב-Rollup לפעול במהירות עם רולאפים אחרים ללא הנחות אמון נוספות שהביאו גשרים חיצוניים. ארנקים חכמים מורכבים בדרך כלל מכמה תכונות AA רגילות - משכורות, התאוששות חברתית, מובלעות מאובטחות, מגבלות הוצאות וכו', והפעולה העיקרית שמאפשרת לנו לשלוח ממנו עסקאות בשרשרת.
למה אנחנו צריכים את הפעולה העיקרית אם אנחנו רוצים להשתמש ברולאפים האחרים מהארנק שלנו? מכיוון שהוא כנראה מתארח באוסף רב-תכליתי - Arbitrum, Base, ZKsync Era - ואנחנו רוצים ליצור אינטראקציה עם משתמשים וחוזים חכמים גם באוסף הזה.
במקרה הספציפי הזה, יהיה הגיוני פשוט להשתמש בגשרי אסימונים חיצוניים. פשוט החליפו את המשימה באינטראקציה למשל עם dApp באותו אוסף ועוד אחד.
הרב-תכליתי הזה הוא מה שמכניס מורכבות למערכת ההוכחה של ה-rollups. אימות המצב של כל המכונה הוירטואלית עם הרבה חוזים ועסקאות חכמים שמתרחשות בכל שנייה היא משימה די גבוהה. אנו רוצים לבצע שני סוגים של משימות שדורשות קבוצה שונה לחלוטין של תכונות באוסף: עבור עסקה על שרשרת, מדובר בהכללה מהירה של L2, עמלות L2 נמוכות ופונקציונליות רחבה של VM, ועבור עסקת ריבוי רול-אפ. , זה סופיות גשר מהירה.
אבל מה אם פשוט נפטר מהמכונה הוירטואלית ונבנה אוסף שיוכל להתמודד רק עם חשבונות חכמים והעברת הודעות ל-L2s האחרים? Vitalik Buterin הציע טכניקה דומה בערך בזמן של Devconnect Istanbul שנקרא "אוסף מאגר מפתחות". נדון בזה בהמשך.
הרעיון הוא ליצור אוסף ZK שיכול לאחסן רק את מפתחות החשבון ולשנות אותם באמצעות מפתח אחר. רולאפ זה דוחף את השורש של עץ מרקל המכיל את כל המפתחות הללו ל-L1. לאחר מכן, כאשר אתה רוצה לשלוח עסקה מאחד החשבונות החכמים שלך ב-L2s, אתה מייצר את הוכחת Merkle של המפתח הנוכחי שלך, והחשבון שלך מאמת אותו מול שורש מאגר המפתחות הזמין ב-L1. כעת, הוא מכיר את המפתח שלך ויכול להשתמש בו כדי לאמת את החתימות שלך.
אוסף כזה הוא פשוט מאוד, וניתן ליישם בקלות מערכות הוכחה מרובות, כך שהמפתחות המאוחסנים בו הם למעשה מאובטחים כמו ה-L1.
מלבד העיצוב המקורי של Vitalik, ישנם שלושה מובילים עבור אוסף מפתחות:
באופן כללי, הם שונים במספר המשימות המואצלות לעיבוד מחוץ לשרשרת (במילים אחרות, כמה דברים יש ב-L2) ובפרטי היישום שלהן.
אנחנו יכולים להרחיב את הרעיון הזה עוד יותר על ידי טיפול לא רק במפתחות אלא גם בלוגיקת החשבון החכם כולו . גם זה לא יהיה הרבה יותר קשה מבחינה חישובית; בעצם, אנחנו צריכים להתמודד רק עם המשימות האלה:
שליחת נתונים ל-L1: חשבונות באוסף מאגר המפתחות חייבים להיות מסוגלים להודיע ל-L1 על כוונת העסקה שלהם. אין צורך לשמור את כל העסקה ב-L1; משהו כמו שורש של עץ מרקל עם כל הגיבובים של פעולות המשתמש יספיק. לאחר מכן, כל מה שנדרש כדי לשלוח עסקה מחשבון מיני הוא קריאת השורש מיעד L2 וביצוע הוכחה שפעולת AA מסוימת אכן התבקשה מחשבון האב.
בדיקות חתימה: המשתמש חותם על ה-hash של פעולת המשתמש שהוא רוצה לבצע באוסף מסוים. מאגר המפתחות מאמת את החתימה כדי להוכיח כוונה ומוסיף את ה-hash לעץ ואז לדחוף אותו ל-L1. די בכמה סכימות חתימה, כגון ECDSA , P256 , ובטוחות קוונטיות .
התאוששות חברתית: הפוך את החשבונות האחרים, שנבחרו במכוון, הנקראים "אפוטרופוסים", להצביע עבור שינוי המפתח בחשבון המשתמש. המשתמש יכול להגדיר את האפוטרופוסים והסף ולבקש מהם החלמה במקרה של אובדן מפתח. אנו יכולים גם ליישם שחזור מבוסס וטו או תוכניות אפוטרופוס חלופיות כגון ZK-Email , ZK-OTP או Web Proofs כדי להרחיב את השחזור החברתי מחוץ למשתמשי האוסף.
כללי הוצאה: במקרה שהארנק נגנב, כללי הוצאה הנשלטים על ידי אפוטרופוסים יכולים להקטין מאוד את ההפסדים הפוטנציאליים לפני שהמשתמש ישחזר את הארנק. תכונה זו מועילה גם לחיסכון כספים או, למשל, הכנת ארנקים לילדים - הורים יכולים לשלוח קצבה ולהגביל כמה ממנה ניתן להוציא כדי שהילד יוכל ללמוד לחסוך.
יתרות אסימונים: זה אולי נראה מיותר, אבל היכולת לאחסן קריפטו בתוך אוסף מאגר המפתחות מגדילה באופן דרמטי את האבטחה של נכסי המשתמשים על ידי אי הפרדתם למספר מיני-חשבונות. כמו כן, הוא מאפשר תכונות רבות המשפרות את חווית המשתמש:
Paymasters: האוסף עשוי להציע עסקאות בחינם כדי למשוך משתמשים חדשים או לאפשר להם לשלם את העמלה עם כל אסימון ולא רק עם ETH. ניתן ליישם גם לוגיקה מסובכת יותר של Paymaster - לדוגמה, הסיקוונסר יכול לקחת תשלום מההחלפה בשרשרת אחרת כאשר הוא מגושר בחזרה לאוסף המפתחות.
העברות אסימונים פנימיים: מלבד שליחת כספים מיידית בין משתמשי אוסף, העברות ישירות מועילות גם להטמעת גשרים מבוססי כוונות עם רכיבים אחרים בעלי סופיות איטית מדי כדי להשתמש ב-L1 כדי לגשר מהחשבון המיני לחשבון האב באוסף המפתחות. בדרך זו, אוסף מאגר המפתחות יכול למעשה לשמש כמרכז להעברת אסימונים בין מיני-חשבונות בעשרות L2s שונים בזול.
מערכת כזו היא הרבה יותר פשוטה מבחינה טכנית מ-VM מלא בתוך אוסף, כך שניתן ליצור הוכחות עבור מספר מערכות הוכחה בו-זמנית, והמורכבות של הפקת ההוכחות עדיין תהיה הרבה פחות.
עם זאת, אימות הוכחה הוא עדיין בעיה. כפי שחישבנו בעבר, עלות הגז שלו יכולה להגיע עד 1 מיליון גז או ~25-50$, תלוי במחיר הגז. עלות זו קבועה ואינה תלויה במספר העסקאות באצווה. המשמעות היא שאם יש מעט מדי עסקאות, העמלה עבור כל עסקה יכולה להיות גבוהה מאוד. ישנן שתי דרכים עיקריות להוזיל עלות זו:
Aligned היא EigenLayer AVS שמשתמשת באופרטורים מחדש כדי לאמת הוכחות ZK בזול. אם אינך מכיר את EigenLayer, זהו סיכום פשוט של אופן אימות ההוכחות ב-Aligned:
משתמש שולח את בקשת אימות ההוכחה לרשת ומשלם את האגרה עבורה;
מפעילים מיושרים, שכל אחד מהם הוא מאמת את'ריום עם ההפקדות שלהם מלוכדות, מאמתים את ההוכחה על הצמתים שלהם ומחתימים על תקפותה;
כאשר 2/3 מפעילים חותמים על ההוכחה, החתימה המצטברת נשלחת ומאומתת ב-Ethereum L1.
אם הוכחה לא חוקית הגיעה לסופיות, ניתן לחתוך את המאמתים שחתמו עליה על ידי אימותה בשרשרת. בדרך זו, ההוכחה מקבלת ביטחון כלכלי השווה ל-2/3 מסך ההימור של המפעילים המיושרים.
לגישה זו יש חסרון ברור - Ethereum כבר לא מבטיח תוקף הוכחה. אם ה-TVL של הגשר של הרולאפ גבוה מ-2/3 מסך הימור Aligned, התקפה עליו הופכת לרווחית. ומכיוון שאנחנו מדברים על חביון סופי של 1-2 חסימות, אנחנו לא יכולים למנוע את ההתקפה בצורה אופטימית.
עם זאת, זו עשויה להיות אפשרות בטוחה יחסית, כל עוד האוסף אינו גדול מדי. כשזה קורה, דרישת העסקאות כבר יכולה להפוך את אימות הוכחה L1 לכדאי. על פי המסמכים, אימות הוכחת ZK באמצעות Aligned עולה כ-3000 גז, שהוא כמעט בחינם אפילו עבור Ethereum L1.
אם לא נוח לך להכניס הנחות אמון נוספות למערכת, או שהפרוטוקול שלך כבר הפך להיות גדול מדי, אבל הדרישה שלו לעסקה לא, ישנה אלטרנטיבה.
צוותי ZK ו-Rollup החלו לאחרונה לעבוד באופן פעיל על פרוטוקולי צבירה של הוכחה. אם אינך מכיר היטב את ZK, צבירת הוכחות היא כאשר הוכחת ZK מוכיחה את תקפותה של הוכחה ZK אחרת (שיכולה, בתורה, להוכיח הוכחה נוספת, וכן הלאה), ובכך "מצבירה" אותן בהוכחה היחידה בעצם להעביר את כל עלויות האימות שלהם לעלויות הוכחה. מה שנותר הוא לאמת הוכחת ZK יחידה על השרשרת ולהיות בטוח לגבי תקפותן של כל שאר ההוכחות ZK שהיא מוכיחה. פיו!
צבירת הוכחות הגיונית כאשר עלויות האימות גבוהות יותר מהוכחת הוכחות צבירת. כלומר, הצבירה הופכת לרווחית אם עלות הפקת הוכחה לעשר הוכחות ואימותה קטנה מאימות עשר ההוכחות הללו באופן עצמאי. זה מועיל אפילו יותר ב-Ethereum L1, אשר מוגבל מאוד על ידי יכולת חישובית. בהתאם למערכת ההוכחה, הבלוק כולו יכול להכיל רק כ-100 אימותי הוכחה , לא כולל כל שאר הפעילויות בשרשרת.
באופן כללי, ישנם שני סוגים של פרוטוקולי צבירת הוכחות:
היתרונות של מערכות צבירה אוניברסליות הם שהן אגנוסטיות לפרויקט ומתמחות רק בתהליך הצבירה עצמו, מה שפותח אימות די מהיר של הוכחות ועלויות נמוכות. כמו כן, סביר להניח שלא יהיו לו גלגלי אימון בגלל היעדר רכיב הגשר.
גשרי אוסף מצטברים, בתורם, מועילים לאוסף מאגר המפתחות ליכולת חיבור סינכרונית עם מחסנית אוסף קיימת כבר. לדוגמה, לפי L2BEAT , 13 פרויקטים נבנים כיום באמצעות Polygon CDK, ו-11 משתמשים ב-ZK Stack. כאשר כולם מתחברים לגשר צבירה הוכחה משותף, חיבור מאגר המפתחות לאחד מהם יפתח אינטראקציה חלקה עם L2s רבים מבלי לגעת אפילו ב-L1. כדי שזה יעבוד, הגשר חייב לתמוך בלוגיקת מעבר מצב שונה עבור ה-L2s שלו מכיוון שהלוגיקה של מאגר המפתחות שונה משאר ה-L2s בו.
עם זאת, גשרים אלו ניתנים לרוב לשדרוג ונשלטים על ידי ה-DAO או מועצת הביטחון שלו. ייתכן שפרויקטים של מאגר מפתחות אינם נוחים לוותר על הריבונות שלהם למפעילי הגשר שאליו הם מחוברים. כמו כן, גשרים עשויים להכניס עיכובי ביצוע כאמצעי זהירות לגלגלי אימון, בדומה לאופן שבו ZKsync Era פועל כעת, מה שבעצם הורג את כל היעילות של עיצוב מאגר המפתחות הזה.
בדרך זו, אוסף מאגר מפתחות, כמו כל אוסף אוסף אחר של ZK, יכול למזער את עלויות אימות ההוכחה ואפילו לשלב זאת עם יכולת קומפוזיציה סינכרונית עם מחסנית אוסף קיימת כבר.
כפי שצוין קודם לכן, גישור מ-L2 ל-L1 אינו הבעיה היחידה. רוב רצפי ה-Rollup מיישמים גם עיכובים להעברת הודעות מ-L1 ל-L2. הסיבה לכך היא שכאשר נוצר בלוק Ethereum, הוא עדיין לא סופי וניתן להפוך אותו בתוך ~64 הבלוקים הבאים (שני עידנים, כ-13 דקות). התארגנויות אלו מתרחשות בגלל השהיות ברשת, מה שגורם לכמה הצעות להופיע ברשת מאוחר מדי כאשר חלק מהצמתים כבר מחשיבים אותן.
למרות שרוב הארגונים מחדש אינם עמוקים יותר משני בלוקים (ארגון מחדש של שבעה בלוקים אפילו הופיע בחדשות לפני שנתיים) , צוותי אוסף עדיין לא רוצים לקחת סיכונים הקשורים להודעות שהוחמצו ולהחיל עיכובים בגישור מ-L1. העיכובים אלה הם רק כדקה אחת בכמה רולאפים ( OP Stack , ZK Stack ) אבל יכולים להיות עד 6 דקות, כמו ב- Arbitrum , או אפילו לבקש סופיות של L1, כמו ב- Linea .
קהילת Ethereum עובדת באופן פעיל על Single-Slot Finality , שתגרום לכל בלוק להסתיים באופן עצמאי במקום פעם אחת בתקופה. אבל אנחנו יכולים לומר בוודאות שזה לא מתוכנן לשדרוג הבא של Pectra שיגיע ברבעון הראשון של 2025, אז תעבור לפחות שנה עד ש-SSF ייושם.
אם צוות המיישם את העיצוב המורחב הזה של אוסף מאגר המפתחות אינו מרגיש בנוח עם זמן אחזור עסקאות כזה, הוא יכול ליישם פתרון פליאטיבי שתואר קודם לכן. לכל מיני-חשבון יש מפתח המורשה לשלוח עסקאות או משתמש במפתח סטטי ממחסן המפתחות (לפי העיצוב המקורי של Vitalik), אך ניהול החשבון עדיין נמצא בחשבון מאגר המפתחות הראשי. לאחר הטמעת SSF ב-L1, האוסף יכול להסיר את מפתחות ההוצאה המורשים, והמשתמשים יקבלו את כל פונקציונליות ההתאמה האישית של AA ללא ירידה משמעותית במהירות.
אני מסכים עם אלכס כאן; 15 שניות של חביון מקובל לחלוטין, במיוחד מכיוון שהפעולה היא אטומית לאחר סיום עסקת אוסף המפתחות ב-L1. אם אנחנו מדברים על העברות אסימונים, ארנקי נמענים יכולים אפילו ליישם סטטוס "בהמתנה" ברמת ממשק המשתמש.
עם זאת, העברות אסימון צולבות עדיין מהוות בעיה. אם ניישם כספות אסימונים בתוך אוסף המפתחות, העברת האסימונים ממנו תימשך 1 עד 15 דקות, תלוי באוסף הנמענים. אם לא נעשה זאת, פיצול יתרות המשתמשים למיני-חשבונות במספר L2s יכול להוות סיכוני אבטחה ואפילו לנעול חלק מהנכסים ל-L2s לא נזילים, שגישור מהם עלול לעלות יותר מדי או לקחת יותר מדי זמן.
כחלופה, אנו יכולים לשלב גשר מבוסס כוונות בתוך האוסף ולפרוס אותו בכל שאר האוסף או אפילו לעשות שימוש חוזר בתשתית קיימת, כגון פרוטוקולים תואמי ERC-7683 . נדון בקצרה בגשרי כוונות בחלק הבא.
רוב הגשרים הצולבים הקיימים מבוססים על פרוטוקולי הודעות. לדוגמה, Stargate משתמשת ב-LayerZero כדי להעביר הודעות על הפקדות לרשתות היעד, תוך הסתמכות עליה כמקור האמון. כאשר אתה שולח אסימונים דרך גשרים כאלה, הם נועלים את האסימונים שלך בצד אחד ושולחים הודעה על ההפקדה שלך בצד השני, והכספת שם פותחת עבורך את כמות האסימונים המתאימה.
גשרים מבוססי כוונות , בתורם, אינם שולחים הודעות בין שתי רשתות. במקום זאת, כספים הנשלחים ננעלים בכספת כ"הזמנה חוצת שרשרת", ואז כל אחד יכול למלא את ההזמנה על ידי שליחת כמות האסימונים המבוקשת בשרשרת היעד. מי שימלא את ההזמנה יוכל לדרוש את האסימונים הנעולים משרשרת המקור כאשר הכספת בה מקבלת מידע על המצב הסופי של שרשרת היעד ויכול לאשר את ההעברה.
זה יכול לקרות על ידי המתנה לסופיות המטרה (גשר) של שרשרת היעד או באמצעות פרוטוקול אורקל חיצוני כלשהו. לדוגמה, Across משתמש באורקל האופטימי של UMA כדי להביא את המצב של L2s שטרם סוכמו.
בתרחיש זה, Ethereum L1 משמש כמקור האמון. פרוטוקולים מסוימים, כגון Across, משתמשים במקום זאת באורקלים חיצוניים. העיצוב בפועל עשוי להיות שונה בפרויקטים קיימים; רק הרעיון הכללי מוצג.
אנחנו יכולים להשתמש באותו עיצוב עבור אוסף מאגר המפתחות המורחב האלה כדי ליישם גישור דו-כיווני חסר אמון, מהיר וזול בין מאגר המפתחות לכל שאר ה-L2s. סופיות הגשר המהירה מאפשרת להזמנות מבוססות כוונות משאר ה-L2s להיות כמעט בחינם מכיוון שהוכחת ההגשמה ב-L2 נמשכת דקות ספורות.
כנראה שגם הזמנות מחנות המפתחות יהיו זולות, מכיוון שניתן לספק נזילות ב-L2 מהר יחסית דרך מאגר המפתחות. בדרך זו, עיצוב אוסף מאגר מפתחות כזה יכול להפוך למרכז לגישור מבוסס כוונות, המאפשר למשתמשים לשלוח עסקאות באופן מיידי ולא תוך דקות ספורות, ולא משלמים כמעט כלום עבור גישור. צוות הרולאפ יכול גם לספק נזילות לגישור דרך מאגר המפתחות 1:1, וזה לא יעלה להם הרבה.
תאר לעצמך שיש לך שם משתמש יחיד.eth שפותר לכל המיני-חשבונות שלך, לא משנה באיזו שרשרת נמצא הנמען. עיצוב זה מאפשר זאת. אֵיך?
מכיוון שאנו כבר יודעים את הכתובת של חשבון מאגר המפתחות הראשי שלנו, אנו יכולים להשתמש במפעלי ריבוי שרשרת וב- CREATE2 כדי להפוך את הכתובות של חשבונות המיני שלנו זהות בכל רשתות ה-EVM המקבילות לקוד בתים, אפילו כולל Ethereum L1. לאחר מכן, הגדרנו את הכתובת המאוחדת ב-ENS resolver, והשם שלנו עובד בכל EVM L2s.
עם זאת, ישנם שני מקרים חריגים:
למרות היותה ידידותית מאוד ל-UX, גישה זו משתמשת בהרבה חישובים ואחסון יקרים ב-L1 מכיוון ששמות וכתובות מאוחסנים ב-L1 רזולורים. ניתן לפתור בעיה זו באמצעות CCIP Read , אבל הגעתי ללוגיקה אחרת, יעילה יותר לפתרון השרשרת:
כל חשבון במאגר המפתחות נרשם ומתוקשר על ידי ה-namehash של שם ה-ENS שלו (רשום תחת שם ENS יחיד עם פותר מותאם אישית). כאשר תת-הדומיין שלו נפתר, חוזה הפותר בודק אם החשבון עם namehash כזה קיים באוסף ומשתמש ב-namehash כדי ליצור כתובות מיני-חשבונות מבוססות CREATE2
.
כאשר אלה ייפרסו, הם יבקשו מ-L1 את נתוני מאגר המפתחות השייכים ל-namehash שאיתו הם נפרסו. זה יכול להיות כוונת העסקה עצמה או רק מפתח החתימה הנוכחי, תלוי ביישום מאגר המפתחות. בדרך זו, אנו מקבלים חשבונות מאגר מפתחות, שלכל אחד מהם שם ENS פותר לעצמו ולמיני-חשבונות שלו בכל אוסף. המיני-חשבונות הללו, בתורם, יסתמכו גם על שם ה-ENS הזה בעת אימות העסקה באמצעות מאגר המפתחות.
**
מכיוון שסופיות הגשר במכלול מאגר המפתחות המורחב אמורה להיות כמה בלוקים של L1, נוכל גם להיפטר לחלוטין מהסיקוונסרים המרכזיים, ולהפוך אותו לאוסף מבוסס. כפי שדיברנו בעבר, ~12 שניות של מהירות עסקה מקובלת על המשתמש הממוצע, אבל רצף מבוסס יהפוך את האוסף להרבה יותר עמיד בפני צנזורה ונקודות כשל בודדות.
כדאי לקחת בחשבון שעם רצף מבוסס, עסקאות פנימיות יידרשו זמן רב כמו עסקאות חיצוניות (לא כולל זמן הגעה ל-L2). זה עשוי להיות בלתי מתקבל על הדעת עבור צוותים מסוימים, שכן רצף מרוכז הופך את כל הפעולות הפנימיות למיידיות.
כתבתי את כל המאמר סביב רכיבי ZK וטכנולוגיית ZK. הסיבה לכך היא ש-rollups אופטימי לא יכול ביסודו להיות סופיות אובייקטיבית מהירה, וניתן להגיע למאפיין כזה רק באמצעות ZK. המכלולים האופטימיים של היום מבינים את המיקום החתום שלהם וחוקרים באופן פעיל את ההיתכנות של שילוב עיצובים ממוקדי תוקף בערימות שלהם, ומכאן, למשל, השותפות האחרונה של Optimism ו-RISC Zero .
עיצוב אופטימי הוא מגביל ביסודו בכך שהוא לעולם לא יתמודד עם יכולת פעולה הדדית עם רכיבים אחרים. עם זאת, יכולת פעולה הדדית בתוך המערכת האקולוגית האופטימית מתפתחת במהירות. הטכנולוגיה העיקרית להפיכת מקבצים אופטימיים לפועלים זה עם זה היא רצף משותף . במילים פשוטות, זהו מנגנון שבו סיקוונסר יכול לבנות אצווה למספר רולאפים בו זמנית. אם עסקה כלשהי באחד מהאוסףים שצורפו אינה חוקית, ניתן לערער על האצווה כולה ולהחזיר אותה.
זה נותן לכל הקבוצות ב"מגה אצווה" זה את התכונה האטומית - או שכל הקבוצות תקפות או שאין. זה, בתורו, מאפשר חיבור סינכרוני אטומי בתוך האצווה. Atomic - מכיוון ששום דבר באצווה אינו חוקי אם הוא חוקי, סינכרוני - מכיוון שכל העברת ההודעות נמצאות בתוך האצווה, אשר מעובדת בו זמנית על ידי כל הצמתים של האוסף שלה.
הטכנולוגיה הזו הופכת בעצם את כל ה-rollups בערימה אופטימית מסוימת ל-rollup אחד גדול ומפורק. למה רק מחסנית אחת ולא כולם? כי כדי שזה יעבוד יש לחבר רולאפים לגשר בודד. לכל מחסנית יש גשר משלה, ואין דרך אמינה לבנות אצוות במספר גשרים בו זמנית. המשמעות היא שרצף משותף מאפשר ל-OP Mainnet לפעול בצורה חלקה עם Base ו-Zora אך לא עם Arbitrum או Metis, ולהיפך.
איחוד כזה יוצר מצב מסוכן במערכת האקולוגית של הרולאפ. לרולאפים חדשים יש אפשרות להצטרף למחסנית הקיימת ולהשתלב איתה אבל לא עם אף אחד אחר או לבנות על גבי ZK ולהשתלב עם כל אחד מלבד המחסנית למעלה. אין ברירה כזו כעת מכיוון שרצף משותף עדיין לא זמין, וכל אוסף OP Stack או Arbitrum Orbit הוא עצמאי, עם גשר משלו. עם זאת, כאשר הם מתאחדים, הם יווצרו שני אורגניזמים מוצקים בתוך המערכת האקולוגית, כל אחד מחזיק בערך 40% מסך ה-L2s TVL .
קודם כל, סיקוונסרים משותפים הם מניע ריכוזי ענק. אם אתה מפעיל סדרת OP Mainnet, האצווה שלך לא יכללו טרנזקציות ממכלולים אחרים בערימה; אתה תרוויח פחות בעמלות ובסופו של דבר תעלה על ידי רצפים מסחריים גדולים שיכולים להתמודד עם כל הערימה באצווה שלהם.
עם זאת, הבעיה הקריטית ביותר היא שבמקרה כזה, המערכת האקולוגית של הגל-אפ נעשית סגורה בתוך אימפריות אוליגופוליסטיות הרודפות אחר האינטרסים שלהן, מבקשות לבסס שליטה רבה יותר על הבירה, ומצמצמת את ההתקדמות הטכנולוגית במערכת האקולוגית. אז נצטרך להתמודד עם ריסוק של Ethereum לאזור מנותק שבו יחסי ציבור ומאבק פנים-ספציפי הם מה שחשוב, לא טכנולוגיות שמשנות את העולם בפועל.
"בנה כלים, לא אימפריות . אימפריות מנסות ללכוד וללכוד את המשתמש בתוך גן מוקף חומה; הכלים עושים את המשימה שלהם אבל אחרת משתלבים עם מערכת אקולוגית פתוחה יותר." - ויטאליק בוטרין
בגשרים המשותפים של ZK רולאפים, ניתן לבצע רצף באופן עצמאי משאר הרולאפים בגשר. לכל אוסף יכול להיות רצף משלו או ליישם רצף משותף. מציעים הטוענים את שורש המצב המתקבל לאחר כל רצף הקבוצות ומוכיחים אותו באמצעות ZK הם אלו שעושים צבירה.
יתרה מכך, המאפיין של סופיות אובייקטיבית מהירה יחסית ב-ZK לא הופך אותם לסגורים בתוך המערכת האקולוגית שלהם, לא משנה כמה היא גדלה או כמה היא ריכוזית. כאשר ZK מפותח לרמה שבה ניתן ליצור הוכחות zkVM גדולות עבור מערכות הוכחה מרובות במהירות, כל ערימות ה-Rolup מבוססות ZK יפעלו כמעט בצורה חלקה, בדיוק כמו אוסף מאגר מפתחות תיאורטי שתואר לעיל שולח עסקאות בכל שאר ה-Rolups בעניין של L1 בלוקים.
בתוך הקהילה שלנו של חוקרים ואנשים טכניים מאוד, הקונצנזוס הוא ש-ZK הוא פתרון קנה המידה הטוב ביותר. ותתפלאו לגלות שעבור משתמשים ובונים רגילים, רולאפים אופטימיים טובים בהרבה מ-ZK! איך זה?
למשתמשים : יש מערכת אקולוגית מבוססת היטב. כל הפלטפורמות יודעות מה זה Arbitrum ו-Base, ל-dApps יש תמיד נזילות גבוהה, וה-UX ריחני. נסו לתת שם לאפליקציה ב-Base, ותזכרו מיד את Friend.tech , Farcaster , Daimo , Time.fun (כיום בלעדי ל-Solana), אוספי NFT שונים, ZKP2P. אפילו Mirror תמכה בתחילה רק ב-OP Stack רולפים להטבעה. נסה לתת שם לאפליקציה ב-ZKsync Era. אההה…
למפתחים : יש שקילות Ethereum מוחלטת, כך שכל תשתית ה-Ethereum ו-EVM פורקס עובדת מהקופסה. חוץ מזה, התיעוד מגדיר ומסביר בקפדנות את כל המוזרויות והכלים של רולאפים אופטימיים. יש הרבה הדרכות, קורסים, מרתונים, קשרי מפתחים וכדומה.
מצד שני, ישנם zkEVMs בני שנה, שלא לכולם יש אפילו שקילות בתים. לכולם יש רשימה ארוכה של הבדלים וקשיים כאשר בונים עליהם. הם לרוב מתועדים בצורה גרועה, ויש הסתמכות משמעותית על תשתית קיימת שבקושי תואמת את הרשתות. ביקורת VMs "תואמים" היא קשה ויקרה מאוד, ואין לך אפילו ChatGPT לשאול.
למשתמשים: לאוסף ZK אין מערכת אקולוגית. אין אפליקציות לשימוש, אין רשתות חברתיות, אין NFTs או אסימונים פופולריים, וכל הפעילות מסתכמת בחקלאות אוויר. בקושי תמצא נזילות לזוגות שאינם בטופ 10 של המערכת האקולוגית של Ethereum, ו- DefiLlama מתחילה להציג אוסף ZK כשנמאס לך לגלול.
אינך צריך להציג שוויון בתים, או הידור מקדים של blake2f
כדי למשוך מפתחים ופעילות לפלטפורמה שלך. רולאפים של ZK לא אמורים להיות טובים יותר בזה. במקום זאת, בסופיות וביכולת הדדית המהירה שלהם, מדרגיות אופקית מלאה, אבטחה גבוהה יותר ביסודו וביזור. זה מה שצריך לנצל בפרויקטים במערכת האקולוגית של אוסף ZK כדי להפוך אותם ליתרון במערכת האקולוגית.
כתבתי את המאמר הזה כדי להרכיב תמונה מלאה של כל הטכנולוגיות הללו, כולל רולאפים של ZK, שהופיעו והתפתחו באזור בתקופה זו ולהראות כיצד ניתן להשתמש בהן כדי לפתור את הבעיה החשובה ביותר כיום בתחום – יכולת פעולה הדדית של רולאפ. עלינו לאמץ את ZK ואת היתרונות הבלתי מוגבלים שלה. עלינו להשתמש בהם לטובתנו כדי לבנות דברים שיקרבו אותנו להפוך את Web3 למקום עבור כולם בעולם.
זו אולי טבלת ההשוואה הגדולה ביותר שהכנתי אי פעם. לא פלא — בשנה האחרונה, קהילת Ethereum עלתה עם הרבה רעיונות וטכנולוגיות חדשות שניתן לשלב ולתמרן בצורה גמישה כדי ליצור פתרונות חדשים לגמרי הפותרים את הבעיות הדוחקות ביותר באזור, אפילו עם טכנולוגיה קיימת.
כן, אני עדיין משוכנע ש-Rollup interoperability היא הבעיה הדחופה ביותר שמונעת מאיתנו להכניס את כל העולם ל-Web3. קנה המידה כבר לא כל כך דחוף — 4844 מאפשר לנו לטפל עד אלף עסקאות בשנייה, בהשוואה לפעילות פיננסית במדינות הגדולות בעולם; PeerDAS מגיע בקרוב ותגדיל את זה עוד יותר. עם זאת, פיצול עדיין מהווה איום חמור על המערכת האקולוגית של Ethereum. לא משנה כמה היא תגדל, המערכת האקולוגית לא צריכה להרגיש כמו תריסר אימפריות נפרדות אלא כמנגנון אחד גדול. כל כך שונה, אבל כל כך זהה.
אנחנו לא מוקדם, והמאמר הזה אמור להראות לכם את זה. עלינו להשתמש בכל החוזקות שלנו כדי לפתח מערכות עובדות שעוזרות למערכת האקולוגית הענקית L2 לפעול הדדית. זה אפשרי כרגע. בקרוב, אתה אמור להיות מסוגל להשתתף בכל DAO ולשלוח כל נכס ל-ENS, שהבעלים שלו נמצא כמה אלפי קילומטרים ממך. אין להחליף גבולות גיאוגרפיים בגבולות דיגיטליים.
אם אהבת את העבודה הזו, מסכים עם התזה שלה, למדת משהו חדש או רוצה להפיץ את המסר הזה הלאה - שתף אותו במדיה החברתית, השאר את ההערות שלך ודיבר יותר על החשיבות של יכולת פעולה הדדית של אוסף. תודה שקראת.
הערת המחבר: גרסה של מאמר זה פורסמה בעבר כאן .