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

Интерфейсы контрактов

Разработчики протоколов должны использовать эти интерфейсы для отправки кросс-чейн сообщений и инициирования кросс-чейн чтений через Metalayer.

Создание протоколов через Metalayer

Metalayer требует, чтобы разработчики протоколов реализовывали два контракта - один на сети источника, а другой на сети назначения. Эта схема одинакова независимо от того, собирается ли разработчик выполнять чтение или запись.

Оба контракта взаимодействуют с контрактом MetalayerRouter на каждой сети - и на обеих сторонах разработчик должен разрешить список конкретных контрактов MetalayerRouter на локальной сети как часть конфигурации своего протокола.

Отправка сообщения в сети источнике

В сети источника контракт отправки вызывает функцию dispatch контракта MetalayerRouter. Эта функция принимает домен назначения, адрес получателя, чтение, данные вызова записи, а также логическое значение, указывающее, нужно ли дожидаться завершения сети источника перед передачей сообщения.

/**
    * @notice Dispatches a message to the destination domain & recipient with the given reads and write.
    * @param _destinationDomain Domain of destination chain
    * @param _recipientAddress Address of recipient on destination chain as bytes32
    * @param _reads Read operations
    * @param _writeCallData The raw bytes to be called on the recipient address.
    * @param _useFinalized Whether or not to wait for finality before relaying the message.
    */
function dispatch(
    uint32 _destinationDomain,
    address _recipientAddress,
    ReadOperation[] memory _reads, // can be empty
    bytes memory _writeCallData,
    bool _useFinalized
) external payable;


function quoteGasPayment(
    uint32 _destinationDomain,
    uint256 _gasLimit
) public view virtual override returns (uint256);

Оплата газа

Функция quoteGasPayment используется для расчета количества газа, которое будет заплачено за сообщение. Эта функция принимает домен назначения и лимит газа и возвращает количество газа, необходимое для передачи сообщения. Эта плата за газ покрывает стоимость ретрансляции сообщения, а также стоимость газа, необходимого для доставки сообщения по сети назначения. Эта функция также работает при передаче сообщений на сети с токеном газа, отличным от токена на вашей локальной сети. Плата должна быть включена в значение, отправляемое функцию dispatch.

Получение сообщения в сети назначения

В сети назначения контракт должен реализовать интерфейс IMetalayerRecipient. MetalayerRouter в сети назначения вызовет функциюhandle в контракте получателя, чтобы доставить сообщение.

/**
 * @notice Struct defining a cross-chain read operation
 * @param sourceChainId Domain of the chain to read from
 * @param sourceContract Contract address to read from as address
 * @param callDataLength Length of the call data
 * @param callData The encoded function call data
 */
struct ReadOperation {
    uint32 sourceChainId;
    address sourceContract;
    bytes callData;
}

interface IMetalayerRecipient {
    // Here, _readResults will be the results of every read in the message, in order. This will be input by the relayer.
    function handle(
        uint32 _chainId,
        address _sender,
        bytes calldata _message, // The body of the Metalayer message, or writeCallData.
        ReadOperation[] calldata _reads,
        bytes[] calldata _readResults
    ) external payable;
}
PreviousИнтеграция с MetalayerNextАдреса тестнета

Last updated 3 months ago