Перейти до основного вмісту

Підтримка Substrate EVM

SubQuery TeamПриблизно 2 хв

Підтримка Substrate EVM

Ми надаємо спеціальний процесор джерела даних для EVM Moonbeam та Moonriver Це пропонує простий спосіб фільтрації та індексації як EVM, так і Substrate активності в мережах Moonbeam в рамках одного проекту SubQuery.

Підтримувані мережі:

Назва мережіWebsocket кінцева точкаКінцева точка словника
Moonbeamwss://moonbeam.api.onfinality.io/public-wshttps://api.subquery.network/sq/subquery/moonbeam-dictionary
Moonriverwss://moonriver.api.onfinality.io/public-wshttps://api.subquery.network/sq/subquery/moonriver-dictionary
Moonbase Alphawss://moonbeam-alpha.api.onfinality.io/public-wshttps://api.subquery.network/sq/subquery/moonbase-alpha-dictionary

** Ви також можете звернутися до базового прикладу EVM Moonriver open in new window з обробником подій та викликів.** Цей проект також розміщений у прямому ефірі в Провіднику SubQuery тут open in new window.

Початок роботи

  1. Додати джерело даних в якості залежності yarn add @subql/contract-processors
  2. Додати джерело даних, як описано нижче
  3. Додайте обробники для джерела даних для вашого коду

Специфікація ресурсу даних

полеТипОбов’язковоОписання
processor.file'./node_modules/@subql/contract-processors/dist/moonbeam.js'ТакПосилання на код обробки даних
processor.optionsПараметри процесораНіОпції, характерні для Процесора Moonbeam
assets{ [key: String]: { file: String }}НіОб'єкт зовнішніх медіафайлів

Параметри процесора

полеТипОбов’язковоОписання
abiStringНіПроцесор ABI використовується для аналізу аргументів. ПОВИНЕН бути ключем assets
AddressString or nullНіАдреса контракту, з якої здійснюється подія або дзвінок. null буде захоплювати виклики створення контракту

Виклик Moonbeam

Працює так само, як substrate / CallHandler , за винятком іншого аргументу обробника та незначних змін фільтрації.

полеТипОбов’язковоОписання
вид'substrate/MoonbeamCall'ТакВказує, що це обробник типу виклику
ФільтрФільтр викликівНіФільтр джерела даних для виконання

Фільтр викликів

полеТипПрикладиОписання
ФункціяString0x095ea7b3, затвердити (адресу на,uint256 значення)Або Function Signature open in new window, або функція sighash для фільтрації функції, що викликається договором
відString0x6bd193ee6d2104f14f94e2ca6efefae561a4334bEthereum адреса, яка надіслала транзакцію

Обробники

На відміну від звичайного обробника, ви не отримаєте параметр SubstrateExtrinsic, натомість ви отримаєте тип MoonbeamCall, який базується на Ethers TransactionResponse open in new window.

Зміни від типу TransactionResponse:

  • Він не має wait та confirmations властивостей
  • Властивість success додається щоб знати, якщо транзакція була успішною
  • args додається, якщо поле abi надано і аргументи можна успішно проаналізувати

Подія Moonbeam

Працює так само, як substrate / EventHandler , за винятком іншого аргументу обробника та незначних змін фільтрації.

полеТипОбов’язковоОписання
вид'substrate/MoonbeamEvent'ТакВказує, що це обробник типу події
ФільтрEvent FilterНіФільтр джерела даних для виконання

Фільтри події

полеТипПрикладиОписання
темиМасиви рядківTransfer(адреса, індексована адреса, індексована в,uint256 значення)Фільтр тем слідкує за фільтрами журналів Ethereum JSON-PRC, більше документації можна знайти here open in new window.

Примітка до тем:

Є кілька вдосконалень від основних фільтрів журналів:

Обробники

На відміну від звичайного обробника, ви не отримаєте параметр SubstrateEvent, натомість ви отримаєте MoonbeamEvent, який базується на Ethers Log open in new window.

Зміни з Log:

  • args додається, якщо поле abi надано і аргументи можна успішно проаналізувати

Приклад джерела даних

Це витяг з файлу маніфесту project.yaml.

dataSources:
  - kind: substrate/Moonbeam
    startBlock: 752073
    processor:
      file: "./node_modules/@subql/contract-processors/dist/moonbeam.js"
      options:
        # Must be a key of assets
        abi: erc20
        # Contract address (or recipient if transfer) to filter, if `null` should be for contract creation
        address: "0x6bd193ee6d2104f14f94e2ca6efefae561a4334b"
    assets:
      erc20:
        file: "./erc20.abi.json"
    mapping:
      file: "./dist/index.js"
      handlers:
        - handler: handleMoonriverEvent
          kind: substrate/MoonbeamEvent
          filter:
            topics:
              - Transfer(address indexed from,address indexed to,uint256 value)
        - handler: handleMoonriverCall
          kind: substrate/MoonbeamCall
          filter:
            ## The function can either be the function fragment or signature
            # function: '0x095ea7b3'
            # function: '0x7ff36ab500000000000000000000000000000000000000000000000000000000'
            # function: approve(address,uint256)
            function: approve(address to,uint256 value)
            from: "0x6bd193ee6d2104f14f94e2ca6efefae561a4334b"

Відомі обмеження

  • Наразі немає можливості запитувати стан EVM у обробнику
  • Немає можливості отримати квитанції про транзакції з обробниками дзвінків
  • Властивості blockHash в даний час залишаються невизначеними, натомість можна використовувати властивість blockNumber