包含 webapp(Next.js 用户端)、webapp-back(Go 后端)、 antdesign(管理后台)、landingpage(营销落地页)、 数据库 SQL 和配置文件。
286 lines
5.8 KiB
Markdown
286 lines
5.8 KiB
Markdown
# Lending API Implementation
|
|
|
|
## Overview
|
|
This directory contains the backend implementation for the AssetX Lending Market system.
|
|
|
|
## API Endpoints
|
|
|
|
### Query Endpoints (Public)
|
|
|
|
#### Get User Position
|
|
```
|
|
GET /api/lending/position/:address
|
|
```
|
|
Returns user's lending position including:
|
|
- Supplied USDC balance
|
|
- Borrowed USDC balance
|
|
- Collateral balances (YT-A, YT-B, YT-C)
|
|
- Health Factor
|
|
- LTV (Loan-to-Value) ratio
|
|
- Supply/Borrow APY
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"user_address": "0x...",
|
|
"wallet_address": "0x...",
|
|
"supplied_balance": "10000.00",
|
|
"supplied_balance_usd": 10000.00,
|
|
"borrowed_balance": "1000.00",
|
|
"borrowed_balance_usd": 1000.00,
|
|
"collateral_balances": {
|
|
"YT-A": {
|
|
"token_symbol": "YT-A",
|
|
"balance": "1000.00",
|
|
"balance_usd": 2000000.00,
|
|
"collateral_value": 1400000.00
|
|
}
|
|
},
|
|
"health_factor": 14.0,
|
|
"ltv": 10.0,
|
|
"supply_apy": 6.1,
|
|
"borrow_apy": 9.1
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Get Lending Stats
|
|
```
|
|
GET /api/lending/stats
|
|
```
|
|
Returns lending market statistics:
|
|
- Total supplied/borrowed USD
|
|
- Total collateral USD
|
|
- Utilization rate
|
|
- Average APYs
|
|
- User counts
|
|
- Total TVL
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"total_supplied_usd": 50000000.00,
|
|
"total_borrowed_usd": 30000000.00,
|
|
"total_collateral_usd": 80000000.00,
|
|
"utilization_rate": 60.0,
|
|
"avg_supply_apy": 6.1,
|
|
"avg_borrow_apy": 9.1,
|
|
"total_users": 1250,
|
|
"active_borrowers": 450,
|
|
"total_tvl": 130000000.00
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Get Lending Markets
|
|
```
|
|
GET /api/lending/markets
|
|
```
|
|
Returns lending market configuration from `lending_markets` table.
|
|
|
|
#### Get All Tokens Info
|
|
```
|
|
GET /api/lending/tokens
|
|
```
|
|
Returns information about all supported tokens (USDC + YT tokens from `assets` table).
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"stablecoins": [
|
|
{
|
|
"symbol": "USDC",
|
|
"name": "USD Coin",
|
|
"decimals": 6,
|
|
"contract_address_arb": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
|
|
"contract_address_bsc": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"
|
|
}
|
|
],
|
|
"yt_tokens": [
|
|
{
|
|
"symbol": "YT-A",
|
|
"name": "YT-A",
|
|
"decimals": 18,
|
|
"contract_address_arb": "0x...",
|
|
"contract_address_bsc": "0x...",
|
|
"asset_code": "YT-A"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
#### Get Token Info
|
|
```
|
|
GET /api/lending/tokens/:assetCode
|
|
```
|
|
Returns information about a specific token (USDC or YT-A/YT-B/YT-C).
|
|
|
|
### Transaction Endpoints
|
|
|
|
#### Supply USDC
|
|
```
|
|
POST /api/lending/supply
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"amount": "1000.00",
|
|
"tx_hash": "0x..."
|
|
}
|
|
```
|
|
|
|
#### Withdraw USDC
|
|
```
|
|
POST /api/lending/withdraw
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"amount": "500.00",
|
|
"tx_hash": "0x..."
|
|
}
|
|
```
|
|
|
|
#### Supply Collateral
|
|
```
|
|
POST /api/lending/supply-collateral
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"asset": "YT-A",
|
|
"amount": "100.00",
|
|
"tx_hash": "0x..."
|
|
}
|
|
```
|
|
|
|
#### Withdraw Collateral
|
|
```
|
|
POST /api/lending/withdraw-collateral
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"asset": "YT-A",
|
|
"amount": "50.00",
|
|
"tx_hash": "0x..."
|
|
}
|
|
```
|
|
|
|
#### Borrow USDC
|
|
```
|
|
POST /api/lending/borrow
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"amount": "1000.00",
|
|
"tx_hash": "0x..."
|
|
}
|
|
```
|
|
|
|
#### Repay USDC
|
|
```
|
|
POST /api/lending/repay
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"amount": "500.00",
|
|
"tx_hash": "0x..."
|
|
}
|
|
```
|
|
|
|
## Files
|
|
|
|
- `models.go` - Data models and request/response structures
|
|
- `handlers.go` - HTTP request handlers
|
|
- `helpers.go` - Helper functions (token info, calculations, validation)
|
|
- `tokens.go` - Token information endpoints
|
|
- `routers.go` - Route documentation (routes registered in main.go)
|
|
- `README.md` - This file
|
|
|
|
## Current Implementation Status
|
|
|
|
### ✅ Completed
|
|
- API endpoint structure
|
|
- Request/response models
|
|
- Basic validation
|
|
- Mock data responses
|
|
- Database integration for token information
|
|
- USDC configuration (hardcoded as per frontend)
|
|
- YT token information from `assets` table
|
|
- Token validation against database
|
|
- Health factor and LTV calculation formulas
|
|
- Token info query endpoints
|
|
|
|
### ⏳ TODO
|
|
1. **Blockchain Integration**
|
|
- Connect to smart contracts
|
|
- Verify transactions on-chain
|
|
- Query real-time balances
|
|
- Calculate health factor from chain data
|
|
|
|
2. **Database Integration**
|
|
- Store transaction records
|
|
- Update lending_markets table
|
|
- Track user positions
|
|
- Generate statistics
|
|
|
|
3. **Authentication**
|
|
- Add wallet signature verification
|
|
- Implement user session management
|
|
|
|
4. **Business Logic**
|
|
- Interest accrual calculations
|
|
- Health factor monitoring
|
|
- Liquidation logic
|
|
- APY calculations
|
|
|
|
## Database Schema
|
|
|
|
The lending system uses the following tables from `database-schema-v1.1-final.sql`:
|
|
|
|
- `lending_markets` - Lending market configuration
|
|
- `transactions` - Transaction records
|
|
- `protocol_stats` - Protocol-level statistics
|
|
|
|
Note: User position data is primarily read from blockchain, with caching in database.
|
|
|
|
## Integration with Frontend
|
|
|
|
Frontend components that use these APIs:
|
|
|
|
- `/lending/supply/SupplyPanel.tsx` - Supply USDC
|
|
- `/lending/supply/WithdrawPanel.tsx` - Withdraw USDC
|
|
- `/lending/repay/RepayBorrowDebt.tsx` - Borrow/Repay USDC
|
|
- `/lending/repay/RepaySupplyCollateral.tsx` - Supply/Withdraw Collateral
|
|
- `/lending/BorrowMarket.tsx` - Display lending positions
|
|
|
|
## Testing
|
|
|
|
```bash
|
|
# Start the server
|
|
go run main.go
|
|
|
|
# Test endpoints
|
|
curl http://localhost:8080/api/lending/stats
|
|
curl http://localhost:8080/api/lending/position/0x1234...
|
|
|
|
# Test transactions (requires auth)
|
|
curl -X POST http://localhost:8080/api/lending/supply \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"amount": "1000", "tx_hash": "0x..."}'
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
1. Implement blockchain RPC integration
|
|
2. Add real transaction verification
|
|
3. Implement health factor calculations
|
|
4. Add liquidation monitoring
|
|
5. Integrate with frontend
|
|
6. Add comprehensive tests
|
|
7. Deploy to testnet
|