graphprotocol / graphprotocol/graph-node

[Bug] Indexing Error because of 2D BigInt Arrays

Offen
#5,761 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug Stale
Vorherrschende Sprache
Rust
Sterne
3.2k
Forks
1.1k
Ø Merge
4 T. 1 Std.
Gemergte PRs (30 T.)
1

Beschreibung

Bug report
Hello, thanks in advance for the support.

I have an indexing error when i try to sync my subgraph to subgraph studio (look at the picture)
Capture d’écran 2025-01-09 à 15 27 36
This error is somehow related to a problem with graph-ts that can't interpret the 2D Array of BigInts inside of the following event :

- event: Exchange(indexed address,indexed address,address[11],uint256[5][5],address[5],uint256,uint256)
          handler: handleExchange

This event is specific to the following Curve Contract : 0x16c6521dff6bab339122a0fe25a9116693265353
This 2D Array is crucial to decode and analyse the data from this bridge, so i can't delete it from my subgraph or do it another way.
Just below also the typescript code that initialize this entity and the entity itself :

import { Exchange as ExchangeEvent } from "../generated/CurveRouter/CurveRouter"
import { Exchange } from "../generated/schema"
import { Bytes } from "@graphprotocol/graph-ts"

export function handleExchange(event: ExchangeEvent): void {
  let entity = new Exchange(
    event.transaction.hash.concatI32(event.logIndex.toI32())
  )
  entity.sender = event.params.sender
  entity.receiver = event.params.receiver
  entity.swap_params = event.params.swap_params
  entity.route = event.params.route.map<Bytes>((address) => address as Bytes);
  entity.pools = event.params.pools.map<Bytes>((address) => address as Bytes);
  entity.in_amount = event.params.in_amount
  entity.out_amount = event.params.out_amount

  entity.blockNumber = event.block.number
  entity.blockTimestamp = event.block.timestamp
  entity.transactionHash = event.transaction.hash

  entity.save()
}
type Exchange @entity(immutable: true) {
  id: Bytes!
  sender: Bytes! # address
  receiver: Bytes! # address
  route: [Bytes!]! # address[11]
  swap_params: [[BigInt!]!]! # uint256[5][5]
  pools: [Bytes!]! # address[5]
  in_amount: BigInt! # uint256
  out_amount: BigInt! # uint256
  blockNumber: BigInt!
  blockTimestamp: BigInt!
  transactionHash: Bytes!
}
Relevant log output
Error: failed to process trigger: block #20268517 (0x21c0…fc31), transaction 4035dca11776d0fd55d48120ff116936975f7709a59e9c9843b2a7d2c55b14a0: error while executing at wasm backtrace: 0: 0x3c9e - <unknown>!src/curve-router/handleExchange: Entity Exchange[0x4035dca11776d0fd55d48120ff116936975f7709a59e9c9843b2a7d2c55b14a057000000]: field `swap_params` is of type [[BigInt!]!], but the value `[[0, 2, 1, 30, 3], [1, 0, 1, 10, 2], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]` contains a [BigInt] at index 0: Entity Exchange[0x4035dca11776d0fd55d48120ff116936975f7709a59e9c9843b2a7d2c55b14a057000000]: field `swap_params` is of type [[BigInt!]!], but the value `[[0, 2, 1, 30, 3], [1, 0, 1, 10, 2], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]` contains a [BigInt] at index 0

To view more details about this indexing error, please view the documentation.
IPFS hash

QmSk6FugeKhGvzGCtqXxnG1SWgpc7rna3VQ6U8F3ooPTfe

Subgraph name or link to explorer

No response

Some information to help us out
  • Tick this box if this bug is caused by a regression found in the latest release.
  • Tick this box if this bug is specific to the hosted service.
  • I have searched the issue tracker to make sure this issue is not a duplicate.
OS information

macOS

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie mit dem fehlschlagenden handleExchange-Einstiegspunkt, der im WASM-Backtrace angezeigt wird, sowie den graph-ts-Ereignis- und Entitätsdefinitionen im Bericht. Reproduzieren Sie die uint256[5][5]-Zuweisung anhand der bereitgestellten Ereignisdaten und verfolgen Sie anschließend, wie verschachtelte BigInt-Arrays während Entity-Schreibvorgängen validiert werden. Als abgeschlossen gilt die Aufgabe, wenn dieses Ereignis erfolgreich indiziert wird und swap_params für die Exchange-Entität erhalten bleibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
blockchain, rust, typescript
Bereich
backend, blockchain, data
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.