מאת: ברט מקליין, מנהל הנדסה - Crypto, Fiat, Staking
אם אתה מעוניין במטבעות קריפטוגרפיים, תשלומים או הימורים ורוצה לעזור לבנות את המערכת הפיננסית של העתיד, צוות ההנדסה המממנת @ Kraken מגייסת עובדים!
כאשר קראקן הושק לפני עשור, רק שלושה מטבעות קריפטוגרפיים נתמכו: BTC, LTC ו-XRP.
כיום, Kraken תומכת ב-82 נכסים ב-33 בלוקצ'יין, ובשירותי הימור עבור 8 מטבעות קריפטוגרפיים.
כדי להקל על מיליוני ההפקדות, המשיכות ועסקאות ההימור בשנה בקרקן, צוות הנדסת הקריפטו מפעיל מאות שירותים כדי להבטיח זרימה חלקה של כספים אל הבורסה וממנה. תוכנת הבלוקצ'יין העומדת בבסיס השירותים הללו מתעדכנת לעתים קרובות; עבור חלק מה-blockchains הפעילים יותר, מזלגות קשיחים ורכים יכולים להיות חודשיים בטבע בעוד שאחרים כמו Ethereum הם אירועים שנתיים פעמיים. באופן כללי יש לפחות כמה עדכוני תוכנה לתשתית הבלוקצ'יין שלנו מדי שבוע.
האתגר של תמיכה ועדכון של מספר כה גדול של שירותים שונים, ובמקביל לבנות חדשים יכול להיות מרתיע.
ב-12 החודשים האחרונים הצוות שלנו הוסיף תמיכה עבור:
- 60 מטבעות קריפטוגרפיים חדשים:
- 39 x ERC20 אסימונים
- Polkadot (בהשקת הרשת)
- קוסאמה
- Filecoin (בהשקת הרשת המרכזית)
- זרימה (בהשקת הרשת המרכזית)
- קאבה
- Energy Web Token (בהשקת Mainnet)
- USDT (TRC20)
- 10 x Parachain הלוואות המונים
- סולאנה
- 1 x אסימון SPL (סרום)
- מינה
- 8 נכסי החזקה חדשים:
- Polkadot (בהשקת הרשת)
- קוסאמה
- Ethereum 2.0 (בהשקת ה-mainnet)
- זרימה (בהשקת הרשת המרכזית)
- קרדנו
- קוסמוס
- קאבה
- סולאנה
הישגים אלו הושגו לצד התחזוקה של האינטגרציות הקיימות שלנו. המהנדסים של צוות הקריפטו אחראים לא רק לתוכנת השער שנכתבה בבית, אלא גם לתחזוקה ופריסה של תשתית הבלוקצ'יין שלנו שעליה מסתמכים השערים שלנו. קצב הפיתוח של בלוקצ'יין בפרויקטים אלה יכול להיות שלפוחית, עם שינויים פורצים ותכונות חדשות חדשות שמגיעות לעתים קרובות ולפעמים עם אזהרה קטנה.
אז איך Kraken מצליח לשחרר עשרות מוצרים חדשים מדי שנה תוך עמידה בקצב המהיר של פיתוח הבלוקצ'יין?
מבחנים מקצה לקצה (E2E)!
מדוע אנו מעריכים בדיקות E2E ונמנעים מלגלגים
מאז הימים הראשונים בקרקן, הדגש היה שמבחני E2E הם הסוג החשוב ביותר של בדיקות שמהנדס יכול לבנות. למבחני יחידות יש את מקומם, אבל מפתחים רבים שאינם מנוסים באינטגרציות מורכבות נוטים לכתוב מבחני יחידות עבור כל פיסת קוד שהם בונים מתוך אמונה שהם משפרים את האיכות הכוללת של התוכנה שהם מפתחים.
השביל הזה, למרות שהוא מלא בכוונות טובות, יכול להוביל לרוב לכאב רב בהמשך הדרך. הסתמכות יתר על בדיקות יחידות נוטה למלט את הארכיטקטורה שלך; זה כמו לשפוך שכבה של אפוקסי על גבי כל בסיס הקוד שלך. אתה מחבר היטב את הקוד למבחנים שלו, מה שהופך את הקוד ליותר נוקשה, לא גמיש ועמיד בפני שיחזור. אם אתה צריך לעשות שינוי, סביר להניח שתצטרך לבצע שינויים משמעותיים בבדיקות, ובמקרים מסוימים, לזרוק אותם לחלוטין. קוד Refactoring הוא יכולת מפתח שיש לצוות הנדסה בערכת הכלים שלו, וכל מה שמוסיף חיכוך לקלות ה- Refactoring צריך להעריך בקפידה לפני הצגתו. בעת עיבוד מחדש של קוד, בדיקת E2E מתוכננת היטב לרוב אינה דורשת שינויים רבים, ומספקת גמישות בהתאמת הקרביים הפנימיים של אפליקציה תוך הבטחה שהיא תמשיך לפעול כמצופה.
האם זה אומר שאסור לכתוב בדיקות יחידה? בכלל לא! ישנם תרחישים רבים שבהם בדיקות יחידה הן הפתרון המושלם, אולם מצאנו כי עבור אינטגרציות מורכבות, בדיקות E2E עובדות טוב יותר. באופן כללי, מבחני יחידה הם היעילים ביותר כאשר הם נכתבים עבור קוד שעומד בקריטריונים הבאים:
- מורכבת אלגוריתמית עם מקרי קצה רבים.
- בהיקף הדוק עם דרישות מוגדרות היטב.
- משלים יחידת עבודה אחת.
- חסר מדינה.
חלקי הקוד המורכבים והקטנים הללו הם לרוב אבני הבניין של יישום גדול יותר, וגם אם מתרחש מהפך, פונקציות אלה לא ישתנו. בעולם שלנו זה יהיו דברים כמו גזירת כתובת, אימות כתובת, חתימה על עסקאות וכו'.
הנקודה העיקרית כאן היא שכצוות הנדסה קטן, אין סיכוי שנוכל אי פעם לשמור על נפח השירותים שאנו תומכים בהם כרגע, ו לבנות מוצרים חדשים ללא בדיקות מקצה לקצה. בדיקות יחידה צריכות להיחשב כנקודות שולחן, אבל כשלעצמן, הן לא יספיקו לנו כדי לעמוד בקצב במרחב המתפתח הזה. במקום זאת, בחרנו להשקיע רבות במערכות יציבות של אינטגרציה ובדיקות E2E המאמתות שהשירותים שלנו יפעלו בהצלחה במצבי הפעולה הנפוצים ביותר שלהם.
אתגרים של מבחני E2E
למרות שמבחני E2E יכולים להיות חזקים, הם לא תרופת פלא. בעת אינטגרציה עם שירותי צד שלישי, סוגים אלה של בדיקות מאבדים לעתים קרובות חלק גדול מערכם מכיוון שצריך ללעוג לנקודות קצה או ממשקים מסוימים כדי לבחון באופן מלא את הזרימה של פונקציה או קריאה ספציפית. דוגמיות טובות רק כמו ההבנה שלך לגבי השירות שאתה לועג, וכתוצאה מכך, הם עלולים להיות מועדים לשגיאות כאשר העדכונים הם תכופים ובעלי אופי גדול. שמירה על הקוד שלך כמו גם הלעגים שלך היא הפרה של עקרון ה-DRY (אל תחזור על עצמך), מונח שטבעו דיוויד תומאס ואנדרו האנט ב"המתכנת הפרגמטי". בספרם הם מציינים כי "לכל פיסת ידע חייב להיות ייצוג יחיד, חד משמעי, סמכותי בתוך מערכת." יצירת גרסה לעגנית של שירות כלשהו פירושה שיש כעת שני עותקים שונים בפוטנציה של השירות האמור: הגרסה הנלעגת שלך והגרסה בפועל. שגיאות בתרגום התנהגות התלות הנלעגת הן כעת דאגה נוספת שיש לתת עליהן את הדעת.
מבצעים רגועים להצלה
למרבה המזל עבורנו, רוב הבלוקצ'יין תומכים ביכולת להפעיל רשתות פרטיות זמניות שניתן להקים כחלק מתהליך האינטגרציה המתמשכת (CI) / פריסה רציפה (CD) שלנו. הדוגמה הפופולרית ביותר לכך היא מצב מבחן הרגרסיה (regtest) של ביטקוין. כאשר אתה מתחיל bitcoind עם אפשרות `-regtest`, זה יוצר סביבת בלוקצ'יין מקומית חדשה שיש לך שליטה מלאה עליה. המאפיין המרכזי של מצב ה-Rightst הוא שאתה יכול לכרות מספר שרירותי של בלוקים כרצונך, מה שמאפשר לבדיקות ה-E2E שלך להשלים נסיעות הלוך ושוב להפקדות ומשיכות מכל הסוגים והווריאציות, תוך הדמיה של מאות תרחישים תוך שניות. ניתן בקלות לדמות מקרי קצה ותרחישים ייחודיים אחרים במצב הנכון ביותר, כמו עסקאות מולטי-sig, ארגונים מחדש, החלפה בתשלום (RBF), ילד משלם עבור הורה (CPFP), ועוד! לא רק שהבדיקות האלו מבטיחות שהקוד שלנו לא מכיל שגיאות, זה גם מאמת את מצב הקצה של הבלוקצ'יין והפנקסים שלנו כדי להבטיח שהכל פועל כמצופה.
כחלק מהתהליך להוספת תמיכה במטבע קריפטוגרפי חדש ב-Kraken, צוות המימון בונה מסגרת נכונה ביותר עבור כל הרישומים החדשים. הקוד הזה הוא הבסיס למשטר התחזוקה שלנו: בכל פעם שגרסה חדשה משוחררת, זה פשוט עניין של לעדכן את גרסת הצומת של הבלוקצ'יין ולהריץ מחדש את צינור ה-CI שלנו כדי להבטיח שאין שינויים פורצים. קריאה מדוקדקת של הערות השחרור ושיתוף פעולה עם הקהילה עדיין נחוצים מאוד, אבל המבחנים האלה נותנים לנו ביטחון בשחרור גרסאות חדשות שאם לא כן, לא היו לנו.
פתרונות יצירתיים
לרוע המזל עבורנו, לא כל הבלוקצ'יין נבדק בקרב כמו ביטקוין. רשתות בלוקצ'יין חדשות מציגות לעתים קרובות מושגים חדשים, וכדי להציע ללקוחותינו גישה לטכנולוגיות החדשות והמרגשות ביותר, Kraken מעדיף להשיק תמיכה בבלוקצ'יין חדשים קרוב ככל האפשר לתחילת הרשת המרכזית. כדי לתמוך בבטחה בנכס חדש בתאריך ההשקה או בסמוך למועד ההשקה, Kraken צריך לפעמים לפתח רתמות בדיקה מורכבות כדי לקבל אמון באינטגרציה וכדי להבטיח שכספי לקוחות אינם בסיכון.
המחשה מושלמת לכך היא כאשר Kraken השיקה תמיכה ב-Ethereum 2.0 רק 3 ימים לאחר שהרשת המרכזית עלתה לאוויר ב-1 בדצמבר 2020. למרות שאלפי אנשים וחברות ברחבי העולם עזרו לבחון את Ethereum 2.0 ברשתות בדיקה מרובות כמו Medalla ו-Spadina, אנחנו עדיין החליט לקחת את המושג של ממשסטים לרמה אחרת לגמרי עם האינטגרציה הזו. ידענו בשלב מוקדם ש-Ethereum 2.0 יהיה פיתוח משמעותי, והאמונה הזו הוכיחה את עצמה כשמיליוני ETH היו מוחזקים עד כה על שרשרת המשואות, כולל יותר מ-800,000 ETH שלקוחות Kraken מחזיקים בהימור.
למטה תוכלו לראות תרשים של מערך השירותים שצינור האינטגרציה המתמשכת (CI) שלנו מסתובב ומתפרק בכל פעם שמפתח מחייב קוד לאחד ממאגרי הקוד ETH2 שלנו.
ברמה גבוהה, זרימת הבדיקה היא:
- התחל את הצמתים הראשוניים והחלופיים של ETH1 (כל אחד מהם כורת בתורו למען קונצנזוס) עם יצירה שמכילה כמות התחלתית של ETH לבדיקה.
- התחל את צומת שרשרת המשואות של ETH2 כשרשרת פרטית באמצעות מצב תצורה מינימלי מיוחד שבו יש צורך ב-16 מאמתים בלבד כדי להפעיל את הבראשית.
- פרוס חוזה חכם ETH2 לבלוקצ'יין ETH1.
- הפקד ETH בחוזה ההפקדה של ETH2 שבו הכספים נצרבים ומאמתים נוצרים בצומת האימות החיצוני של ETH2. אלו הם מאמתים שרק מפעילים את רשת ETH2 ומתייחסים אליהם כאילו הם חיצוניים לכל מאמת Kraken.
- הפעל את חוקרים בלוק ETH1 ו-ETH2.
- התחל מסד נתונים.
- התחל שער וחתומים.
- הכנס בקשות לקוח ל-ETH -> ETH2.
- שער קולט בקשות לקוח ושולח את ETH לחוזה ההפקדה ב- ETH1 blockchain ויוצר מספר מתאים של מאמתים בצומת האימות הפנימי של ETH2. המאמתים מופרדים למערכות אימות פנימיות וחיצוניות, כך שנוכל לבדוק מה קורה כשהמאמתים שלנו יורדים (לבדיקת חיתוך, עונשים, פרסים שאבדו), וכדי לראות מה קורה כאשר שאר הרשת נופלת או במצב לא מקוון אבל המאמתים שלנו להישאר למעלה.
- עקוב עד שהמאמתים יהיו פעילים בשרשרת ETH2, התחל לעקוב אחר תגמולים, תשלומים, חיתוך בדיקות ועונשים, איתור תגמולים שאבדו ושלם תגמולים ללקוחות.
- הפעל את תהליך ההתאמה הפיננסי הנפרד שלנו על כל העסקאות כדי להבטיח שהכל בכל ספרי החשבונות שלנו תואם כהלכה.
האמור לעיל הוא רק סיכום ברמה גבוהה של מה שקורה במסגרת המבחן שלנו; יש עוד מספר בדיקות, בדיקות ואימותים שמתרחשים. אם מפתח צריך לנפות באגים במשהו או להסתכל על המצב של אחת מהרשתות, הוא יכול להתייעץ עם חוקרי הבלוקים כדי לראות מה בדיוק התרחש במבט חטוף. אנחנו בדרך כלל לא כוללים חוקרים בלוקים בצנרת ה-CI שלנו, אבל בהתחשב במורכבות האינטגרציה, זה היה מועיל בשלב הפיתוח לדמיין מה קורה על השרשרת.
אתה עשוי לחשוב שזה מוסיף עיכוב עצום לצינור ה-CI שלנו, אבל זה לא המקרה למרבה המזל. נכון לעכשיו, צינור ה-CI המלא עבור ריפו Ethereum 2.0 שלנו לוקח רק 14 דקות לפעול. זה כולל ביקורת / בניית כל התלות, התחלת כל השירותים, פריסת חוזים חכמים שונים לבלוקצ'יין, כריית בלוקים, יצירת אימות ולאחר מכן ריצה של כל 100+ תרחישי הבדיקה.
מחשבות סופיות
פיתוח מבחני E2E מקיפים עבור כל אינטגרציה בודדת של בלוקצ'יין בקרקן גוזל כמות משמעותית של משאבים הנדסיים. זה מחיר שאנו משלמים בשמחה, שכן הדאגה העיקרית שלנו היא בטיחות הכספים של הלקוחות שלנו והבטחת חוויה איכותית בפלטפורמה שלנו. האם הצוות שלנו יכול לשחרר יותר מוצרים אם נקדיש פחות זמן לבדיקות בעת בניית אינטגרציות חדשות? בלי שאלה. עם זאת, פעולה זו תצא נגד האתוס והערכים של לא רק צוות ההנדסה, אלא של החברה כולה. בדיקות אלו מבטיחות שנוכל לעדכן בבטחה לגרסאות חדשות של תוכנת בלוקצ'יין, להגביר את הביטחון במהלך מזלגות קשים/רכים ולהפחית את הלחץ של מפתחים בעת פריסת שינויים.
מדוע מהנדסי קראקן הם מהמכובדים ביותר בתעשייה? ההודעה הזו מסטיב האנט, סמנכ"ל ההנדסה של Kraken, מתאר את הערכים והמסירות שלנו לעזור למהנדסי בלוקצ'יין אחרים.
מקור: https://blog.kraken.com/post/10227/testing-crypto-payments-staking-at-kraken/
- &
- 000
- 11
- 2020
- גישה
- חֶשְׁבּוֹן
- פעיל
- תעשיות
- כל העסקאות
- מאפשר
- בקשה
- ארכיטקטורה
- סביב
- נכס
- נכסים
- קרב
- שרשרת משואה
- ביטקוין
- blockchain
- BTC
- לִבנוֹת
- בִּניָן
- שיחה
- מקרים
- לאתגר
- שינוי
- בדיקות
- ילד
- קוד
- שיתוף פעולה
- מגיע
- Common
- קהילה
- חברות
- חברה
- אמון
- קונסנסוס
- ממשיך
- חוזה
- חוזים
- יוצרים
- קריפטו
- -
- מטבע מבוזר
- מסד נתונים
- עסקה
- עיכוב
- איתור
- לפתח
- מפתח
- מפתחים
- צעצועי התפתחות
- מְנַהֵל
- מוקדם
- אדג '
- אפקטיבי
- מהנדס
- הנדסה
- מהנדסים
- סביבה
- ERC20
- ETH
- ethereum
- אתריום 2.0
- אֶתוֹס
- אירועים
- חליפין
- מהר
- מאפיין
- תכונות
- צו
- כספי
- גמישות
- תזרים
- מסגרת
- מלא
- פונקציה
- מימון
- כספים
- עתיד
- כללי
- ספר בראשית
- טוב
- גדול
- כאן
- גָבוֹהַ
- בית
- איך
- HTTPS
- מאות
- כולל
- להגדיל
- תעשייה
- תשתית
- השתלבות
- ואינטגרציות
- בדידות
- IT
- שמירה
- מפתח
- ידע
- קראקן
- גָדוֹל
- לשגר
- עוֹפֶרֶת
- רמה
- רישומים
- מקומי
- LTC
- עשייה
- כרייה
- חודשים
- הכי פופולארי
- מולטי-סיג
- רשת
- תכונות חדשות
- מוצרים חדשים
- צמתים
- הַצָעָה
- פועל
- אפשרות
- להזמין
- אחר
- כְּאֵב
- תשלום
- תשלומים
- פלטפורמה
- פופולרי
- מחיר
- פְּרָטִי
- מוצרים
- פרויקטים
- איכות
- קריאה
- להפחית
- הסתמכות
- דרישות
- משאבים
- REST
- תגמולים
- הסיכון
- הפעלה
- ריצה
- בְּטִיחוּת
- מסך
- שירותים
- סט
- קטן
- חכם
- חוזה חכם
- חוזים חכמים
- So
- תוכנה
- מֶרחָב
- יתד
- סטקינג
- התחלה
- מדינה
- לחץ
- תמיכה
- נתמך
- תומך
- מערכת
- טכנולוגיות
- זמני
- מבחן
- בדיקות
- בדיקות
- זמן
- אסימון
- חלק עליון
- מעקב
- עסקה
- עסקות
- עדכון
- עדכונים
- us
- ערך
- כֶּרֶך
- אינטרנט
- שבוע
- בתוך
- תיק עבודות
- עוֹלָם
- X
- Xrp
- שנה