Интеграция с Transpose API

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Интеграция с Transpose API
Простой
от 1 дня до 3 дней
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1309
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1222
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    922
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1151
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    614
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    887

Интеграция с Transpose API

Transpose — это SQL-интерфейс поверх блокчейн-данных. Вместо того чтобы писать и поддерживать собственный индексер, вы пишете обычный SQL-запрос и получаете исторические данные по транзакциям, токенам, NFT, DeFi протоколам. Поддерживаются Ethereum, Polygon, Optimism, Arbitrum, Base, BSC.

Когда это имеет смысл: аналитические задачи, MVP, внутренние дашборды, исследования. Когда не имеет: real-time события с latency < 1 секунды, кастомные контракты с нестандартными событиями, объёмы запросов, которые делают Transpose экономически невыгодным.

Работа с API

Transpose предоставляет два интерфейса: SQL API (произвольные запросы) и REST API (предопределённые endpoints для типовых запросов).

SQL API — основной инструмент для нетривиальных задач:

const TRANSPOSE_KEY = process.env.TRANSPOSE_API_KEY

async function queryTranspose<T>(sql: string): Promise<T[]> {
    const response = await fetch('https://api.transpose.io/sql', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'X-API-KEY': TRANSPOSE_KEY,
        },
        body: JSON.stringify({ sql }),
    })

    if (!response.ok) {
        const error = await response.json()
        throw new Error(`Transpose error: ${error.message}`)
    }

    const data = await response.json()
    return data.results as T[]
}

// Пример: топ-10 холдеров токена
const topHolders = await queryTranspose<{ address: string; balance: string }>(`
    SELECT owner_address AS address, balance
    FROM ethereum.token_owners
    WHERE contract_address = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
    ORDER BY balance DESC
    LIMIT 10
`)

Основные таблицы

Transpose организует данные в схемы по блокчейну (ethereum, polygon и т.д.). Ключевые таблицы:

Таблица Содержимое
ethereum.transactions Все транзакции: hash, from, to, value, gas, status
ethereum.logs Сырые event logs: address, topics, data
ethereum.token_transfers Декодированные ERC-20 трансферы
ethereum.nft_transfers ERC-721/1155 трансферы
ethereum.token_owners Текущие балансы ERC-20
ethereum.nft_owners Текущие владельцы NFT
ethereum.accounts Адреса: тип (EOA/contract), баланс ETH, первая транзакция

Типичные паттерны запросов

Активность кошелька за период:

SELECT
    DATE_TRUNC('day', timestamp) AS day,
    COUNT(*) AS tx_count,
    SUM(value::numeric / 1e18) AS eth_sent
FROM ethereum.transactions
WHERE from_address = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'
  AND timestamp >= NOW() - INTERVAL '30 days'
GROUP BY 1
ORDER BY 1

История трансферов конкретного токена на адрес:

SELECT
    t.timestamp,
    t.transaction_hash,
    t.from_address,
    t.to_address,
    (t.quantity::numeric / POW(10, tk.decimals)) AS amount,
    tk.symbol
FROM ethereum.token_transfers t
JOIN ethereum.tokens tk ON t.contract_address = tk.contract_address
WHERE t.to_address = '0xYourAddress'
  AND t.contract_address IN (
      '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', -- USDC
      '0xdAC17F958D2ee523a2206206994597C13D831ec7'  -- USDT
  )
ORDER BY t.timestamp DESC
LIMIT 100

Ограничения и rate limits

Бесплатный план: 1 запрос/секунду, 10 000 строк/запрос, 100 запросов/день. Платные планы снимают большинство ограничений, но стоимость растёт с объёмом.

Практические ограничения которые нужно учитывать:

  • Данные с задержкой ~2 минуты от реального времени (не для real-time систем)
  • Максимальный размер результата — 10 000 строк, для больших выборок нужна пагинация через OFFSET/LIMIT
  • Сложные JOIN между схемами (cross-chain) не поддерживаются

Для интеграции в production API рекомендуется кеширование результатов — большинство аналитических запросов не требует данных свежее 5-10 минут:

import { createClient } from 'redis'

const redis = createClient({ url: process.env.REDIS_URL })

async function cachedTransposeQuery<T>(sql: string, ttlSeconds = 300): Promise<T[]> {
    const key = `transpose:${Buffer.from(sql).toString('base64').slice(0, 64)}`
    const cached = await redis.get(key)

    if (cached) return JSON.parse(cached)

    const results = await queryTranspose<T>(sql)
    await redis.setEx(key, ttlSeconds, JSON.stringify(results))
    return results
}

Интеграция занимает 1-2 дня: настройка API-клиента, определение нужных запросов, кеширование, error handling с retry для 429 ответов.