מערכת DAO להצעות: אינטגרציה עם OpenZeppelin Governor
מבוא
אנו מפתחים מערכות DAO להצעות מאפס או משתלבים עם טוקנים קיימים. בליבה נמצא OpenZeppelin Governor, מסגרת מודולרית לממשל על-רשת התואמת ל-Compound Governor Bravo. רוב פרוטוקולי ה-DeFi—Uniswap, Compound, Gitcoin, ENS—משתמשים בחוזים תואמי Governor. אינטגרציה עם Governor מספקת לא רק ממשל מובנה אלא גם תאימות לכלי אקוסיסטם: Tally, Boardroom, Snapshot. הזמינו פיתוח DAO במפתח—חוזים חכמים ל-DAO בכל מורכבות. הצבעה ללא גז מפחיתה עלויות גז למחזיקי טוקנים ב-90%, מה שחשוב במיוחד כשמחיר Ethereum גבוה.
כיצד פועל מחזור החיים של הצעה?
הצעה עוברת מצבים מוגדרים בקפדנות: ממתינה → פעילה → הצליחה/נכשלה/בוטלה → בתור → בוצעה. מחזור החיים נראה כך:
Создание → [voting delay] → Голосование → [voting period] → Подсчёт → [timelock delay] → Исполнение עיכוב הצבעה מגן מפני התקפות flash loan: ההצבעה לא מתחילה מיד לאחר יצירת ההצעה, אלא לאחר 1–2 ימים. במהלך זמן זה, התוקף לא יכול לקנות, להצביע ולמכור טוקנים בבלוק אחד. GovernorVotes קובע את משקל ההצבעה של כל כתובת בבלוק שבו ההצבעה מתחילה באמצעות מנגנון ה-checkpoint של ERC-20Votes. שינויי יתרות לאחר בלוק זה אינם משפיעים על משקל ההצבעה.
| פרמטר | ערך ברירת מחדל | המלצה |
|---|---|---|
| עיכוב הצבעה | יום אחד | 1–3 ימים להגנה מפני flash loans |
| תקופת הצבעה | שבוע אחד | 3–7 ימים (תקופה קצרה יותר מפחיתה השתתפות) |
| סף הצעה | 10,000 טוקנים | 1% מההיצע במחזור או סף האצלה |
| קוורום | 4% מההיצע הכולל | 4–10% מההיצע המואצל, לא הכולל |
מדוע אינטגרציה עם Timelock חשובה?
DAO ללא Timelock מאבד הגנה מפני התקפות מיידיות. TimelockController הוא חוזה נפרד שהופך לבעלים של חוזי הפרוטוקול. ה-Governor מעמיד את הביצוע בתור, ולאחר עיכוב (בדרך כלל 48–72 שעות) הביצוע הופך לאפשרי. זה נותן למשתתפים זמן לבדוק את הקוד פעמיים ובמידת הצורך לבטל את ההצעה. Governor ללא Timelock מסוכן פי 25: תוקף יכול לבצע הצעה זדונית מיד לאחר ההצבעה. אנו תמיד שוללים את תפקיד האדמין מהמפרסם, אחרת הם יכולים לעקוף את הממשל.
// Деплой TimelockController
TimelockController timelock = new TimelockController(
2 days, // minDelay
proposers, // только Governor может ставить в очередь
executors, // любой может исполнить (или конкретный адрес)
admin // после setup admin = address(0), убираем admin права
);
// Governor получает PROPOSER_ROLE
timelock.grantRole(timelock.PROPOSER_ROLE(), address(governor));
// Executor — open (address(0)) или конкретный address
timelock.grantRole(timelock.EXECUTOR_ROLE(), address(0));
// Отзываем admin (важно!)
timelock.revokeRole(timelock.DEFAULT_ADMIN_ROLE(), deployer); אילו מנגנוני הצבעה ניתן להגדיר?
כברירת מחדל, GovernorCountingSimple סופר בעד, נגד, נמנע. אם יש צורך בהצבעה ריבועית או הצבעה משוקללת, אנו מחליפים מודול זה ביישום מותאם אישית. ניתן לקחת כוח הצבעה לא רק מ-ERC-20Votes אלא גם מ-NFT (ERC-721Votes), טוקנים נעולים (veToken), או שקלול מותאם אישית. אנו תומכים במכניקות הצבעה מותאמות אישית, כגון הצבעה ריבועית או מימון ריבועי.
| סוג כוח הצבעה | חוזה בשימוש | מאפיינים |
|---|---|---|
| ERC-20Votes | OZ Votes | Checkpoints לכל בלוק, תאימות עם Tally |
| ERC-721Votes | OZ Votes | הצבעה לפי NFTs ייחודיים, קול אחד לכל טוקן |
| veToken | הצבעה מותאמת אישית עם escrow | נעילת הצבעה משוקללת בזמן |
קוורום כברירת מחדל מחושב מההיצע הכולל, אבל אם חלק גדול מהטוקנים אינו מואצל, הקוורום הופך לבלתי ניתן להשגה. הפתרון הוא לעקוף את הפונקציה Создание → [voting delay] → Голосование → [voting period] → Подсчёт → [timelock delay] → Исполнение כדי לחשב מההיצע המואצל.
// Пример кастомного quorum от delegated supply
function quorum(uint256 blockNumber) public view override returns (uint256) {
return totalDelegatedSupply(blockNumber) * 4 / 100;
}ניתן להגדיר סף הצעה גבוה (1% מההיצע) כדי להגן מפני ספאם, אבל עדיף להשתמש בסף האצלה—כל מחזיק יכול ליצור הצעה אם הם אוספים מספיק נציגים.
כיצד להגדיר הצבעה ללא גז?
הצבעה ללא גז מאפשרת למשתתפים להצביע ללא עלויות גז: חתימת EIP-712 נשלחת ל-relayer, אשר שולח את העסקה. אנו משתלבים עם relayers דרך Gelato או Biconomy. לשם כך, Governor חייב לתמוך ב-meta-transactions—מספיק לרשת את GovernorCompatibilityBravo ולהוסיף דומיין EIP-712. זה מוריד את חסם הכניסה לקהילה ומגביר השתתפות.
שלבי פיתוח מערכת DAO להצעות
- ניתוח הארכיטקטורה הקיימת והטוקונומיקה (ERC-20Votes או מותאם אישית).
- בחירת מודולי Governor (הצבעה, קוורום, timelock) לפי הדרישות.
- פיתוח ובדיקת חוזים חכמים ב-Solidity באמצעות Foundry.
- ביקורת אבטחה עם המנתח הסטטי Slither ו-fuzzing עם Echidna.
- פריסה לרשת הנבחרת (Ethereum, Polygon, Arbitrum) עם העברת שליטה ל-Timelock.
- הגדרת אינטגרציה עם Tally (אוטומטי) ו-Snapshot (איתות off-chain).
- הכשרת צוות ותמיכה לשבועיים לאחר הפריסה.
טעויות אינטגרציה אופייניות: שכחת העברת בעלות על חוזי הפרוטוקול ל-Timelock, קוורום שגוי (4% מההיצע הכולל עם 30% שיעור מחזור), היעדר ERC-20Votes בטוקן. אנו מתחשבים בכל הנקודות הללו בשלב התכנון.
מה כלול בעבודה?
אנו מספקים:
- תיעוד ארכיטקטוני ודיאגרמות.
- קוד חוזים חכמים ב-Solidity 0.8.x עם בדיקות (Foundry) ואימות פורמלי (Slither, Mythril).
- אינטגרציה עם Tally (מובנית) ו-Snapshot (איתות off-chain).
- פריסה והגדרה של TimelockController עם שלילת תפקיד אדמין.
- הצבעה ללא גז דרך relayers (EIP-712).
- הכשרת צוות ותמיכה לשבועיים.
אנו נעריך את הפרויקט שלכם תוך 1–2 ימים. צרו קשר כדי לדון בפרטים ולקבל ייעוץ. הזמינו פיתוח מערכת DAO להצעות עם ערובה לאבטחה. מעל 50 פרויקטים של חוזים חכמים שיושמו—אנו מבטיחים ארכיטקטורה אמינה ומאובטחת.







