מכניקות NFT למשחקים: גישה היברידית on-chain/off-chain

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

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

שאלות נפוצות

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

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

NFT דינמיים: מה נשבר בעדכונים תכופים

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

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

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

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

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

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

מה נותנת הסכימה ההיברידית: אפקט בערכים מדידים

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

מהירות הנפקת אירועים

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

שיעור הפעולות מחוץ לרשת

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

סוגי כשלים שהוסרו

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

התאוששות לאחר תקלה

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

עומס צפוי לעונה

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

השוואת מצבים: כולו ברשת, היברידי, מחוץ לרשת

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

מקרה בוחן: NFT דינמיים בעונת משחק, מטריקות לפני ואחרי

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

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

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

מטריקות לפני ואחרי

  • זמן הנפקת פריט בשיא העונה — מ-40 דקות ל-6-9 שניות;
  • שיעור הפעולות מחוץ לרשת — 97%, לבלוקצ'יין עוברות כ-3%;
  • פניות לתמיכה במהלך העונה — פי ארבעה פחות;
  • עומס שיא — 12,000 פעולות בדקה בלי פסקי זמן.

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

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

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

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

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

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

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

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

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

ספקות טכניים: עומס, שלמות, זכויות שחקנים

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

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

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

מה יקרה אם שרת המשחק אינו זמין?

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

האם אפשר לזייף מאפייני פריט?

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

בואו נדבר על המשימה: ממה מתחילה עונת פיילוט

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

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

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

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