מחברים פרונטאנד ל-Solana: ארנקים, טרנזקציות, @solana/web3.js

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

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

שאלות נפוצות

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

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

אינטגרציית פרונטאנד Solana: היכן נשברת זרימת הטרנזקציות

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

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

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

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

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

מה נותנת שכבה מנוהלת של טרנזקציות וארנקים

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

שליחה אידמפוטנטית: מחלקת כשלים בגלל שליחה כפולה נעלמת

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

מעקב סטטוס עד לאישור סופי

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

ניסיונות חוזרים ושחזור סשן

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

טיפול בכשלים עם סיבה מובחנת

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

אפשרויות חיבור: קריאות ישירות, שירות עצמאי, ספק

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

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

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

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

שלבי הטמעה: מביקורת עד מסירה ותמיכה

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

  1. ביקורת הזרימה: מפרקים היכן הממשק יוזם חתימה, איך נשמרים מפתחות וכתובות, ובאיזה שלב הולך לאיבוד סטטוס הפעולה. בפלט — רשימת צווארי בקבוק עם הערכת מאמץ.
  2. סכמת אינטראקציה: מקבעים חוזים בין הממשק, הארנק וצומת הגישה לרשת Solana — מי יוצר את הטרנזקציה, מי חותם, מי מאשר. הסכמה מסוכמת לפני השינוי הראשון בקוד.
  3. ארנקים: מחברים ספקים, מטפלים בסירוב של המשתמש, בהיעדר תוסף, בהחלפת חשבון ורשת — דרך ממשק אחיד, כדי שהלוגיקה לא תתפזר בין המסכים.
  4. סטטוסים ושגיאות: בונים מעברים «הוכנה — נחתמה — נשלחה — אושרה — נדחתה», מוסיפים ניסיונות חוזרים, פסקי זמן והגנה מפני שליחה חוזרת.
  5. בדיקת עומס: מריצים שליחות במקביל וניתוק חיבור, מודדים זמן עד אישור ושיעור פעולות שנתקעו בלי סטטוס.
  6. קבלה: צ'קליסט של ענפי חירום — חתימה שנדחתה, טרנזקציה מיושנת, צומת לא זמין, כניסה חוזרת לחשבון.
  7. מסירה לצוות: תיעוד, הרשאות, נוהל תורנות וסדר הסלמה — התמיכה ממשיכה בלי ההשתתפות שלנו.

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

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

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

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

מקרה בוחן: שיעור הטרנזקציות התקועות ירד פי שלושה

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

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

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

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

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

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

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

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

במה נבדלת הרשת הראשית מקונטור הבדיקה של Solana?

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

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

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

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

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

שאלות טכניות נפוצות על ארנקים וחתימות

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

מה אם טרנזקציה «הלכה לאיבוד» ברשת?

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

מה אם המשתמש יחליף ארנק באמצע התרחיש?

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

היכן נשמרים מפתחות פרטיים?

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

ומה בשעות שיא ובבדיקה בלי סיכון?

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

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

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

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

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