TestDex — AMM-биржа на TON testnet под вашим управлением.
Смарт-контракты основаны на открытом коде STON.fi dex-core-v2 (GPL-3.0) и pTON (MIT). Бренд STON.fi не используется.
| Пакет | Описание |
|---|---|
contracts/ |
DEX Router, Pool, Vault (blueprint + FunC) |
pton/ |
Wrapped TON для свопов TON ↔ jetton |
web/ |
React UI: обмен + добавление ликвидности |
config/testnet.json |
Адреса задеплоенных контрактов |
- Node.js 20+ — nodejs.org
- Git (опционально)
- Кошелёк с testnet TON — @testgiver_ton_bot
- API-ключ Toncenter testnet — @toncenter
cd C:\Project\TestDex
.\scripts\bootstrap.ps1Скопируйте и заполните:
WALLET_MNEMONIC=ваша seed-фраза из 24 слов
WALLET_VERSION=v5r1
ENDPOINT_URL=https://testnet.toncenter.com/api/v2/jsonRPC
ENDPOINT_TYPE=testnet
ENDPOINT_VERSION=v2
ENDPOINT_KEY=ваш_api_keyСкопируйте .env в подпроекты (blueprint читает локальный .env):
Copy-Item .env contracts\.env
Copy-Item .env pton\.envПолный пайплайн:
.\scripts\deploy-testnet.ps1Или по шагам (каждый скрипт интерактивный — нажимайте Enter для подтверждения):
npm run deploy:router # Router CPI, вы = admin, protocol fee → вам
npm run deploy:pton # pTON minter
npm run deploy:tokens # TTA + TTB test jettons, mint 1M каждого
npm run deploy:liquidity # создать пул TTA/TTB + начальная ликвидность
npm run export:config # синхронизировать config/testnet.json → webНа деплой Router + libs нужно ~3–5 testnet TON.
npm run devОткройте http://localhost:5173, подключите Tonkeeper testnet и проверьте:
- Обмен — TON ↔ TTA, TTA ↔ TTB
- Ликвидность — добавление в пул
При деплое Router по умолчанию:
- 0.2% — LP (поставщики ликвидности)
- 0.1% — протокол (на ваш
adminAddress)
Изменить после деплоя: admin-операция set_fees на Router (см. документацию STON.fi Router).
После npm run export:config файл config/testnet.json:
{
"routerAddress": "kQ...",
"ptonMasterAddress": "kQ...",
"adminAddress": "UQ...",
"tokens": [
{ "symbol": "TTA", "address": "kQ...", "decimals": 9 },
{ "symbol": "TTB", "address": "kQ...", "decimals": 9 }
]
}UI читает web/public/testnet.json (обновляется автоматически через export:config).
Manifest: web/public/tonconnect-manifest.json.
Для локальной разработки URL http://localhost:5173 уже указан.
UI можно опубликовать на https://mrandreano.github.io/testdex/ без своего сервера.
- Создайте репозиторий MrAndreano/testdex (если ещё нет).
- Запушьте код в ветку
main. - В GitHub: Settings → Pages → Build and deployment → Source: GitHub Actions.
После каждого push в main workflow .github/workflows/deploy-pages.yml собирает только web/ и публикует web/dist.
cd web
VITE_BASE_PATH=/testdex/ VITE_SITE_URL=https://mrandreano.github.io/testdex npm run build:pages
npx vite preview --base /testdex/Откройте URL из вывода vite preview и проверьте подключение Tonkeeper.
| Что | Зачем |
|---|---|
VITE_BASE_PATH=/testdex/ |
GitHub Pages отдаёт сайт из подпапки репозитория |
VITE_SITE_URL=https://mrandreano.github.io/testdex |
Корректный TonConnect manifest |
web/public/testnet.json |
Адреса контрактов (обновляется через npm run export:config) |
404.html + .nojekyll |
SPA fallback и корректная раздача статики |
Опционально: VITE_TON_API_KEY в Secrets репозитория (Settings → Secrets) — если Toncenter rate-limit без ключа.
contracts/— GPL-3.0 (наследие STON.fi dex-core-v2)pton/— MITweb/— ваш код, MIT по умолчанию
При публикации форка DEX-кода соблюдайте GPL-3.0.
| Проблема | Решение |
|---|---|
node не найден |
Установите Node.js 20+, перезапустите терминал |
| Недостаточно TON | Получите testnet TON у @testgiver_ton_bot |
| Swap bounce | Проверьте адреса в testnet.json, подождите 30с после деплоя |
-13 exit code |
Неверный адрес Router/pTON или несовпадение testnet/mainnet |
| Пул не создаётся | Сначала deploy:tokens, подождите 30с, затем deploy:liquidity |
- Mainnet: повторите деплой с
ENDPOINT_TYPE=mainnetи mainnet endpoint - Кастомные токены: измените
contracts/scripts/deployTestTokens.ts - Свой домен UI: обновите
tonconnect-manifest.json