מפתחות זמניים לחוויית dApp ללא גז: מדריך
חוויית ה-Web3 הסטנדרטית: כל פעולה דורשת חתימת ארנק נפרדת. כמהנדסי בלוקצ'יין, אנו יודעים שזהו החסם המרכזי לאימוץ המוני. שנתיים של עבודה עם יישומים מבוזרים הראו: משתמשים עוזבים כשהם נדרשים לאשר יותר מ-2-3 פעולות ברצף. מפתחות זמניים פותרים זאת באופן קיצוני.
משתמש חותם על עסקה אחת (פתיחת סשן), והיישום פועל בשמו בתוך אילוצים מוגדרים — ללא אישורים מתמידים. זה אפשרי רק עם Account Abstraction (ERC-4337) EIP-4337, מכיוון ש-Smart Account תומך במספר חותמים מורשים עם הרשאות שונות, בניגוד ל-EOA. גישה זו מפחיתה את מספר החתימות פי 10–100 ומורידה את עלויות הגז באמצעות אצווה (batching). עבור GameFi, בורסות מבוזרות וכל יישום עם עסקאות בתדירות גבוהה, זהו חובה.
מפתחות הרשאה זמניים משפרים את חוויית המשתמש פי 50 בהשוואה ל-EOA — במקום עשרות חלונות קופצים של ארנק, המשתמש רואה חתימה אחת. חיסכון בגז עבור פרויקט גיימינג עם 1000 משתמשים פעילים יומיים (DAU) מסתכם בכ-$3,000 לחודש, ועבור פרויקט עם 10,000 DAU, החיסכון עולה על $30,000 לחודש. כל UserOp ממומן ב-Arbitrum עולה כ-$0.003, שזה פי 3 זול יותר מעסקאות רגילות ($0.009). ברשת הראשית של Ethereum, פעולות ממומנות נעות בין $0.50 ל-$2.00 כל אחת. בוט מסחר המבצע 500 עסקאות ביום יכול לחסוך עד $500 לחודש בעמלות גז.
כיצד מפתחות סשן עובדים בפועל
הארכיטקטורה סובבת סביב תוסף מאמת (validator plugin) ב-Smart Account. החשבון בודק את החתימה דרך מאמת: מאמת ה-ECDSA הראשי משתמש במפתח המשתמש, בעוד שמאמת מפתח הסשן משתמש רק במפתח הזמני אך בודק אילוצים:
Основной ключ пользователя:
→ Validator: ECDSAValidator(userKey)
→ Может всё
Session key:
→ Validator: SessionKeyValidator
→ Проверяет: правильный подписант + ограничения соблюденыשלוש יישומים עיקריים:
- Kernel (ZeroDev) — הבוגר ביותר. מאמת מפתח סשן עם מודולי הרשאות מובנים: אילוצים על חוזים, פונקציות, פרמטרים, מגבלות הוצאה.
- Biconomy Smart Account — עם Session Key Manager משלו.
- Safe + safe-modules — דרך תוספים.
מדוע מפתחות סשן מפחיתים עלויות גז פי 10
אצווה של פעולות ושימוש ב-paymaster מאפשרים לקצץ בעלויות הגז. במקום 50 עסקאות נפרדות — UserOperation אחת עם אצווה. ב-L2 (Arbitrum, Optimism), עלות פעולה ממומנת היא $0.001–$0.005, ברשת הראשית של Ethereum — $0.50–$2.00. עבור יישומי גיימינג, L2 הוא חובה.
יישום על ZeroDev Kernel
import { createKernelAccount, createKernelAccountClient, createZeroDevPaymasterClient, } from '@zerodev/sdk';
import { signerToSessionKeyValidator, ParamOperator, oneAddress, } from '@zerodev/session-key';
import { signerToEcdsaValidator } from '@zerodev/ecdsa-validator';
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
import { parseAbi, encodeFunctionData } from 'viem';
// 1. Создаём временный session key (ephemeral keypair)
const sessionPrivateKey = generatePrivateKey();
const sessionKeySigner = privateKeyToAccount(sessionPrivateKey);
// 2. Определяем permissions для сессии
const sessionKeyValidator = await signerToSessionKeyValidator(publicClient, {
signer: sessionKeySigner,
validatorData: {
validUntil: Math.floor(Date.now() / 1000) + 86400, // 24 часа
validAfter: 0,
paymaster: oneAddress, // разрешить любой paymaster
permissions: [
{
target: GAME_CONTRACT_ADDRESS,
valueLimit: BigInt(0), // нельзя отправлять ETH
abi: parseAbi(['function makeMove(uint8 x, uint8 y) external']),
functionName: 'makeMove',
args: [
{ operator: ParamOperator.LESS_THAN, value: 8n }, // x < 8
{ operator: ParamOperator.LESS_THAN, value: 8n }, // y < 8
],
},
],
},
});
// 3. Создаём account с session key validator
const account = await createKernelAccount(publicClient, {
plugins: {
sudo: await signerToEcdsaValidator(publicClient, { signer: userSigner }),
regular: sessionKeyValidator,
},
kernelVersion: KERNEL_V3_1,
});
// 4. Сохраняем session key (в IndexedDB или памяти)
const serializedSessionKey = await sessionKeyValidator.serializeSessionKey();
// → передаём backend или храним локально
לאחר יצירת הסשן, השרת או הדפדפן יכולים לחתום על עסקאות עם המפתח הזמני ללא אינטראקציה של המשתמש:
// Использование сохранённой сессии (например, на сервере)
const restoredValidator = await deserializeSessionKeyValidator(
publicClient,
{
serializedSessionKey,
},
);
const kernelClient = createKernelAccountClient({
account,
chain: arbitrum,
bundlerTransport: http(BUNDLER_RPC),
paymaster: createZeroDevPaymasterClient({
...
}),
});
// Транзакция без подписи пользователя
const txHash = await kernelClient.sendTransaction({
to: GAME_CONTRACT_ADDRESS,
data: encodeFunctionData({
abi: parseAbi(['function makeMove(uint8 x, uint8 y) external']),
functionName: 'makeMove',
args: [3n, 4n],
}),
});
// Gas оплачивает Paymaster, пользователь не подписывает
Paymaster: חוויית UX ללא גז לחלוטין
מפתחות סשן מסירים את הצורך לאשר כל פעולה. Paymaster מסיר את הצורך להחזיק טוקנים מקומיים עבור גז. יחד — חוויה נטולת עמלות לחלוטין.
ERC-4337 Paymaster הוא חוזה חכם המממן גז עבור UserOperations. שני סוגים עיקריים:
- Verifying Paymaster: קורא לשרת שלך כדי לאמת כל UserOp לפני אישור החתימה. גמיש: אתה שולט באילו פעולות לממן.
- ERC-20 Paymaster: מקבל תשלום ב-ERC-20 (USDC) במקום ETH. המשתמש משלם גז ב-USDC, ה-paymaster ממיר ומשלם ב-ETH.
דוגמה ללוגיקת שרת עבור Verifying Paymaster:
export async function signPaymasterRequest(
userOp: UserOperation,
): Promise<{ paymasterData: Hex; paymasterValidationGasLimit: bigint }> {
// Проверяем: можем ли спонсировать эту операцию?
const user = await getUserBySmartAccount(userOp.sender);
// Ограничение: не более 100 sponsored операций в день
const dailyCount = await getDailySponsoredCount(user.id);
if (dailyCount >= 100) throw new Error('Daily limit exceeded');
// Ограничение: только whitelisted контракты
const callData = decodeCallData(userOp.callData);
if (!isWhitelisted(callData.to)) throw new Error('Contract not whitelisted');
// Подписываем разрешение
const validUntil = Math.floor(Date.now() / 1000) + 300; // 5 минут
const signature = await paymasterSigner.signTypedData({
domain: PAYMASTER_DOMAIN,
types: PAYMASTER_TYPES,
message: { userOp, validUntil },
});
return {
paymasterData: encodeAbiParameters(
[{ type: 'uint48' }, { type: 'bytes' }],
[validUntil, signature],
),
paymasterValidationGasLimit: 100_000n,
};
}ספקים: Pimlico (Alto bundler + paymaster), ZeroDev, Biconomy — האמינים ביותר.
יישומים של מפתחות סשן
אם ה-dApp שלך דורש יותר מ-3 חתימות לכל סשן, מפתחות זמניים יגבירו את ההמרה. יעיל במיוחד עבור:
- יישומי גיימינג (GameFi, מטאוורסים)
- בוטים למסחר ואסטרטגיות אוטומטיות
- רשתות חברתיות ופלטפורמות תוכן
- יישומים עם תשלומים חוזרים
מגבלות מפתחות סשן ואבטחה
טבלת אילוצי אבטחה
| קטגוריה | מה להגביל | ערך טיפוסי |
|---|---|---|
| חוזים | רק כתובות מוגדרות | GameContract, Token |
| פונקציות | רק פונקציות ספציפיות | makeMove, claimReward |
| פרמטרים | טווחי ערכים | x < 8, amount ≤ maxAmount |
| מגבלת ערך | מקסימום ETH | 0 עבור משחקים |
| מגבלת הוצאה | מקסימום טוקני ERC-20 | 100 USDC |
| תפוגה | אורך חיי הסשן | 4–8 שעות |
מפתח סשן הוא מפתח פרטי עם הרשאות מוגבלות, אך פריצתו עדיין מסוכנת. אחסון:
- דפדפן: sessionStorage (חי עד סגירת הטאב) או indexedDB עם הצפנה (AES-GCM). אין להשתמש ב-localStorage — סיכון XSS.
- שרת: אחסון מוצפן ב-KMS, מקושר לטוקן הסשן של המשתמש.
דוגמה לאחסון מאובטח בדפדפן:
async function storeSessionKey(
sessionPrivateKey: Hex,
serializedPermissions: string,
userAuthKey: CryptoKey,
): Promise<void> {
const iv = crypto.getRandomValues(new Uint8Array(12));
const data = new TextEncoder().encode(
JSON.stringify({
sessionPrivateKey,
serializedPermissions,
}),
);
const encrypted = await crypto.subtle.encrypt(
{
name: 'AES-GCM',
iv,
},
userAuthKey,
data,
);
sessionStorage.setItem(
'session_key',
JSON.stringify({
iv: Array.from(iv),
data: Array.from(new Uint8Array(encrypted)),
}),
);
} דוגמה מעשית: סשן GameFi
זרימה טיפוסית למשחק Play-to-Earn:
- המשתמש לוחץ על "התחל משחק".
- אישור אחד בארנק: פתיחת סשן של 4 שעות עם הרשאות: קריאה ל-makeMove(x,y), claimReward() רק על GameContract.
- המשתמש משחק — כל מהלך נחתם אוטומטית על ידי מפתח הסשן.
- המהלכים נשלחים דרך bundler, הגז משולם על ידי paymaster.
- לאחר 4 שעות, הסשן פג — נדרש אישור חדש.
תוצאה: המשתמש רואה את ממשק המשחק ללא חלונות קופצים מתמידים של ארנק. תהליך הקליטה קרוב ל-Web2.
כלים
כלים לפיתוח מפתחות סשן
| משימה | כלי |
|---|---|
| מאמת מפתח סשן | ZeroDev Kernel / Biconomy |
| Paymaster | Pimlico / ZeroDev |
| Bundler | Alto (Pimlico) |
| ארנק AA | Kernel v3 / Safe |
| Frontend | wagmi v2 + @zerodev/wagmi |
מה כלול
כאשר אתה מזמין פיתוח של מערכת מפתחות סשן, אתה מקבל:
- קוד מקור לחוזים חכמים ואינטגרציית frontend.
- Bundler ו-paymaster מוגדרים (Pimlico או ZeroDev).
- תיעוד על הארכיטקטורה והפריסה.
- גישה לניטור (Jiffyscan, לוח המחוונים של Pimlico).
- הכשרת צוות הלקוח (2–3 מפגשים).
- אנו מבטיחים 30 ימי תמיכה לאחר המסירה.
לצוות שלנו ניסיון של 5+ שנים ב-Web3 והוא סיפק למעלה מ-20 פרויקטים עם Account Abstraction עבור GameFi ו-DeFi. אנו משתמשים רק בפתרונות מוכנים לייצור הנבדקים באופן קבוע ומבצעים ביקורות אבטחה עבור כל מודול מפתח.
הערכות לוחות זמנים
יישום בסיסי (מפתחות סשן + verifying paymaster, רשת אחת) — 3–4 שבועות. מערכת מלאה עם תמיכה מרובת רשתות, מודולי הרשאות מותאמים אישית, ERC-20 paymaster וניתוח פעולות ממומנות — 6–8 שבועות.
צור קשר להערכת פרויקט — נבחר את הארכיטקטורה האופטימלית ונכין הצעה מסחרית. הזמן את פיתוח חוויית ה-UX ללא עמלות עוד היום.







