Интеграция LayerZero V2
Отметим: когда пользователь переводит токены через классический bridge, он доверяет custodian свои средства. Взлом моста Ronin на $600M показал, что такой подход опасен. 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 безопаснее классического bridge-а?
В классическом bridge вы lock-аете токен и полагаетесь, что custodian его не украдёт. В OFT токен существует нативно в каждой сети: при переводе он сжигается на source и чеканится на destination. Нет locked liquidity. Взлом bridge-а типа Ronin (600M$) невозможен — нет единой точки отказа. Единственный риск — некорректная конфигурация setPeer. Сравните:
| Параметр | Классический bridge | 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 уже сегодня.







