פיתוח Mines על הבלוקצ'יין: חוזה חכם, VRF, provably fair

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

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

שאלות נפוצות

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

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

פיתוח Mines: היכן נשברת הגינות המשחק

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

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

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

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

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

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

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

מה נותנת לוגיקת החוזה של Mines על הבלוקצ'יין

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

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

את האקראיות אנחנו לוקחים ממקור מאומת Chainlink VRF: לא ניתן לחזות את הערך לפני הבקשה ולא ניתן לשנות את המשחק לאחר התשובה.

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

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

סכמות יצירת שדה: השוואת גישות

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

סכמה מתי מתאימה מגבלות
on-chain מלא שקיפות מקסימלית, התוצאה נראית בחוזה כל משחק הוא טרנזקציה; בעומס גבוה גדלים ההשהיות וצריכת הגז
היברידי עם אורקל אקראיות (VRF) נדרשת תגובה מהירה וזרע הניתן לאימות תלות בספק אקראיות חיצוני ובזמינות שלו
Commit-reveal השחקן עצמו משפיע על הזרע, מינימום תלויות חיצוניות החשיפה דורשת שני שלבים; במקרה של קנוניה בין הצדדים הזרע צפוי מראש

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

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

מפרטים כיצד לבחור סכמה לתרחיש שלכם.

שלבי פיתוח Mines במפתח סופי

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

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

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

ארטיפקטים שנשארים אצל הלקוח

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

  • קוד מקור של החוזה החכם Mines עם הערות ללוגיקת המשחק: פריסת השדה, חישוב המכפילים, מגבלות ההימורים, טיפול במשיכה ובעמלות. נבנה ונפרס באופן משוחזר — לפי ההוראות ב-README, בלי "קסם" בסקריפטי הפריסה.
  • תרשים אינטגרציה עם ספק VRF: כיצד מתבקשת האקראיות, היכן נשמר ה-seed וה-commit-хеш, ובאיזה רגע הסיבוב נחשב לסגור. בנפרד — תרשים זרימה מההימור ועד החישוב והנקודות שבהן יכול המבקר להתערב.
  • מדיניות גישה למפתחות: תפקידי מנהל, מפעיל ומבקר, הפרדת הרשאות לשדרוג, השהיה ומשיכת כספים. מפתחות פרטיים אינם יוצאים מהמחסן של הלקוח — אנחנו עובדים דרך ריבוי חתימות והרשאות זמניות.
  • נוהל עדכון החוזה: סדר העלייה של גרסה חדשה, בדיקה ברשת בדיקות, חלון החזרה לאחור ותנאים שבהם השדרוג נחסם אוטומטית. בנוסף צ'ק-ליסט מה לבדוק לפני הפרסום.
  • תיעוד לבדיקת הגינות (provably fair): הוראה שלב-אחר-שלב כיצד שחקן או מבקר בלתי תלוי מחשב מחדש את תוצאת הסיבוב מה-seed וה-commit-хеш, עם דוגמאות ווקטורי בדיקה.
  • תרשים נתונים וחוזי API: פורמטים של בקשות בין הפרונטאנד, הבקאנד והחוזה, קודי שגיאה, מגבלות — כדי שהאינטגרציה עם הוויטרינה שלכם לא תיתקל בניחושים.
  • דוח בדיקות: כיסוי תרחישי המשחק, תוצאות הרצות עומס ורשימת וקטורי התקיפה שנבדקו על מחולל האקראיות.

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

מקרה בוחן: כיצד Mines הפסיקו להיות נושא למחלוקות

מה היה לפני

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

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

מה שינו

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

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

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

מה נהיה

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

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

במה VRF שונה מ-commit-reveal ב-Mines

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

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

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

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

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

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

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

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

ספקות טכניים לפני ההתחלה

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

האם זה תואם לסטאק ולפרונטאנד הנוכחיים שלנו?

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

האם החוזה יעמוד בעומס בשיא הפעילות?

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

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

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

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

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

איך השחקן יוודא הגינות בלי לראות את לוגיקת החוזה?

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

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

בואו נדון במשימה שלכם לפיתוח Mines

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

מה שכדאי להבהיר כבר בהתחלה:

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

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