Developing > Vanliga frågor för utvecklare

Vanliga frågor för utvecklare

Reading time: 7 min

1. Vad är en subgraf?

Länk till detta avsnitt

En subgraf är en anpassad API byggd på blockkedjedata. Subgrafer frågas med hjälp av GraphQL-frågespråket och distribueras till en Graph Node med hjälp av Graph CLI. När de har distribuerats och publicerats till The Graphs decentraliserade nätverk, bearbetar Indexers subgrafer och gör dem tillgängliga för frågekonsumenter av subgrafer.

2. Kan jag ta bort min subgraf?

Länk till detta avsnitt

Det är inte möjligt att ta bort subgrafer efter att de har skapats.

3. Kan jag ändra namnet på min subgraf?

Länk till detta avsnitt

Nej. När en subgraf har skapats kan namnet inte ändras. Se till att tänka noga på detta innan du skapar din subgraf så att den är lätt sökbar och identifierbar av andra dappar.

4. Kan jag ändra det GitHub-konto som är kopplat till min subgraf?

Länk till detta avsnitt

Nej. När en subgraf har skapats kan det associerade GitHub-kontot inte ändras. Tänk noggrant på detta innan du skapar din subgraf.

5. Kan jag fortfarande skapa en subgraf om mina smarta kontrakt inte har händelser?

Länk till detta avsnitt

Det rekommenderas starkt att strukturera dina smarta kontrakt så att de har händelser som är kopplade till data du är intresserad av att fråga. Händelsehanterare i subgrafen utlöses av kontrakthändelser och är överlägset det snabbaste sättet att hämta användbar data.

Om de kontrakt du arbetar med inte innehåller händelser kan din subgraf använda sig av uppropshanterare och blockhanterare för att utlösa indexering. Detta rekommenderas dock inte, eftersom prestandan kommer att vara betydligt långsammare.

6. Är det möjligt att distribuera en subgraf med samma namn för flera nätverk?

Länk till detta avsnitt

Du behöver separata namn för flera nätverk. Även om du inte kan ha olika subgrafer under samma namn finns det bekväma sätt att ha en enda kodbas för flera nätverk. Läs mer om detta i vår dokumentation: Omdistribuera en subgraf

7. Hur skiljer sig mallar från datakällor?

Länk till detta avsnitt

Mallar låter dig skapa datakällor på flykt medan din subgraf indexerar. Det kan vara så att ditt kontrakt kommer att skapa nya kontrakt när människor interagerar med det, och eftersom du känner till formen av dessa kontrakt (ABI, händelser osv.) i förväg kan du definiera hur du vill indexera dem i en mall och när de skapas kommer din subgraf att skapa en dynamisk datakälla genom att tillhandahålla kontraktsadressen.

Kolla in avsnittet "Instansiera en mall för datakälla" på: Mallar för datakällor.

8. Hur ser jag till att jag använder den senaste versionen av graph-node för mina lokala distributioner?

Länk till detta avsnitt

Du kan köra följande kommando:

docker pull graphprotocol/graph-node:latest

OBS: Docker / docker-compose kommer alltid att använda den graph-node-version som hämtades första gången du körde det, så det är viktigt att göra detta för att se till att du är uppdaterad med den senaste versionen av graph-node.

9. Hur anropar jag en kontraktsfunktion eller får åtkomst till en offentlig statisk variabel från mina subgraf-mappningar?

Länk till detta avsnitt

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

10. Är det möjligt att ställa in en subgraf med hjälp av graph init från graph-cli med två kontrakt? Eller bör jag manuellt lägga till en annan datakälla i subgraph.yaml efter att jag har kört graph init?

Länk till detta avsnitt

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. Jag vill bidra eller lägga till ett GitHub-ärende. Var hittar jag öppna källkodsrepository?

Länk till detta avsnitt
  • graph-node
  • graph-tooling
  • graph-docs
  • graph-client

12. Vad är det rekommenderade sättet att bygga "automatiskt genererade" ID för en entitet när man hanterar händelser?

Länk till detta avsnitt

Om endast en entitet skapas under händelsen och om inget bättre är tillgängligt, skulle transaktionshashen + loggindexet vara unikt. Du kan förvränga dessa genom att konvertera dem till bytes och sedan skicka dem genom crypto.keccak256, men detta kommer inte att göra dem mer unika.

13. När du lyssnar på flera kontrakt, är det möjligt att välja kontraktsordningen för att lyssna på händelser?

Länk till detta avsnitt

Inom en subgraf behandlas händelser alltid i den ordning de visas i blocken, oavsett om det är över flera kontrakt eller inte.

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

Länk till detta avsnitt

Ja, du kan göra detta genom att importera graph-ts enligt exemplet nedan:

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

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

Länk till detta avsnitt

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. Kan jag importera ethers.js eller andra JS-bibliotek i mina subgraf-mappningar?

Länk till detta avsnitt

För närvarande inte, eftersom mappningar är skrivna i AssemblyScript. En möjlig alternativ lösning på detta är att lagra rådata i enheter och utföra logik som kräver JS-bibliotek på klienten.

17. Är det möjligt att specificera vilket block som ska börja indexera?

Länk till detta avsnitt

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. Finns det några tips för att öka prestandan vid indexering? Min subgraf tar väldigt lång tid att synkronisera

Länk till detta avsnitt

Ja, du bör titta på den valfria funktionen för startblock för att börja indexera från det block där kontraktet distribuerades: Start blocks

19. Finns det ett sätt att direkt fråga subgrafen för att ta reda på det senaste blocknumret den har indexerat?

Länk till detta avsnitt

Ja! Prova följande kommando och ersätt "organization/subgraphName" med organisationen under vilken den är publicerad och namnet på din subgraf:

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

20. Vilka nätverk stöds av The Graph?

Länk till detta avsnitt

Du kan hitta listan över de stödda nätverken här.

21. Är det möjligt att duplicera en subgraf till ett annat konto eller en annan slutpunkt utan att distribuera om?

Länk till detta avsnitt

Du måste distribuera om subgrafen, men om subgrafens ID (IPFS-hash) inte ändras behöver den inte synkroniseras från början.

22. Är det möjligt att använda Apollo Federation ovanpå graph-node?

Länk till detta avsnitt

Federation stöds ännu inte, även om vi planerar att stödja det i framtiden. För närvarande kan du använda schema stitching, antingen på klienten eller via en proxytjänst.

23. Finns det en begränsning för hur många objekt The Graph kan returnera per fråga?

Länk till detta avsnitt

Som standard är frågesvar begränsade till 100 objekt per samling. Om du vill ha fler kan du gå upp till 1000 objekt per samling och bortom det kan du paginera med:

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

24. Om min dapp-frontänd använder The Graph för frågor, måste jag skriva in min frågenyckel direkt i frontänden? Vad händer om vi betalar frågeavgifter för användare – kommer skadliga användare att orsaka mycket höga frågeavgifter?

Länk till detta avsnitt

För närvarande är det rekommenderade tillvägagångssättet för en dapp att lägga till nyckeln i frontänden och exponera den för slutanvändare. Med det sagt kan du begränsa den nyckeln till en värdnamn, som yourdapp.io och subgraphen. Gatewayen drivs för närvarande av Edge & Node. En del av gatewayens ansvar är att övervaka missbruk och blockera trafik från skadliga klienter.

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

Länk till detta avsnitt

Gå till hosted service för att hitta subgrafer som du eller andra har distribuerat till hosted service. Du hittar den här.

26. Will the hosted service start charging query fees?

Länk till detta avsnitt

The Graph kommer aldrig ta ut avgifter för hosted service. The Graph är en decentraliserad protokoll, och att ta ut avgifter för en centraliserad tjänst är inte i linje med The Graphs värderingar. Hosted service var alltid ett tillfälligt steg för att hjälpa till att nå det decentraliserade nätverket. Utvecklare kommer att ha tillräckligt med tid att uppgradera till det decentraliserade nätverket när de är bekväma med det.

27. How do I update a subgraph on mainnet?

Länk till detta avsnitt

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?

Länk till detta avsnitt

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.

Redigera sida

Tidigare
Enhetsprovningsramverk
Nästa
Vanliga frågor om Substreams-drivna subgrafer
Redigera sida