הגדרת Foundry לפיתוח חוזים חכמים

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

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

שאלות נפוצות

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

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1481
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1335
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1034
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1293
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    738
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1031

הגדרת Foundry לפיתוח חוזים חכמים

אנו משלבים את Foundry בצנרת פיתוח החוזים החכמים שלך. בניגוד ל-Hardhat, Foundry המבוסס על Rust מספק שיפור מהירות של עד פי 50 בבדיקות, אך הוא דורש הגדרה נכונה של פרופילים ותלויות. ללא זאת, אתה מסתכן בבנייה לא יציבה או בפספוס בעיות reentrancy במהלך הבדיקות.

חייו של מפתח בלוקצ'יין הם לולאה אינסופית: קומפילציה, הרצת בדיקות, מציאת באג, תיקון, הרצה חוזרת. Foundry הופך את המחזור הזה למהיר פי עשרות מונים, אבל כדי לנצל את הפוטנציאל שלו, אתה צריך את ההגדרה הנכונה. אנו נגדיר אותו עבורך מוכן לשימוש. ב-5 שנות עבודה, הגדרנו את Foundry ליותר מ-50 פרויקטים—מ-ERC-20 פשוטים ועד פרוטוקולי DeFi מורכבים על L2.

למה Foundry מהיר יותר מ-Hardhat

Foundry כתוב ב-Rust ומקמפל Solidity ישירות דרך solc, מה שמבטל שכבות ביניים. בדיקות רצות בסביבה טבעית, ו-fuzzing עובד ישירות מהקופסה. התוצאה היא קומפילציה ובדיקות מהירות פי 10–50 בפרויקטי DeFi טיפוסיים. כפי שצוין בתיעוד Foundry, בדיקת ביצועים על פרויקט עם 200 בדיקות מראה 3 שניות לעומת 45 שניות עבור Hardhat.

התקנה והגדרה בסיסית

הפקודה foundryup מתקינה את ערכת הכלים העדכנית ביותר. פרויקט מאותחל באמצעות forge init my-project. המבנה הבסיסי:

my-project/ ├── foundry.toml ├── src/ ├── test/ ├── script/ └── lib/ 

הקובץ my-project/ ├── foundry.toml ├── src/ ├── test/ ├── script/ └── lib/ הוא לב ליבה של ההגדרה. אנו מגדירים שני פרופילים: אחד מהיר לפיתוח מקומי ואחד מעמיק יותר ל-CI.

פרמטר [profile.default] [profile.ci]
fuzz.runs 1000 10000
invariant.runs 256 1000
invariant.depth 500 1000

גישה זו מאפשרת לבדוק לוגיקה בסיסית תוך דקות מקומית ולקבל תוצאות אמינות ב-CI.

[profile.default]
src = "src"
out = "out"
libs = ["lib"]
solc = "0.8.24"
optimizer = true
optimizer_runs = 200
fuzz = { runs = 1000 }
invariant = { runs = 256, depth = 500 }

[profile.ci]
fuzz = { runs = 10000 }
invariant = { runs = 1000, depth = 1000 }

איך להגדיר פרופיל CI ב-Foundry?

פרופיל ה-CI דורש fuzzing אגרסיבי יותר ועומק גדול יותר לבדיקות invariant. הגדר אותו בנפרד ב-[profile.default] src = "src" out = "out" libs = ["lib"] solc = "0.8.24" optimizer = true optimizer_runs = 200 fuzz = { runs = 1000 } invariant = { runs = 256, depth = 500 } [profile.ci] fuzz = { runs = 10000 } invariant = { runs = 1000, depth = 1000 } והרץ באמצעות foundry.toml. בצנרת ה-CI אנו גם מפעילים forge test --profile ci -vvv ובדיקות Slither נוספות.

תלויות באמצעות forge install

אנו מושכים את OpenZeppelin, forge-std וספריות אחרות.

forge install OpenZeppelin/openzeppelin-contracts forge install foundry-rs/forge-std 

לאחר ההתקנה, הוסף remappings:

remappings = [ "@openzeppelin/=lib/openzeppelin-contracts/", "forge-std/=lib/forge-std/src/", ] 

תלויות מאוחסנות כ-git submodules—זהו התקן של Foundry, המבטיח שחזוריות.

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

איך להגדיר בדיקות Fork עם Anvil?

Anvil הוא צומת מקומי עם יכולת fork של mainnet. זו תכונה מרכזית לבדיקות אינטגרציה.

anvil --fork-url $MAINNET_RPC --fork-block-number 19000000 --chain-id 1 

אתה מקבל עותק של מצב ה-mainnet בבלוק מסוים ללא mocks. הניסיון שלנו מראה שבדיקות fork תופסות שגיאות לא ברורות שבדיקות יחידה מפספסות. בפרויקט אחד, בדיקת invariant מצאה שלוש שגיאות לוגיות ב-20 דקות שבדיקות ידניות פספסו: בשרשרת --gas-report, totalSupply סטה ב-1 wei בגלל עיגול.

בדיקות Fuzz ו-Invariant

Fuzzing עובד אוטומטית—פשוט העבר פרמטר אקראי לבדיקה.

function testFuzz_Deposit(uint256 amount) public {
    amount = bound(amount, 1, 1e27);
    token.mint(alice, amount);
    vm.prank(alice);
    vault.deposit(amount);
    assertEq(vault.balanceOf(alice), amount);
}

בדיקות invariant מוודאות שהאינווריאנטים של המערכת מתקיימים לאחר כל רצף של קריאות.

function invariant_TotalSupplyEqualsDeposits() public { assertEq(vault.totalSupply(), vault.totalDeposits()); } 

אינטגרציית CI (GitHub Actions)

אנו מגדירים צנרת שמריצה בדיקות עם פרופיל ה-CI בכל commit.

---
- name: Install Foundry
  uses: foundry-rs/foundry-toolchain@v1
- name: Run tests
  run: forge test --profile ci -v
  env:
    FOUNDRY_ETH_RPC_URL: ${{ secrets.MAINNET_RPC }}
---

מה כלול בהגדרה

  • הגדרת foundry.toml עם פרופילי default/ci
  • התקנה ו-remapping של תלויות (OpenZeppelin, forge-std)
  • הגדרת Anvil עם fork של mainnet לבדיקות אינטגרציה
  • כתיבת בדיקות fuzz ו-invariant בסיסיות
  • צנרת CI עם GitHub Actions (GitLab, CircleCI לפי בקשה)
  • תיעוד על הדגלים והפקודות שבשימוש

לוחות זמנים

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

למה לבחור בהגדרה שלנו?

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

צור קשר כדי לקבל ייעוץ על הגדרת Foundry לפרויקט שלך. אנו נעריך את המשימות שלך ונציע את הפתרון האופטימלי.

הערה: עלויות ההגדרה תלויות בהיקף העבודה ונקבעות באופן אישי.