Desarrollando > Preguntas Frecuentes de los Desarrolladores

Preguntas Frecuentes de los Desarrolladores

Reading time: 8 min

1. ¿Qué es un subgrafo?

Enlace a esta sección

Un subgrafo es una API personalizada construida sobre datos de blockchain. Los subgrafos se consultan mediante el lenguaje de consulta GraphQL y son deployados en un Graph Node usando Graph CLI. Una vez deployados y publicados en la red descentralizada de The Graph, los indexadores procesan los subgrafos y los ponen a disposición de los consumidores de subgrafos para que los consulten.

2. ¿Puedo eliminar mi subgrafo?

Enlace a esta sección

No es posible eliminar los subgrafos una vez creados.

3. ¿Puedo cambiar el nombre de mi subgrafo?

Enlace a esta sección

No. Una vez que se crea un subgrafo, no se puede cambiar el nombre. Asegúrate de pensar en esto cuidadosamente antes de crear tu subgrafo para que sea fácil de buscar e identificar por otras dApps.

4. ¿Puedo cambiar la cuenta de GitHub asociada con mi subgrafo?

Enlace a esta sección

No. Una vez que se crea un subgrafo, la cuenta de GitHub asociada no puede ser modificada. Asegúrate de pensarlo bien antes de crear tu subgrafo.

5. ¿Todavía puedo crear un subgrafo si mis contratos inteligentes no tienen eventos?

Enlace a esta sección

Es muy recomendable que estructures tus contratos inteligentes para tener eventos asociados a los datos que te interesa consultar. Los handlers de eventos en el subgrafo son activados por los eventos del contrato y son, con mucho, la forma más rápida de recuperar datos útiles.

Si los contratos con los que estás trabajando no contienen eventos, tu subgrafo puede utilizar handlers de llamadas y bloques para activar la indexación. Aunque esto no se recomienda, ya que el rendimiento será significativamente más lento.

6. ¿Es posible deployar un subgrafo con el mismo nombre para varias redes?

Enlace a esta sección

Necesitarás nombres separados para varias redes. Si bien no puedes tener diferentes subgrafos con el mismo nombre, existen formas convenientes de tener una base de código única para varias redes. Encuentra más sobre esto en nuestra documentación: Redeploying a Subgraph

7. ¿En qué se diferencian las plantillas de las fuentes de datos?

Enlace a esta sección

Las plantillas te permiten crear fuentes de datos sobre la marcha, mientras tu subgrafo está indexando. Puede darse el caso de que tu contrato genere nuevos contratos a medida que la gente interactúe con él, y dado que conoces la forma de esos contratos (ABI, eventos, etc.) por adelantado puedes definir cómo quieres indexarlos en una plantilla y cuando se generen tu subgrafo creará una fuente de datos dinámica proporcionando la dirección del contrato.

Consulta la sección "Instantiating a data source template" en: Data Source Templates.

8. ¿Cómo puedo asegurarme de que estoy utilizando la última versión de graph-node para mis deploys locales?

Enlace a esta sección

Puedes ejecutar el siguiente comando:

docker pull graphprotocol/graph-node:latest

NOTA: docker/docker-compose siempre utilizará la versión de graph-node que se sacó la primera vez que se ejecutó, por lo que es importante hacer esto para asegurarse de que estás al día con la última versión de graph-node.

9. ¿Cómo llamo a una función de contrato o accedo a una variable de estado pública desde mis mapeos de subgrafos?

Enlace a esta sección

Take a look at Access to smart contract state inside the section AssemblyScript API.

10. ¿Es posible configurar un subgrafo usando graph init de graph-cli con dos contratos? ¿O debo agregar manualmente otra fuente de datos en subgraph.yaml después de ejecutar graph init?

Enlace a esta sección

Yes. On graph init command itself you can add multiple datasources by entering contracts one after the other. You can also use graph add command to add new datasource.

11. Quiero contribuir o agregar un problema de GitHub. ¿Dónde puedo encontrar los repositorios de código abierto?

Enlace a esta sección
  • graph-node
  • graph-tooling
  • graph-docs
  • graph-client

12. ¿Cuál es la forma recomendada para crear ids "autogeneradas" para una entidad al manejar eventos?

Enlace a esta sección

Si sólo se crea una entidad durante el evento y si no hay nada mejor disponible, entonces el hash de la transacción + el índice del registro serían únicos. Puedes ofuscar esto convirtiendo eso en Bytes y luego pasándolo por crypto.keccak256 pero esto no lo hará más único.

Cuando se escuchan varios contratos, ¿es posible seleccionar el orden de los contratos para escuchar los eventos?

Enlace a esta sección

Dentro de un subgrafo, los eventos se procesan siempre en el orden en que aparecen en los bloques, independientemente de que sea a través de múltiples contratos o no.

14. Is it possible to differentiate between networks (mainnet, Sepolia, local) from within event handlers?

Enlace a esta sección

Sí. Puedes hacerlo importando graph-ts como en el ejemplo siguiente:

import { dataSource } from '@graphprotocol/graph-ts'
dataSource.network()
dataSource.address()

15. Do you support block and call handlers on Sepolia?

Enlace a esta sección

Yes. Sepolia supports block handlers, call handlers and event handlers. It should be noted that event handlers are far more performant than the other two handlers, and they are supported on every EVM-compatible network.

16. ¿Puedo importar ethers.js u otras bibliotecas JS en mis mappings de subgrafos?

Enlace a esta sección

Actualmente no, ya que los mapeos se escriben en AssemblyScript. Una posible solución alternativa a esto es almacenar los datos en bruto en entidades y realizar la lógica que requiere las bibliotecas JS en el cliente.

17. ¿Es posible especificar en qué bloque comenzar a indexar?

Enlace a esta sección

Yes. dataSources.source.startBlock in the subgraph.yaml file specifies the number of the block that the data source starts indexing from. In most cases, we suggest using the block in which the contract was created: Start blocks

18. ¿Hay algunos consejos para aumentar el rendimiento de la indexación? Mi subgrafo está tardando mucho en sincronizarse

Enlace a esta sección

Sí, debes echar un vistazo a la función de bloque de inicio opcional para comenzar a indexar desde el bloque en el que se implementó el contrato: Start blocks

19. ¿Hay alguna forma de consultar el subgrafo directamente para determinar el último número de bloque que ha indexado?

Enlace a esta sección

¡Sí es posible! Prueba el siguiente comando, sustituyendo "organization/subgraphName" por la organización bajo la que se publica y el nombre de tu subgrafo:

curl -X POST -d '{ "query": "{indexingStatusForCurrentVersion(subgraphName: \"organization/subgraphName\") { chains { latestBlock { hash number }}}}"}' https://api.thegraph.com/index-node/graphql

20. ¿Qué redes son compatibles con The Graph?

Enlace a esta sección

Puedes encontrar la lista de redes admitidas aquí.

21. ¿Es posible duplicar un subgrafo en otra cuenta o endpoint sin volver a realizar el deploy?

Enlace a esta sección

Tienes que volver a realizar el deploy del subgrafo, pero si el ID del subgrafo (hash IPFS) no cambia, no tendrá que sincronizarse desde el principio.

22. ¿Es posible usar Apollo Federation encima de graph-node?

Enlace a esta sección

Federation aún no es compatible, aunque queremos apoyarla en el futuro. Por el momento, algo que se puede hacer es utilizar el stitching de esquemas, ya sea en el cliente o a través de un servicio proxy.

23. ¿Existe un límite en el número de objetos que The Graph puede devolver por consulta?

Enlace a esta sección

Por defecto, las respuestas a las consultas están limitadas a 100 elementos por colección. Si quieres recibir más, puedes llegar hasta 1000 elementos por colección y más allá, puedes paginar con:

someCollection(first: 1000, skip: <number>) { ... }

24. Si mi interfaz de dapp usa The Graph para realizar consultas, ¿debo escribir mi clave de consulta directamente en la interfaz? ¿Qué pasa si pagamos tarifas de consulta para los usuarios? ¿Los usuarios malintencionados harán que nuestras tarifas de consulta sean muy altas?

Enlace a esta sección

Actualmente, el enfoque recomendado para una dapp es añadir la clave al frontend y exponerla a los usuarios finales. Dicho esto, puedes limitar esa clave a un nombre de host, como yourdapp.io y subgrafo. La gateway se ejecuta actualmente por Edge & Node. Parte de la responsabilidad de un gateway es monitorear el comportamiento abusivo y bloquear el tráfico de clientes maliciosos.

25. Where do I go to find my current subgraph on the hosted service?

Enlace a esta sección

Head over to the hosted service in order to find subgraphs that you or others deployed to the hosted service. You can find it here.

26. Will the hosted service start charging query fees?

Enlace a esta sección

The Graph will never charge for the hosted service. The Graph is a decentralized protocol, and charging for a centralized service is not aligned with The Graph’s values. The hosted service was always a temporary step to help get to the decentralized network. Developers will have a sufficient amount of time to upgrade to the decentralized network as they are comfortable.

27. How do I update a subgraph on mainnet?

Enlace a esta sección

If you’re a subgraph developer, you can deploy a new version of your subgraph to Subgraph Studio using the CLI. It’ll be private at that point, but if you’re happy with it, you can publish to the decentralized Graph Explorer. This will create a new version of your subgraph that Curators can start signaling on.

28. In what order are the event, block, and call handlers triggered for a data source?

Enlace a esta sección

Event and call handlers are first ordered by transaction index within the block. Event and call handlers within the same transaction are ordered using a convention: event handlers first then call handlers, each type respecting the order they are defined in the manifest. Block handlers are run after event and call handlers, in the order they are defined in the manifest. Also these ordering rules are subject to change.

When new dynamic data source are created, the handlers defined for dynamic data sources will only start processing after all existing data source handlers are processed, and will repeat in the same sequence whenever triggered.

Editar página

Anterior
Marco de Unit Testing
Siguiente
Substreams-powered subgraphs FAQ
Editar página