Інтеграція з 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 відповідей.