תארו לעצמכם: המשתמש שלכם רוצה לשלוח טוקנים אבל אין לו ETH עבור גז. או שצריך לשחזר גישה לארנק ללא ביטוי זרע, אבל ביטוי הזרע אבד. ארנק EOA קלאסי לא יכול להתמודד עם תרחישים אלה. הפתרון הוא ארנק חוזה חכם עם Account Abstraction (AA). למהנדסים שלנו יש ניסיון של 10+ שנים בבלוקצ'יין והם בונים ארנקים כאלה מאז התקינה של EIP-4337. Account Abstraction הופך ארנק מאחסון מפתחות פסיבי לסוכן ניתן לתכנות. כל הלוגיקה חיה בחוזים חכמים, ותשתית mempool מיוחדת (Bundlers ו-Paymasters) מעבדת אובייקטים של UserOperation במקום עסקאות רגילות. סיפקנו 20+ פרויקטים על Ethereum, Polygon ו-Arbitrum. חיסכון ממוצע בגז בעת שימוש ב-Paymaster הוא $0.5–2 לעסקה. עלות ביקורת חיצונית נדונה באופן פרטני. הזמינו פיתוח ארנק חוזה חכם — קבלו ייעוץ מהנדס תוך יומיים.
כיצד Account Abstraction משנה את ארכיטקטורת הארנק
רכיבי מערכת — פיתוח חוזים חכמים
עסקת EOA קלאסית הולכת ישירות ל-mempool ומבוצעת על ידי צומת. במערכת AA, השרשרת שונה:
- UserOperation — פסאודו-עסקה חתומה על ידי המשתמש. מכיל callData, sender (כתובת ארנק חכם), חתימה, מגבלות גז ופרמטרים של Paymaster.
- Bundler — סוכן off-chain שאוסף UserOperations מה-mempool החלופי, אורז אותם לעסקה אחת על השרשרת, וקורא ל-EntryPoint. יישומים קיימים: Stackup, Pimlico, Alchemy Rundler (כתוב ב-Rust, מהיר בסדר גודל מהיישום הייחוס).
- EntryPoint — חוזה סינגלטון (0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789 ברוב רשתות ה-EVM), פרוס על ידי צוות ERC-4337. הוא מאמת ומבצע את אצוות הפעולות. אתם לא יכולים לפרוס EntryPoint משלכם — המערכת האקולוגית תלויה בכתובת זו.
- Account Contract — הארנק החכם של המשתמש עצמו. חייב ליישם את ממשק IAccount עם המתודה validateUserOp. כאן חיה כל הלוגיקה המותאמת אישית.
- Paymaster — חוזה אופציונלי שמשלם גז עבור המשתמש או מקבל תשלום בטוקנים ERC-20 במקום ETH.
פרטים נוספים במפרט EIP-4337.
מחזור חיים של UserOperation
User → sign UserOp → send to Bundler RPC
Bundler → simulate via eth_estimateUserOperationGas → validate signature + paymaster
Bundler → batch multiple UserOps → call EntryPoint.handleOps()
EntryPoint → validateUserOp() на каждом Account Contract
EntryPoint → Paymaster.validatePaymasterUserOp()
EntryPoint → execute callData
EntryPoint → postOp() на Paymaster (для учёта gas)חשוב: סימולציה וביצוע הם נפרדים. ה-Bundler מדמה באמצעות eth_callStateOverride ודוחה פעולות שייכשלו על השרשרת. זה מגן על ה-Bundler מאובדן ETH על עסקאות שנכשלו.
מה זה Factory ופריסה Counterfactual?
תכונה מרכזית אחת של AA היא שהארנק קיים ככתובת גם לפני הפריסה. CREATE2 עם salt דטרמיניסטי (בדרך כלל hash של כתובת הבעלים) נותן כתובת צפויה. המשתמש מקבל את כתובת הארנק לפני העסקה הראשונה, יכול לקבל כספים — הארנק נפרס אוטומטית בשימוש ראשון.
contract WalletFactory {
function getAddress(address owner, uint256 salt) public view returns (address) {
return Create2.computeAddress(
bytes32(salt),
keccak256(abi.encodePacked(
type(ERC1967Proxy).creationCode,
abi.encode(address(implementation), initData(owner))
))
);
}
function createAccount(address owner, uint256 salt) external returns (SmartWallet) {
address addr = getAddress(owner, salt);
if (addr.code.length > 0) return SmartWallet(payable(addr)); // уже задеплоен
return SmartWallet(payable(new ERC1967Proxy{salt: bytes32(salt)}(
address(implementation),
initData(owner)
)));
}
} יישום עסקאות ללא גז באמצעות Paymaster
Paymaster נותן חסות
contract SponsoringPaymaster is IPaymaster {
mapping(address => bool) public whitelistedContracts;
function validatePaymasterUserOp(
UserOperation calldata userOp,
bytes32,
uint256 maxCost
) external returns (bytes memory context, uint256 validationData) {
// Спонсируем только вызовы whitelisted контрактов
address target = address(bytes20(userOp.callData[16:36]));
require(whitelistedContracts[target], "Not whitelisted");
require(deposit() >= maxCost, "Insufficient deposit");
return (abi.encode(userOp.sender), 0);
}
}ה-Paymaster חייב להחזיק פיקדון ב-EntryPoint. מנגנון ה-staking מונע DoS: Paymaster ללא stake יכול לתת חסות לכל היותר לפעולה אחת לכל bundle.
ERC-20 Paymaster
מקבל כל ERC-20 כתשלום גז. יש צורך ב-oracle להמרה: Chainlink price feed או Uniswap V3 TWAP pool. זרימת עבודה: לפני ביצוע, נעילת maxCost * exchangeRate טוקנים; אחרי, ניכוי העלות בפועל דרך postOp.
פתרונות מוכנים: Pimlico ERC-20 Paymaster (קוד פתוח), Stackup Paymaster SDK.
יישום ה-Account Contract
מבנה בסיסי
אנחנו מבססים את העבודה שלנו על SimpleAccount מ-eth-infinitism או SafeAccount מ-Safe (לשעבר Gnosis Safe). לייצור, אנו ממליצים על Safe v1.4.1 עם מודול 4337, מכיוון שהוא מנוסה עם TVL של $100B+.
במקום לספק את הקוד המלא, אנו מתארים את המתודה המרכזית validateUserOp. היא בודקת חתימה, nonce, ובאופן אופציונלי משלמת עבור גז. validationData מקודד שלושה פרמטרים: תוצאת אימות (0 הצלחה, 1 כישלון), חותמות זמן validAfter ו-validUntil (פעולות מוגבלות בזמן).
תבניות לוגיקה מורחבות
מפתחות סשן. מפתח מוגבל (לדוגמה, שנוצר על ידי דפדפן ללא חשיפת ביטוי הזרע) שמורשה לפעולות רק על חוזה ספציפי, מגבלת סכום וחלון זמן. מבנה אחסון:
struct SessionKey {
address key;
address allowedContract;
uint256 spendingLimit;
uint48 validUntil;
bool enabled;
}
mapping(address => SessionKey) public sessionKeys;זה הבסיס ל"משחק ללא גז" — המשתמש חותם על סשן עבור חוזה המשחק פעם אחת, והמשחק מבצע עסקאות בשמו.
שחזור חברתי. אפוטרופוסים — כתובות מהימנות שיכולות לשנות את הבעלים לאחר timelock (בדרך כלל 72 שעות). היישום של Argent הוא התייחסות טובה: אפוטרופוסים M-of-N עם ביטול בתוך חלון ה-timelock אם הבעלים מחובר.
אינטגרציית Frontend
Viem + permissionless.js הוא הסט העדכני ביותר (מתעדכן באופן קבוע). permissionless בונה על Viem ומספק הפשטות לעבודה עם Bundler ו-Paymaster RPC:
import { createSmartAccountClient } from "permissionless";
import { signerToSimpleSmartAccount } from "permissionless/accounts";
import { createPimlicoBundlerClient } from "permissionless/clients/pimlico";
const smartAccount = await signerToSimpleSmartAccount(publicClient, {
signer: walletClient,
factoryAddress: FACTORY_ADDRESS,
entryPoint: ENTRY_POINT_ADDRESS,
});
const smartAccountClient = createSmartAccountClient({
account: smartAccount,
chain: optimism,
bundlerTransport: http(BUNDLER_RPC_URL),
middleware: {
sponsorUserOperation: paymasterClient.sponsorUserOperation,
},
});
// Отправка транзакции — идентично обычному кошельку для пользователя
const txHash = await smartAccountClient.sendTransaction({
to: contractAddress,
data: encodeFunctionData({
abi,
functionName: "doSomething"
}),
});
ZeroDev SDK הוא אלטרנטיבה עם רמת הפשטה גבוהה יותר, מפתחות סשן מובנים, וחשבון Kernel (Account Contract פופולרי עם מערכת תוספים).
חלופות ל-EIP-4337
| פתרון | דורש EntryPoint | תאימות EVM | תכונה |
|---|---|---|---|
| EIP-4337 | כן | כל רשתות ה-EVM | תקן דה פקטו |
| zkSync Native AA | לא | zkSync Era | מובנה ב-L2, זול יותר |
| EIP-7702 | לא (האצלה זמנית) | Ethereum עתידי | פשוט יותר עבור EOA |
zkSync Native AA — ב-zkSync Era, AA מובנה בפרוטוקול, אין צורך ב-EntryPoint נפרד. כל חשבון יכול להיות חוזה חכם מההתחלה. חסכוני יותר בגז, אבל קשור ל-zkSync.
EIP-7702 (Prague/Electra) — hard fork קרוב של Ethereum. מאפשר ל-EOA להאציל זמנית ביצוע לחוזה חכם דרך סוג עסקה מיוחד. זה לא מחליף לחלוטין את 4337, אבל סוגר כמה מקרי שימוש בצורה פשוטה יותר.
שלבי פיתוח והערכה
| רכיב | מורכבות | ציר זמן |
|---|---|---|
| Account Contract בסיסי (בעלים יחיד) | בינוני | 1–2 שבועות |
| Factory + פריסה counterfactual | נמוך | 3–5 ימים |
| Paymaster נותן חסות | בינוני | שבוע |
| ERC-20 Paymaster + oracle | גבוה | 1–2 שבועות |
| מפתחות סשן | גבוה | 1–2 שבועות |
| שחזור חברתי | גבוה | 1–2 שבועות |
| אינטגרציית Frontend SDK | בינוני | שבוע |
| ביקורת + תיקונים | — | 3–6 שבועות |
עוד על תהליך הביקורת
הביקורת כוללת סקירת קוד ידנית עם מנתחים סטטיים (Slither, Mythril) ו-fuzzing (Echidna). תשומת לב מיוחדת ניתנת ל-validateUserOp וללוגיקת ה-Paymaster. הפלט הוא דוח עם חומרת באגים וזמן תיקון משוער.
ארנק מינימלי מוכן לייצור (בעלים יחיד + paymaster נותן חסות + frontend) לוקח 4–6 שבועות של פיתוח. מוצר מלא עם שחזור חברתי, מפתחות סשן ותמיכה מרובת שרשרות לוקח 3–5 חודשים. אנו נעריך את הפרויקט שלכם תוך יומיים — פשוט שלחו לנו את תיאור המשימה.
מה כלול בעבודה
- ניתוח דרישות ועיצוב ארכיטקטורה
- פיתוח חוזים חכמים (Account Contract, Factory, Paymaster)
- אינטגרציה עם Bundler ו-Paymaster (Pimlico, Stackup, Alchemy)
- Frontend SDK באמצעות Viem + permissionless.js
- בדיקות (יחידה, אינטגרציה, fuzzing דרך Echidna)
- ביקורת קוד (פנימית + חיצונית)
- פריסה ל-mainnet/testnet
- תיעוד והדרכת צוות
- תמיכה טכנית למשך 3 חודשים
נקודה קריטית בבחירת קבלן: יישום ה-validateUserOp חייב להיות מבוקר. שגיאה בפונקציה זו מובילה ישירות לאובדן כספי משתמש. חיסכון בביקורת כאן הוא סיכון מודע. צרו קשר להערכה מקדימה — נוכל לומר לכם כיצד להימנע מטעויות אופייניות. קבלו ייעוץ מהנדס עוד היום!







