הגדרת Hardhat: כלים לחוזים חכמים

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

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

שאלות נפוצות

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

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

הגדרת Hardhat: כלים לחוזים חכמים

אנו מגדירים את Hardhat עבור פרויקטים שבהם מהירות הפיתוח ואמינות הפריסה הם קריטיים. הגדרה שגויה מובילה לשעות מבוזבזות על ניפוי באגים בבדיקות, פריסות חוזרות ונשנות, ואובדן נתונים. הניסיון שלנו מראה שהגדרה נכונה של Hardhat מאפשרת מיידית קומפילציה מצטברת, בדיקות מקבילות, ופריסה אידמפוטנטית. התוצאה: CI/CD יודע מה לעשות ללא הוראות ידניות. בפרויקט אחד, ההגדרה ארכה 3 ימים, והחיסכון בזמן על פריסות חוזרות היה 70%.

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

הגדרה בסיסית

מינימום hardhat.config.ts לפרויקט ייצור:

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import "@openzeppelin/hardhat-upgrades";
import "hardhat-deploy";
import "hardhat-contract-sizer";

const config: HardhatUserConfig = {
  solidity: {
    version: "0.8.24",
    settings: {
      optimizer: {
        enabled: true,
        runs: 200
      },
      viaIR: true,
    },
  },
  networks: {
    hardhat: {
      forking: {
        url: process.env.ALCHEMY_MAINNET_URL!
      },
      chainId: 1,
    },
    polygon: {
      url: process.env.ALCHEMY_POLYGON_URL!,
      accounts: [process.env.DEPLOYER_PRIVATE_KEY!],
      gasPrice: "auto",
    },
  },
  gasReporter: {
    enabled: process.env.REPORT_GAS === "true",
    currency: "USD",
    coinmarketcap: process.env.CMC_API_KEY,
  },
};

import { HardhatUserConfig } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox"; import "@openzeppelin/hardhat-upgrades"; import "hardhat-deploy"; import "hardhat-contract-sizer"; const config: HardhatUserConfig = { solidity: { version: "0.8.24", settings: { optimizer: { enabled: true, runs: 200 }, viaIR: true, }, }, networks: { hardhat: { forking: { url: process.env.ALCHEMY_MAINNET_URL! }, chainId: 1, }, polygon: { url: process.env.ALCHEMY_POLYGON_URL!, accounts: [process.env.DEPLOYER_PRIVATE_KEY!], gasPrice: "auto", }, }, gasReporter: { enabled: process.env.REPORT_GAS === "true", currency: "USD", coinmarketcap: process.env.CMC_API_KEY, }, }; חשוב לחוזים עם שגיאות "Stack too deep" — תיעוד Solidity ממליץ עליו לחוזים מורכבים. ללא מהדר ה-IR, שגיאה זו מתרחשת לעיתים קרובות, אך זמן הקומפילציה גדל ב-30-50%. אנו מוודאים שההגדרה מכסה את כל התרחישים האופייניים.

תוספים שבאמת חשובים

תוסף מטרה מתי חובה
hardhat-deploy ניהול פריסות: חשבונות בעלי שם, פיקסצ'רים, תיוג כשעובדים עם מספר רשתות
hardhat-contract-sizer בדיקת גודל קוד הבייטים (EIP-170) לפני פריסה ל-mainnet
@nomicfoundation/hardhat-toolbox מטא-תוסף: ethers, waffle, chai-matchers, verify תמיד (מחליף 6 תוספים נפרדים)
@openzeppelin/hardhat-upgrades UUPS/Transparent Proxy: בדיקת פריסת אחסון כשמשתמשים בפרוקסי

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

hardhat-contract-sizer — בודק את גודל החוזה. EIP-170 מגביל את קוד הבייטים ל-24576 בתים. פגיעה במגבלה זו במפתיע בפריסה ל-mainnet היא לא נעימה. התוסף מציג את הגודל לאחר כל קומפילציה.

deployments/ — מטא-תוסף הכולל hardhat-ethers, hardhat-waffle, hardhat-chai-matchers, hardhat-network-helpers, hardhat-verify. תלות אחת במקום שש.

@nomicfoundation/hardhat-toolbox — אם הפרויקט משתמש ב-UUPS או Transparent Proxy. התוסף בודק תאימות אחסון לפני פריסת שדרוג: אם החוזה החדש מפר את פריסת האחסון, תלמדו על כך לפני אובדן נתונים ב-mainnet.

הגדרת ייצור

הגדרת ייצור שונה מהגדרת פיתוח: הפעלת אופטימיזציה עם runs: 200, פיצול (fork) של mainnet לבדיקות, הפעלת מד דלק. השתמשו ב-@openzeppelin/hardhat-upgrades לניהול פריסות — זה מקצר את זמן הפריסה החוזרת פי 5.

איך להאיץ בדיקות Hardhat?

בדיקות איטיות נגרמות לעיתים קרובות מפיקסצ'רים לא תקינים. תבנית hardhat-deploy מ-hardhat-network-helpers מאפשרת צילום מצב הרשת לאחר הפריסה וחזרה אליו לפני כל בדיקה במקום פריסה מחדש. השוואה: ללא loadFixture (פריסה מחדש) — 5 דקות ל-200 בדיקות, עם loadFixture — 30 שניות. מהיר פי 10.

async function deployTokenFixture() {
  const [owner, alice, bob] = await ethers.getSigners();
  const Token = await ethers.getContractFactory("MyToken");
  const token = await Token.deploy(ethers.parseEther("1000000"));
  return { token, owner, alice, bob };
}

it("transfers tokens", async () => {
  const { token, alice } = await loadFixture(deployTokenFixture);
});

היתרונות של hardhat-deploy

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

קריטריון פריסה ידנית hardhat-deploy
אידמפוטנטיות לא — כפילויות בהרצה חוזרת כן — בטוח להריץ שוב
חשבונות בעלי שם כתובות מקודדות דרך הקונפיגורציה
תיוג לא — פורסים הכל רק חוזים ששונו
זמן ל-3 רשתות ~שעתיים ~25 דקות

שילוב Hardhat עם CI/CD

GitHub Actions להרצת בדיקות ואימות אוטומטיים:

---
- name: Run tests
  run: npx hardhat test --network hardhat
  env:
    ALCHEMY_MAINNET_URL: ${{ secrets.ALCHEMY_URL }}
- name: Verify contract
  run: npx hardhat verify --network polygon ${{ steps.deploy.outputs.address }}
  env:
    POLYGONSCAN_API_KEY: ${{ secrets.POLYGONSCAN_KEY }}
---

אימות ב-CI דורש שארגומנטי הקונסטרוקטור יהיו דטרמיניסטיים או יישמרו כארטיפקטים של פריסה. async function deployTokenFixture() { const [owner, alice, bob] = await ethers.getSigners(); const Token = await ethers.getContractFactory("MyToken"); const token = await Token.deploy(ethers.parseEther("1000000")); return { token, owner, alice, bob }; } it("transfers tokens", async () => { const { token, alice } = await loadFixture(deployTokenFixture); }); שומר אוטומטית ארגומנטים ב-hardhat.config.ts.

מה כלול

  • הגדרת Hardhat מלאה המותאמת לפרויקט שלכם: הגדרות רשת, אופטימיזציה, תוספים.
  • כתיבת סקריפטי פריסה באמצעות hardhat-deploy.
  • אינטגרציית בדיקות עם loadFixture והגדרת כיסוי (coverage).
  • CI/CD: הגדרת GitHub Actions לבדיקות ואימות אוטומטיים.
  • תיעוד לשימוש בסביבה.
  • 90 ימי תמיכה לאחר המסירה.

לוח זמנים משוער

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

לצוות שלנו ניסיון של 5 שנים בפיתוח Ethereum ו-L2 קשורות, ו-50+ פריסות מוצלחות ל-mainnet. מפתחים מוסמכים מבטיחים יציבות ואבטחה של ההגדרה.