POST /apiv2/time/delete
Удаление TRON адреса из Host Mode и возврат всех активных делегирований энергии.
Подробный обзор
Эндпоинт Time Delete окончательно удаляет TRON адрес из управления Host Mode, немедленно возвращая любые активные делегирования энергии и останавливая все автоматические сервисы управления энергией. Это действие необратимо для текущего биллингового цикла, но адрес можно добавить заново позже при необходимости.
URL эндпоинта
POST https://netts.io/apiv2/time/delete
Аутентификация
Этот эндпоинт использует аутентификацию через тело JSON запроса (не через заголовки). Ваш API ключ и целевой адрес передаются в теле запроса.
Процесс аутентификации
- Валидация API ключа: Система проверяет существование и активность API ключа
- Проверка белого списка IP: IP запроса должен соответствовать настроенному белому списку
- Проверка владения: API ключ должен владеть указанным адресом
- Проверка разрешений: Учетная запись должна иметь разрешения на удаление
Заголовки запроса
Заголовок | Обязательный | Описание |
---|---|---|
Content-Type | Да | application/json |
Тело запроса
{
"api_key": "ваш_api_ключ",
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}
Подробные параметры
Параметр | Тип | Обязательный | Валидация | Описание |
---|---|---|---|---|
api_key | string | Да | Должен существовать в системе | Ваш API ключ для аутентификации и биллинга |
address | string | Да | Формат TRC-20 | TRON адрес для удаления из Host Mode (должен начинаться с 'T' и содержать 34 символа) |
Валидация параметров
api_key:
- Должен быть действительным 32-символьным шестнадцатеричным ключом
- Должен быть связан с активной учетной записью
- Учетная запись не должна быть приостановлена или ограничена
- Должен иметь разрешения на удаление
address:
- Должен соответствовать формату TRC-20
^T[1-9A-HJ-NP-Za-km-z]{33}$
- Должен существовать в системе Host Mode
- Должен принадлежать API ключу
- Не может быть удален во время активной транзакции
- Должен соответствовать формату TRC-20
IP адрес:
- IP вашего запроса должен быть в белом списке, связанном с вашим API ключом
- Максимум 5 IP адресов на API ключ
- Поддерживаются IPv4 и IPv6
Примеры запросов
cURL
curl -X POST https://netts.io/apiv2/time/delete \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY_HERE",
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}'
Python
import requests
import json
def delete_from_host_mode(api_key: str, address: str) -> dict:
"""
Удаление адреса из Host Mode и возврат делегированной энергии.
Args:
api_key: Ваш ключ аутентификации API
address: TRON адрес для удаления
Returns:
Словарь с ответом API
"""
url = "https://netts.io/apiv2/time/delete"
data = {
"api_key": api_key,
"address": address
}
try:
response = requests.post(url, json=data, verify=True, timeout=30)
response.raise_for_status()
result = response.json()
if result['code'] == 0:
print(f"✅ Адрес удален: {result['data']['address']}")
print(f"Энергия возвращена: {result['data']['energy_reclaimed']}")
print(f"Оставшиеся циклы возвращены: {result['data']['cycles_refunded']}")
else:
print(f"❌ Ошибка: {result['msg']}")
return result
except requests.exceptions.RequestException as e:
print(f"❌ Запрос не удался: {str(e)}")
raise
# Пример использования
if __name__ == "__main__":
API_KEY = "YOUR_API_KEY_HERE"
ADDRESS = "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
result = delete_from_host_mode(API_KEY, ADDRESS)
Node.js
const axios = require('axios');
/**
* Удаление адреса из Host Mode
* @param {string} apiKey - Ваш ключ аутентификации API
* @param {string} address - TRON адрес для удаления
* @returns {Promise<Object>} Ответ API
*/
async function deleteFromHostMode(apiKey, address) {
const url = 'https://netts.io/apiv2/time/delete';
const data = {
api_key: apiKey,
address: address
};
try {
const response = await axios.post(url, data, {
headers: {
'Content-Type': 'application/json'
},
timeout: 30000
});
const result = response.data;
if (result.code === 0) {
console.log(`✅ Адрес удален: ${result.data.address}`);
console.log(`Энергия возвращена: ${result.data.energy_reclaimed}`);
console.log(`Циклы возвращены: ${result.data.cycles_refunded}`);
} else {
console.error(`❌ Ошибка: ${result.msg}`);
}
return result;
} catch (error) {
if (error.response) {
console.error(`❌ API ошибка: ${error.response.status} - ${error.response.data?.msg || error.message}`);
} else {
console.error(`❌ Запрос не удался: ${error.message}`);
}
throw error;
}
}
// Пример использования
(async () => {
const API_KEY = 'YOUR_API_KEY_HERE';
const ADDRESS = 'TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE';
try {
const result = await deleteFromHostMode(API_KEY, ADDRESS);
console.log('Результат удаления:', result);
} catch (error) {
console.error('Не удалось удалить адрес:', error.message);
}
})();
PHP
<?php
/**
* Удаление адреса из Host Mode
*
* @param string $apiKey Ваш ключ аутентификации API
* @param string $address TRON адрес для удаления
* @return array Ответ API
*/
function deleteFromHostMode($apiKey, $address) {
$url = 'https://netts.io/apiv2/time/delete';
$data = [
'api_key' => $apiKey,
'address' => $address
];
$options = [
'http' => [
'header' => "Content-Type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($data),
'timeout' => 30
]
];
$context = stream_context_create($options);
$response = @file_get_contents($url, false, $context);
if ($response === false) {
$error = error_get_last();
throw new RuntimeException('Запрос не удался: ' . $error['message']);
}
$result = json_decode($response, true);
if ($result['code'] == 0) {
echo "✅ Адрес удален: {$result['data']['address']}\n";
echo "Энергия возвращена: {$result['data']['energy_reclaimed']}\n";
echo "Циклы возвращены: {$result['data']['cycles_refunded']}\n";
} else {
echo "❌ Ошибка: {$result['msg']}\n";
}
return $result;
}
// Пример использования
$API_KEY = 'YOUR_API_KEY_HERE';
$ADDRESS = 'TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE';
try {
$result = deleteFromHostMode($API_KEY, $ADDRESS);
echo "Результат удаления: " . json_encode($result, JSON_PRETTY_PRINT) . "\n";
} catch (Exception $e) {
echo "Не удалось удалить адрес: " . $e->getMessage() . "\n";
}
?>
Ruby
require 'net/http'
require 'json'
require 'uri'
class HostModeDeleter
API_URL = 'https://netts.io/apiv2/time/delete'
def initialize(api_key)
@api_key = api_key
end
# Удаление адреса из Host Mode
def delete_address(address)
uri = URI.parse(API_URL)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.read_timeout = 30
request = Net::HTTP::Post.new(uri.path)
request['Content-Type'] = 'application/json'
request.body = {
api_key: @api_key,
address: address
}.to_json
begin
response = http.request(request)
result = JSON.parse(response.body)
if result['code'] == 0
puts "✅ Адрес удален: #{result['data']['address']}"
puts "Энергия возвращена: #{result['data']['energy_reclaimed']}"
puts "Циклы возвращены: #{result['data']['cycles_refunded']}"
else
puts "❌ Ошибка: #{result['msg']}"
end
result
rescue => e
puts "❌ Запрос не удался: #{e.message}"
raise
end
end
end
# Пример использования
api_key = 'YOUR_API_KEY_HERE'
address = 'TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE'
deleter = HostModeDeleter.new(api_key)
begin
result = deleter.delete_address(address)
puts "Результат: #{result}"
rescue => e
puts "Ошибка: #{e.message}"
end
Ответ
Успешный ответ (200 OK)
{
"code": 0,
"msg": "Address removed from Host Mode successfully",
"data": {
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"energy_reclaimed": 131000,
"cycles_refunded": 25,
"refund_amount": 75.00,
"timestamp": "2025-09-02T07:30:15.123456",
"effective_time": 1699528800,
"final_status": {
"total_cycles_used": 150,
"total_energy_delegated": 19650000,
"active_since": 1698264000,
"deletion_reason": "user_requested"
}
}
}
Поля ответа
Поле | Тип | Описание |
---|---|---|
code | integer | Код ответа (0 = успех, отрицательный = ошибка) |
msg | string | Человекочитаемое сообщение ответа |
data.address | string | TRON адрес, который был удален |
data.energy_reclaimed | integer | Количество возвращенной энергии |
data.cycles_refunded | integer | Количество возвращенных неиспользованных циклов |
data.refund_amount | number | Сумма возврата в TRX за неиспользованные циклы |
data.timestamp | string | ISO временная метка удаления |
data.effective_time | integer | Unix временная метка вступления в силу |
data.final_status | object | Финальная статистика перед удалением |
Поля финального статуса
Поле | Тип | Описание |
---|---|---|
total_cycles_used | integer | Общее количество использованных циклов |
total_energy_delegated | integer | Общее количество делегированной энергии за все время |
active_since | integer | Unix временная метка добавления в Host Mode |
deletion_reason | string | Причина удаления ("user_requested", "account_closure", "violation") |
Обработка ошибок
Ошибка аутентификации (401)
{
"code": -1,
"msg": "Invalid API key or IP not in whitelist",
"data": null
}
Причины:
- Неверный или истекший API ключ
- API ключ не найден в системе
- Учетная запись приостановлена или закрыта
Решение:
- Проверьте правильность API ключа
- Проверьте статус учетной записи в панели управления
- Обратитесь в поддержку, если ключ должен быть действительным
Адрес не найден (404)
{
"code": -1,
"msg": "Address not found in Host Mode",
"data": {
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"suggestion": "Check address or use /time/status to list all addresses"
}
}
Причины:
- Адрес не существует в Host Mode
- Адрес уже был удален
- Неправильный формат адреса
Решение:
- Проверьте правильность адреса
- Используйте эндпоинт
/time/status
для просмотра всех адресов - Убедитесь, что адрес не был удален ранее
Нет прав доступа (403)
{
"code": -1,
"msg": "You don't have permission to delete this address",
"data": {
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"owner": "different_api_key"
}
}
Причины:
- Адрес принадлежит другому API ключу
- Недостаточно прав для удаления
- Адрес защищен от удаления
Решение:
- Используйте правильный API ключ
- Проверьте владельца адреса
- Обратитесь в поддержку для разблокировки
Активная транзакция (409)
{
"code": -1,
"msg": "Cannot delete address with active energy delegation",
"data": {
"address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
"active_delegation": {
"energy": 131000,
"expires_at": 1699615200,
"transaction_hash": "abc123..."
},
"retry_after": 300
}
}
Причины:
- Активное делегирование энергии в процессе
- Незавершенная транзакция возврата
- Блокировка для предотвращения потери средств
Решение:
- Подождите завершения активной транзакции
- Повторите попытку через время, указанное в
retry_after
- Используйте
/time/stop
для остановки перед удалением
Ограничения частоты запросов
Период | Лимит | Описание |
---|---|---|
1 минута | 6 запросов | Максимум 6 запросов в минуту |
Заголовки ограничения частоты
X-RateLimit-Limit-Minute: 6
X-RateLimit-Remaining-Minute: 5
Retry-After: 10
Превышение лимита частоты (429)
{
"message": "API rate limit exceeded"
}
Что происходит при удалении
Немедленные действия
- Остановка делегирования: Все активные делегирования немедленно отменяются
- Возврат энергии: Делегированная энергия возвращается в пул
- Возврат циклов: Неиспользованные циклы конвертируются в TRX
- Обновление базы данных: Адрес помечается как удаленный
- Остановка автоматизации: Все автоматические процессы останавливаются
Процесс возврата средств
Расчет возврата:
- Неиспользованные циклы × 3.0 TRX за цикл
- Пропорциональный возврат для частично использованных циклов
- Нет возврата для режима infinity (ежедневная оплата)
Зачисление на баланс:
- Возврат зачисляется на баланс учетной записи
- Доступен немедленно для вывода или использования
- Отражается в истории транзакций
Уведомление:
- Email подтверждение удаления
- Детали возврата в уведомлении
- Финальный отчет об использовании
Влияние на блокчейн
- Транзакция возврата: Создается транзакция возврата энергии
- Подтверждение сети: Требуется 19 блоков для подтверждения
- Время обработки: Обычно 1-2 минуты
- Хеш транзакции: Предоставляется для отслеживания
Детали безопасности
Защита от случайного удаления
- Двойная проверка: Требуется явное указание адреса
- Проверка владения: Только владелец может удалить
- Аудит лог: Все удаления записываются
- Период восстановления: 24 часа для отмены (enterprise)
Предотвращение злоупотреблений
- Лимит удалений: Максимум 10 удалений в день
- Защита от скриптов: Captcha для частых удалений
- Блокировка IP: При подозрительной активности
- Ручная проверка: Для массовых удалений
Соответствие требованиям
- GDPR: Право на удаление данных
- Аудит трейл: Полная история действий
- Шифрование данных: При передаче и хранении
- Резервное копирование: 30-дневное хранение удаленных данных
Техническая архитектура
Архитектура сервиса
- Порт: 9010
- Фреймворк: FastAPI с валидацией Pydantic
- База данных: PostgreSQL с транзакциями
- Очередь: Redis для асинхронной обработки
- Логирование: Структурированные логи в JSON
Операции с базой данных
-- Мягкое удаление адреса
UPDATE netts_web_hosting_mode
SET status = 'deleted',
deleted_at = NOW(),
deleted_by = :api_key
WHERE address = :address
AND api_key = :api_key;
-- Возврат циклов
INSERT INTO refunds
(api_key, address, cycles, amount, created_at)
VALUES
(:api_key, :address, :cycles, :amount, NOW());
Интеграция с блокчейном
- Проверка делегирования: Запрос текущего статуса
- Транзакция возврата: Создание и подписание
- Отправка в сеть: Broadcast транзакции
- Мониторинг: Отслеживание подтверждений
- Финализация: Обновление статуса после подтверждения
Связанные эндпоинты
- Time Status - Проверить адреса перед удалением
- Time Stop - Временная остановка вместо удаления
- Time Add - Повторное добавление после удаления
- Time Order - Управление циклами перед удалением
- Time Infinity Start - Альтернатива удалению
Лучшие практики
Перед удалением
- Проверьте статус: Используйте
/time/status
для проверки текущего состояния - Остановите делегирование: Используйте
/time/stop
для чистой остановки - Экспортируйте данные: Сохраните историю использования
- Рассмотрите паузу: Возможно, временная остановка лучше удаления
- Проверьте возврат: Рассчитайте ожидаемый возврат средств
Альтернативы удалению
Временная остановка (
/time/stop
):- Сохраняет конфигурацию
- Можно возобновить позже
- Нет потери истории
Режим паузы:
- Останавливает новые делегирования
- Сохраняет существующие циклы
- Экономит средства
Уменьшение циклов:
- Установите минимальные циклы
- Снизьте затраты
- Сохраните функциональность
После удаления
- Сохраните подтверждение: Запишите хеш транзакции и детали возврата
- Проверьте баланс: Убедитесь в получении возврата
- Обновите интеграции: Удалите адрес из автоматизаций
- Мониторинг: Проверьте, что энергия больше не делегируется
- Документация: Обновите внутреннюю документацию
Устранение неполадок
Распространенные проблемы
Проблема | Причина | Решение |
---|---|---|
Удаление не работает | Активное делегирование | Подождите завершения или используйте /time/stop |
Нет возврата | Режим infinity | Infinity режим оплачивается ежедневно, нет возврата |
Ошибка разрешений | Неправильный API ключ | Проверьте владельца адреса |
Таймаут транзакции | Перегрузка сети | Повторите через несколько минут |
Проблемы с возвратом
Возврат не получен
Симптомы: Адрес удален, но средства не зачислены
Решения:
- Проверьте историю транзакций в панели
- Убедитесь в подтверждении транзакции
- Проверьте правильный баланс учетной записи
- Обратитесь в поддержку с хешем транзакции
Неправильная сумма возврата
Симптомы: Полученная сумма отличается от ожидаемой
Решения:
- Проверьте использованные циклы
- Учтите частичные циклы
- Проверьте тип режима (standard/infinity)
- Запросите детальный расчет в поддержке
Восстановление после удаления
Если адрес был удален по ошибке:
Немедленные действия (в течение 1 часа):
- Обратитесь в поддержку
- Предоставьте адрес и время удаления
- Возможно быстрое восстановление
Поздние действия (после 1 часа):
- Используйте
/time/add
для повторного добавления - Заново настройте циклы
- История будет начата заново
- Используйте
Примечания
- Необратимость: Удаление нельзя отменить автоматически
- История: История использования сохраняется 30 дней после удаления
- Повторное добавление: Адрес можно добавить заново в любое время
- Возврат средств: Обрабатывается автоматически в течение 5 минут
- Режим Infinity: Не имеет возврата за текущий день
- Массовое удаление: Доступно через отдельный API для enterprise
- Webhook: Доступны уведомления через webhook о удалении
- Соответствие: Соответствует GDPR праву на удаление
- Аудит: Все удаления логируются для соответствия требованиям
- Восстановление: Enterprise аккаунты имеют 24-часовое окно восстановления