Archivo del manifiesto

SubQuery TeamAlrededor de 6 min

Archivo del manifiesto

El Manifiesto project.yaml puede ser visto como un punto de entrada de tu proyecto y define la mayoría de los detalles sobre cómo SubQuery indexará y transformará los datos en cadena.

El manifiesto puede estar en formato YAML o JSON. En este documento, utilizaremos YAML en todos los ejemplos. A continuación se muestra un ejemplo estándar de un project.yaml básico.

``` yml specVersion: 0.2.0 name: example-project # Provide the project name version: 1.0.0 # Project version description: '' # Description of your project repository: 'https://github.com/subquery/subql-starter' # Git repository address of your project schema: file: ./schema.graphql # The location of your GraphQL schema file network: genesisHash: '0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3' # Genesis hash of the network endpoint: 'wss://polkadot.api.onfinality.io/public-ws' # Optionally provide the HTTP endpoint of a full chain dictionary to speed up processing dictionary: 'https://api.subquery.network/sq/subquery/dictionary-polkadot' dataSources: - kind: substrate/Runtime startBlock: 1 # This changes your indexing start block, set this higher to skip initial blocks with less data mapping: file: "./dist/index.js" handlers: - handler: handleBlock kind: substrate/BlockHandler - handler: handleEvent kind: substrate/EventHandler filter: #Filter is optional module: balances method: Deposit - handler: handleCall kind: substrate/CallHandler ````. Vea aquí para más información

Bajo red:

  • Hay un nuevo campo requerido genesisHash que ayuda a identificar la cadena que se está usando.
  • Para v0.2.0 y superiores, puedes hacer referencia a un archivo chaintype externo si estás referenciando una cadena personalizada.

Debajo de fuentes de datos:

  • Puede enlazar directamente un punto de entrada de index.js para manejadores de mapeo. Por defecto, este index.js se generará a partir de index.ts durante el proceso de compilación.
  • Las fuentes de datos ahora pueden ser una fuente de datos de tiempo de ejecución regular o fuente de datos personalizada.

Opciones de CLI

Por defecto, el CLI generará proyectos SubQuery para la versión especifica 0.2.0. Este comportamiento puede ser anulado ejecutando subql init --specVersion 0.0. PROJECT_NAME, aunque esto no es recomendable ya que el proyecto no será soportado por el servicio alojado en SubQuery en el futuro

subql migrate se puede ejecutar en un proyecto existente para migrar el manifiesto del proyecto a la última versión.

USAR $ subql init [PROJECTNAME]

ARGUENTOS PROJECTNAME Dar el nombre del proyecto inicial

| Opciones | Descripción | | ------------------------ | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------- | | -f, --force | | | -l, --location=ubicación | carpeta local para crear el proyecto en | | --install-dependencias | Instalar también dependencias | | --npm | Forzar el uso de NPM en lugar de yarn, solo funciona con la bandera install-dependencies | | --specVersion=0.0.1 | 0.2.0 [por defecto: 0.2.0] | La versión especificada para ser utilizada por el proyecto |

Resumen

Disco de nivel superior

Campov0.0.1v0.2.0Descripción
specVersionStringString0.0.1 o 0.2.0 - la versión específica del archivo manifest
nombre𐄂StringNombre de tu proyecto
versión𐄂StringVersión de tu proyecto
descripciónStringStringDescripción de tu proyecto
repositorioStringStringDirección del repositorio Git de su proyecto
esquemaStringEspecificación del esquemaLa ubicación del archivo de esquema GraphQL
redEspecificaciones de redEspecificaciones de redDetalle de la red a ser indexada
fuentes de datosEspecificaciones de la fuente de datosEspecificaciones de la fuente de datos

Especificación del esquema

Campov0.0.1v0.2.0Descripción
archivo𐄂StringLa ubicación del archivo de esquema GraphQL

Especificaciones de red

Campov0.0.1v0.2.0Descripción
genesisHash𐄂StringEl hash de génesis de la red
endpointStringStringDefine el punto final del blockchain para indexarse - Este debe ser un nodo completo de archivo. Puedes recuperar endpoints para todas las parachains gratis de OnFinalityopen in new window
diccionarioStringStringSe sugiere proporcionar el endpoint HTTP de un diccionario de cadena completo para acelerar el procesamiento - lea cómo funciona un Diccionario de SubQuery.
tipos de cadena𐄂{file:String}Ruta al archivo de tipos de cadena, acepte el formato .json o .yaml

Fuente de datos especifica

Define los datos que serán filtrados y extraídos y la ubicación del manejador de funciones de mapeo para que la transformación de datos sea aplicada.

Campov0.0.1v0.2.0Descripción
nombreString𐄂Nombre del origen de los datos
clase[substrate/tiempo de ejecución](./manifestar/#fuentes de datos y mapeo)substrate/Runtime, substrate/CustomDataSourceSoportamos el tipo de datos desde el tiempo de ejecución por defecto de substrate como bloque, evento y extrinsic(call).
Desde v0.2.0, soportamos datos de tiempo de ejecución personalizado, como contrato inteligente.
startBlockIntegerIntegerEsto cambia el bloque de inicio de indexación, establezca esto más alto para omitir bloques iniciales con menos datos
mapeoEspecificación de mapeoEspecificación de mapeo
filtro[filtros de red](./manifestar/#filtros de red)𐄂Filtrar la fuente de datos a ejecutar por el nombre de la especificación del extremo de red

Especificación de mapeo

Campov0.0.1v0.2.0Descripción
archivoString𐄂Ruta a la entrada de mapeo
manipuladores y filtrosControladores y filtros predeterminadosControladores y filtros por defecto,
Controladores y filtros personalizados
Lista todas las funciones de mapeo y sus correspondientes tipos de manejador, con filtros de mapeo adicionales.

Para manejadores de mapeo de tiempo de ejecución personalizados, por favor vea fuentes de datos personalizadas

Fuentes de datos y mapeo

En esta sección, hablaremos del tiempo de ejecución por defecto de substrate y su mapeo. Aquí tenemos un ejemplo:

dataources:
  - kind: substrate/Runtime # Indica que este es el tiempo de ejecución predeterminado
    startBlock: 1 # Esto cambia el bloque de inicio de indexación, establecer esto más alto para omitir los bloques iniciales con menos mapeo
    de datos:
      archivo: dist/index. s # ruta de entrada para este mapeo

Manejadores y Filtros de Mapeo

La siguiente tabla explica los filtros soportados por diferentes manejadores.

Tu proyecto de SubQuery será mucho más eficiente cuando sólo utilices controladores de eventos y llamadas con filtros de mapeo apropiados

ManejadorFiltro compatible
Manejador de bloquesspecVersion
EventHandlermodule,method
CallHandlermodule,method ,success

Los filtros de mapeo de tiempo de ejecución por defecto son una característica extremadamente útil para decidir qué bloque, evento, o extrínseco activará un manejador de mapeo.

Sólo los datos entrantes que satisfagan las condiciones del filtro serán procesados por las funciones de mapeo. Los filtros de mapeo son opcionales pero son altamente recomendables, ya que reducen significativamente la cantidad de datos procesados por su proyecto SubQuery y mejorarán el rendimiento de indexación.

# Filtro de ejemplo de callHandler
filter:
  module: balances
  método: Depositar
  éxito: true
  • Los filtros de módulos y métodos son compatibles con cualquier cadena basada en substrate.
  • El filtro de success toma un valor booleano y puede ser utilizado para filtrar el extrínseco por su estado de éxito.
  • El filtro specVersion especifica el rango de versión especificada para un bloque de substrate. Los siguientes ejemplos describen cómo establecer los rangos de versiones.
filtro:
  specVersion: [23, 24] # Bloque de índice con specVersion entre 23 y 24 (incluido).
  specVersion: [100]      # Bloque de índice con specVersion mayor o igual a 100.
  specVersion: [null, 23] # Bloque de índice con specVersion menor o igual a 23.

Cadenas Personalizadas

Especificaciones de red

Cuando se conecta a una parachain Polkadot diferente o incluso a una cadena de sustratos personalizada, necesitarás editar la sección Especificación de red de este manifiesto.

El genesisHash debe ser siempre el hash del primer bloque de la red personalizada. Puedes retirarlo fácilmente yendo a PolkadotJSopen in new window y buscando el hash en bloque 0 (ver la imagen de abajo).

Hash de Génesis

Además, necesitarás actualizar el endpoint. Esto define el punto final del blockchain a indexar - Este debe ser un nodo completo de archivo. Puedes recuperar endpoints para todas las parachains gratis de OnFinalityopen in new window

Tipos de cadena

Puede indexar datos de cadenas personalizadas incluyendo también tipos de cadena en el manifiesto.

Soportamos los tipos adicionales usados por módulos de tiempo de ejecución substrate, typesAlias, typesBundle, typesChain, y typesSpec también son compatibles.

En el ejemplo v0.2.0 de abajo, la red . haintypes están apuntando a un archivo que tiene todos los tipos personalizados incluidos, Este es un archivo estándar de chainspec que declara los tipos específicos soportados por este blockchain en cualquiera de los dos . son, .yaml o .js formato.

::: code-tabs @tab v0.2.0 yml network: genesisHash: '0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3' endpoint: 'ws://host.kittychain.io/public-ws' chaintypes: file: ./types.json # la ruta relativa al lugar donde se almacenan los tipos personalizados ...