תארו לעצמכם: אתם פורסים חוזה על Arbitrum, אחר כך על Polygon, ואז על BSC. חמש רשתות — חמש הרצות של --verify, חמש העתקות של כתובות, חמש בדיקות אימות בסיירי בלוקים. שגיאת הקלדה אחת — ושעות של ניפוי באגים. זה הכאב האמיתי עבור צוותים שעבדנו איתם. הניסיון שלנו — מעל 5 שנים בבלוקצ'יין, עשרות פריסות מוצלחות על פני יותר מ-10 רשתות EVM — מבטיח לכם להימנע מטעויות אלה. אנו משתמשים בכלים מורשים ובפרקטיקות מוסמכות.
אוטומציה של פריסה מרובת-רשתות עם Foundry פותרת זאת באמצעות סקריפט יחיד, חוסכת 50% מהזמן ומבטלת טעויות אנוש. חיסכון בתקציב DevOps מגיע ל-80% — הוכח בפרויקטים של לקוחות. רוצים את אותה תוצאה? צרו קשר לייעוץ בנושא ארכיטקטורה.
למה פריסה אוטומטית היא חובה לפרויקטים מרובי-רשתות?
פריסה ידנית על פני 5 רשתות אורכת 30–60 דקות. עם Foundry — 2–5 דקות. אידמפוטנטיות: הרצה חוזרת לא יוצרת כפילויות. אימות אוטומטי דרך --verify. קנה מידה: סקריפט אחד ל-N רשתות. זו לא רק נוחות אלא הכרח עבור אפליקציות חוצות-רשתות שבהן כתובות חייבות להתאים. ה-deployer הדטרמיניסטי של Foundry (0x4e59b44847b379578588920cA78FbF26c0B4956C) קיים בכל רשתות ה-EVM, ומאפשר CREATE2 ללא עסקאות נוספות.
איך להימנע מטעויות אנוש במהלך פריסה?
אוטומציה מבטלת הזנה ידנית של כתובות ובדיקות. השתמשו ב-CREATE2 עם salt קבוע — אותה כתובת בכל הרשתות. סקריפט אידמפוטנטי מונע פריסה חוזרת. אימות אוטומטי דרך Script בכל סייר בלוקים. אנו מבטיחים שאחרי ההתקנה, לא תיתקלו בשגיאות nonce או בכתובות שאבדו.
מבנה של סקריפט פריסה ב-Foundry
סקריפט Foundry הוא חוזה Solidity שיורש מ-forge-std מתוך forge script --broadcast. הוא מכיל את לוגיקת הפריסה שמופעלת דרך vm.readFile.
לפריסה מרובת-רשתות, המפתח הוא ניהול תצורה לכל רשת. גישה סטנדרטית: קובץ JSON עם פרמטרים לכל רשת, שנקרא דרך stdJson ומנותח דרך deployments/ config.json # { "arbitrum": { "fee": 100 }, "polygon": { ... } } arbitrum.json # { "MyContract": "0x..." } (после деплоя) polygon.json script/ Deploy.s.sol .
deployments/
config.json # { "arbitrum": { "fee": 100 }, "polygon": { ... } }
arbitrum.json # { "MyContract": "0x..." } (после деплоя)
polygon.json
script/
Deploy.s.solב-Deploy.s.sol, קראו את התצורה דרך vm.readFile, פרסו עם הפרמטרים הנדרשים, כתבו את הכתובת ל-JSON. הקוד חייב להיות אידמפוטנטי: השתמשו ב-vm.assertEq כדי למנוע כפילויות.
| רכיב | מטרה |
|---|---|
| config.json | פרמטרי רשת (עמלה, אורקל, startBlock) |
| deployments/*.json | קבצים עם כתובות לאחר פריסה |
| Deploy.s.sol | לוגיקת הפריסה הראשית |
איך להגדיר GitHub Actions לפריסה על 5 רשתות?
הגדרת CI/CD כוללת את השלבים הבאים:
- הגדרת foundry.toml עם נקודות קצה RPC ומפתחות API.
- יצירת סקריפט פריסה באמצעות CREATE2.
- כתיבת סקריפט bash להרצת פריסה על מספר רשתות.
- הגדרת GitHub Actions עם מטריצת רשתות.
- הרצת בדיקות על testnet לפני mainnet.
דוגמה לסקריפט bash:
CHAINS=("arbitrum" "polygon" "optimism" "base" "bsc")
for chain in "${CHAINS[@]}"; do
forge script script/Deploy.s.sol \
--rpc-url $chain \
--broadcast \
--verify \
--etherscan-api-key $ETHERSCAN_API_KEY \
-vvv
doneלפריסה מלאה מרובת-רשתות, השתמשו במטריצה ב-GitHub Actions:
---
strategy:
matrix:
chain: [arbitrum, polygon, optimism, base, bsc]
steps:
- run: forge script ... --rpc-url ${{ matrix.chain }}דוגמה לתצורת foundry.toml:
[rpc_endpoints]
arbitrum = "${ARBITRUM_RPC_URL}"
polygon = "${POLYGON_RPC_URL}"
[etherscan]
arbitrum = { key = "${ARBISCAN_API_KEY}" }
polygon = { key = "${POLYGONSCAN_API_KEY}" } כתובות דטרמיניסטיות דרך CREATE2
למערכות חוצות-רשתות, לעיתים קרובות קריטי שהחוזה יהיה בעל אותה כתובת בכל הרשתות. CHAINS=("arbitrum" "polygon" "optimism" "base" "bsc") for chain in "${CHAINS[@]}"; do forge script script/Deploy.s.sol \ --rpc-url $chain \ --broadcast \ --verify \ --etherscan-api-key $ETHERSCAN_API_KEY \ -vvv done מחשב את הכתובת מתוך strategy: matrix: chain: [arbitrum, polygon, optimism, base, bsc] steps: - run: forge script ... --rpc-url ${{ matrix.chain }} . אותו deployer עם אותו salt מניב את אותה כתובת בכל מקום.
ב-Foundry: [rpc_endpoints] arbitrum = "${ARBITRUM_RPC_URL}" polygon = "${POLYGON_RPC_URL}" [etherscan] arbitrum = { key = "${ARBISCAN_API_KEY}" } polygon = { key = "${POLYGONSCAN_API_KEY}" } משתמש אוטומטית ב-CREATE2 דרך ה-deployer המוזכר. חשוב: אם ה-bytecode משתנה, הכתובת משתנה — השתמשו בתבנית proxy (UUPS).
טעויות נפוצות ומניעה
| טעות | סיבה | פתרון |
|---|---|---|
| nonce שונה על ה-deployer | ה-nonce זז עקב עסקה שנכשלה | בדקו את CREATE2 לפני פריסה |
| חוסר ב-RPC חלופי | RPC מושבת — הפריסה נעצרה | ציינו 2 נקודות קצה RPC ב-foundry.toml |
| החלפת חוזה | פריסה חוזרת ללא בדיקה | השתמשו ב-CREATE2 עם timestamp ב-salt על testnet |
השוואה בין פריסה ידנית לאוטומטית
| קריטריון | פריסה ידנית | אוטומטית (Foundry) |
|---|---|---|
| זמן ל-5 רשתות | 30–60 דקות | 2–5 דקות |
| שגיאות בהזנת כתובות | שכיחות | מבוטלות |
| אימות | ידני בכל סייר בלוקים | אוטומטי עם deployer + salt + bytecode |
| יכולת חזרה | נמוכה (רגיש ל-nonce) | אידמפוטנטית |
| קנה מידה | גידול ליניארי | סקריפט אחד ל-N רשתות |
Foundry מהיר פי 2–3 מ-Hardhat בפריסה על 5 רשתות בזכות מצב batch מובנה.
מה כלול בהתקנה סוהר
כתוצאה מכך, אתם מקבלים:
- סקריפט פריסה ב-Solidity עם תצורות לרשתות שלכם
- קבצי JSON עם כתובות לאחר פריסה
- צינור CI/CD (GitHub Actions) עם מטריצת רשתות
- תיעוד על הרצה ועדכון
- ייעוץ בבחירת deployer (multisig לעומת EOA)
צרו קשר לייעוץ — נעריך את הפרויקט שלכם ונציע תצורת פריסה שחוסכת שעות פיתוח.
לוחות זמנים ואיך להזמין
התקנת פריסה מרובת-רשתות עם Foundry לפרויקט עם 1–3 חוזים על 3–5 רשתות — מיום עסקים אחד. העלות מחושבת באופן אישי לפי מורכבות (אורקלים מותאמים אישית, לוגיקת אימות נוספת).
הזמינו התקנה היום וקבלו ייעוץ על ארכיטקטורה. אנו מבטיחים את התוצאה: פריסה אידמפוטנטית, ניתנת לשחזור לכל רשתות היעד.







