Інтеграція з Wormhole
Wormhole — один з найбільших кросс-чейн мессенджинг-протоколів: 50+ підтримуваних мереж включаючи EVM, Solana, Aptos, Sui, Cosmos (через IBC gateway). За обсягом заблокованих активів конкурує з LayerZero та Axelar. За Wormhole стоїть мережа ~19 Guardian нод — валідаторів, які спостерігають за подіями на вихідному чейні та підписують VAA (Verified Action Approval).
Розуміння VAA — ключ до інтеграції Wormhole. Це повідомлення, підписане мережею Guardian про подію на одному чейні, яке можна представити контракту на іншому чейні. VAA = доказ того, що подія сталася.
Архітектура Wormhole
Source Chain Wormhole Guardians Target Chain
│ │ │
│ publishMessage(payload) │ │
│ → Core Bridge Contract │ │
│ emits LogMessagePublished │ │
│ спостерігають подію │
│ підписують VAA │
│ (19 гвардіанів, │
│ 13-з-19 threshold) │
│ │ VAA підписаний │
│ │ ──────────────────────────► │
│ receiveMessage(VAA)
│ верифікуємо підписи
│ виконуємо payload
Guardian мережа — довірена третя сторона. Компромісс 13 з 19 Guardian нод = повний контроль над протоколом. Це відомий компроміс Wormhole порівняно з більш децентралізованими рішеннями.
Wormhole Connect: швидкий старт для Bridge UI
Для додання bridge UI до додатка — компонент Wormhole Connect. Не потрібно писати смарт-контракти:
npm install @wormhole-foundation/wormhole-connect
import WormholeConnect from '@wormhole-foundation/wormhole-connect'
export default function BridgePage() {
return (
<WormholeConnect
config={{
network: 'Mainnet',
chains: ['Ethereum', 'Solana', 'Arbitrum', 'Base', 'BNB'],
tokens: ['ETH', 'USDC', 'USDT', 'WBTC'],
rpcs: {
Ethereum: 'https://eth-mainnet.g.alchemy.com/v2/...',
Solana: 'https://api.mainnet-beta.solana.com',
},
ui: {
title: 'Bridge',
defaultInputs: {
fromChain: 'Ethereum',
toChain: 'Arbitrum',
tokenKey: 'ETH',
}
}
}}
/>
)
}
Connect підтримує кілька протоколів маршрутизації: Token Bridge (lock-and-mint), CCTP (Circle's нативний USDC bridge, без wrapped токенів), liquidity портали. Автоматично вибирає оптимальний маршрут.
Програмна інтеграція через Wormhole SDK
Для кастомних кросс-чейн workflow — TypeScript SDK (wormhole-sdk v3):
import { wormhole } from '@wormhole-foundation/sdk'
import { EvmPlatform } from '@wormhole-foundation/sdk-evm'
import { SolanaPlatform } from '@wormhole-foundation/sdk-solana'
const wh = await wormhole('Mainnet', [EvmPlatform, SolanaPlatform])
// Отримуємо контексти чейнів
const srcChain = wh.getChain('Ethereum')
const dstChain = wh.getChain('Solana')
// Token Bridge трансфер
const tb = await srcChain.getTokenBridge()
const transferTxs = tb.transfer(
senderAddress,
{ chain: 'Solana', address: recipientAddress },
'native', // ETH
1_000_000_000_000_000_000n // 1 ETH у wei
)
// Відправляємо транзакцію на Source chain
for await (const tx of transferTxs) {
await signer.sendTransaction(tx.transaction)
}
// Чекаємо VAA (зазвичай 15 хвилин для Ethereum фіналізації)
const [txid] = await srcChain.sendWait(transferTxs, signer)
const vaa = await wh.getVaa(txid, 'TokenBridge:Transfer', 60_000)
// Redeem на Target chain
const redeemTxs = dstChain.getTokenBridge().redeem(recipientAddress, vaa)
for await (const tx of redeemTxs) {
await solanaSigner.sendTransaction(tx.transaction)
}
CCTP маршрут для USDC
Circle's Cross-Chain Transfer Protocol через Wormhole — нативний USDC без wrapped токенів. USDC спалюється на вихідному чейні, випускається нативно на цільовому. Підтримувані чейни: Ethereum, Arbitrum, Base, Optimism, Avalanche, Polygon.
// CCTP трансфер через Wormhole SDK — той же API, інший маршрут
const cctp = await srcChain.getCircleBridge()
const transfer = cctp.transfer(
sender,
{ chain: 'Arbitrum', address: recipient },
'USDCeth', // USDC на Ethereum
1_000_000n // 1 USDC (6 decimals)
)
CCTP значно швидше, ніж Token Bridge: ~2 хвилини vs ~15-20 хвилин на Ethereum. Для USDC трансферів — завжди краще.
Кастомний мессенджинг: кросс-чейн додатки
Wormhole — не тільки bridge для токенів — генерального призначення мессенджинг. Додаток може відправити довільний payload з однієї цепи, отримати на іншій.
// Source chain: відправка повідомлення
interface IWormhole {
function publishMessage(
uint32 nonce,
bytes memory payload,
uint8 consistencyLevel // 1 = фіналізоване, 200 = миттєве (Solana)
) external payable returns (uint64 sequence);
}
contract CrossChainApp {
IWormhole wormhole;
function sendMessage(bytes memory payload) external payable {
uint64 sequence = wormhole.publishMessage{value: msg.value}(
0, // nonce
payload,
1 // consistency level: чекаємо фіналізації
);
emit MessageSent(sequence);
}
}
// Target chain: отримання VAA
contract CrossChainReceiver {
IWormhole wormhole;
mapping(bytes32 => bool) processedVAAs;
function receiveMessage(bytes memory encodedVAA) external {
(IWormhole.VM memory vm, bool valid, string memory reason) =
wormhole.parseAndVerifyVM(encodedVAA);
require(valid, reason);
require(!processedVAAs[vm.hash], "Already processed");
processedVAAs[vm.hash] = true;
// Обробка payload
_processPayload(vm.payload);
}
}
Wormhole Queries: кросс-чейн дані без транзакцій
Wormhole Queries — відносно новий механізм: on-demand читання on-chain даних з іншого чейна без відправки транзакцій. Guardian ноди роблять RPC запити та повертають підписану відповідь.
Застосування: перевірити баланс/staking позицію на Ethereum безпосередньо з контракту на Solana. Без oracle, без bridge транзакції.
Інструменти розробки та моніторинг
Wormholescan (wormholescan.io) — explorer для VAA та транзакцій. Безцінний для debug: знайти VAA за txHash, перевірити статус Guardian підписів.
Testnet. Wormhole підтримує testnets всіх чейнів. Ethereum Sepolia → Solana Devnet — стандартний тестовий маршрут.
| Компонент | Інструмент |
|---|---|
| SDK | @wormhole-foundation/sdk v3 |
| UI компонент | @wormhole-foundation/wormhole-connect |
| Explorer | wormholescan.io |
| VAA моніторинг | Wormhole Guardian API |
| Relayer | Wormhole Standard Relayer / кастомний |
| Тести | Foundry + wormhole-solidity-sdk |
Процес розробки
Аналітика (2-3 дні). Визначення маршрутів (які чейни, які токени), вибір між Token Bridge / CCTP / кастомний мессенджинг, потрібен ли кастомний relayer.
Розробка (2-4 тижні). Залежить від scope: Connect UI без контрактів — 3-5 днів. Кастомний мессенджинг з контрактами на 2 чейнах — 2-3 тижні. Кастомний relayer — ще 1-2 тижні.
Тестування. Обов'язково на testnets обох чейнів. Тест edge cases: VAA expiry, double-spend захист (processedVAAs), що стається при reorg на вихідному чейні.
Проста інтеграція Wormhole Connect у існуючий додаток — 3-7 днів. Кастомний кросс-чейн мессенджинг протокол з relayer — 4-6 тижнів.







