פיתוח חוזים חכמים להגרלות בבלוקצ'יין עם Chainlink VRF

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

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

שאלות נפוצות

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

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

פיתוח חוזים חכמים: היכן נשבר הגרלה הוגנת

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

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

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

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

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

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

מה נותנת אקראיות ניתנת לאימות: אפקט מדיד

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

מה זה נותן במונחים מדידים:

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

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

דרכים להשגת אקראיות: השוואת אפשרויות

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

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

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

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

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

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

פיתוח חוזים חכמים: שלבי העבודה ההנדסית

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

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

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

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

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

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

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

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

מה שבר את המכניקה

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

מה שינו ומה נהיה

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

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

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

במה אקראיות חיצונית נבדלת ממחולל פנימי?

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

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

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

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

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

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

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

האם מישהו מהמארגנים יכול להשפיע על התוצאה?

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

מה לעשות אם ספק האקראיות כשל?

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

כיצד לבדוק את הגינות ההגרלה לאחר ביצועה?

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

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

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

יש לנו כבר חוזה פרוס — יהיה צורך לכתוב אותו מחדש?

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

נדון במשימה: ממה נתחיל ומה יידרש

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

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

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