API TO BUY/SELL(SWAP) TOKENS VIA DEDUST
POST http://localhost:8080/beeton-swap-api/swap/desust
Content-Type: application/json
Эндпоинт защищён токеном. Передавайте токен в заголовке:
Authorization: Bearer <TOKEN>
Значение токена сейчас захардкожено в beeton-swap/src/main/java/filters/TokenAuthFilter.java (константа EXPECTED_TOKEN).
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| direction | string |
✅ | Направление сделки: buy или sell. — buy: вы покупаете jettonB, отдавая jettonA или TON. — sell: вы продаёте jettonA за jettonB или TON. |
| route | string |
✅ | Тип маршрута обмена: — native: обмен через пул с TON (одношаговый). — multi: многошаговый маршрут через TON (например, A → TON → B). |
| jettonA | string |
✅ | Адрес токена, который отдаётся при sell, или токена, который покупается при buy. Формат: workchain:hash (64 hex-символа), например:0:111122223333444455556666777788889999aaaabbbbccccddddeeeeffff0000 |
| jettonB | string |
✅ | Адрес токена, который получается после обмена. Для обменов с native (TON) можно передавать любое значение. |
| jettonAmount | string |
✅ | Количество токенов в атомарных единицах. Например "1000000000" соответствует 1 токену, если у него 9 знаков после запятой. |
| mnemonic | string |
✅ | BIP-39 мнемоническая фраза (24 слова, пробел-разделённые). Используется серверным кошельком для подписания транзакции. Осторожно: мнемоника — секрет, не храните и не пересылайте её в публичных каналах. |
Вы хотите купить jettonA, используя TON и промежуточный обмен через jettonB.
curl -X POST 'http://localhost:8080/beeton-swap-api/swap/desust' -H 'Content-Type: application/json' -H 'Authorization: Bearer <TOKEN>' -H 'Idempotency-Key: buy-multi-001' -H 'X-Request-Id: req-buy-multi-001' -d '{
"direction": "buy",
"route": "multi",
"jettonA": "0:111122223333444455556666777788889999aaaabbbbccccddddeeeeffff0000",
"jettonB": "0:9999888877776666555544443333222211110000ffffeeeeddddccccbbbbaaaa",
"jettonAmount": "1000000000",
"mnemonic": ""
}'Пояснение:
direction: "buy"— вы покупаете токен A (jettonA).route: "multi"— обмен идёт через TON (два шага): TON → jettonA.jettonA— токен, который вы хотите получить.jettonB— вспомогательный токен (может быть TON).jettonAmount— сколько токенов jettonA вы хотите купить (в атомарных единицах).
Вы хотите продать jettonA за jettonB через TON.
curl -X POST 'http://localhost:8080/beeton-swap-api/swap/desust' -H 'Content-Type: application/json' -H 'Authorization: Bearer <TOKEN>' -H 'Idempotency-Key: sell-multi-001' -H 'X-Request-Id: req-sell-multi-001' -d '{
"direction": "sell",
"route": "multi",
"jettonA": "0:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"jettonB": "0:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"jettonAmount": "2500000000",
"mnemonic": ""
}'Пояснение:
direction: "sell"— вы продаёте токен A.route: "multi"— используется двухшаговый обмен: jettonA → TON → jettonB.jettonA— токен, который вы отдаёте.jettonB— токен, который вы хотите получить.jettonAmount— количество jettonA, которое продаётся (в атомарных единицах).
Вы хотите продать jettonA за TON напрямую, без второго шага.
curl -X POST 'http://localhost:8080/beeton-swap-api/swap/desust' -H 'Content-Type: application/json' -H 'Authorization: Bearer <TOKEN>' -H 'Idempotency-Key: sell-native-001' -H 'X-Request-Id: req-sell-native-001' -d '{
"direction": "sell",
"route": "native",
"jettonA": "0:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"jettonB": "0:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"jettonAmount": "500000000",
"mnemonic": ""
}'Из корня репозитория:
docker build -t beeton-swap-api:local .Если хочешь собирать, используя beeton-swap/Dockerfile, то так:
docker build -t beeton-swap-api:local -f beeton-swap/Dockerfile beeton-swapdocker run --rm -p 8080:8080 beeton-swap-api:localЭндпоинт внутри контейнера:
POST http://localhost:8080/beeton-swap-api/swap/desust
Пояснение:
direction: "sell"— вы продаёте токен A.route: "native"— обмен осуществляется jettonA → TON.jettonA— токен, который вы отдаёте.jettonB— произвольный (TON не имеет адреса jetton).jettonAmount— количество продаваемого токена A.
{
"status": "success",
"direction": "sell",
"route": "multi",
"jettonA": "0:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"jettonB": "0:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"jettonAmount": "2500000000",
"amountIn": "285000000",
"amountOut": "26355686",
"message": "Transaction sent successfully"
}| Код | Тип | Описание |
|---|---|---|
400 |
BAD_REQUEST |
Пропущены обязательные поля или ошибка формата JSON. |
422 |
UNPROCESSABLE_ENTITY |
Невозможный маршрут обмена (native недоступен для пары). |
500 |
INTERNAL_ERROR |
Внутренняя ошибка при формировании или отправке транзакции. |
Пример:
{
"status": "error",
"code": "UNPROCESSABLE_ENTITY",
"message": "Route 'native' недоступен для указанной пары активов"
}| Сценарий | direction | route | Пример |
|---|---|---|---|
| Покупка за TON | buy |
native |
A ← TON |
| Покупка за Jetton | buy |
multy |
B ← TON ← A |
| Продажа за Jetton | sell |
multi |
A → TON → B |
| Продажа за TON | sell |
native |
A → TON |