Caldera Metalayer
MetalayerRollup Engine
  • Metalayer
  • Rollup Engine
  • Добро пожаловать в Metalayer
  • Разработчикам
    • Бридж токенов
      • Typescript SDK
    • Кросс-чейн dApps
      • Интеграция с Metalayer
      • Интерфейсы контрактов
      • Адреса тестнета
  • Намерения (Intents)
    • Описание и архитектура
    • Слой агрегации (Aggregation Layer)
    • Сторонние бриджи
    • Слой расчета (Settlement Layer)
  • Передача сообщений
    • Описание
    • Передача сообщений (запись)
    • Кросс-чейн чтение
  • Полезные ссылки
    • Поддержка
Powered by GitBook
On this page
  • Зачем использовать кросс-чейн чтение?
  • Как работает кросс-чейн чтение
  • Интерфейс протокола
  • Объяснение структуры ReadOperation
  • Пример: Запрос данных из 4 сетей
  • Считывание данных из нескольких сетей.
  1. Передача сообщений

Кросс-чейн чтение

Зачем использовать кросс-чейн чтение?

Многие децентрализованные приложения используют данные из нескольких цепочек. Некоторые ключевые сценарии использования включают:

  • Агрегирование ликвидности по сетям для лучшего исполнения DeFi.

  • Получение данных о владении токенами или балансах по цепочкам перед исполнением.

  • Протоколы управления проверяют голоса по нескольким сетям перед принятием решения.

Как работает кросс-чейн чтение

  1. Контракт на одной сети запрашивает данные из нескольких сетей.

  2. CCIP Read ISM проверяет запрос на чтение и направляет его ретрансляторам сообщений Hyperlane.

  3. Hyperlane получает данные от узлов RPC вне сети, агрегирует их и передает обратно.

  4. Данные возвращаются контракту, инициировавшему чтение.

Интерфейс протокола

interface IMetaLayerRead {
    function fetchCrossChainData(
        uint32[] calldata sourceChains,
        address user,
        bytes calldata queryData
    ) external view returns (bytes[] memory);
}

Объяснение структуры ReadOperation

Каждая операция чтения в кросс-сети заключена в структуру ReadOperation:

struct ReadOperation {
    uint32 sourceChain;
    address contractAddress;
    bytes callData;
}
  • sourceChain: Идентификатор сети, по которой запрашиваются данные.

  • contractAddress: Адрес запрашиваемого контракта.

  • callData: Закодированный вызов функции для получения данных.

Пример: Запрос данных из 4 сетей

Этот пример демонстрирует, как контракт запрашивает данные из нескольких сетей.

Считывание данных из нескольких сетей.

contract MultiChainReader {
    IMetaLayerRead public metalayer;

    constructor(address _metalayer) {
        metalayer = IMetaLayerRead(_metalayer);
    }

    function getMultiChainData(uint32[] calldata chains, address user, bytes calldata queryData) 
        external view returns (bytes[] memory) {
        return metalayer.fetchCrossChainData(chains, user, queryData);
    }
}
PreviousПередача сообщений (запись)

Last updated 3 months ago