Inicio rápido de Cosmos
Inicio rápido de Cosmos
En esta guía de inicio rápido, vamos a empezar con un simple proyecto de iniciación de Cosmos en la Red Juno 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 todos los votos en el Fondo de Desarrolladores (que también contribuyó a SubQuery) de Cosmos, solo debería tomar 10-15 minutos
Puedes ver el código final de este proyecto aquí en https://github.com/jamesbayly/juno-terra-develop-fund-votes
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
Cosmos aún no está soportado en la CLI de SubQuery (subql
), para empezar con Juno clon o bifurcar el proyecto inicial.
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. Usted trabajará principalmente en los siguientes archivos:
- 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 esquema . raphql
archivo para leer de la siguiente manera para que podamos indexar todos los votos en el Fondo de Desarrollo Terra.
type Vote @entity {
id: ID! # El campo id siempre es obligatorio y debe verse como este bloque de altura
: ¡BigInt!
voter: String!
# The address that voted
proposalID: BigInt! # The proposal ID
vote: Boolean! # If they voted to support or reject the proposal
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
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 votos en el Fondo de Desarrolladores de Terra. Esto significa que vamos a ver los mensajes que utilizan la llamada de voto
, necesitamos actualizar las fuentes de datos
para leer lo siguiente.
dataSources:
- kind: cosmos/Runtime
startBlock: 3246370 # The block when the first proposal in this fund was created
mapping:
file: "./dist/index.js"
handlers:
- handler: handleTerraDeveloperFund
kind: cosmos/MessageHandler
filter:
type: "/cosmwasm.wasm.v1.MsgExecuteContract"
# Filter to only messages with the vote function call
contractCall: "vote" # The name of the contract function that was called
values: # This is the specific smart contract that we are subscribing to
contract: "juno1lgnstas4ruflg0eta394y8epq67s4rzhg5anssz3rc5zwvjmmvcql6qps2"
Esto significa que ejecutaremos una función de mapeo de handleTerraDeveloperFund
cada vez que haya un mensaje de voto
del contrato inteligente del Fondo de Desarrolladores de Terra.
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
, handleLog
, y handleTransaction
. Ya que solo estamos tratando con mensajes, puedes eliminar todo lo que no sea la función handleMessage
.
La función handleLog
recibe los datos del evento siempre que éste coincida 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.
Puedes actualizar la función handleLog
a lo siguiente (observa las importaciones adicionales):
import { Vote } from "../types";
import { CosmosMessage } from "@subql/types-cosmos";
export async function handleTerraDeveloperFund(
message: CosmosMessage
): Promise<void> {
// logger.info(JSON.stringify(message));
// Example vote https://www.mintscan.io/juno/txs/EAA2CC113B3EC79AE5C280C04BE851B82414B108273F0D6464A379D7917600A4
const voteRecord = new Vote(`${message.tx.hash}-${message.idx}`);
voteRecord.blockHeight = BigInt(message.block.block.header.height);
voteRecord.voter = message.msg.sender;
voteRecord.proposalID = message.msg.msg.vote.proposal_id;
voteRecord.vote = message.msg.msg.vote.vote === "yes";
await voteRecord.save();
}
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 {
votes(
first: 5
orderBy: BLOCK_HEIGHT_DESC # filter: {proposalID: {equalTo: "4"}}
) {
nodes {
id
blockHeight
voter
vote
}
}
}
Puedes ver el código final de este proyecto aquí en https://github.com/jamesbayly/juno-terra-develop-fund-votes
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.