Skip to content

POST /apiv2/time/delete

Удаление TRON адреса из Host Mode и возврат всех активных делегирований энергии.

Подробный обзор

Эндпоинт Time Delete окончательно удаляет TRON адрес из управления Host Mode, немедленно возвращая любые активные делегирования энергии и останавливая все автоматические сервисы управления энергией. Это действие необратимо для текущего биллингового цикла, но адрес можно добавить заново позже при необходимости.

URL эндпоинта

POST https://netts.io/apiv2/time/delete

Аутентификация

Этот эндпоинт использует аутентификацию через тело JSON запроса (не через заголовки). Ваш API ключ и целевой адрес передаются в теле запроса.

Процесс аутентификации

  1. Валидация API ключа: Система проверяет существование и активность API ключа
  2. Проверка белого списка IP: IP запроса должен соответствовать настроенному белому списку
  3. Проверка владения: API ключ должен владеть указанным адресом
  4. Проверка разрешений: Учетная запись должна иметь разрешения на удаление

Заголовки запроса

ЗаголовокОбязательныйОписание
Content-TypeДаapplication/json

Тело запроса

json
{
    "api_key": "ваш_api_ключ",
    "address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
}

Подробные параметры

ПараметрТипОбязательныйВалидацияОписание
api_keystringДаДолжен существовать в системеВаш API ключ для аутентификации и биллинга
addressstringДаФормат TRC-20TRON адрес для удаления из Host Mode (должен начинаться с 'T' и содержать 34 символа)

Валидация параметров

  • api_key:

    • Должен быть действительным 32-символьным шестнадцатеричным ключом
    • Должен быть связан с активной учетной записью
    • Учетная запись не должна быть приостановлена или ограничена
    • Должен иметь разрешения на удаление
  • address:

    • Должен соответствовать формату TRC-20 ^T[1-9A-HJ-NP-Za-km-z]{33}$
    • Должен существовать в системе Host Mode
    • Должен принадлежать API ключу
    • Не может быть удален во время активной транзакции
  • IP адрес:

    • IP вашего запроса должен быть в белом списке, связанном с вашим API ключом
    • Максимум 5 IP адресов на API ключ
    • Поддерживаются IPv4 и IPv6

Примеры запросов

cURL

bash
curl -X POST https://netts.io/apiv2/time/delete \
  -H "Content-Type: application/json" \
  -d '{
    "api_key": "YOUR_API_KEY_HERE",
    "address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE"
  }'

Python

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

javascript
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
<?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

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)

json
{
    "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"
        }
    }
}

Поля ответа

ПолеТипОписание
codeintegerКод ответа (0 = успех, отрицательный = ошибка)
msgstringЧеловекочитаемое сообщение ответа
data.addressstringTRON адрес, который был удален
data.energy_reclaimedintegerКоличество возвращенной энергии
data.cycles_refundedintegerКоличество возвращенных неиспользованных циклов
data.refund_amountnumberСумма возврата в TRX за неиспользованные циклы
data.timestampstringISO временная метка удаления
data.effective_timeintegerUnix временная метка вступления в силу
data.final_statusobjectФинальная статистика перед удалением

Поля финального статуса

ПолеТипОписание
total_cycles_usedintegerОбщее количество использованных циклов
total_energy_delegatedintegerОбщее количество делегированной энергии за все время
active_sinceintegerUnix временная метка добавления в Host Mode
deletion_reasonstringПричина удаления ("user_requested", "account_closure", "violation")

Обработка ошибок

Ошибка аутентификации (401)

json
{
    "code": -1,
    "msg": "Invalid API key or IP not in whitelist",
    "data": null
}

Причины:

  • Неверный или истекший API ключ
  • API ключ не найден в системе
  • Учетная запись приостановлена или закрыта

Решение:

  • Проверьте правильность API ключа
  • Проверьте статус учетной записи в панели управления
  • Обратитесь в поддержку, если ключ должен быть действительным

Адрес не найден (404)

json
{
    "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)

json
{
    "code": -1,
    "msg": "You don't have permission to delete this address",
    "data": {
        "address": "TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE",
        "owner": "different_api_key"
    }
}

Причины:

  • Адрес принадлежит другому API ключу
  • Недостаточно прав для удаления
  • Адрес защищен от удаления

Решение:

  • Используйте правильный API ключ
  • Проверьте владельца адреса
  • Обратитесь в поддержку для разблокировки

Активная транзакция (409)

json
{
    "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 запросов в минуту

Заголовки ограничения частоты

http
X-RateLimit-Limit-Minute: 6
X-RateLimit-Remaining-Minute: 5
Retry-After: 10

Превышение лимита частоты (429)

json
{
    "message": "API rate limit exceeded"
}

Что происходит при удалении

Немедленные действия

  1. Остановка делегирования: Все активные делегирования немедленно отменяются
  2. Возврат энергии: Делегированная энергия возвращается в пул
  3. Возврат циклов: Неиспользованные циклы конвертируются в TRX
  4. Обновление базы данных: Адрес помечается как удаленный
  5. Остановка автоматизации: Все автоматические процессы останавливаются

Процесс возврата средств

  1. Расчет возврата:

    • Неиспользованные циклы × 3.0 TRX за цикл
    • Пропорциональный возврат для частично использованных циклов
    • Нет возврата для режима infinity (ежедневная оплата)
  2. Зачисление на баланс:

    • Возврат зачисляется на баланс учетной записи
    • Доступен немедленно для вывода или использования
    • Отражается в истории транзакций
  3. Уведомление:

    • Email подтверждение удаления
    • Детали возврата в уведомлении
    • Финальный отчет об использовании

Влияние на блокчейн

  • Транзакция возврата: Создается транзакция возврата энергии
  • Подтверждение сети: Требуется 19 блоков для подтверждения
  • Время обработки: Обычно 1-2 минуты
  • Хеш транзакции: Предоставляется для отслеживания

Детали безопасности

Защита от случайного удаления

  1. Двойная проверка: Требуется явное указание адреса
  2. Проверка владения: Только владелец может удалить
  3. Аудит лог: Все удаления записываются
  4. Период восстановления: 24 часа для отмены (enterprise)

Предотвращение злоупотреблений

  • Лимит удалений: Максимум 10 удалений в день
  • Защита от скриптов: Captcha для частых удалений
  • Блокировка IP: При подозрительной активности
  • Ручная проверка: Для массовых удалений

Соответствие требованиям

  • GDPR: Право на удаление данных
  • Аудит трейл: Полная история действий
  • Шифрование данных: При передаче и хранении
  • Резервное копирование: 30-дневное хранение удаленных данных

Техническая архитектура

Архитектура сервиса

  • Порт: 9010
  • Фреймворк: FastAPI с валидацией Pydantic
  • База данных: PostgreSQL с транзакциями
  • Очередь: Redis для асинхронной обработки
  • Логирование: Структурированные логи в JSON

Операции с базой данных

sql
-- Мягкое удаление адреса
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());

Интеграция с блокчейном

  1. Проверка делегирования: Запрос текущего статуса
  2. Транзакция возврата: Создание и подписание
  3. Отправка в сеть: Broadcast транзакции
  4. Мониторинг: Отслеживание подтверждений
  5. Финализация: Обновление статуса после подтверждения

Связанные эндпоинты

  • Time Status - Проверить адреса перед удалением
  • Time Stop - Временная остановка вместо удаления
  • Time Add - Повторное добавление после удаления
  • Time Order - Управление циклами перед удалением
  • Time Infinity Start - Альтернатива удалению

Лучшие практики

Перед удалением

  1. Проверьте статус: Используйте /time/status для проверки текущего состояния
  2. Остановите делегирование: Используйте /time/stop для чистой остановки
  3. Экспортируйте данные: Сохраните историю использования
  4. Рассмотрите паузу: Возможно, временная остановка лучше удаления
  5. Проверьте возврат: Рассчитайте ожидаемый возврат средств

Альтернативы удалению

  1. Временная остановка (/time/stop):

    • Сохраняет конфигурацию
    • Можно возобновить позже
    • Нет потери истории
  2. Режим паузы:

    • Останавливает новые делегирования
    • Сохраняет существующие циклы
    • Экономит средства
  3. Уменьшение циклов:

    • Установите минимальные циклы
    • Снизьте затраты
    • Сохраните функциональность

После удаления

  1. Сохраните подтверждение: Запишите хеш транзакции и детали возврата
  2. Проверьте баланс: Убедитесь в получении возврата
  3. Обновите интеграции: Удалите адрес из автоматизаций
  4. Мониторинг: Проверьте, что энергия больше не делегируется
  5. Документация: Обновите внутреннюю документацию

Устранение неполадок

Распространенные проблемы

ПроблемаПричинаРешение
Удаление не работаетАктивное делегированиеПодождите завершения или используйте /time/stop
Нет возвратаРежим infinityInfinity режим оплачивается ежедневно, нет возврата
Ошибка разрешенийНеправильный API ключПроверьте владельца адреса
Таймаут транзакцииПерегрузка сетиПовторите через несколько минут

Проблемы с возвратом

Возврат не получен

Симптомы: Адрес удален, но средства не зачислены

Решения:

  • Проверьте историю транзакций в панели
  • Убедитесь в подтверждении транзакции
  • Проверьте правильный баланс учетной записи
  • Обратитесь в поддержку с хешем транзакции

Неправильная сумма возврата

Симптомы: Полученная сумма отличается от ожидаемой

Решения:

  • Проверьте использованные циклы
  • Учтите частичные циклы
  • Проверьте тип режима (standard/infinity)
  • Запросите детальный расчет в поддержке

Восстановление после удаления

Если адрес был удален по ошибке:

  1. Немедленные действия (в течение 1 часа):

    • Обратитесь в поддержку
    • Предоставьте адрес и время удаления
    • Возможно быстрое восстановление
  2. Поздние действия (после 1 часа):

    • Используйте /time/add для повторного добавления
    • Заново настройте циклы
    • История будет начата заново

Примечания

  • Необратимость: Удаление нельзя отменить автоматически
  • История: История использования сохраняется 30 дней после удаления
  • Повторное добавление: Адрес можно добавить заново в любое время
  • Возврат средств: Обрабатывается автоматически в течение 5 минут
  • Режим Infinity: Не имеет возврата за текущий день
  • Массовое удаление: Доступно через отдельный API для enterprise
  • Webhook: Доступны уведомления через webhook о удалении
  • Соответствие: Соответствует GDPR праву на удаление
  • Аудит: Все удаления логируются для соответствия требованиям
  • Восстановление: Enterprise аккаунты имеют 24-часовое окно восстановления