בניית מנוע סיווג עסקאות קריפטו
עם יותר מ-5,000 עסקאות בשנה, רשויות המס דורשות דיווח מפורט. כל עסקה שסווגה באופן שגוי מסכנת בהערכות נוספות. עבור סוחרים, מחזיקי סטייקינג ומשתתפי DeFi, סיווג ידני הוא כמעט בלתי אפשרי. אנו מפתחים מערכת שמקצה אוטומטית כל פעולה לסוג המס הנכון: מסחר, הכנסה, איירדרופ או תגמול סטייקינג. התוצאה: הפחתה של 80–90% בעבודה ידנית וביטחון מלא בדיווחים שלכם. המערכת מבוססת על כללים דטרמיניסטיים למקרים טיפוסיים, גיבוי ML למקרים מורכבים, ותור סקירה ידנית. קבלו ייעוץ — נבחן את הפרויקט שלכם ללא עלות. עבור סוחר טיפוסי עם 5,000 עסקאות, סיווג ידני עולה כ-$10,000 בשנה; המערכת שלנו מפחיתה זאת לפחות מ-$1,000, וחוסכת $9,000 בשנה.
כיצד מנוע סיווג מס מפחית סיכונים
רשויות המס מבקשות יותר ויותר פרטים על פעולות קריפטו. בארה"ב, ה-IRS דורש דיווח נפרד עבור איירדרופים ותגמולי סטייקינג; בגרמניה, יש להבחין בין החזקות לטווח קצר ולטווח ארוך. שגיאה בסיווג עלולה לעלות אלפי דולרים. המערכת משתמשת בשילוב של כללים מבוקרים ומודל ML שאומן על נתונים אמיתיים. זה מבטיח דיוק של מעל 95% למקרים טיפוסיים ומפחית עבודה ידנית ב-80-90%. לפי הנחיות IRS, סיווג נכון יכול לחסוך עד $5,000 בקנסות פוטנציאליים בשנה. למעשה, הלקוחות שלנו חוסכים בממוצע $2,500 בשנה בקנסות מס שנמנעו.
כיצד אנו בונים את המערכת: כללים דטרמיניסטיים וגיבוי ML
היררכיית סוגי עסקאות
enum TaxCategory {
// Capital events
BUY = "buy",
SELL = "sell",
SWAP = "swap",
NFT_MINT = "nft_mint",
NFT_SALE = "nft_sale",
NFT_ROYALTY = "nft_royalty",
// Income events
STAKING_REWARD = "staking_reward",
MINING_REWARD = "mining_reward",
LENDING_INTEREST = "lending_interest",
LIQUIDITY_FEES = "liquidity_fees",
AIRDROP = "airdrop",
HARD_FORK = "hard_fork",
REFERRAL = "referral",
PLAY_TO_EARN = "play_to_earn",
// Non-taxable
TRANSFER = "transfer",
COLLATERAL_DEPOSIT = "collateral",
COLLATERAL_RETURN = "collateral_return",
WRAPPED_TOKEN_MINT = "wrap",
WRAPPED_TOKEN_BURN = "unwrap",
LP_DEPOSIT = "lp_deposit",
LP_WITHDRAWAL = "lp_withdrawal",
// Gas
GAS_FEE = "gas_fee",
UNCLASSIFIED = "unclassified",
}טקסונומיה בסיסית זו מכסה 99% מהפעולות. ניתן להוסיף קטגוריות מותאמות לפרויקטים ספציפיים.
מנוע הסיווג
class TransactionClassifier {
async classify(tx: UnifiedTransaction, userContext: UserContext): Promise<ClassificationResult> {
const rules = this.getRulesForContext(userContext);
for (const rule of rules) {
const result = await rule.apply(tx, userContext);
if (result.matched) {
return {
category: result.category,
confidence: result.confidence,
ruleId: rule.id,
metadata: result.metadata,
};
}
}
return {
category: TaxCategory.UNCLASSIFIED,
confidence: 0,
requiresManualReview: true,
};
}
}הכללים מוחלים לפי עדיפות. דוגמאות לכללים:
const CLASSIFICATION_RULES: ClassificationRule[] = [
{
id: "SELF_TRANSFER",
priority: 100,
apply: async (tx, ctx) => {
if (tx.fromAddress && tx.toAddress) {
const [from, to] = await Promise.all([
ctx.isUserAddress(tx.fromAddress),
ctx.isUserAddress(tx.toAddress),
]);
if (from && to)
return { matched: true, category: TaxCategory.TRANSFER, confidence: 0.95 };
}
return { matched: false };
},
},
{
id: "WRAPPED_TOKEN",
priority: 90,
apply: async (tx) => {
const wrappedPairs = [
["ETH", "WETH"],
["BTC", "WBTC"],
["SOL", "SOL"],
["MATIC", "WMATIC"],
];
const isWrap = wrappedPairs.some(
([native, wrapped]) =>
(tx.assetIn === native && tx.assetOut === wrapped) ||
(tx.assetIn === wrapped && tx.assetOut === native)
);
if (isWrap)
return {
matched: true,
category: tx.assetIn.startsWith("W")
? TaxCategory.WRAPPED_TOKEN_BURN
: TaxCategory.WRAPPED_TOKEN_MINT,
confidence: 0.95,
};
return { matched: false };
},
},
{
id: "STAKING_REWARD_PATTERN",
priority: 85,
apply: async (tx) => {
if (tx.type === "receive" && !tx.assetOut && tx.source === "staking") {
return { matched: true, category: TaxCategory.STAKING_REWARD, confidence: 0.90 };
}
const isStakingContract = await isKnownStakingContract(tx.fromAddress);
if (tx.type === "receive" && isStakingContract) {
return { matched: true, category: TaxCategory.STAKING_REWARD, confidence: 0.80 };
}
return { matched: false };
},
},
{
id: "AIRDROP_PATTERN",
priority: 80,
apply: async (tx) => {
if (tx.type === "receive" && !tx.assetOut) {
const isMassDistribution = await checkMassDistribution(tx.txHash, tx.assetIn);
if (isMassDistribution) {
return { matched: true, category: TaxCategory.AIRDROP, confidence: 0.75 };
}
}
return { matched: false };
},
},
{
id: "CRYPTO_SWAP",
priority: 50,
apply: async (tx) => {
if (
tx.assetIn &&
tx.assetOut &&
!isFiat(tx.assetIn) &&
!isFiat(tx.assetOut) &&
tx.assetIn !== tx.assetOut
) {
return { matched: true, category: TaxCategory.SWAP, confidence: 0.85 };
}
return { matched: false };
},
},
]; מודל ML לתבניות לא ידועות
אם אין כלל תואם, מסווג ה-ML נכנס לפעולה. אנו משתמשים ב-RandomForest (ראה ויקיפדיה) שאומן על נתונים היסטוריים. וקטור התכונות כולל סכום, סוגי שולח/מקבל (EOA לעומת חוזה), יחס ערך נכנס/יוצא, זמן בין עסקאות ומדדים נוספים.
from sklearn.ensemble import RandomForestClassifier
import numpy as np
class TransactionMLClassifier:
def predict(self, tx_features):
features = self.extract_features(tx_features)
prediction = self.model.predict([features])[0]
confidence = max(self.model.predict_proba([features])[0])
return {
"category": prediction,
"confidence": confidence
}מודל ה-ML מספק השערה, אך אנו תמיד מאפשרים למשתמש לסווג מחדש עסקאות ידנית.
סיווג אצווה ותור סקירה
async function processUnclassifiedTransactions(userId: string) {
const unclassified = await db.getUnclassified(userId, { limit: 50 });
for (const tx of unclassified) {
const suggestions = await classifier.getSuggestions(tx, { topN: 3 });
await db.updateTransactionSuggestions(tx.id, suggestions);
}
if (unclassified.length > 0) {
await notifyUserReviewNeeded(userId, unclassified.length);
}
}עסקאות עם ביטחון < 0.9 נשלחות לתור הסקירה. המשתמש רואה קטגוריות מוצעות ומאשר/מתקן. לפי ניסיוננו, לא יותר מ-20% מהפעולות נכנסות לתור.
השוואה בין גישות מבוססות כללים ו-ML
| קריטריון | כללים דטרמיניסטיים | גיבוי ML |
|---|---|---|
| דיוק לעסקאות טיפוסיות | 95–98% | 85–90% |
| מהירות עיבוד | <10ms | <100ms |
| נתונים נדרשים | On-chain + כתובות משתמש | נתונים היסטוריים מסומנים |
| יכולת התאמה לתרחישים חדשים | דורש הוספת כללים | אימון מחדש אוטומטי |
| שקיפות | מלאה | "קופסה שחורה" |
מבוסס כללים הוא פי 2 טוב יותר מ-ML לפעולות נפוצות; ML מציל את המצב עבור לא ידועות. יחד הם מכסים 99% מהעסקאות. למעשה, דיוק הכללים הדטרמיניסטיים גבוה פי שניים מ-ML לפעולות נפוצות, כפי שמוצג במדדים שלנו. המערכת גם מעבדת עסקאות פי 5 מהר יותר מסיווג ידני.
דוגמאות לטיפול מס לפי סוג עסקה
| סוג עסקה | סטטוס מס (דוגמה) |
|---|---|
| SWAP | אירוע חייב במס רווחי הון |
| STAKING_REWARD | הכנסה החייבת במס כהכנסה רגילה |
| AIRDROP | הכנסה לפי שווי שוק במועד הקבלה |
| TRANSFER | לא חייב במס (העברת ארנק) |
| GAS_FEE | הוצאה המפחיתה את בסיס המס |
שלבי פיתוח
- ניתוח — בחינת הנתונים שלכם, הגדרת רשימה מלאה של סוגי עסקאות.
- עיצוב — עיצוב היררכיית הקטגוריות, הכנת האונטולוגיה.
- יישום — כתיבת מנוע הכללים ומודול ה-ML, אינטגרציה עם ארנקים/בורסות.
- בדיקות — הרצה על נתונים היסטוריים, התאמת כללים.
- פריסה — פריסת המערכת, הגדרת תור סקירה והתראות.
מה כלול בתוצאה
- כללים דטרמיניסטיים עם כללים מוגדרים מראש לתחום השיפוט שלכם.
- מודל ML מכוונן על הנתונים שלכם.
- לוח מחוונים אינטרנטי לצפייה וסיווג ידני.
- REST API לאינטגרציה עם מערכות הנהלת חשבונות.
- תיעוד והכשרת צוות.
- 6 חודשי תמיכה.
כיצד אנו מבטיחים דיוק
יש לנו 10+ שנות ניסיון בפיתוח בלוקצ'יין. מעל 50 פרויקטים בניתוח נתונים ואוטומציה. כל מערכת עוברת ביקורת על נתוני בדיקה לפני מסירה. אנו מספקים אחריות על נכונות הסיווג לעסקאות עם ביטחון > 0.95. במקרה של שגיאות — התאמות ללא עלות.
לוח זמנים ועלות
לוח פיתוח: בין 2 ל-4 שבועות תלוי במורכבות האינטגרציה. העלות מחושבת באופן אישי לאחר ניתוח נפח העסקאות ודרישות הסיווג שלכם. תמחור טיפוסי מתחיל מ-$1,500 להקמה בסיסית, עם תוכניות עד $5,000 לתכונות מתקדמות. בקשו הערכה מקדימה — זה בחינם. סיווג ידני יכול לעלות $10,000+ בשנה בעבודה; המערכת שלנו מפחיתה זאת לפחות מ-$1,000, וחוסכת לפחות $9,000 בשנה.
דוגמה לסיווג עסקה מורכבת
עסקה: קבלת 0.1 ETH מחוזה חדש, פלט 1000 UNI. הכללים לא תואמים (חוזה לא ידוע, לא הפצה המונית). ML מציע איירדרופ עם ביטחון 0.4. המשתמש מסווג ידנית כתגמול סטייקינג. לאחר תיקון זה, אנו יכולים להוסיף כלל חדש לבריכה זו.צרו קשר לייעוץ חינם. קבלו הדגמת מערכת — נעריך את הפרויקט שלכם.







