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

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

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

  • Агрегирование ликвидности по сетям для лучшего исполнения 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);
    }
}

Last updated