Поддръжка на Substrate EVM
# Поддръжка на 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).
# Начални стъпки
- Добавете персонализирания източник на данни като зависимост
yarn add @subql/contract-processors
- Добавете персонализиран източник на данни, както е описано по-долу
- Добавете манипулатори за персонализирания източник на данни към вашия код
# Спец. източник на данни
Поле | Тип | Задължително | Описание |
---|---|---|---|
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'
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