Інтеграція LayerZero V2
Зауважте: коли користувач переводить токени через класичний міст, він довіряє свої кошти custodian. Злом мосту Ronin на $600 млн показав, що такий підхід небезпечний. LayerZero V2 вирішує цю проблему кардинально інакше: токен згоряє на source і карбується на destination – locked liquidity відсутня. Це робить OFT у 100 разів безпечнішим за традиційні мости, оскільки немає єдиної точки відмови. Ми інтегруємо LayerZero V2 у DeFi-проекти – від простих OFT до складних крос-чейн DAO. Стек: Solidity 0.8.x, Foundry, Hardhat. Працюємо з мережами Ethereum, Arbitrum, Polygon, BNB Chain, Base. За нашими плечима 30+ проектів і $10M+ ліквідності в управлінні.
Згідно з LayerZero V2 Documentation, протокол забезпечує omnichain messaging з верифікацією через DVN. Конфігурація DVN задається через setConfig, що дозволяє налаштовувати безпеку під конкретний проект.
Як працює LayerZero V2?
V2 спростила архітектуру порівняно з V1. Endpoint – singleton контракт у кожній мережі. Адреса: 0x1a44076050125825900e736c501f859c50fE728c у всіх підтримуваних мережах. DVN – верифікатори, які підтверджують доставку. Розробник обирає конфігурацію: кількість required/optional DVN. Приклади провайдерів: Google Cloud, Polyhedra, Axelar. Мінімальна безпечна конфігурація – 2 незалежні DVN у required. Executor – агент, що викликає lzReceive на destination після підтвердження DVN. Можна використовувати стандартний LayerZero executor або свій.
Чому OFT безпечніший за класичний міст?
У класичному мосту ви lock-аєте токен і покладаєтеся, що custodian його не вкраде. В OFT токен існує нативно в кожній мережі: при переказі він згоряє на source і карбується на destination. Немає locked liquidity. Злом мосту типу Ronin (600M$) неможливий – немає єдиної точки відмови. Єдиний ризик – некоректна конфігурація setPeer. Порівняйте:
| Параметр | Класичний міст | OFT |
|---|---|---|
| Механізм | Lock-and-mint | Burn-and-mint |
| Ризик злому | Високий (єдина точка відмови) | Низький (немає locked liquidity) |
| Аудит | Обов'язковий для кожного контракту | Тільки setPeer конфігурація |
OApp: базовий патерн інтеграції
OApp – базовий контракт для будь-якої інтеграції. Приклад реалізації:
import { OApp, Origin, MessagingFee } from "@layerzerolabs/oapp-evm/contracts/oapp/OApp.sol";
contract CrossChainMessenger is OApp {
event MessageReceived(uint32 srcEid, bytes32 sender, string message);
constructor(address _endpoint, address _owner)
OApp(_endpoint, _owner) {}
function sendMessage(
uint32 dstEid,
string calldata message,
bytes calldata options
) external payable {
bytes memory payload = abi.encode(message);
MessagingFee memory fee = _quote(dstEid, payload, options, false);
require(msg.value >= fee.nativeFee, "Insufficient fee");
_lzSend(dstEid, payload, options, fee, payable(msg.sender));
}
function _lzReceive(
Origin calldata origin,
bytes32,
bytes calldata payload,
address,
bytes calldata
) internal override {
string memory message = abi.decode(payload, (string));
emit MessageReceived(origin.srcEid, origin.sender, message);
}
function quoteSend(
uint32 dstEid,
string calldata message,
bytes calldata options
) external view returns (MessagingFee memory) {
return _quote(dstEid, abi.encode(message), options, false);
}
}
options кодує gas limit на lzReceive, airdrop ETH, ordered delivery. Використовуйте OptionsBuilder. Недостатній gas – реверт на destination. Надлишковий – переплата. Потрібно профілювати через тести.
OFT: Omnichain Fungible Token
OFT – головний use case. Токен існує нативно в кожній мережі. Контракт мінімальний:
import { OFT } from "@layerzerolabs/oft-evm/contracts/OFT.sol";
contract MyOFT is OFT {
constructor(string memory _name, string memory _symbol, address _lzEndpoint, address _owner)
OFT(_name, _symbol, _lzEndpoint, _owner) {}
}
Деплоїти потрібно в кожній мережі та зв'язати через setPeer. Ця операція критична для безпеки – якщо вказати невірну адресу, повідомлення підуть у нікуди.
OFTAdapter для існуючих токенів
Якщо токен вже живе в одній мережі, використовуйте OFTAdapter:
import { OFTAdapter } from "@layerzerolabs/oft-evm/contracts/OFTAdapter.sol";
contract MyTokenAdapter is OFTAdapter {
constructor(address _token, address _lzEndpoint, address _owner)
OFTAdapter(_token, _lzEndpoint, _owner) {}
}
На home chain деплоїться Adapter (custodian), на інших – звичайний OFT.
Як налаштувати DVN конфігурацію?
Налаштування DVN – ключовий етап безпеки. Виконайте кроки:
- Виберіть мінімум 2 незалежних DVN-провайдери (наприклад, LayerZero Labs та Google Cloud).
- Визначте конфігурацію required/optional. Рекомендуємо 2 required, 0 optional.
- Використовуйте
ILayerZeroEndpointV2.setConfigдля встановлення налаштувань.
Приклад конфігурації:
const configParams = [{
eid: dstEid,
configType: CONFIG_TYPE_ULN,
config: ethers.AbiCoder.defaultAbiCoder().encode(
['tuple(uint64,uint8,uint8,uint8,address[],address[])'],
[[0, 2, 1, 0, [dvn1, dvn2], [dvn3]]]
)
}];
await endpoint.setConfig(oappAddress, sendLibAddress, configParams);
Ця конфігурація гарантує, що для доставки повідомлення потрібне підтвердження від двох із трьох зазначених DVN. У 10 разів надійніше, ніж використання одного верифікатора.
Покрокова інструкція з інтеграції LayerZero V2
- Виберіть тип інтеграції (OApp, OFT або OFTAdapter).
- Розробіть смарт-контракт з використанням @layerzerolabs/oapp-evm.
- Розгорніть контракт у цільових мережах (мінімум 2).
- Налаштуйте setPeer для зв'язування контрактів між мережами.
- Сконфігуруйте DVN через setConfig (мінімум 2 required).
- Протестуйте на тестових мережах (Sepolia, Mumbai).
- Запустіть у mainnet і налаштуйте моніторинг через lzScan.
Тестування та DevTools
Для локального тестування використовуйте TestHelper з @layerzerolabs/test-devtools-evm-foundry:
contract OFTTest is TestHelper {
function setUp() public virtual override {
super.setUp();
setUpEndpoints(2, LibraryType.UltraLightNode);
}
}
lzScan – офіційний explorer для налагодження. При помилках у production – перший інструмент.
Часті помилки
- Insufficient gas on destination – рішення: збільшити gas у OptionsBuilder, попередньо замірявши через тести.
- Unordered delivery – якщо важливий порядок, використовуйте ordered delivery (на 30% дорожче).
- Fee estimation – викликайте
_quoteбезпосередньо перед транзакцією: fee залежить від gas price на destination і швидко змінюється.
Що входить в інтеграцію
- Архітектура крос-чейн взаємодії
- Розробка смарт-контрактів (OApp/OFT/OFTAdapter)
- Деплой у 2–5 мережах (Ethereum, Arbitrum, Polygon, BNB Chain, Base)
- Конфігурація DVN та Executor
- Тестування на тестових мережах (Sepolia, Mumbai)
- Моніторинг через lzScan
- Документація та навчання команди
| Задача | Інструмент |
|---|---|
| Smart contracts | Solidity + OApp SDK |
| Деплой та wire | Hardhat + lz-devtools |
| DVN конфігурація | LayerZero SDK + Dashboard |
| Тестування | Foundry + TestHelper |
| Моніторинг | lzScan |
Базова OFT інтеграція (існуючий токен + cross-chain transfer) – 2–3 тижні. Кастомний додаток з кількома мережами та UI – 6–8 тижнів. Для OFT з значущою ліквідністю рекомендуємо аудит контрактів і конфігурації setPeer.
Гарантуємо безпеку та надійність інтеграції. Оцінимо ваш проект – отримайте консультацію. Зв'яжіться з нами, щоб обговорити ваш проект та отримати оцінку термінів і вартості. Замовте інтеграцію LayerZero вже сьогодні.







