專案概述
本教程構建一個充值風控系統,在使用者充值時自動評估資金來源風險。預計時間:30 分鐘
難度等級:⭐⭐ 入門
難度等級:⭐⭐ 入門
- 註冊充值交易進行 KYT 分析
- 查詢交易風險評估結果
- 根據風險等級處理充值
工作原理
Step 1:註冊充值交易
當檢測到充值時,將交易註冊到 KYT API 進行分析。import { ChainStreamClient } from '@chainstream-io/sdk';
const client = new ChainStreamClient(process.env.CHAINSTREAM_ACCESS_TOKEN);
async function registerDeposit(deposit) {
// 注册交易进行 KYT 分析
const response = await client.kyt.registerTransfer({
network: deposit.network, // 'bitcoin', 'ethereum', 'Solana'
asset: deposit.asset, // 'BTC', 'ETH', 'SOL'
transferReference: deposit.txHash, // 交易哈希
direction: 'received' // 充值 = received
});
return response.transferId;
}
Step 2:獲取風險評估
註冊後,查詢交易摘要獲取風險資訊。async function getTransferRisk(transferId) {
// 获取带风险评估的交易摘要
const summary = await client.kyt.getTransferSummary(transferId);
// 获取详细警报信息
const alerts = await client.kyt.getTransferAlerts(transferId);
// 获取直接风险敞口信息
const exposures = await client.kyt.getTransferDirectExposure(transferId);
return {
summary,
alerts,
exposures
};
}
Step 3:根據風險處理
實現基於風險的處理邏輯。async function evaluateDeposit(deposit) {
// 注册充值
const transferId = await registerDeposit(deposit);
// 获取风险评估
const { summary, alerts, exposures } = await getTransferRisk(transferId);
// 根据警报判断风险等级
const hasHighRiskAlert = alerts.some(
alert => alert.severity === 'high' || alert.severity === 'critical'
);
const hasMediumRiskAlert = alerts.some(
alert => alert.severity === 'medium'
);
// 根据风险处理
if (hasHighRiskAlert) {
return rejectDeposit(deposit, alerts);
}
if (hasMediumRiskAlert) {
return queueForReview(deposit, alerts);
}
return approveDeposit(deposit);
}
function approveDeposit(deposit) {
console.log(`✅ 充值已批准: ${deposit.txHash}`);
// 为用户账户入账
return { status: 'approved', deposit };
}
function queueForReview(deposit, alerts) {
console.log(`⚠️ 充值待审核: ${deposit.txHash}`);
// 通知合规团队
return { status: 'pending_review', deposit, alerts };
}
function rejectDeposit(deposit, alerts) {
console.log(`❌ 充值已拒绝: ${deposit.txHash}`);
// 记录并通知
return { status: 'rejected', deposit, alerts };
}
完整示例
import { ChainStreamClient } from '@chainstream-io/sdk';
const client = new ChainStreamClient(process.env.CHAINSTREAM_ACCESS_TOKEN);
class DepositRiskChecker {
async checkDeposit(deposit) {
try {
// Step 1: 注册交易
const { transferId } = await client.kyt.registerTransfer({
network: deposit.network,
asset: deposit.asset,
transferReference: deposit.txHash,
direction: 'received'
});
console.log(`📝 已注册交易: ${transferId}`);
// Step 2: 获取风险评估
const summary = await client.kyt.getTransferSummary(transferId);
const alerts = await client.kyt.getTransferAlerts(transferId);
console.log(`📊 风险评估完成`);
console.log(` 警报数量: ${alerts.length}`);
// Step 3: 做出决策
return this.makeDecision(deposit, summary, alerts);
} catch (error) {
console.error(`❌ 检查充值时出错: ${error.message}`);
// 出错时,排队人工审核
return { status: 'pending_review', reason: 'system_error' };
}
}
makeDecision(deposit, summary, alerts) {
const criticalAlerts = alerts.filter(a => a.severity === 'critical');
const highAlerts = alerts.filter(a => a.severity === 'high');
const mediumAlerts = alerts.filter(a => a.severity === 'medium');
if (criticalAlerts.length > 0 || highAlerts.length > 0) {
return {
status: 'rejected',
reason: 'high_risk_detected',
alerts: [...criticalAlerts, ...highAlerts]
};
}
if (mediumAlerts.length > 0) {
return {
status: 'pending_review',
reason: 'medium_risk_detected',
alerts: mediumAlerts
};
}
return {
status: 'approved',
reason: 'low_risk'
};
}
}
// 使用示例
const checker = new DepositRiskChecker();
const deposit = {
network: 'Solana',
asset: 'SOL',
txHash: '39z5QAprVrzaFzfHu1JHPgBf9dSqYdNYhH31d3PEd4hWiWL1LML7qCct5MHGxaRAgjjj1nC3XUyLwtzGQmYqUk4y:address'
};
const result = await checker.checkDeposit(deposit);
console.log('决策结果:', result);
API 參考
| 端點 | 描述 |
|---|---|
POST /v1/kyt/transfer | 註冊交易進行 KYT 分析 |
GET /v1/kyt/transfers/{id}/summary | 獲取交易摘要 |
GET /v1/kyt/transfers/{id}/alerts | 獲取交易警報 |
GET /v1/kyt/transfers/{id}/exposures/direct | 獲取直接風險敞口資訊 |
下一步
KYT 概念
瞭解 KYT 工作原理
KYT API 參考
完整 API 文件

