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

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с Alchemy API
Простая
~1 рабочий день
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1056
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

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

Alchemy — это не просто RPC провайдер. Помимо надёжного доступа к нодам (с автоматическим failover и 99.9% uptime SLA), они предоставляют Enhanced APIs, которые закрывают задачи, требующие в противном случае собственного индексера: история транзакций по адресу, NFT данные, token балансы, decoded event logs. Правильная интеграция с Alchemy убирает необходимость держать собственную ноду для большинства dApp.

Настройка и ключи

Alchemy SDK для TypeScript/JavaScript — предпочтительный способ взаимодействия:

npm install alchemy-sdk
import { Alchemy, Network, AlchemySettings } from "alchemy-sdk"

const settings: AlchemySettings = {
  apiKey: process.env.ALCHEMY_API_KEY,
  network: Network.ETH_MAINNET,
  maxRetries: 5,
  requestTimeout: 30000
}

const alchemy = new Alchemy(settings)

SDK автоматически управляет retry логикой и rate limiting. Для нескольких чейнов — отдельные инстансы с разными network значениями.

Enhanced APIs: что реально полезно

NFT API

Без Alchemy получить все NFT адреса — это парсинг Transfer событий с genesis блока или зависимость от маркетплейс API. С Alchemy:

// Все NFT кошелька
const nfts = await alchemy.nft.getNftsForOwner("0xAddress", {
  contractAddresses: ["0xOptionalFilter"],
  omitMetadata: false
})

// Владелец конкретного токена
const owners = await alchemy.nft.getOwnersForNft(contractAddress, tokenId)

// Все токены коллекции с metadata
const collection = await alchemy.nft.getNftsForContract(contractAddress, {
  pageSize: 100
})

Token API

// Все ERC-20 балансы адреса
const balances = await alchemy.core.getTokenBalances("0xAddress")

// Metadata токена
const metadata = await alchemy.core.getTokenMetadata("0xTokenAddress")
// { name, symbol, decimals, logo }

Transaction history

eth_getTransactionByHash возвращает одну транзакцию. Для истории всех транзакций адреса стандартного JSON-RPC метода нет — это одна из болей разработки без Enhanced APIs:

const history = await alchemy.core.getAssetTransfers({
  fromAddress: "0xAddress",
  category: ["external", "erc20", "erc721", "erc1155"],
  withMetadata: true,
  maxCount: 100
})

Результат включает decoded transfers с суммами, символами токенов и адресами — готово для отображения в UI.

Alchemy Notify: Webhooks

Polling — плохой способ следить за on-chain событиями. Alchemy Notify — webhook сервис, который отправляет POST на ваш endpoint при наступлении события:

// Через Notify API создаём webhook
const webhook = await alchemy.notify.createWebhook(
  "https://your-api.com/webhooks/alchemy",
  WebhookType.ADDRESS_ACTIVITY,
  {
    addresses: ["0xWatchedAddress"],
    network: Network.ETH_MAINNET
  }
)

Типы вебхуков: ADDRESS_ACTIVITY (любая активность адреса), NFT_ACTIVITY (Transfer события NFT), MINED_TRANSACTION, DROPPED_TRANSACTION.

Верификация подписи webhook:

import { isValidWebhookSignature } from "alchemy-sdk"

app.post("/webhooks/alchemy", express.raw({ type: "application/json" }), (req, res) => {
  const isValid = isValidWebhookSignature({
    body: req.body.toString(),
    signature: req.headers["x-alchemy-signature"] as string,
    signingKey: process.env.ALCHEMY_WEBHOOK_SIGNING_KEY!
  })

  if (!isValid) return res.status(401).send("Unauthorized")

  const event = JSON.parse(req.body.toString())
  handleAlchemyEvent(event)
  res.sendStatus(200)
})

Subscription через WebSocket

Для realtime данных в браузере или Node.js сервисе:

// Подписка на новые блоки
alchemy.ws.on("block", (blockNumber) => {
  console.log("New block:", blockNumber)
})

// Подписка на pending транзакции с определённым адресом
alchemy.ws.on(
  { method: "alchemy_pendingTransactions", toAddress: contractAddress },
  (tx) => handlePendingTx(tx)
)

// Подписка на события контракта
const filter = {
  address: contractAddress,
  topics: [ethers.id("Transfer(address,address,uint256)")]
}
alchemy.ws.on(filter, handleTransferEvent)

SDK автоматически восстанавливает WebSocket соединение при разрыве и пропускает missed события через polling.

Rate limits и оптимизация

Бесплатный план: 300 compute units/сек. Каждый вызов стоит разное количество CU: eth_blockNumber — 10 CU, eth_getTransactionReceipt — 15 CU, alchemy_getAssetTransfers — 150 CU.

Батчинг RPC запросов через JSON-RPC batch:

// Параллельные запросы без лишних HTTP round-trips
const [balance, nonce, gasPrice] = await Promise.all([
  alchemy.core.getBalance("0xAddress"),
  alchemy.core.getTransactionCount("0xAddress"),
  alchemy.core.getGasPrice()
])

Promise.all на уровне SDK не делает батчинг на уровне HTTP — это отдельные запросы. Для настоящего батчинга через JSON-RPC batch нужен низкоуровневый fetch напрямую к RPC endpoint.

Сроки

Базовая интеграция SDK с NFT API, token балансами и webhook setup — 1 рабочий день. Включая настройку окружений (mainnet + testnet), обработку ошибок и мониторинг rate limits.