Інтеграція Elliptic для Compliance
Elliptic — конкурент Chainalysis з кількома технічними перевагами: глибший DeFi охват, cross-chain трасування (відслідковування коштів між ланцюгами через bridges), та підтримка Solana. API трохи відрізняється від Chainalysis за структурою.
Elliptic Lens API (скринінг гаманців)
class EllipticClient {
private readonly BASE_URL = "https://aml.elliptic.co/v2";
async screenWallet(address: string, asset: string): Promise<EllipticWalletRisk> {
const response = await this.post("/wallet/synchronous", {
subject: {
asset,
type: "address",
hash: address,
blockchain: this.getBlockchain(asset),
},
type: "wallet_exposure",
customer_reference: address,
behaviour_classification: true, // включає дані поведінки кластера
});
return {
riskScore: response.risk_score, // 0-10 (у Elliptic інша шкала!)
riskBand: response.risk_band, // "low" | "medium" | "high" | "very_high"
exposures: response.exposures, // розбивка прямого та непрямого впливу
entities: response.entities,
behaviours: response.behaviours,
};
}
async screenTransaction(txHash: string, asset: string): Promise<EllipticTxRisk> {
return this.post("/transaction/synchronous", {
subject: {
asset,
type: "transaction",
hash: txHash,
blockchain: this.getBlockchain(asset),
},
type: "indirect_exposure",
});
}
private getBlockchain(asset: string): string {
const map: Record<string, string> = {
ETH: "ethereum",
BTC: "bitcoin",
USDT: "ethereum", // або tron
SOL: "solana",
BNB: "bsc",
};
return map[asset] || asset.toLowerCase();
}
}
Нормалізація оцінки ризику
Elliptic використовує шкалу 0-10, Chainalysis використовує 0-100. При використанні обох провайдерів потрібна нормалізація:
function normalizeRiskScore(score: number, provider: "chainalysis" | "elliptic"): number {
if (provider === "elliptic") return score * 10; // 0-10 → 0-100
return score; // chainalysis вже 0-100
}
// Відображення risk band для уніфікованого прийняття рішень
function getRiskDecision(score: number): "allow" | "review" | "block" {
if (score >= 70) return "block";
if (score >= 40) return "review";
return "allow";
}
Cross-chain трасування
Перевага Elliptic: відслідковує кошти через bridges (Wormhole, Stargate, LayerZero):
// Якщо кошти прийшли через bridge, Elliptic відслідковує оригінальний ланцюг
async function checkCrossChainExposure(
address: string,
inboundTxHash: string
): Promise<CrossChainRisk> {
const walletRisk = await elliptic.screenWallet(address, "ETH");
// exposures.indirect може показати ризик через bridge
const bridgeExposures = walletRisk.exposures.indirect.filter(
e => e.category === "bridge" && e.riskScore > 40
);
if (bridgeExposures.length > 0) {
// Запитуємо деталі для кожного bridge хопу
for (const exp of bridgeExposures) {
const originRisk = await elliptic.screenWallet(exp.sourceAddress, exp.sourceAsset);
if (originRisk.riskBand === "high" || originRisk.riskBand === "very_high") {
return { hasHighRisk: true, originChain: exp.sourceBlockchain };
}
}
}
return { hasHighRisk: false };
}
Інтеграція Elliptic з cross-chain трасуванням та нормалізованим risk scoring для системи з двома провайдерами — 1-2 тижні.







