תארו לעצמכם השקת איירדרופ רטרואקטיבי ל-200,000 כתובות. גישה נאיבית — 200,000 קריאות transfer — תעלה מיליוני גז, ובוטים עם 10,000 כתובות Sybil ירוקנו חצי מהטוקנים לפני שמשתמשים אמיתיים בכלל יבקשו אותם. כאן נכנס לתמונה Merkle Distributor. הוא מאפשר לכל מקבל לבקש טוקנים באופן עצמאי על ידי מתן הוכחת הכללה, בעוד שהחוזה מאחסן רק hash שורש אחד. השוואה: Merkle Distributor מפחית את עלויות הגז פי 1000+ יחסית לאיטרציה מלאה. אבל איירדרופ הוא יותר מסתם חוזה. הגנה מפני התקפות Sybil, vesting לשמירת טוקנים, ממשק תביעה ואנליטיקה — כל פרט קובע את הצלחת ההפצה. אנו מתכננים ובונים מערכות קמפיין איירדרופ מקצה לקצה: מחוזים חכמים ועד פרונטאנד.
איך עובד Merkle Distributor?
הגישה הנאיבית היא לקרוא ל-transfer על כל כתובת. עבור 100,000 מקבלים, זה 100,000 עסקאות, גז עצום ונקודת כשל אחת. ה-Merkle Distributor פותר את זה: מקבלים תובעים טוקנים בעצמם על ידי מתן הוכחת Merkle.
Off-chain: בונים רשימה (כתובת → כמות), בונים עץ Merkle, מפרסמים את השורש על ה-chain. On-chain: המשתמש מספק הוכחה, החוזה מאמת אותה ומשחרר טוקנים.
contract MerkleDistributor {
address public immutable token;
bytes32 public immutable merkleRoot;
mapping(uint256 => uint256) private claimedBitMap;
function isClaimed(uint256 index) public view returns (bool) {
uint256 claimedWordIndex = index / 256;
uint256 claimedBitIndex = index % 256;
uint256 claimedWord = claimedBitMap[claimedWordIndex];
uint256 mask = (1 << claimedBitIndex);
return claimedWord & mask == mask;
}
function _setClaimed(uint256 index) private {
uint256 claimedWordIndex = index / 256;
uint256 claimedBitIndex = index % 256;
claimedBitMap[claimedWordIndex] |= (1 << claimedBitIndex);
}
function claim(
uint256 index,
address account,
uint256 amount,
bytes32[] calldata merkleProof
) external {
require(!isClaimed(index), "Already claimed");
bytes32 node = keccak256(abi.encodePacked(index, account, amount));
require(MerkleProof.verify(merkleProof, merkleRoot, node), "Invalid proof");
_setClaimed(index);
IERC20(token).safeTransfer(account, amount);
emit Claimed(index, account, amount);
}
}Bitfield לעומת mapping: אחסון סטטוס התביעה ב-bitfield דחוס חוסך כ-80% גז על SSTORE/SLOAD. סוגי איירדרופים ומקרי השימוש שלהם:
| סוג | תיאור | דוגמאות | מתי להשתמש |
|---|---|---|---|
| רטרואקטיבי | למשתמשים קיימים | UNI, ARB, OP | לתגמל משתמשים מוקדמים |
| מבוסס משימות | להשלמת משימות | Galxe, Layer3 | למשוך קהל חדש |
| Vested | טוקנים עם vesting | Vesting ליניארי ל-12 חודשים | נאמנות ארוכת טווח |
איך להגן על איירדרופ מהתקפות Sybil?
סינון Sybil הוא האתגר הטכני העיקרי באיירדרופים רטרואקטיביים. אדם אחד עם 1,000 כתובות לא צריך לקבל פי 1,000 יותר. הפסדים מהתקפות Sybil יכולים להגיע ל-10 מיליון דולר. אינדיקטורים לאשכולות:
- כתובות מקבלות ETH ממקור מימון יחיד
- דפוסי עסקאות זהים
- עסקאות מינימליות כדי לעמוד בקריטריוני הזכאות
אנו משתמשים ב-Dune Analytics או בצומת אינדקס מותאם אישית לניתוח off-chain. למקרים מורכבים, Chainalysis Sybil.
איירדרופ מבוסס משימות: משתמש מבצע משימות (Twitter, Discord, testnet). בעיה: בוטים. משימות צריכות לדרוש פעילות on-chain. אופציונלית, אנו משתלבים עם Galxe או Layer3 — trade-off: הפלטפורמה גובה עמלה, ומשתמשים נשארים שם.
| שיטה | מורכבות | יעילות | עלות |
|---|---|---|---|
| אשכולות on-chain | בינונית | גבוהה | נמוכה |
| Chainalysis Sybil | גבוהה | גבוהה מאוד | גבוהה |
| CAPTCHA | נמוכה | נמוכה | נמוכה מאוד |
למה להשתמש ב-Vesting?
איירדרופ עם vesting + cliff ליניארי (לדוגמה, cliff של 3 חודשים, ליניארי ל-9 חודשים) מפחית את ה-dump המיידי ב-70% (Token Engineering Commons): משתמשים לא יכולים למכור הכל בבת אחת, והופכים למחזיקים ארוכי טווח. דוגמת חוזה:
contract VestedAirdrop is MerkleDistributor {
uint256 public immutable vestingStart;
uint256 public immutable vestingDuration;
mapping(address => uint256) public claimed;
mapping(address => uint256) public totalAllocated;
function claimVested(
uint256 index,
address account,
uint256 totalAmount,
bytes32[] calldata merkleProof
) external {
if (totalAllocated[account] == 0) _verifyAndSetAllocation(index, account, totalAmount, merkleProof);
uint256 vested = _vestedAmount(account);
uint256 claimable = vested - claimed[account];
require(claimable > 0, "Nothing to claim");
claimed[account] += claimable;
IERC20(token).safeTransfer(account, claimable);
emit VestedClaimed(account, claimable);
}
function _vestedAmount(address account) internal view returns (uint256) {
if (block.timestamp < vestingStart) return 0;
uint256 elapsed = block.timestamp - vestingStart;
if (elapsed >= vestingDuration) return totalAllocated[account];
return totalAllocated[account] * elapsed / vestingDuration;
}
} פרטים טכניים
מערכת חישוב נקודות
לקמפיינים מורכבים עם פעולות מרובות — מערכת נקודות off-chain. אנו משתמשים בהצבעה ריבועית כדי להתמודד עם "לווייתנים": לווייתן עם 10,000 נקודות מקבל רק ~3.16x יותר ממשתמש עם 1,000.
function calculateAllocation(points: number, totalPoints: number): bigint {
const sqrtScore = Math.sqrt(points);
const totalSqrtScore = /* sum for all users */ 0;
const allocation = (TOTAL_AIRDROP_AMOUNT * BigInt(Math.floor(sqrtScore * 1e18))) / BigInt(Math.floor(totalSqrtScore * 1e18));
return allocation;
} אופטימיזציית גז לתביעה המונית
- EIP-2612 Permit: חתימה אחת במקום עסקת אישור נפרדת.
- Batch claiming: העברה אחת למספר הקצאות.
- Bitfield: חיסכון של 80% בגז.
חיסכון בגז יכול לעלות על 500,000 דולר לתביעה המונית.
פרונטאנד לאיירדרופ
בודק זכאות — הזינו כתובת, בדקו דרך API או עץ Merkle. ה-snapshot מתפרסם בפומבי (GitHub, IPFS) לשקיפות.
async function checkEligibility(address: string) {
const normalizedAddress = ethers.getAddress(address);
const allocation = await fetchAllocation(normalizedAddress);
if (!allocation) return { eligible: false, amount: 0n, proof: [] };
const proof = getMerkleProof(merkleTree, allocation.index, normalizedAddress, allocation.amount);
const alreadyClaimed = await distributor.isClaimed(allocation.index);
return { eligible: true, amount: allocation.amount, proof, alreadyClaimed };
} תפוגה וטוקנים שלא נתבעו
אנו קובעים תפוגה של שנה אחת. טוקנים שלא נתבעו מוחזרים לאוצר או נשרפים. איירדרופ ללא תפוגה הוא פצצה מתקתקת לאוצר (Token Engineering Commons).
תהליך ותוצרים
- ניתוח — סקירת דרישות, נתוני on-chain של הפרוטוקול שלכם, הגדרת קריטריוני זכאות.
- עיצוב — ארכיטקטורת חוזים חכמים, סכמת נתונים, UX של הפרונטאנד.
- יישום — כתיבת חוזים, פרונטאנד, הגדרת backend לזיהוי Sybil.
- בדיקות — בדיקות יחידה, mainnet fork, אימות פורמלי.
- פריסה — staging ו-mainnet, אימות עסקאות.
- השקה — פרסום עץ Merkle, הפצה on-chain, ניטור.
מה כלול: ביקורת ועיצוב חוזים חכמים (Merkle Distributor, vesting, batch claim), כתיבה ופריסה (Solidity, Foundry, Hardhat), פיתוח פרונטאנד (React, Next.js, RainbowKit), אינטגרציית ארנקים (MetaMask, WalletConnect, Coinbase Wallet), אנליטיקה (Dune, dashboard מותאם), בדיקות (Slither, Mythril, Echidna fuzzing), תיעוד והדרכת צוות, תמיכה לאחר השקה (3 חודשים).
ציר זמן: משבועיים (Merkle Distributor בסיסי) ועד 8+ שבועות (עם vesting, מבוסס משימות, אנליטיקה). העלות מחושבת באופן אישי לאחר ביקורת פרויקט. צרו קשר להערכת פרויקט תוך יומיים.
המומחיות שלנו
- 5+ שנים בפיתוח blockchain (Ethereum, Polygon, Arbitrum, Solana, BNB Chain)
- 50+ קמפיינים מוצלחים של איירדרופ עם למעלה מ-100 מיליון דולר שחולקו בסך הכל
- ביקורות חוזים חכמים מ-CertiK ו-Hacken
- אנו עובדים עם OpenZeppelin Contracts ועצי Merkle
הזמינו פיתוח — הגנו על טוקנים מבוטים. קבלו ייעוץ על הפרויקט שלכם — נעריך את האיירדרופ שלכם תוך יומיים.







