充值与提现 (Deposit & Withdraw)
ZTDX 采用链上结算机制,充值和提现均通过智能合约完成,确保资金安全和透明。
概述
充值流程
1. 准备充值
↓
2. 向 Vault 合约转账
↓
3. 等待区块确认(2-5个区块)
↓
4. 余额自动更新
提现流程
1. 发起提现请求(获取后端签名)
↓
2. 调用 Vault 合约的 withdraw() 方法
↓
3. 等待交易确认
↓
4. 资产转入钱包
充值 (Deposit)
准备充值
获取充值所需的合约地址和参数信息。
接口信息
- Method:
POST - Path:
/api/v1/deposit/prepare - Authentication: 需要 JWT Token
- Content-Type:
application/json
请求参数
| 参数 | 类型 | 必须 | 描述 |
|---|---|---|---|
| token | string | 是 | 资产名称(如 USDT) |
| amount | string | 是 | 充值数量(Decimal 字符串) |
请求示例
{
"token": "USDT",
"amount": "1000.00"
}
响应示例
{
"vault_address": "0x1234567890abcdef1234567890abcdef12345678",
"token_address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"token_symbol": "USDT",
"token_decimals": 6,
"amount": "1000.00",
"amount_wei": "1000000000",
"estimated_gas": 100000,
"gas_price_gwei": "0.1"
}
响应字段说明
| 字段 | 类型 | 描述 |
|---|---|---|
| vault_address | string | Vault 合约地址(接收地址) |
| token_address | string | 代币合约地址 |
| token_symbol | string | 代币符号 |
| token_decimals | number | 代币小数位数 |
| amount | string | 充值数量(Decimal 字符串) |
| amount_wei | string | 充值数量(Wei,最小单位) |
| estimated_gas | number | 预估 Gas 用量 |
| gas_price_gwei | string | 当前 Gas 价格(Gwei) |
前端充值示例
async function deposit(token, amount) {
// 1. 准备充值
const prepareResponse = await fetch('/api/v1/deposit/prepare', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${jwtToken}`
},
body: JSON.stringify({ token, amount })
});
const {
vault_address,
token_address,
amount_wei
} = await prepareResponse.json();
// 2. 调用 ERC20 合约的 transfer 方法
const tokenContract = new ethers.Contract(
token_address,
['function transfer(address to, uint256 amount) returns (bool)'],
signer
);
const tx = await tokenContract.transfer(vault_address, amount_wei);
// 3. 等待确认
await tx.wait();
console.log('充值成功!交易哈希:', tx.hash);
return tx.hash;
}
充值历史
查询用户的充值记录。
接口信息
- Method:
GET - Path:
/api/v1/deposit/history - Authentication: 需要 JWT Token
Query 参数
| 参数 | 类型 | 必须 | 描述 |
|---|---|---|---|
| limit | number | 否 | 返回数量(默认 50) |
| offset | number | 否 | 偏移量(分页) |
响应示例
{
"deposits": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"user_address": "0x742d35cc6634c0532925a3b844bc9e7595f0beb",
"token": "USDT",
"token_address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"amount": "1000.00",
"tx_hash": "0xabc123def456...",
"block_number": 12345678,
"confirmations": 5,
"status": "completed",
"created_at": 1704067200000,
"confirmed_at": 1704067500000
}
],
"total": 1,
"limit": 50,
"offset": 0
}
Deposit 对象字段
| 字段 | 类型 | 描述 |
|---|---|---|
| id | string | 充值记录 UUID |
| user_address | string | 用户地址 |
| token | string | 资产符号 |
| token_address | string | 代币合约地址 |
| amount | string | 充值数量(Decimal 字符串) |
| tx_hash | string | 交易哈希 |
| block_number | number | 区块高度 |
| confirmations | number | 确认数 |
| status | string | 状态(见下表) |
| created_at | number | 创建时间(毫秒级时间戳) |
| confirmed_at | number | null | 确认时间(毫秒级时间戳) |
充值状态
| 状态 | 说明 | 可操作 |
|---|---|---|
| pending | 待确认(等待区块确认) | 否 |
| completed | 已完成(余额已到账) | 否 |
| failed | 失败(交易回滚) | 否 |
提现 (Withdraw)
发起提现请求
创建提现请求并获取后端签名,用于调用链上合约。
接口信息
- Method:
POST - Path:
/api/v1/withdraw/request - Authentication: 需要 JWT Token
- Content-Type:
application/json
请求参数
| 参数 | 类型 | 必须 | 描述 |
|---|---|---|---|
| token | string | 是 | 资产名称(如 USDT) |
| amount | string | 是 | 提现数量(Decimal 字符串) |