Поддръжка на Substrate EVM

... 2022-7-7 About 1 min

# Поддръжка на Substrate EVM

Ние предлагаме персонализиран процесор за източник на данни за EVM на Moonbeam и Moonriver. Това предлага лесен начин за филтриране и индексиране както на EVM, така и на Substrate активността в мрежите на Moonbeam в рамките на един SubQuery проект.

Поддържани мрежи:

Име на мрежата Ендпойнт на уеб сокет Ендпойнт в Dictionary
Moonbeam wss://moonbeam.api.onfinality.io/public-ws https://api.subquery.network/sq/subquery/moonbeam-dictionary
Moonriver wss://moonriver.api.onfinality.io/public-ws https://api.subquery.network/sq/subquery/moonriver-dictionary
Moonbase Alpha wss://moonbeam-alpha.api.onfinality.io/public-ws https://api.subquery.network/sq/subquery/moonbase-alpha-dictionary

**Можете също да се обърнете към основен примерен проект на Moonriver EVM (opens new window) с манипулатор на събитие и повикване. ** Този проект също се хоства на живо в SubQuery Explorer тук (opens 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 }} Не Обект на външни файлове с активи

# Опции на процесора

Поле Тип Задължително Описание
abi Низ Не ABI, който се използва от процесора за анализиране на аргументи. ТРЯБВА да бъде ключ от актив
address Низ или null Не Адрес на договора, откъдето е събитието или на който е направено обаждането. null ще улови обажданията за създаване на контракт

# MoonbeamCall

Работи по същия начин като substrate/CallHandler, освен с различен аргумент на манипулатора и незначителни промени във филтрирането.

Поле Тип Задължително Описание
kind 'substrate/MoonbeamCall' Да Указва, че това е манипулатор на тип повикване
filter Филтър за повиквания Не Филтрирайте източника на данни за изпълнение

# Филтър за повиквания

Поле Тип Пример (и) Описание
function Низ 0x095ea7b3, approve(address to,uint256 value) Или низове Function Signature (opens new window), или функцията sighash за филтриране на функцията, извикана в контракта
from Низ 0x6bd193ee6d2104f14f94e2ca6efefae561a4334b Адрес на Ethereum, който е изпратил транзакцията

# Манипулатори

За разлика от нормалния манипулатор, вие няма да получите SubstrateExtrinsic като параметър, вместо това ще получите MoonbeamCall който е базиран на Ethers TransactionResponse (opens new window) тип.

Промени от типа TransactionResponse:

  • Той няма свойства wait и confirmations
  • Добавя се свойство success, за да се знае дали транзакцията е била успешна
  • args се добавя, ако е предоставено полето abi и аргументите могат да бъдат успешно анализирани

# MoonbeamEvent

Работи по същия начин като substrate/EventHandler, освен с различен аргумент на манипулатора и незначителни промени във филтрирането.

Поле Тип Задължително Описание
kind 'substrate/MoonbeamEvent' Да Указва, че това е манипулатор на тип събитие
filter Филтри за събитие Не Филтрирайте източника на данни за изпълнение

# Филтри за събитие

Поле Тип Пример (и) Описание
topics Масив на низове Transfer(address indexed from,address indexed to,uint256 value) Филтърът за теми следва филтрите за регистрационни файлове на Ethereum JSON-PRC, повече документация можете да намерите тук (opens new window).

Бележка по теми: Има няколко подобрения от основните филтри за регистрационни файлове:

  • Темите не трябва да са подплатени с 0
  • Могат да се предоставят низове на Event Fragment (opens new window) и автоматично да се преобразуват в техния идентификатор

# Манипулатори

За разлика от нормалния манипулатор, вие няма да получите SubstrateEvent като параметър, вместо това ще получите MoonbeamEvent, който е базиран на етерски типлог (opens 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'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# Известни ограничения

  • Понастоящем няма начин за запитване на състоянието на EVM в манипулатор
  • Няма начин да получите разписки за транзакциите с манипулатори на повиквания
  • Свойствата на blockHash в момента са оставени недефинирани, вместо това може да се използва свойството blockNumber
Last update: July 7, 2022 09:05