่ทจ DEX ๆฐธ็ปญๅ็บฆๅฅๅฉๆบๅจไบบ๏ผ่ฟ่กๅจ Arbitrum ้พไธใ็ๆง AZverse DEX ไธๅคไธชๆฐธ็ปญๅ็บฆไบคๆๆไน้ด็ไปทๆ ผๅทฎๅผ๏ผ่ชๅจๆง่กๅฅๅฉไบคๆใ
- ๐ ๅฎๆถไปทๆ ผ็ๆง - WebSocket ่ฟๆฅๅคไธชไบคๆๆ๏ผๆฏซ็ง็บงไปทๆ ผๆดๆฐ
- ๐ฏ ๅฅๅฉๆบไผๆฃๆต - ่ชๅจ่ฎก็ฎไปทๅทฎใๆ็ปญ่ดนใๆป็น๏ผ็ญ้ๆๅฉๅฏๅพ็ๆบไผ
- โก ่ชๅจไบคๆๆง่ก - ๅๆถๅจไธคไธชไบคๆๆๅผไป๏ผๆ่ทไปทๅทฎๆถ็
- ๐ ไปไฝ็ฎก็ - ๅฎๆถ PnL ็ๆง๏ผ่ชๅจๆญข็ๆญขๆ
- ๐ก๏ธ ้ฃ้ฉๆงๅถ - ไปไฝ้ๅถใๆฅไบๆ้ๅถใๆๅคงๆไปๆถ้ด
- ๐ข ๅ่ญฆ้็ฅ - ๆฏๆ TelegramใDiscordใWebhook ้็ฅ
- ๐พ ๆฐๆฎๆไน ๅ - MySQL ๅญๅจไบคๆ่ฎฐๅฝๅๅๅฒไปทๆ ผ
- ๐ ๅๆตๅผๆ - ๅๅฒๆฐๆฎ้ช่ฏ็ญ็ฅๆๆๆง
| ไบคๆๆ | ็ฑปๅ | ็ถๆ |
|---|---|---|
| AZverse | DEX (Arbitrum) | โ ๅทฒๅฎ็ฐ |
| Paradex | DEX (Starknet) | โ ๅทฒๅฎ็ฐ |
| Binance Futures | CEX | โ ๅทฒๅฎ็ฐ |
- Rust 1.70+
- MySQL 8.0+
- ็จณๅฎ็็ฝ็ป่ฟๆฅ
# ๅ
้้กน็ฎ
git clone <repository-url>
cd perp-arbitrage-bot
# ็ผ่ฏ
cargo build --release# ๅคๅถ้
็ฝฎๆจกๆฟ
cp .env.example .env
# ็ผ่พ้
็ฝฎๆไปถ
vim .env่ฟ่กๅ้่ฆๅ ๅๅงๅๆฐๆฎๅบ๏ผ
# ๅๅปบๆฐๆฎๅบ
mysql -u root -p -e "CREATE DATABASE arbitrage_bot;"
# ๆง่กๅปบ่กจ่ๆฌ
mysql -u root -p arbitrage_bot < migrations/001_init.sql็จๅบๅฏๅจๆถไนไผ่ชๅจๆฃๆฅๅนถๅๅปบ็ผบๅคฑ็่กจใ
# Dry Run ๆจกๅผ (ๅช่งๅฏ๏ผไธไบคๆ)
DRY_RUN=true cargo run --release
# ๆญฃๅผไบคๆๆจกๅผ
DRY_RUN=false cargo run --release# ๅคๅถ้
็ฝฎๆไปถ
cp .env.example .env
# ็ผ่พ้
็ฝฎ
vim .env
# ๅฏๅจๆๅก (ๅ
ๅซ MySQL)
docker-compose up -d
# ๆฅ็ๆฅๅฟ
docker-compose logs -f arbitrage-bot
# ๅๆญขๆๅก
docker-compose down# ๆๅปบ้ๅ
docker build -t perp-arbitrage-bot .
# ่ฟ่ก (้่ฆๅค้จ MySQL)
docker run -d \
--name arbitrage-bot \
--env-file .env \
-e DB_HOST=host.docker.internal \
perp-arbitrage-bot# ไฝฟ็จ็ไบง้
็ฝฎ
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d# ่ฎพ็ฝฎไธบ true ๅฏ็จ่งๅฏๆจกๅผ๏ผๅช่พๅบๆบไผไธๆง่กไบคๆ
DRY_RUN=trueAZVERSE_WS_URL=wss://fstream.azverse.xyz/ws/market?type=SYMBOL
AZVERSE_API_URL=https://app.azverse.xyz/fapi
AZVERSE_TOKEN=your_token # ไปๆต่งๅจ Cookie ่ทๅ
AZVERSE_CLIENT_CODE=your_code # ไปๆต่งๅจ Cookie ่ทๅ
AZVERSE_SESSION_ID=your_session # JSESSIONID่ทๅ AZverse ๅญ่ฏ:
- ็ปๅฝ https://app.azverse.xyz
- ๆๅผๆต่งๅจๅผๅ่ ๅทฅๅ ท (F12)
- ๅจ Application > Cookies ไธญๆพๅฐ
token,client-code,JSESSIONID
BINANCE_WS_URL=wss://fstream.binance.com/stream?streams=btcusdt@bookTicker/ethusdt@bookTicker
BINANCE_API_URL=https://fapi.binance.com
BINANCE_API_KEY=your_api_key
BINANCE_API_SECRET=your_api_secret
BINANCE_ENABLED=true
BINANCE_MAKER_FEE=0.02
BINANCE_TAKER_FEE=0.04PARADEX_WS_URL=wss://ws.api.prod.paradex.trade/v1?cancel-on-disconnect=false
PARADEX_API_URL=https://api.prod.paradex.trade/v1
PARADEX_ENABLED=true
PARADEX_MAKER_FEE=0.02
PARADEX_TAKER_FEE=0.05Paradex ่ฏดๆ:
- WebSocket ไฝฟ็จ JSON-RPC ๆ ผๅผ
- ไบคๆๅฏนๆ ผๅผ:
BTC-USD-PERP,ETH-USD-PERP - ่ชๅจ่ฎข้ order_book ้ข้่ทๅๆไผไนฐๅไปท
- ๆ ้ API Key ๅณๅฏ่ทๅ่กๆ ๆฐๆฎ (ไบคๆ้่ฆ)
# ๅไธชไบคๆๅฏนๆๅคงไปไฝ (USD)
MAX_POSITION_SIZE_USD=10000
# ๆปๆๅฃไธ้ (USD)
MAX_TOTAL_EXPOSURE_USD=50000
# ๆฅไบๆ้ๅถ (USD) - ่ถ
่ฟๅๆๅไบคๆ
DAILY_LOSS_LIMIT_USD=1000
# ๆญขๆ็พๅๆฏ
STOP_LOSS_PERCENT=2.0
# ๆๅคงๆไปๆถ้ด (็ง) - ่ถ
่ฟๅๅผบๅถๅนณไป
MAX_POSITION_DURATION_SECS=3600# ๆๅฐไปทๅทฎ้ๅผ (%) - ไฝไบๆญคๅผไธๅผไป
MIN_SPREAD_PERCENT=0.1
# ๅนณไปไปทๅทฎ้ๅผ (%) - ไปทๅทฎๆถๆๅฐๆญคๅผๆถๅนณไป
EXIT_SPREAD_PERCENT=0.02
# ๅ่ญฆไปทๅทฎ้ๅผ (%)
ALERT_SPREAD_PERCENT=0.05
# ไบคๆๅฏนๅ่กจ
TRADING_PAIRS=BTC_USDT,ETH_USDT# Telegram
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id
# Discord
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...
# ๅ่ญฆ้ข็้ๅถ (ๆฏๅ้)
ALERT_RATE_LIMIT=10DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=your_password
DB_DATABASE=arbitrage_botๅช็ๆงไปทๆ ผๅๆฃๆตๆบไผ๏ผไธๆง่กๅฎ้ ไบคๆใ็จไบ้ช่ฏ็ญ็ฅๅ้ ็ฝฎใ
DRY_RUN=true cargo run --release่พๅบ็คบไพ:
INFO ๐ DRY RUN MODE ENABLED
INFO ๐ Price: AZverse BTC_USDT | bid=50000.00 ask=50010.00 mid=50005.00
INFO ๐ Price: Binance BTC_USDT | bid=50050.00 ask=50060.00 mid=50055.00
INFO ๐ฏ OPPORTUNITY: BTC_USDT | spread=0.10% | net_profit=$15.00 | long@AZverse short@Binance
INFO โโ [DRY RUN] Would execute: BUY on AZverse, SELL on Binance | size=$10000.00
DRY_RUN=false cargo run --release- ไปทๆ ผ็ๆง: ้่ฟ WebSocket ๅฎๆถ่ทๅๅไบคๆๆไปทๆ ผ
- ๆบไผๆฃๆต: ๅฝ AZverse ไธๅฏนๅฒไบคๆๆไปทๅทฎ่ถ ่ฟ้ๅผๆถ่งฆๅ
- ๆนๅๅคๆญ:
- AZverse ไปทๆ ผไฝ โ ๅจ AZverse ๅผๅค๏ผๅฏนๅฒไบคๆๆๅผ็ฉบ
- AZverse ไปทๆ ผ้ซ โ ๅจ AZverse ๅผ็ฉบ๏ผๅฏนๅฒไบคๆๆๅผๅค
- ๅฉๆถฆ่ฎก็ฎ:
ๅๅฉๆถฆ = ๆฏๅฉๆถฆ - ๆ็ปญ่ดน - Gas่ดน - ๆป็น - ๅนณไปๆถๆบ:
- ไปทๅทฎๆถๆๅฐ้ๅบ้ๅผ
- ่พพๅฐๆญข็/ๆญขๆ
- ่ถ ่ฟๆๅคงๆไปๆถ้ด
- ไปทๆ ผๅง็ๆณขๅจๅฏผ่ดไบๆ
- ไบคๆๆ API ๆ ้
- ็ฝ็ปๅปถ่ฟๅฏผ่ดๆง่กๅคฑ่ดฅ
- ๆตๅจๆงไธ่ถณๅฏผ่ดๆป็น่ฟๅคง
ๅปบ่ฎฎ:
- ๅ ไฝฟ็จ Dry Run ๆจกๅผ่งๅฏ
- ไปๅฐไปไฝๅผๅง
- ่ฎพ็ฝฎๅ็็ๆญขๆ
- ็ๆง็ณป็ป่ฟ่ก็ถๆ
ๅๆตๅผๆ็จไบๅจๅๅฒๆฐๆฎไธ้ช่ฏ็ญ็ฅๆๆใ
# ไฝฟ็จ้ป่ฎคๅๆฐ่ฟ่กๅๆต๏ผไฝฟ็จๆจกๆๆฐๆฎ๏ผ
cargo run --bin backtest
# ่ชๅฎไนๅๆฐ
cargo run --bin backtest -- \
--start-date 2024-01-01 \
--end-date 2024-12-31 \
--capital 50000 \
--min-spread 0.15 \
--exit-spread 0.03 \
--position-size 5
# ่ฟ่กๅๆฐไผๅๆซๆ
cargo run --bin backtest -- --sweep| ๅๆฐ | ่ฏดๆ | ้ป่ฎคๅผ |
|---|---|---|
--start-date |
ๅผๅงๆฅๆ (YYYY-MM-DD) | 30ๅคฉๅ |
--end-date |
็ปๆๆฅๆ (YYYY-MM-DD) | ไปๅคฉ |
--capital |
ๅๅง่ต้ (USD) | 10000 |
--min-spread |
ๆๅฐไปทๅทฎ้ๅผ (%) | 0.1 |
--exit-spread |
ๅนณไปไปทๅทฎ้ๅผ (%) | 0.02 |
--position-size |
ไปไฝๅคงๅฐ (% of capital) | 10 |
--sweep |
่ฟ่กๅๆฐไผๅๆซๆ | - |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Backtest Results โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Performance Summary โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Initial Capital: $ 10000.00 โ
โ Final Capital: $ 12500.00 โ
โ Total Return: 25.00% โ
โ Total PnL: $ 2500.00 โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Trade Statistics โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Total Trades: 150 โ
โ Winning Trades: 120 โ
โ Losing Trades: 30 โ
โ Win Rate: 80.00% โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Risk Metrics โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Max Drawdown: $ 500.00 โ
โ Sharpe Ratio: 2.50 โ
โ Profit Factor: 3.20 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- ๅ ่ฟ่ก bot ๆถ้ๅๅฒไปทๆ ผๆฐๆฎๅฐๆฐๆฎๅบ
- ไฟฎๆน
src/bin/backtest.rsไธญ็generate_demo_price_dataๅฝๆฐ๏ผๆนไธบไปๆฐๆฎๅบๅ ่ฝฝ๏ผ
// ไปๆฐๆฎๅบๅ ่ฝฝไปทๆ ผๆฐๆฎ
let price_data = data_store.get_price_history(
"BTC_USDT",
"AZverse",
config.start_date,
config.end_date
).await?;ๅจ AZverse ๅ Paradex ไน้ด่ฟ่กไฝๆๆฌไบคๆ้ๅทๅ๏ผไฝฟ็จ้ไปทๅ (Maker) ้ไฝๆ็ปญ่ดนใ
| ่ดน็จ็ฑปๅ | AZverse | Paradex | ่ฏดๆ |
|---|---|---|---|
| Maker ่ดน็ | 0.02% | 0.02% | ้ไปทๅๆไบค |
| Taker ่ดน็ | 0.05% | 0.05% | ๅธไปทๅๆไบค |
| ๅพ่ฟๆๆฌ (Maker) | - | - | 0.08% |
ไฝฟ็จ Maker ๅๅฏๅฐๆๆฌไป 0.20% ้่ณ 0.08%๏ผๅท $10,000 ไบคๆ้่็ $12ใ
# ้ป่ฎค้
็ฝฎๅๆต (7ๅคฉๆจกๆๆฐๆฎ)
cargo run --bin volume_farming
# ่ชๅฎไนๅๆฐ
cargo run --bin volume_farming -- \
--min-spread 0.08 \
--exit-spread 0.02 \
--position-size 1000 \
--max-hold 600 \
--days 14
# ๅๆฐไผๅๆซๆ (ๆพๆไผ้
็ฝฎ)
cargo run --bin volume_farming -- --sweep
# ไฝฟ็จ้ข่ฎพๆจกๅผ
cargo run --bin volume_farming -- --mode minimum_cost # ๆไฝๆๆฌๆจกๅผ
cargo run --bin volume_farming -- --mode aggressive # ๆฟ่ฟๅท้ๆจกๅผ
# ไฝฟ็จ็ๅฎๆฐๆฎๅๆต (้่ฆๅ
ๆถ้ๆฐๆฎ)
cargo run --bin volume_farming -- --real-data --days 7| ๅๆฐ | ่ฏดๆ | ้ป่ฎคๅผ |
|---|---|---|
--min-spread |
ๆๅฐไปทๅทฎๅผไป้ๅผ (%) | 0.10 |
--exit-spread |
ไปทๅทฎๆถๆๅนณไป้ๅผ (%) | 0.02 |
--position-size |
ๅ็ฌไปไฝๅคงๅฐ (USD) | 500 |
--max-hold |
ๆๅคงๆไปๆถ้ด (็ง) | 300 |
--cooldown |
ไบคๆๅทๅดๆถ้ด (็ง) | 30 |
--days |
ๅๆตๅคฉๆฐ | 7 |
--mode |
้ข่ฎพๆจกๅผ: default/minimum_cost/aggressive | default |
--sweep |
่ฟ่กๅๆฐไผๅๆซๆ | - |
--real-data |
ไฝฟ็จๆฐๆฎๅบไธญ็็ๅฎๆฐๆฎ | ๅฆ (้ป่ฎคๆจกๆๆฐๆฎ) |
ๅๆตๆฏๆไธค็งๆฐๆฎๆฅๆบ๏ผ
| ๆฐๆฎ็ฑปๅ | ่ฏดๆ | ้็จๅบๆฏ |
|---|---|---|
| ๆจกๆๆฐๆฎ (้ป่ฎค) | ้ๆบ็ๆ็ไปทๆ ผๆฐๆฎ๏ผ8% ๆฆ็ไบง็ไปทๅทฎๆบไผ | ๅฟซ้้ช่ฏ็ญ็ฅ้ป่พ |
็ๅฎๆฐๆฎ (--real-data) |
ไปๆฐๆฎๅบ price_snapshots ่กจ่ฏปๅ |
ๅ็กฎ่ฏไผฐ็ญ็ฅๆๆ |
-
ๅ ่ฟ่ก bot ๆถ้ๅๅฒไปทๆ ผๆฐๆฎ:
# ไปฅ Dry Run ๆจกๅผ่ฟ่ก๏ผๅชๆถ้ๆฐๆฎไธไบคๆ DRY_RUN=true cargo run --release -
็กฎไฟๆฐๆฎๅบไธญๆๆฐๆฎ:
- ๆฐๆฎๅญๅจๅจ
price_snapshots่กจ - ้่ฆ AZverse ๅ Paradex ็ไปทๆ ผๆฐๆฎ
- ๅปบ่ฎฎ่ณๅฐๆถ้ 1-2 ๅคฉ็ๆฐๆฎ
- ๆฐๆฎๅญๅจๅจ
-
่ฟ่ก็ๅฎๆฐๆฎๅๆต:
cargo run --bin volume_farming -- --real-data --days 7
# .env ๅท้้
็ฝฎ
MIN_SPREAD_PERCENT=0.06
EXIT_SPREAD_PERCENT=0.02
MAX_POSITION_SIZE_USD=500
MAX_POSITION_DURATION_SECS=600โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Volume Farming Backtest Results โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Volume Statistics โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Total Trades: 3845 โ
โ Total Volume: $ 3845000.00 โ
โ Avg Volume/Trade: $ 1000.00 โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Cost Analysis โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Total Fees Paid: $ 1538.00 โ
โ Spread PnL: $ 1125.27 โ
โ Net PnL: $ -412.73 โ
โ Cost per $1000 Vol: $ 0.5073 โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Trade Performance โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฃ
โ Win Rate: 51.8% โ
โ Avg Spread Captured: -0.1314% โ
โ Avg Hold Time: 143s โ
โ Spread Closes: 3136 โ
โ Timeout Closes: 522 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
ๅท $100 ไธไบคๆ้ๆๆฌ็บฆ $507 (0.05%)
- ๅผไปๆกไปถ: ๅฝ AZverse ไธ Paradex ไปทๅทฎ่ถ ่ฟ้ๅผๆถ
- ๅฏนๅฒๆนๅผ: ไปทๆ ผไฝ็ไบคๆๆๅๅค๏ผไปทๆ ผ้ซ็ๅ็ฉบ
- ๅนณไปๆกไปถ:
- ไปทๅทฎๆถๆๅฐ้ๅบ้ๅผ (็ๅฉๅนณไป)
- ่ถ ่ฟๆๅคงๆไปๆถ้ด (่ถ ๆถๅนณไป)
- ่ดน็จไผๅ: ไฝฟ็จ้ไปทๅ (Maker) ่้ๅธไปทๅ (Taker)
src/
โโโ main.rs # ไธปๅ
ฅๅฃ๏ผไบคๆๅพช็ฏ
โโโ lib.rs # ๅบๅฏผๅบ
โโโ config.rs # ้
็ฝฎๅ ่ฝฝๅ้ช่ฏ
โโโ types.rs # ๆ ธๅฟๆฐๆฎ็ฑปๅ
โโโ price_monitor.rs # WebSocket ไปทๆ ผ็ๆง
โโโ opportunity.rs # ๅฅๅฉๆบไผๆฃๆต
โโโ executor.rs # ไบคๆๆง่ก
โโโ position.rs # ไปไฝ็ฎก็
โโโ risk.rs # ้ฃ้ฉๆงๅถ
โโโ alert.rs # ๅ่ญฆๆๅก
โโโ storage.rs # ๆฐๆฎๅบๆไฝ
โโโ backtest.rs # ๅๆตๅผๆ
โโโ azverse.rs # AZverse ้้
ๅจ
// ่ทๅไปทๆ ผ
let price = monitor.get_price("AZverse", "BTC_USDT").await;
// ๆฃๆฅๆฏๅฆ่ฟๆ
let is_stale = monitor.is_stale("AZverse").await;// ๆฃๆตๆบไผ
let opportunities = detector.detect_opportunities(&prices, position_size);
// ้ๆฉๆไฝณๆบไผ
let best = detector.select_best_opportunity(&opportunities);// ๆง่กๅฅๅฉ
let result = executor.execute_arbitrage(&opportunity, size).await;
// ๅนณไป
let close_result = executor.close_arbitrage_position(&position).await;// ๆฃๆฅๆฏๅฆๅฏไปฅๅผไป
risk_manager.can_open_position(size)?;
// ่ฎฐๅฝ PnL
risk_manager.record_pnl(pnl);
// ๆฃๆฅๆฏๅฆๆๅไบคๆ
if risk_manager.is_trading_paused() { ... }# ่ฟ่กๆๆๆต่ฏ
cargo test
# ่ฟ่ก็นๅฎๆจกๅๆต่ฏ
cargo test opportunity::tests
# ่ฟ่กๅฑๆงๆต่ฏ
cargo test prop_# ่ฏฆ็ปๆฅๅฟ
RUST_LOG=debug cargo run
# ๅชๆพ็คบ่ญฆๅๅ้่ฏฏ
RUST_LOG=warn cargo run
# ็นๅฎๆจกๅๆฅๅฟ
RUST_LOG=perp_arbitrage_bot::opportunity=debug cargo runA: ๆฃๆฅ็ฝ็ป่ฟๆฅๅ WebSocket URL ้ ็ฝฎใ็ณป็ปไผ่ชๅจ้่ฟ๏ผไฝฟ็จๆๆฐ้้ฟ็ญ็ฅใ
A: ๆฃๆฅ API ๅญ่ฏๆฏๅฆๆญฃ็กฎ๏ผ่ดฆๆทไฝ้ขๆฏๅฆๅ ่ถณใๆฅ็ๆฅๅฟ่ทๅ่ฏฆ็ป้่ฏฏไฟกๆฏใ
A: ๅฏ่ฝๆฏไปทๅทฎๆช่พพๅฐ้ๅผใๅฐ่ฏ้ไฝ MIN_SPREAD_PERCENT ๆไฝฟ็จ Dry Run ๆจกๅผ่งๅฏใ
A: ็ปๅฝ AZverse ็ฝ็ซๅ๏ผไปๆต่งๅจ Cookie ไธญ่ทๅ token, client-code, JSESSIONIDใ
MIT License