11 KiB
FeeSwapRouter — Инструкция по деплою
Четыре сети — четыре подхода
| Сеть | Метод | DEX | Fee wallet | Комиссия | Нужен на газ |
|---|---|---|---|---|---|
| Ethereum (chainId 1) | Solidity контракт (Remix) | Uniswap Universal Router | 0xeDEb157eF86A4ecd1242762f339c2Bd5a0822718 |
ETH (~$5-20) | |
| BSC (chainId 56) | Solidity контракт (Remix) | PancakeSwap V3 Smart Router | 0xeDEb157eF86A4ecd1242762f339c2Bd5a0822718 |
0.7% | BNB (~$0.50-1.00) |
| TRON | Solidity контракт (TronIDE) | SunSwap V2 Smart Router | TYTfrem65362TFyQSARTheeYza1GQA37Ug |
0.7% | TRX (~50-150 TRX) |
| Solana | Jupiter Referral Program | Jupiter Aggregator | Co43MKwqMRMCvhscVVrtQWvma87NEV7ba4cfo8cksgzJ |
0.7% | SOL (~0.01 SOL) |
Все адреса и проценты захардкожены — никаких параметров при деплое вводить НЕ НУЖНО.
Важно: ETH контракт уже задеплоен с 1% комиссией. Если нужно 0.7%, нужно задеплоить новый контракт.
1. Деплой FeeSwapRouter_ETH.sol (Ethereum)
Статус: ✅ Задеплоен (1%) — 0xbdC4A97C2814E496160638d87e1F1b14154e30b6
⚠️ Нужен передеплой с 0.7% если хочешь 0.7% on-chain
Что нужно
- MetaMask с ETH на балансе (на газ уйдёт ~$5-20)
- В MetaMask выбрана сеть Ethereum Mainnet
Шаги
- Открой https://remix.ethereum.org
- Слева в File Explorer нажми + → создай файл
FeeSwapRouter_ETH.sol - Вставь ВЕСЬ код из файла
contracts/FeeSwapRouter_ETH.sol - Слева выбери вкладку Solidity Compiler (иконка с буквой S)
- Compiler: 0.8.20
- Enable optimization: включи, runs: 200
- Нажми Compile FeeSwapRouter_ETH.sol
- Должна появиться зелёная галочка (без ошибок)
- Слева выбери вкладку Deploy & Run Transactions (иконка со стрелкой)
- Environment: Injected Provider - MetaMask
- Убедись что MetaMask на сети Ethereum Mainnet
- В выпадающем списке контрактов выбери FeeSwapRouter_ETH
- Нажми Deploy
- Подтверди транзакцию в MetaMask
- После подтверждения — скопируй адрес контракта из консоли Remix
- Сохрани адрес в
.env:FEE_SWAP_ROUTER_ETH=0x...твой_адрес...
Верификация на Etherscan
- Зайди на https://etherscan.io/verifyContract
- Адрес контракта: вставь адрес из шага 6
- Compiler: Solidity 0.8.20
- Optimization: Yes, 200 runs
- License: MIT
- Код: в Remix правой кнопкой на файл → Flatten, вставь результат
2. Деплой FeeSwapRouter_BSC.sol (BSC)
Что нужно
- MetaMask с BNB на балансе (на газ уйдёт ~$0.50-1.00)
- В MetaMask добавлена сеть BNB Smart Chain:
- RPC:
https://bsc-dataseed.binance.org - Chain ID:
56 - Symbol:
BNB - Explorer:
https://bscscan.com
- RPC:
Шаги
- Открой https://remix.ethereum.org
- Создай файл
FeeSwapRouter_BSC.sol - Вставь ВЕСЬ код из файла
contracts/FeeSwapRouter_BSC.sol - Compiler → 0.8.20, optimization ON (200 runs), Compile
- Deploy → Injected Provider → MetaMask на сети BNB Smart Chain
- Выбери контракт FeeSwapRouter_BSC, нажми Deploy, подтверди в MetaMask
- Скопируй адрес, сохрани в
.env:FEE_SWAP_ROUTER_BSC=0x...твой_адрес...
Верификация на BscScan
- Зайди на https://bscscan.com/verifyContract
- Compiler: Solidity 0.8.20
- Optimization: Yes, 200 runs
- License: MIT
- Код: в Remix → Flatten → вставь результат
3. Деплой FeeSwapRouter_TRX.sol (TRON)
Статус: ✅ Задеплоен — TX8E6X7X1FWYRYuYR2LTvS7zm1KchcVs5E
Что нужно
- TronLink кошелёк (расширение для Chrome, аналог MetaMask для TRON)
- TRX на балансе (~50-150 TRX на газ)
- В TronLink выбрана сеть TRON Mainnet
Шаги
- Открой https://www.tronide.io (это Remix для TRON)
- Слева в File Explorer нажми + → создай файл
FeeSwapRouter_TRX.sol - Вставь ВЕСЬ код из файла
contracts/FeeSwapRouter_TRX.sol - Compiler → 0.8.20, optimization ON (200 runs), Compile
- ⚠️ TronIDE может не поддерживать OpenZeppelin импорты — но этот контракт НЕ использует OpenZeppelin (ReentrancyGuard и Ownable реализованы вручную)
- Deploy → Injected Provider → TronLink (должен быть установлен)
- Убедись что TronLink на сети TRON Mainnet
- В выпадающем списке выбери FeeSwapRouter_TRX
- Нажми Deploy, подтверди в TronLink
- Скопируй адрес контракта (будет в формате T...)
- Сохрани в
.env:FEE_SWAP_ROUTER_TRX=TX8E6X7X1FWYRYuYR2LTvS7zm1KchcVs5E
Верификация на TronScan
- Зайди на https://tronscan.org/#/contracts/verify
- Вставь адрес контракта (T...)
- Compiler: 0.8.20
- Optimization: ON
- Код: скопируй весь контракт
Адреса в контракте (TRON base58 → hex)
| Контракт | TRON адрес | Hex (в Solidity) |
|---|---|---|
| SunSwap V2 Router | TKzxdSv2FZKQrEqkKVgp5DcwEXBEKMg2Ax |
0x6e0617948fE030a7e4970f8389D4AD295F249b7e |
| USDT (TRC-20) | TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t |
0xa614f803b6fd780986a42c78ec9c7f77e6ded13c |
| WTRX | TNUC9Qb1rRpS5CbWLmNMxXBjyFoydXjWFR |
0x891cdb91d149f23b1a45d9c5ca78a88d0cb44c18 |
4. Настройка комиссии на Solana (Jupiter Referral)
На Solana НЕ нужен смарт-контракт. Jupiter Aggregator нативно поддерживает платформенную комиссию через Referral Program.
Что нужно
- Кошелёк Solana с ~0.01 SOL (на ренту и газ)
- Fee wallet:
Co43MKwqMRMCvhscVVrtQWvma87NEV7ba4cfo8cksgzJ
Шаги
Шаг 1: Создай Referral Account
- Зайди на https://referral.jup.ag
- Подключи кошелёк
Co43MKwqMRMCvhscVVrtQWvma87NEV7ba4cfo8cksgzJ - Нажми Create Referral Account
- Подтверди транзакцию (~0.003 SOL)
- Скопируй Referral Account Public Key — это будет
JUPITER_REFERRAL_ACCOUNT
Шаг 2: Создай Token Fee Accounts
Для каждого токена, с которого берётся комиссия, нужен отдельный fee token account:
- На странице https://referral.jup.ag перейди в Claim Token Accounts
- Нажми Create Token Account для каждого нужного токена:
- SOL (wrapped):
So11111111111111111111111111111111111111112 - USDT:
Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB - USDC:
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
- SOL (wrapped):
- Подтверди каждую транзакцию (~0.002 SOL каждая)
Шаг 3: Сохрани в .env
JUPITER_REFERRAL_ACCOUNT=...твой_referral_account_pubkey...
JUPITER_FEE_BPS=70
Как это работает
Jupiter сам:
- Считает 0.7% от суммы свапа
- Отправляет комиссию на fee token account
- Остальные 99.3% идут пользователю
Комиссия накапливается на token fee accounts. Можно клеймить (забирать) через https://referral.jup.ag → Claim.
5. Bridge комиссия (0.7%)
Комиссия на бридж работает off-chain — перед мостом отправляется отдельная транзакция:
| Сеть | Как берётся fee | Fee wallet |
|---|---|---|
| ETH → * | Отдельный ETH/ERC20 transfer перед бриджем | 0xeDEb157eF86A4ecd1242762f339c2Bd5a0822718 |
| SOL → * | Отдельный SOL transfer перед бриджем | Co43MKwqMRMCvhscVVrtQWvma87NEV7ba4cfo8cksgzJ |
| TRX → * | Отдельный TRC20 transfer перед бриджем | TYTfrem65362TFyQSARTheeYza1GQA37Ug |
Контракт НЕ нужен для bridge fee — логика встроена в код кошелька (apps/web/src/lib/bridge/execute.ts).
После деплоя — интеграция с кошельком
После получения адресов контрактов:
- Добавить адреса в
.env:FEE_SWAP_ROUTER_ETH=0xbdC4A97C2814E496160638d87e1F1b14154e30b6 FEE_SWAP_ROUTER_BSC=0xbdC4A97C2814E496160638d87e1F1b14154e30b6 FEE_SWAP_ROUTER_TRX=TX8E6X7X1FWYRYuYR2LTvS7zm1KchcVs5E JUPITER_REFERRAL_ACCOUNT=...referral_pubkey... JUPITER_FEE_BPS=70 - ✅ BSC swap proxy — вызывает FeeSwapRouter_BSC
- ✅ TRX swap proxy — вызывает FeeSwapRouter_TRX
- Обновить SOL swap proxy — добавить
platformFeeBps=70в Jupiter запросы - Approve токены должны идти на адрес FeeSwapRouter (не на DEX роутер)
Админ-функции (ETH, BSC, TRX контракты)
Кошелёк, с которого задеплоил — это owner. Доступные функции:
| Функция | Что делает |
|---|---|
pause() |
Экстренная остановка всех свапов |
unpause() |
Возобновить свапы |
emergencyWithdrawNative() |
Вывести застрявший ETH/BNB/TRX |
emergencyWithdrawToken(address) |
Вывести застрявшие токены |
Вызывать через:
- ETH: Etherscan → Write Contract
- BSC: BscScan → Write Contract
- TRX: TronScan → Write Contract
Важно: комиссия (0.7%) и fee wallet захардкожены — их нельзя изменить. Это сделано специально для безопасности.
Порядок деплоя (рекомендуемый)
- ✅ ETH контракт (уже задеплоен, но с 1% — передеплоить если нужно 0.7%)
- BSC контракт → через Remix + MetaMask
- TRX контракт → через TronIDE + TronLink
- SOL referral → через https://referral.jup.ag