Skip to content

Indexing halts on contract-creation transactions that emit protocol events #243

Description

@rickstaa

Summary

The subgraph deterministically halts on any contract-creation transaction (tx.to == null) that emits a protocol event. On 2026-07-18 it froze Arbitrum One at block 485100965 (deployment QmUW5cHnwoSbiDUgWvUsAujEYaB5gjbWkPMNBP7H5XQVuf, subgraph FE63YgkzcpVocxdCEyEYbvjYqEf2kb1A6daMYRxmejYC) — all indexers health: failed, freezing every downstream consumer.

Root cause

The offending tx (0x1eb52cd3…) is a Tenderize unlock deployed via its constructor, so event.transaction.to is null (graph-ts types it Address | null). createOrLoadTransactionFromEvent only sets tx.to when a recipient exists, but Transaction.to is String!, so graph-node aborts:

missing value for non-nullable field `to`

This is the first contract-creation tx to emit a protocol event. Not specific to earningsClaimed — the helper is shared by 32 handlers across 11 contracts, so any handled event from a creation tx aborts the same way.

Fix

Make Transaction.to nullable (String!String) — matches Ethereum/JSON-RPC and graph-ts (to: Address | null). No mapping change. → #245.

Alternative (#244): default to to the zero address — non-breaking, but reuses 0x0 as a stand-in for "no recipient." Merge one. Redeploy requires a full resync (grafting disabled).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions