Support de l'EVM Substrate

... 2022-10-5 About 3 min

# Support de l'EVM Substrate

Nous fournissons un processeur de données sur mesure pour Moonbeam et MoonRiver EVM. Ceci offre un moyen simple de filtrer et d'indexer à la fois l'activité EVM et Substrate sur les réseaux de Moonbeam au sein d'un seul projet SubQuery.

Réseaux pris en charge :

Nom du réseau Point de terminaison Websocket Point de terminaison du dictionnaire
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

Vous pouvez également vous référer au projet d'exemple de Moonriver EVM (opens new window) avec un gestionnaire d'événements et d'appels. Ce projet est également hébergé en direct dans le SubQuery Explorer ici (opens new window).

# Pour commencer

  1. Ajouter la source de données personnalisée en tant que dépendance yarn add @subql/contract-processors
  2. Ajouter une source de données personnalisée comme décrit ci-dessous
  3. Ajouter des gestionnaires pour la source de données personnalisée à votre code

# Spécification de la source de données

Champ Type Requis Description
processor.file './node_modules/@subql/contract-processors/dist/moonbeam.js' Oui Référence du fichier au code du processeur de données
processor.options Options du processeur Non Options spécifiques au processeur de Moonbeam
actifs { [key: String]: { file: String }} Non Un objet de fichiers de ressources externes

# Options du processeur

Champ Type Requis Description
abi String Non L'ABI qui est utilisé par le processeur pour analyser les arguments. DOIT être une clé d' actifs
adresse String ou null Non Une adresse de contrat d'où l'événement provient ou un appel y ai fait. null capturera les appels de création de contrat

# MoonbeamCall

Fonctionne de la même manière que substrate/CallHandler sauf avec un argument de gestion différent et des modifications mineures de filtrage.

Champ Type Requis Description
kind 'substrate/MoonbeamCall' Oui Spécifie qu'il s'agit d'un gestionnaire de type d'appel
filter Filtre d'appel Non Filtrer la source de données à exécuter

# Filtres d'appel

Champ Type Exemple(s) Description
function String 0x095ea7b3, approve(address to,uint256 value) Soit Signature de fonction (opens new window) chaînes ou la fonction sighash pour filtrer la fonction appelée sur le contrat
from String 0x6bd193ee6d2104f14f94e2ca6efefae561a4334b Une adresse Ethereum qui a envoyé la transaction

# Gestionnaires

Contrairement à un gestionnaire normal, vous n'obtiendrez pas un SubstrateExtrinsic en tant que paramètre, au lieu de cela, vous obtiendrez un MoonbeamCall qui est basé sur le type Ethers TransactionResponse (opens new window).

Changements depuis le type TransactionResponse:

  • Il n'a pas de propriétés attendre et confirmer
  • Une propriété succes est ajoutée pour savoir si la transaction a été un succès
  • args est ajouté si le champ abi est fourni et que les arguments peuvent être analysés avec succès

# MoonbeamEvent

Fonctionne de la même manière que substrate/CallHandler sauf avec un argument de gestion différent et des modifications mineures de filtrage.

Champ Type Requis Description
kind 'substrate/MoonbeamEvent' Oui Spécifie qu'il s'agit d'un gestionnaire de type d'appel
filter Filtre d’événements Non Filtrer la source de données à exécuter

# Filtres d'événement

Champ Type Exemple(s) Description
topics String array Transfer(address indexed from,address indexed to,uint256 value) Le filtre des sujets suit les filtres de log Ethereum JSON-PRC , vous trouverez plus de documentation ici (opens new window).

Note sur les sujets : Il y a quelques améliorations à partir des filtres de log de base :

# Gestionnaires

Contrairement à un gestionnaire normal, vous n'obtiendrez pas un SubstrateExtrinsic en tant que paramètre, au lieu de cela, vous obtiendrez un MoonbeamCall qui est basé sur le type Ethers TransactionResponse (opens new window).

Changements depuis le type Log:

  • args est ajouté si le champ abi est fourni et que les arguments peuvent être analysés avec succès

# Exemple de Source de Données

Ceci est un extrait du fichier manifeste project.yaml.

dataSources:
  - kind: substrate/Moonbeam
    startBlock: 752073
    processor:
      file: './node_modules/@subql/contract-processors/dist/moonbeam.js'
      options:
        # Doit être une clé d'actifs
        abi: erc20
        # Adresse du contrat (ou du destinataire en cas de transfert) à filtrer, si `null`, ce sera pour la création du contrat. 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:
            ## La fonction peut être soit un fragment de fonction, soit une 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

# Limitations connues

  • Il n'y a actuellement aucun moyen d'interroger l'état EVM dans un gestionnaire
  • Il n'y a aucun moyen d'obtenir les reçus de transaction avec les gestionnaires d'appel
  • Les propriétés blockHash sont actuellement laissées indéfinies, la propriété blockNumber peut être utilisée à la place
Last update: October 5, 2022 01:44