אינטגרציית פרונטאנד עם Web3: Ethers.js כפתרון מלא

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

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1375
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1349
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    794
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1087
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1032
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1129

אינטגרציית Ethers.js: היכן נשבר הפרונטאנד מול הבלוקצ'יין

חיבור ארנק לממשק נראה כמו כמה קריאות ל-Ethers.js: לבקש גישה, לקרוא את הכתובת, להציג יתרה, לשלוח טרנזקציה. זה נשבר לא בבדיקה ברשת הבדיקות, אלא כשמגיע משתמש אמיתי, הרשת מתחלפת או שהאישור מתעכב בדקות.

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

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

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

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

מה משתנה במספרים: תגובתיות, שיעור הכשלים, זמן ההשקה

אנחנו מודדים את האפקט לפני ואחרי כתיבה מחדש של הפרונטאנד לענף העדכני של Ethers.js.

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

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

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

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

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

מצבי חיבור: ספק מוכן, צומת עצמאי, היברידי

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

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

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

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

סדר העבודה: ביקורת, סכמה, הגדרה, בדיקה, מסירה

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

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

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

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

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

  5. חיבור הלקוח. מגדירים את ethers.js לארנקים שונים, מוסיפים החלפת רשת, ניסיונות חוזרים בעת ניתוק וניתוק רך בלי לאבד את הנתונים שהוזנו.

  6. בדיקת תרחישי המשתמש. מריצים חיבור, חתימה, שליחה, ביטול, חזרה וקריאת היסטוריה — בבדיקות אוטומטיות ברשת הבדיקות ובידנית בארנקים הנתמכים.

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

חפצי מסירה: קונפיגורציות, סכמות, נהלים

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

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

הערכה מסירה את הסיכון המרכזי במסירה: כל עוד הידע נשאר רק אצל הקבלן, הצוות לא יכול להוציא אף שינוי בעצמו.

מקרה בוחן: אזור אישי עם חיבור ארנק ותשלום

היכן נשברו התשלומים

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

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

מה שינו ומה הראו המדדים

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

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

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

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

אינטגרציית Ethers.js או קריאות ישירות לצומת — מה לבחור

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

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

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

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

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

שאלות טכניות שנשאלות לפני ההתחלה

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

מה לעשות אם המשתמש דחה את החתימה?

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

כיצד לדעת שהטרנזקציה אכן אושרה?

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

מה יקרה אם כללי הרשת ישתנו?

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

האם אפשר לחבר קוד שכבר עובד?

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

אם אחד מהתרחישים האלה נראה אצלכם אחרת — תארו את המשימה, ונחזור עם הערכה ותוכנית עבודה.

נדון במשימה שלכם ונחזור עם הערכה ותוכנית

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

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

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

תארו את המשימה בצורה חופשית וצרפו את מה שיש — נחזור עם הערכה ותוכנית עבודה.