Inicio rápido Terra
Inicio rápido Terra
En esta guía de inicio rápido, vamos a empezar con un simple proyecto inicial de Terra y luego terminar indexando algunos datos reales reales. Esta es una base excelente para comenzar a desarrollar su propio Proyecto SubQuery.
Si está buscando guías para Substrate/Polkadot, puede leer la guía de inicio rápido específica de Substrate/Polkadot.
Al final de esta guía, tendrá un proyecto de SubQuery funcionando en un nodo de SubQuery con un endpoint GraphQL desde el que puede consultar datos.
Si aún no lo has hecho, te sugerimos familiarizarte con la terminología utilizada en SubQuery.
El objetivo de esta guía de inicio rápido es adaptar el proyecto inicial estándar para comenzar a indexar todas las transferencias desde Terra, solo debería tomar 10-15 minutos
Preparación
Entorno de desarrollo local
- Node: Una instalación moderna (por ejemplo, la versión LTS) de Node.
- Docker: Este tutorial usará Docker
Instalar SubQuery CLI
Instalar SubQuery CLI globalmente en tu terminal usando Yarn o NPM:
# NPM
npm install -g @subql/cli
Tenga en cuenta que NO animamos el uso de yarn global
para instalar @subql/cli
debido a su mala gestión de dependencias que puede llevar a errores en la línea.
A continuación, puede ejecutar ayuda para ver los comandos disponibles y el uso proporcionado por CLI
subql help
Inicializar el proyecto starter de SubQuery
Dentro del directorio en el que desea crear un proyecto SubQuery, simplemente ejecute el siguiente comando para empezar.
subql init
Se le harán ciertas preguntas ya que el proyecto de SubQuery está initalizado:
- Nombre del proyecto: Un nombre para tu proyecto de Subconsulta
- Familia de Red: La familia de red de blockchain capa 1 que este proyecto de SubQuery será desarrollado para indexar, usa las teclas de flecha de tu teclado para seleccionar entre las opciones, para esta guía usaremos "Terra"
- Red: La red específica que este proyecto de Subconsulta será desarrollado para indexar, usa las teclas de flecha de tu teclado para seleccionar entre las opciones, para esta guía usaremos "Terra"
- Plantilla: Seleccione una plantilla de proyecto de SubQuery que proporcionará un punto de partida para comenzar el desarrollo, le sugerimos seleccionar el "Inicio del proyecto"
- Repositorio Git (opcional): Proporcione una URL Git a un repositorio en el que este proyecto de SubQuery será alojado (cuando esté alojado en SubQuery Explorer)
- endpoint RPC (requerido): Proporcione una URL HTTPS a un endpoint RPC en ejecución que se utilizará por defecto para este proyecto. Este nodo RPC debe ser un nodo de archivo (tienen el estado completo de cadena). Para esta guía usaremos el valor predeterminado "https://terra-columbus-5.beta.api.onfinality.io"
- Autores (Requeridos): Introduzca el propietario de este proyecto de Subconsulta aquí (por ejemplo, su nombre)
- Descripción (Opcional): Puede proporcionar un párrafo corto sobre su proyecto que describa qué datos contiene y qué pueden hacer los usuarios con él
- Versión (Requerida): Introduzca un número de versión personalizado o utilice el predeterminado (
1.0.0
) - Licencia (Requerida): Proporcione la licencia de software para este proyecto o acepte el predeterminado (
Apache-2.0
)
Después de completar el proceso de inicialización, debería ver una carpeta con el nombre de su proyecto que se ha creado dentro del directorio. El contenido de este directorio debe ser idéntico a lo que se muestra en la estructura de directorio.
Por último, bajo el directorio del proyecto, ejecute el siguiente comando para instalar las dependencias del nuevo proyecto.
cd PROJECT_NAME npm install
Hacer cambios en su proyecto En el paquete de inicio que acaba de inicializar, proporcionamos una configuración estándar para su nuevo proyecto. Estos son:
- El esquema GraphQL en
schema.graphql
- El manifiesto del proyecto en
project.yaml
- Las funciones de mapeo en el directorio
src/mappings/
El objetivo de esta guía de inicio rápido es adaptar el proyecto de inicio estándar para comenzar a indexar todas las transferencias del contrato inteligente de bLuna.
Actualizando tu archivo de esquema GraphQL
El archivo schema.graphql
define los diversos esquemas GraphQL. Debido a la forma en que funciona el lenguaje de consulta de GraphQL, el archivo de esquema esencialmente dicta la forma de sus datos de SubQuery. Es un buen lugar para comenzar porque te permite definir tu objetivo final por adelantado.
Vamos a actualizar el archivo schema.graphql
para leer de la siguiente manera
type Transfer @entity {
id: ID! El campo id de # siempre es obligatorio y debe verse como este
txHash: String!
blockHeight: BigInt # La altura del bloque del remitente
de transferencia: ¡Cadena! # La cuenta que las transferencias se realizan desde el destinatario de
: ¡Cadena! # La cuenta que las transferencias se hacen a la cantidad
: ¡Cadena! # Cantidad transferida
}
Importante: Cuando realice cambios en el archivo de esquema, asegúrese de que regenera el directorio de sus tipos. Hágalo ahora.
::: code-tabs @tab:active yarn shell yarn codegen
@tab npm shell npm run-script codegen
:::
You'll find the generated models in the /src/types/models
Para más información sobre el archivo schema.graphql
, revisa nuestra documentación en Esquema de Build/GraphQL
Actualizando el archivo de manifiesto del proyecto
El Manifiesto del Proyecto (proyecto. el archivo aml
) 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.
No haremos muchos cambios en el archivo manifest ya que ya ha sido configurado correctamente, pero necesitamos cambiar nuestros manejadores. Recuerda que estamos planeando indexar todos los eventos de transferencia Terra como resultado, necesitamos actualizar la sección de fuentes de datos
para leer lo siguiente.
fuentes de datos:
- kind: terra/Runtime
startBlock: 4724001 # Colombus-5 Empieza a esta altura
mapeo:
archivo: . dist/índice. s
handlers:
- handler: handleEvent
kind: terra/EventHandler
# esto se activará en todos los eventos que coincidan con el siguiente filtro condición de contrato inteligente
filtro:
type: transfer
messageFilter:
type: /terra. asm.v1beta1. sgExecuteContract
valores:
# Estamos suscritos al contrato inteligente de bLuna (e. . Solo transferir eventos de este contrato)
contratos: terra1j66jatn3k50hjtg2xemnjm8s7y8dws9xqa5y8w
Esto significa que ejecutaremos una función de mapeo de handleEvent
cada vez que haya un evento de transferencia
desde el contrato inteligente de bLuna.
Para más información sobre el manifiesto del proyecto (project.yaml
), revisa nuestra documentación en Archivo de construcción/Manifiesto
Añadir una función de mapeo
Las funciones de mapeo definen cómo se transforman los datos de la cadena en las entidades optimizadas GraphQL que hemos definido previamente en el archivo schema.graphql
.
Vaya a la función de mapeo predeterminada en el directorio src/mappings
. Verás tres funciones exportadas, handleBlock
, handleEvent
y handleCall
. Puedes eliminar las funciones handleBlock
y handleCall
, solo estamos tratando con la función handleEvent
.
La función handleEvent
recibió datos de eventos cuando el evento coincide con los filtros que especificamos previamente en nuestro project.yaml
. Lo vamos a actualizar para procesar todos los eventos transferir
y guardarlos en las entidades GraphQL que creamos anteriormente.
Puede actualizar la función handleEvent
a lo siguiente (tenga en cuenta las importaciones adicionales):
import { TerraEvent } from "@subql/types-terra";
import { Transfer } from "../types";
import { MsgExecuteContract } from "@terra-money/terra.js";
export async function handleEvent(
event: TerraEvent<MsgExecuteContract>
): Promise<void> {
// Print debugging data from the event
// logger.info(JSON.stringify(event));
// Create the new transfer entity with a unique ID
const transfer = new Transfer(
`${event.tx.tx.txhash}-${event.msg.idx}-${event.idx}`
);
transfer.blockHeight = BigInt(event.block.block.block.header.height);
transfer.txHash = event.tx.tx.txhash;
for (const attr of event.event.attributes) {
switch (attr.key) {
Lo que esto está haciendo es recibir un SubstrateEvent que incluye datos de transferencia en la carga útil. Extraemos estos datos y luego instanciamos una nueva entidad de transferencia
que definimos anteriormente en el archivo schema.graphql
. Añadimos información adicional y luego usamos la función .save()
para guardar la nueva entidad (SubQuery automáticamente guardará esto en la base de datos).
Para más información sobre las funciones de mapeo, revisa nuestra documentación en Construcción/Mapeo
Construye Tu Proyecto
Para ejecutar tu nuevo SubQuery Project primero necesitamos construir nuestro trabajo. Ejecuta el comando de compilación desde el directorio raíz del proyecto.
::: code-tabs @tab:active yarn shell yarn build
@tab npm shell npm run-script build
:::
Important: Whenever you make changes to your mapping functions, you'll need to rebuild your project La forma más fácil de hacer esto es usando Docker.
Toda la configuración que controla cómo se ejecuta un nodo de SubQuery está definida en este archivo docker-compose.yml
. Para un nuevo proyecto que ha sido inicializado no necesitarás cambiar nada aquí, pero puedes leer más sobre el archivo y la configuración en nuestra sección Ejecutar un proyecto
Bajo el directorio del proyecto ejecute el siguiente comando:
::: code-tabs @tab:active yarn shell yarn start:docker
@tab npm shell npm run-script start:docker
:::
It may take some time to download the required packages (@subql/node
, @subql/query
, and Postgres) for the first time but soon you'll see a running SubQuery node. Sea paciente aquí.
Consulta tu proyecto
Abre tu navegador y ve a http://localhost:3000.
Deberías ver un parque de juegos GraphQL que se muestre en el Explorador y el esquema que está listo para consultar. En la parte superior derecha del patio de juegos, encontrarás un botón Docs que abrirá un cuadro de documentación. Esta documentación se genera automáticamente y le ayuda a encontrar qué entidades y métodos puede consultar.
Para un nuevo proyecto inicial de SubQuery, puedes probar la siguiente consulta para conocer cómo funciona o aprender más sobre el lenguaje de consulta GraphQL.
{
query {
transfers(first: 10, orderBy: ID_DESC) {
nodes {
id
txHash
monto
blockHeight
sender
addresse
}
}
}
}
Publica tu SubQuery Project
SubQuery proporciona un servicio administrado gratuito cuando puedes desplegar tu nuevo proyecto. Puedes implementarlo en SubQuery Proyects y consultarlo usando nuestro Explorador.
Lee la guía para publicar tu nuevo proyecto a SubQuery Proyects
Próximos pasos
Enhorabuena, ahora tiene un proyecto SubQuery en ejecución local que acepta peticiones API GraphQL para transferencias de datos desde bLuna.
Ahora que has tenido una visión de cómo construir un proyecto básico de SubQuery, la pregunta es ¿a dónde llegar? Si te sientes seguro, puedes ir a aprender más sobre los tres archivos clave. El archivo manifiesto, el esquema GraphQL y el archivo de mapeos bajo la sección Build de estos documentos.
De lo contrario, continúe a nuestra sección de la Academia donde tienen más en profundidad, tutoriales y proyectos de ejemplo. Allí veremos modificaciones más avanzadas, y vamos a profundizar en la ejecución de proyectos de SubQuery ejecutando proyectos fácilmente disponibles y de código abierto.
Por último, si estás buscando más formas de ejecutar y publicar tu proyecto, nuestra sección Ejecutar & Publicar proporciona un formato detallado sobre todas las formas de ejecutar su proyecto SubQuery y otras funciones avanzadas de agregación GraphQL y suscripción.