Поддержка Substrate EVM
Поддержка Substrate EVM
Мы предоставляем пользовательский обработчик источников данных для EVM от Moonbeam и Moonrive Это предлагает простой способ фильтрации и индексации активности EVM и субстратов в сетях Moonbeam в рамках одного проекта SubQuery.
Поддерживаемые сети:
Название сети | Конечная точка Websocket | Конечная точка 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 с обработчиком событий и вызовов. Этот проект также размещен здесь в SubQuery Explorer.
Начало
- Добавьте пользовательский источник данных в качестве зависимости add @ subql / contract-processors
- Добавьте пользовательский источник данных, как описано ниже
- Добавьте обработчики для пользовательского источника данных в свой код
Спецификация Источника Данных
Область | Тип | Необходимый | Описание |
---|---|---|---|
processor.file | './node_modules/@subql/contract-processors/dist/moonbeam.js' | Да | Ссылка на файл с кодом обработчика данных |
processor.options | ProcessorOptions | Нет | Опции, характерные для процессора Moonbeam |
ресурсы | { [key: String]: { file: String }} | Нет | Объект внешних файлов активов |
Настройки процессора
Поле | Тип | Необходимый | Описание |
---|---|---|---|
abi | String | Нет | ABI, который используется процессором для анализа аргументов. ДОЛЖЕН быть ключом assets |
address | String or null | Нет | Адрес контракта, откуда происходит мероприятие или на который делается звонок. null будет фиксировать вызовы создания контракта |
MoonbeamCall
Работает так же, как substrate/CallHandler, только с другим аргументом обработчика и незначительными изменениями фильтрации.
Поле | Тип | Необходимый | Описание |
---|---|---|---|
вид | 'substrate/MoonbeamCall' | Да | Указывает, что это обработчик типа вызова |
фильтр | Call Filter | Нет | Отфильтровать источник данных для выполнения |
Фильтры вызовов
Поле | Тип | Примеры | Описание |
---|---|---|---|
Функции | Строка | 0x095ea7b3, подтвердить (адрес, значение uint256) | Либо строки подписи функции, либо sighash функции для фильтрации функции, вызываемой в контракте. |
откуда | String | 0x6bd193ee6d2104f14f94e2ca6efefae561a4334b | Адрес Ethereum, по которому была отправлена транзакция. |
Обработчики
В отличие от обычного обработчика, вы не получите SubstrateExtrinsic
в качестве параметра, вместо этого вы получите MoonbeamCall
, основанный на типе Ethers TransactionResponse.
Отличия от типа TransactionResponse
:
- Нет свойств
ожидания
иподтверждения
. - Добавляется свойство
успех
, чтобы узнать, была ли транзакция успешной. args
добавляется, если указано полеabi
и аргументы могут быть успешно проанализированы
MoonbeamEvent
Работает так же, как substrate/EventHandler, только с другим аргументом обработчика и незначительными изменениями фильтрации.
Поле | Тип | Необходимый | Описание |
---|---|---|---|
вид | 'substrate/MoonbeamEvent' | Да | Указывает, что это обработчик типа события |
фильтр | Event Filter | Нет | Отфильтровать источник данных для выполнения |
Фильтр событий
Поле | Тип | Примеры | Описание |
---|---|---|---|
темы | Массив строк. | Передача (адрес проиндексирован, адрес проиндексирован, значение uint256) | Фильтр тем соответствует фильтрам журнала Ethereum JSON-PRC, дополнительную документацию можно найти здесь. |
Примечание по темам: Есть несколько улучшений по сравнению с базовыми фильтрами журналов:
- Темы не должны быть заполнены на 0
- Могут быть предоставлены строки фрагмента события
Обработчики
В отличие от обычного обработчика, вы не получите SubstrateEvent
в качестве параметра, вместо этого вы получите MoonbeamEvent
, основанный на типе Ethers Log.
Изменяется по сравнению с типом 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