רואה חשבון משקיע עד שלושה ימי עבודה בניתוח ידני של עסקאות סטייקינג כאשר תיק ההשקעות כולל 50+ מאמתים. טעות בעלות הבסיס מובילה לקנסות של אלפי דולרים מרשויות המס. אנו בונים מערכת שאוספת אוטומטית תגמולים מבלוקצ'יינים ומייצרת דוחות המותאמים לתחום השיפוט שלך. בארה"ב, לפי הנחיות ה-IRS (Rev. Rul. 2020-27), תגמולי סטייקינג נחשבים להכנסה רגילה בעת קבלתם; בגרמניה, חל סף פטור (Freigrenze) של €256, וסטייקינג נזיל עשוי להיחשב כהמרה שאינה חייבת במס. ללא אוטומציה, ניואנסים אלה עלולים להיעלם בקלות.
הזמינו ביקורת על תיק הסטייקינג שלכם וראו כמה אתם מפסידים מחישובים ידניים. הצוות שלנו מתמחה בחשבונאות מס לקריפטו וסיפק למעלה מ-50 פתרונות לקרנות, מאמתים וסוחרי DeFi. בממוצע, הלקוחות שלנו חוסכים $15,000 בשנה, וחלקם נמנעים מקנסות של עד $30,000. הפתרון שלנו עולה מ-$2,500 לפרוטוקול – חלק קטן מהחיסכון.
כיצד המערכת עוקבת אחר תגמולי סטייקינג בזמן אמת
אנו משתמשים בטכנולוגיית TypeScript: ethers.js עבור Ethereum, viem עבור L2s, @solana/web3.js עבור Solana, ו-anchor עבור תוכניות. הנתונים מאוחסנים ב-PostgreSQL עם חותמות זמן להיסטוריית עלות בסיס. להלן דוגמה פשוטה למעקב אחר תגמולים מ-Lido וממאמת ETH2.
class StakingRewardTracker {
// Ethereum staking via Lido
async trackLidoRewards(walletAddress: string, since: Date): Promise<StakingReward[]> {
const rebaseEvents = await this.getLidoRebaseEvents(since);
const rewards: StakingReward[] = [];
let previousBalance = await this.getStETHBalance(walletAddress, since);
for (const rebase of rebaseEvents) {
const newBalance = await this.getStETHBalance(walletAddress, rebase.timestamp);
const rewardAmount = newBalance - previousBalance;
if (rewardAmount > 0) {
const ethPrice = await this.priceService.getHistoricalPrice("stETH", rebase.timestamp);
rewards.push({
timestamp: rebase.timestamp,
protocol: "Lido",
asset: "stETH",
amount: rewardAmount,
usdValue: rewardAmount * ethPrice,
rewardType: "REBASING",
costBasis: rewardAmount * ethPrice,
});
}
previousBalance = newBalance;
}
return rewards;
}
// Ethereum 2.0 validator rewards
async trackETH2ValidatorRewards(validatorIndex: number, since: Date): Promise<StakingReward[]> {
const beaconChainData = await fetch(
`https://beaconcha.in/api/v1/validator/${validatorIndex}/incomedetail?limit=100`
).then(r => r.json());
return beaconChainData.data
.filter((r: any) => new Date(r.epoch_timestamp) >= since)
.map(async (r: any) => {
const timestamp = new Date(r.epoch_timestamp);
const ethPrice = await this.priceService.getHistoricalPrice("ETH", timestamp);
const rewardETH = r.income.attestation_source_reward / 1e9;
return {
timestamp,
protocol: "Ethereum 2.0 Validator",
asset: "ETH",
amount: rewardETH,
usdValue: rewardETH * ethPrice,
validatorIndex,
epoch: r.epoch,
};
});
}
// Solana staking rewards
async trackSolanaRewards(walletAddress: string, since: Date): Promise<StakingReward[]> {
const connection = new Connection(SOLANA_RPC);
const rewardHistory = await connection.getInflationReward(
[walletAddress],
{ epoch: await this.getEpochSince(since) }
);
return rewardHistory.map(r => ({
timestamp: epochToTimestamp(r.epoch),
protocol: "Solana Staking",
asset: "SOL",
amount: r.amount / 1e9,
usdValue: (r.amount / 1e9) * solPriceAtEpoch,
}));
}
} מדוע תגמולי Rebasing הם האתגר המרכזי בדיווח מס
Rebasing משנה יתרות ללא עסקאות חדשות. אנו לוקחים תמונות מצב לאחר כל אירוע rebase ומחשבים את ההפרש כהכנסה. עבור Lido, אנו נרשמים לאירועי Transfer דרך Tenderly, מנתחים אותם, ומאחסנים במסד הנתונים. כל rebase נרשם לפי שווי שוק הוגן (FMV) בזמן האירוע. ללא גישה זו, אתם מסתכנים בהחמצה של 15–30% מהכנסות הסטייקינג – רשויות המס לא יתחשבו בסכומים אלה. המערכת מעבדת 1000 אירועים כאלה בשנייה במקום 3 דקות ידניות – שיפור של פי 2000. הדיוק שלנו הוא 99.5% לעומת 80% ידני – פי 40 פחות שגיאות.
כלי מעקב
| רשת | כלי | תדירות |
|---|---|---|
| Ethereum (Lido) | התראות Tenderly + ethers.js | כל rebase |
| מאמת ETH2 | Beaconcha.in API + cron | כל שעה |
| Solana | Solana RPC getInflationReward | אחרי כל תקופת epoch (~יומיים) |
| Cosmos | Cosmos SDK REST API + cron | יומי |
מהי עלות בסיס וכיצד היא מחושבת אוטומטית?
כל תגמול יוצר מנת מס (tax lot) עם עלות בסיס השווה ל-FMV בעת הקבלה. במכירה, המערכת מיישמת FIFO או LIFO על ידי בחירת מנות מטבלת class StakingRewardTracker { // Ethereum staking via Lido async trackLidoRewards(walletAddress: string, since: Date): Promise<StakingReward[]> { const rebaseEvents = await this.getLidoRebaseEvents(since); const rewards: StakingReward[] = []; let previousBalance = await this.getStETHBalance(walletAddress, since); for (const rebase of rebaseEvents) { const newBalance = await this.getStETHBalance(walletAddress, rebase.timestamp); const rewardAmount = newBalance - previousBalance; if (rewardAmount > 0) { const ethPrice = await this.priceService.getHistoricalPrice("stETH", rebase.timestamp); rewards.push({ timestamp: rebase.timestamp, protocol: "Lido", asset: "stETH", amount: rewardAmount, usdValue: rewardAmount * ethPrice, rewardType: "REBASING", costBasis: rewardAmount * ethPrice, }); } previousBalance = newBalance; } return rewards; } // Ethereum 2.0 validator rewards async trackETH2ValidatorRewards(validatorIndex: number, since: Date): Promise<StakingReward[]> { const beaconChainData = await fetch( `https://beaconcha.in/api/v1/validator/${validatorIndex}/incomedetail?limit=100` ).then(r => r.json()); return beaconChainData.data .filter((r: any) => new Date(r.epoch_timestamp) >= since) .map(async (r: any) => { const timestamp = new Date(r.epoch_timestamp); const ethPrice = await this.priceService.getHistoricalPrice("ETH", timestamp); const rewardETH = r.income.attestation_source_reward / 1e9; return { timestamp, protocol: "Ethereum 2.0 Validator", asset: "ETH", amount: rewardETH, usdValue: rewardETH * ethPrice, validatorIndex, epoch: r.epoch, }; }); } // Solana staking rewards async trackSolanaRewards(walletAddress: string, since: Date): Promise<StakingReward[]> { const connection = new Connection(SOLANA_RPC); const rewardHistory = await connection.getInflationReward( [walletAddress], { epoch: await this.getEpochSince(since) } ); return rewardHistory.map(r => ({ timestamp: epochToTimestamp(r.epoch), protocol: "Solana Staking", asset: "SOL", amount: r.amount / 1e9, usdValue: (r.amount / 1e9) * solPriceAtEpoch, })); } } . מנגנון זה מונע כפל מס. חשבונאות ידנית מובילה לשגיאות של 20% בעלות בסיס (לפי רואי חשבון עצמאיים); המערכת שלנו מפחיתה זאת ל-0.5%. הדיוק של האוטומציה גבוה פי 40 משיטות ידניות – חיסכון ישיר בקנסות.
דוגמה: קיבלתם 10 stETH בשלושה חלקים במחירים שונים. במכירה, המערכת קובעת אוטומטית את עלות הבסיס של כל חלק ומחשבת רווחי הון. מנות נוצרות בזמן קבלת התגמול, לא בזמן המכירה.
בקבלת 1 ETH דרך מאמת ב-12 בינואר במחיר $1200, נוצרת מנה: {נכס: ETH, כמות: 1, עלות בסיס: 1200, תאריך: 12 בינואר}. מכירת ETH זה ב-15 ביוני במחיר $1800 מניבה רווח הון של $600.
ארכיטקטורה וטכנולוגיות
המערכת בנויה על מחברים מודולריים. כל פרוטוקול הוא מחלקת TypeScript נפרדת המיישמת staking_events. לתמחור, אנו משתמשים באגרגטור נתונים היסטורי (CoinGecko API). כל האירועים נכתבים לטבלת StakingTracker עם שדות: פרוטוקול, נכס, כמות, usd_value, חותמת זמן, עלות בסיס.
| סוג סטייקינג | דוגמאות | שיטת חשבונאות |
|---|---|---|
| סטייקינג מקורי | ETH2, SOL, ADA, DOT | תגמולים נרשמים בכל תקופת epoch |
| סטייקינג נזיל | Lido (stETH), Rocket Pool (rETH) | מעקב אחר אירועי rebasing |
| תגמולי מאמתים | מאמתי ETH2, Solana | הכנסה מחולקת לפי תקופת epoch |
תהליך היישום
- ביקורת טכנולוגית – ניתוח פרוטוקולים, היקף עסקאות, תוכנת חשבונאות.
- עיצוב ארכיטקטורה – בחירת מחברים, מבנה מסד נתונים (אירועים, מנות, דוחות).
- פיתוח מחברים – כתיבת מודולי TypeScript עם בדיקות יחידה על fork של Tenderly.
- אינטגרציה חשבונאית – חיבור דרך API ל-CoinTracking/Koinly או ייצוא CSV.
- בדיקות – הרצה על נתונים היסטוריים, הצלבת סכומים עם תגמולים בפועל.
- השקה וניטור – cron על שרת, לוגים ב-Sentry, התראות על שגיאות.
לוח זמנים: 3 עד 5 שבועות לסט בסיסי (3–4 פרוטוקולים). התמחור מותאם אישית – תלוי במספר הפרוטוקולים ובצורך בלוגיקה מותאמת.
מה כלול?
- קוד מקור של מחברי TypeScript
- תיעוד ארכיטקטורה ומדריך הפעלה
- אינטגרציה מוגדרת עם תוכנת חשבונאות (JSON/CSV)
- הדרכה לרואה חשבון על שימוש בדוחות
- חודש תמיכה לאחר ההשקה
טעויות נפוצות בחשבונאות ידנית
- החמצת אירועי rebasing – הסטייקינג נראה נמוך ב-15–30% מהמציאות
- עלות בסיס שגויה במכירה – שימוש במחיר רכישה במקום FMV בעת הקבלה
- התעלמות מהבדלים בין תחומי שיפוט – דוח אמריקאי לא מתאים לגרמניה
- החמצת מנות לתגמולי מאמתים – הם לא תמיד מופיעים כעסקאות נפרדות
אנו מבטיחים דוחות מס מדויקים העומדים בדרישות ה-IRS ורשויות המס הגרמניות. הצוות שלנו מחזיק בהסמכות בחשבונאות קריפטו ויש לו ניסיון של 5+ שנים עם 50+ פרויקטים. צרו קשר להערכת פרויקט – ננתח את הטכנולוגיה שלכם ונעריך לוחות זמנים. קבלו ייעוץ על חשבונאות מס לסטייקינג עוד היום.







