Operation
Tracing
AI agents: fetch https://docs.erpc.cloud/operation/tracing.llms.txt for the complete machine-readable version of this page (full configuration schema, defaults, worked examples, and source links). Append `.llms.txt` to any docs URL for the same treatment.AIFor agents: /operation/tracing.llms.txt

Tracing & logging

eRPC instruments every layer of the request pipeline — inbound HTTP, routing, cache lookups, upstream calls — and exports those spans over OTLP to any OpenTelemetry-compatible backend. Structured JSON logs run at five verbosity levels, secrets are redacted before any line is written, and a force-trace override lets you capture full detail for a single network or method without touching global sampling.

What you get

  • End-to-end distributed traces from caller through every upstream hop
  • Two span tiers: always-on for data-plane ops, detailed for high-cardinality debug info
  • Force-trace by request header, query param, or config pattern — even at sampleRate: 0
  • Automatic secret redaction for all API keys and passwords in logs and config dumps
  • W3C TraceContext propagation: eRPC becomes a child of your caller's trace

Quick taste

Illustrative, not a tuned production config — 10 % sampling, gRPC export:

tracing
erpc.yaml
tracing:  enabled: true  # OTLP gRPC collector — eRPC always overrides OTEL_EXPORTER_OTLP_ENDPOINT  endpoint: localhost:4317  protocol: grpc  # 10 % ambient sampling — sampleRate: 0 is rewritten to 1.0 by SetDefaults, use enabled: false to disable  sampleRate: 0.1  serviceName: erpc-prod

Agent reference

Copy one of these prompts into your AI agent session (Claude Code, Cursor, …) — each one points the agent at this page's machine-readable reference so it can do the work correctly:

Prompt Example #1: wire eRPC traces to my OTel collector
Set up distributed tracing in my eRPC instance so every request, cache lookup, and
upstream call produces spans exported to my OpenTelemetry collector. Work with my existing eRPC config. and my collector is at otel-collector:4317. Choose a sensible production
sample rate and explain the sampleRate: 0 footgun. Read the full reference first:
https://docs.erpc.cloud/operation/tracing.llms.txt
Prompt Example #2: force full traces on debug methods only
I want eRPC to sample at 5% normally but always capture 100% traces for debug_* and
trace_* methods so I can triage slow calls without raising global sample rate. Update
my eRPC config with the right forceTraceMatchers config. Reference:
https://docs.erpc.cloud/operation/tracing.llms.txt
Prompt Example #3: send traces to Grafana Cloud with auth
Configure eRPC's OTLP exporter in my eRPC config to send traces to my Grafana Cloud OTLP
HTTP endpoint with bearer-token auth headers and TLS enabled. Include the sample rate
and serviceName settings appropriate for production. Reference:
https://docs.erpc.cloud/operation/tracing.llms.txt
Prompt Example #4: debug missing or noisy spans
My tracing backend shows either no spans from eRPC or too many after a config change.
Diagnose the issue in my eRPC config — check sampleRate zero-rewrite, OTEL env var
overrides, and detailed mode cost — and fix the config so I get the spans I expect.
Reference: https://docs.erpc.cloud/operation/tracing.llms.txt
Tracing & logging — full agent referenceExpand for every option, default, and edge case — or copy this entire section into your AI assistant.

How it works

Tracing initialization. On startup, NewERPC calls common.InitializeTracing exactly once (guarded by sync.Once). When enabled, it builds an OTLP exporter (gRPC via otlptracegrpc or HTTP via otlptracehttp), constructs a TracerProvider with a batcher and a custom sampler, wires W3C TraceContext + Baggage propagation, and stores any forceTraceMatchers for per-request evaluation. Two package-level booleans — IsTracingEnabled and IsTracingDetailed — are set once and consulted on every hot-path span call with zero allocation when tracing is off. [common/tracing_core.go:L53-148]

Two span tiers. All instrumented call sites use one of two helpers:

  • StartSpan — fires whenever IsTracingEnabled; covers major external interactions: cache, upstreams, connectors, rate limiters, consensus.
  • StartDetailSpan — fires only when both IsTracingEnabled and IsTracingDetailed; covers eRPC-internal operations and spans carrying high-cardinality attributes such as request params, block numbers, lock contention, and hook execution. Enabling detailed: true roughly doubles span count.

When tracing is disabled, both helpers return the caller's unchanged context and a singleton noopSpan — no allocation on the hot path. [common/tracing_util.go:L1-234]

Span hierarchy for a single HTTP request (normal mode):

Http.ReceivedRequest  (SpanKindServer)
  └─ Request.Handle   (SpanKindInternal)
       └─ Network.Forward
            └─ Network.forwardAttempt
                 ├─ Cache.Get
                 └─ Upstream.Forward
                      └─ HttpJsonRpcClient.sendSingleRequest

With detailed: true, additional spans appear inside the HTTP layer (Http.ReadBody, Http.ParseRequests, HttpServer.WriteResponse), between Forward and forwardAttempt (Project.Forward, Network.TryForward, Network.UpstreamLoop), and inside upstream execution (RateLimiter.TryAcquirePermit, Upstream.tryForward.PreRequest, Upstream.tryForward.SendRequest), cache lookup, lock/parse ops, and method-specific hooks.

Sampler logic. createTracingSampler builds the base sampler from sampleRate:

  • <= 0NeverSample()
  • >= 1.0AlwaysSample()
  • otherwise → ParentBased(TraceIDRatioBased(rate)) with all four parent-sampling options configured for consistency (no orphan spans)

The forceTraceSampler always wraps the base sampler regardless of rate. [common/tracing_core.go:L229-268]

Force-trace mechanism. Three paths can force a span to be recorded regardless of sampleRate:

  1. HTTP header X-ERPC-Force-Trace: true (or 1, yes) — checked at request entry.
  2. Query parameter ?force-trace=true — same check.
  3. Config-driven forceTraceMatchers — evaluated after the URL is parsed and the network is known. Each matcher can specify network (in architecture:chainId form, e.g. evm:1) and/or method (JSON-RPC method pattern). Pipe (|) = OR; wildcards supported. Both fields present on one matcher = AND semantics.

In all cases, the force-trace decision is communicated to the OTel sampler by setting the span attribute erpc.force_trace = true at creation time. The custom forceTraceSampler wraps the base sampler and returns RecordAndSample unconditionally when it sees this attribute — even when sampleRate: 0. [common/tracing_core.go:L257-268]

Context propagation. Incoming HTTP requests have traceparent/tracestate extracted via W3C TraceContext{} carrier, making eRPC spans children of the caller's trace. After the response is written, InjectHTTPResponseTraceContext injects the active span context back into response headers so downstream callers can correlate their traces. gRPC requests have no OTel trace extraction — they start with a fresh root span. [common/tracing_util.go:L58-74]

Logging system. zerolog is the structured JSON logger used throughout eRPC. Default output is newline-delimited JSON with Unix-millisecond timestamps:

{"level":"info","time":1718000000123,"message":"...","key":"value"}

Set LOG_WRITER=console to switch to a human-readable format for local development:

04:05.000ms INF message key=value

Five levels are available: trace, debug, info, warn, error (plus fatal, panic, disabled). LOG_LEVEL environment variable overrides logLevel config at startup and again when the config is loaded, so it always wins. ERPC_NOLOGS=1 silences all output at the binary level.

When the resolved level is info or lower, eRPC serializes the entire loaded config as a JSON field in a startup log line. All secrets are redacted before this serialization.

Secret redaction. Two layers:

  1. MarshalJSON/MarshalYAML overrides on config types — called whenever config is serialized — replace secret fields with "REDACTED" or apply util.RedactEndpoint:

    Config typeFieldReplacement
    RedisConnectorConfigpassword"REDACTED"
    RedisConnectorConfiguriutil.RedactEndpoint(uri)
    PostgreSQLConnectorConfigconnectionUriutil.RedactEndpoint(connectionUri)
    AwsAuthConfigsecretAccessKey"REDACTED"
    ProviderConfigsettings"REDACTED"
    UpstreamConfigendpointutil.RedactEndpoint(endpoint)
    SecretStrategyConfigvalue"REDACTED"

    [common/config.go:L397-503]

  2. util.RedactEndpoint — computes a SHA-256 of the full original URL, takes the first 5 hex chars as a stable identifier, then strips path and credentials according to scheme:

    • Native-protocol endpoints (alchemyv2://, erigon://, etc.): scheme://host#redacted=<hash>
    • Envio-suffix schemes: scheme://host (no hash needed — no secrets in path)
    • Repository-suffix schemes: scheme://host#redacted=<hash>
    • Standard http/https RPC endpoints: scheme#redacted=<hash>hostname is also dropped
    • Unparseable URL: "redacted=<hash>"

    Two endpoints with the same scheme but different paths (API keys) produce different hashes, enabling correlation without exposing secrets.

[util/redact.go:L10-36]

OTel resource attributes. The TracerProvider is built with a resource that includes service.name (from tracing.serviceName), service.version (the compiled-in ErpcVersion constant), commit.sha (the compiled-in ErpcCommitSha constant), and any key/value pairs from tracing.resourceAttributes. Environment variables in resourceAttributes values are expanded via os.ExpandEnv at config load; empty values after expansion are silently skipped. [common/tracing_core.go:L93-102]

The OTel instrumentation name registered by eRPC is "github.com/erpc/erpc". [common/tracing_core.go:L26]

Error recording. SetTraceSpanError checks span.IsRecording() before acting. For StandardError types it sets an error.code span attribute (the full error-code chain) and records the error as a span event; for plain error values it calls span.RecordError and sets the span status to codes.Error. [common/tracing_core.go:L163-183]

Force-flush. common.ForceFlushTraces(ctx) calls tracerProvider.ForceFlush(ctx), flushing all batched but not-yet-exported spans to the collector immediately. It is called automatically on graceful shutdown and exposed for callers that need guaranteed delivery of critical traces. [common/tracing_core.go:L237-245]

Graceful shutdown. A goroutine watches appCtx.Done and flushes buffered spans with a 5-second grace period before the process exits. [erpc/erpc.go:L92-99]

Config schema

Top-level logLevel

FieldTypeDefaultBehavior / footguns
logLevelstring"INFO" (common/defaults.go:L50-51)Controls log verbosity for all eRPC subsystems. Valid: trace, debug, info, warn, error, fatal, panic, disabled (case-insensitive). Invalid value → warning + fallback to debug (erpc/init.go:L27-32). Overridden by LOG_LEVEL env var at config-load time (cmd/erpc/main.go:L354-363).

tracing.*

Full struct: common/config.go:L218-235.

FieldTypeDefaultBehavior / footguns
tracing.enabledboolfalse (Go zero value)Master switch. When false, sets IsTracingEnabled = false globally; all span calls are no-ops (common/tracing_core.go:L53-58).
tracing.endpointstring"localhost:4317" (gRPC) or "http://localhost:4318" (HTTP) — derived from protocol in SetDefaults (common/defaults.go:L622-628)OTLP collector endpoint. gRPC: host:port with no scheme. HTTP: full URL including scheme. Footgun: OTEL_EXPORTER_OTLP_ENDPOINT is always overridden by this field even when it holds the default value.
tracing.protocolTracingProtocol"grpc" (common/defaults.go:L619-621)"grpc" uses otlptracegrpc; "http" uses otlptracehttp. Any other value → error at init (common/tracing_core.go:L71-78).
tracing.sampleRatefloat641.0 (common/defaults.go:L629-631)<= 0NeverSample(), >= 1.0AlwaysSample(), otherwise → ParentBased(TraceIDRatioBased(rate)). Footgun: SetDefaults replaces 0 with 1.0, so sampleRate: 0 in YAML means "always sample", not "never sample". To keep tracing on but silent, use a very small positive value like 0.0000001.
tracing.detailedboolfalse (Go zero value)When true, sets IsTracingDetailed = true, enabling StartDetailSpan calls. Roughly 2× span count. Includes request params, block numbers, lock spans, hook execution spans.
tracing.serviceNamestring"erpc" (common/defaults.go:L632-634)OTel service.name resource attribute.
tracing.headersmap[string]stringnilAdditional metadata headers sent with every OTLP export batch. Used for auth to managed collectors (Grafana Cloud, Honeycomb, Datadog). When set, takes precedence over OTEL_EXPORTER_OTLP_HEADERS.
tracing.tls.enabledboolfalse (Go zero value)Master switch for TLS on the OTLP exporter. When false, exporters are created with WithInsecure() (common/tracing_core.go:L187).
tracing.tls.certFilestring""Path to PEM client certificate for mTLS. Both certFile and keyFile must be non-empty; supplying one without the other silently skips mutual TLS.
tracing.tls.keyFilestring""Path to PEM private key corresponding to certFile. Required alongside certFile for mTLS.
tracing.tls.caFilestring""Path to PEM CA certificate. When set, the collector's server cert is validated against this CA instead of the system pool.
tracing.tls.insecureSkipVerifyboolfalseWhen true, disables verification of the OTLP collector's server cert. Does not affect client-cert loading. Only for development or trusted private networks.
tracing.resourceAttributesmap[string]stringnilCustom OTel resource attributes. Values are os.ExpandEnv-expanded at config load. Empty values after expansion are silently skipped (common/tracing_core.go:L93-97).
tracing.forceTraceMatchers[]*ForceTraceMatchernilMatchers that bypass sampleRate and force RecordAndSample.
tracing.forceTraceMatchers[].networkstringNetwork pattern in architecture:chainId form, e.g. "evm:1", "evm:1|evm:42161", "evm:*". Pipe = OR; wildcards via WildcardMatch.
tracing.forceTraceMatchers[].methodstringJSON-RPC method pattern, e.g. "eth_call", "debug_*|trace_*". Pipe = OR; wildcards supported.

ForceTraceMatcher AND/OR semantics: when both network and method are specified on one matcher, both must match (AND). If only one field is set, only that field is checked. An empty matcher (neither field) never matches (common/tracing_core.go:L306-330).

Standard OTEL_* environment variables

Env varInteraction with eRPC config
OTEL_EXPORTER_OTLP_ENDPOINTOverridden. eRPC always passes WithEndpoint(cfg.Endpoint); this env var is silently ignored.
OTEL_EXPORTER_OTLP_HEADERSPartially overridden. Only takes effect when tracing.headers is nil/empty in config.
OTEL_SERVICE_NAMENot explicitly overridden, but eRPC always sets service.name. eRPC builds its resource with semconv.ServiceNameKey.String(cfg.ServiceName). If the OTel SDK's default detectors also read OTEL_SERVICE_NAME, last-writer-wins resource merge semantics apply; eRPC's explicit value is always present.
OTEL_TRACES_SAMPLERIgnored. eRPC supplies its own sampler via explicit SDK option.
OTEL_PROPAGATORSIgnored. eRPC explicitly sets TraceContext + Baggage propagators.
OTEL_SDK_DISABLEDHonored. Disables all OTel SDK operations globally before InitializeTracing runs.

Worked examples

1. Production setup: 10 % sampling with force-trace on debug methods. Low ambient cost; debug-namespace calls always produce a full trace for triage:

tracing
erpc.yaml
tracing:  enabled: true  endpoint: otel-collector:4317  protocol: grpc  sampleRate: 0.1  serviceName: erpc-prod  forceTraceMatchers:    - method: "debug_*|trace_*"

2. Detailed mode for a staging environment. Capture every span including request params, block numbers, and lock contention to understand slow calls — not recommended in production due to 2× span volume:

tracing
erpc.yaml
tracing:  enabled: true  endpoint: tempo:4317  sampleRate: 1.0  detailed: true  serviceName: erpc-staging

3. Managed collector with auth headers and TLS. For Grafana Cloud or Honeycomb where the OTLP endpoint requires a bearer token:

tracing
erpc.yaml
tracing:  enabled: true  endpoint: "https://otlp-gateway.grafana.net/otlp"  protocol: http  sampleRate: 0.05  headers:    Authorization: "Basic <base64-token>"

4. Silent tracing for force-trace-only capture. Keep tracing on but produce no ambient spans — only requests that carry X-ERPC-Force-Trace: true or match a configured matcher are recorded. Use sampleRate: 0.0000001 because sampleRate: 0 is rewritten to 1.0 by SetDefaults:

tracing
erpc.yaml
tracing:  enabled: true  endpoint: localhost:4317  sampleRate: 0.0000001  forceTraceMatchers:    - network: "evm:1"      method: "eth_call"

Request/response behavior

  • Incoming HTTP requests with traceparent/tracestate headers become children of the caller's trace. eRPC spans are nested under the caller's root span.
  • After the response is written, the active span's W3C context is injected back into HTTP response headers unconditionally — including error responses. Trace IDs are observable to callers. [erpc/http_server.go:L701]
  • For batch HTTP requests, each item gets its own Request.Handle child span under a single Http.ReceivedRequest parent. All child spans may be in-flight simultaneously. [erpc/http_server.go:L465]
  • gRPC requests start a fresh root span — no trace context extraction is implemented for the gRPC server path. [erpc/grpc_server.go]
  • OTLP export failures are logged at trace level only and never propagate to callers. [common/tracing_core.go:L125-127]
  • Request.Handle is started via tracer.Start directly (not StartSpan), so it fires whenever IsTracingEnabled, regardless of IsTracingDetailed. This is the correct attach point for distributed callers. [common/tracing_util.go:L165]

Span attributes on Request.Handle (set by StartRequestSpan/EndRequestSpan):

AttributeModeValue
request.methodalwaysJSON-RPC method name
erpc.force_tracealways, when forcedtrue (bool, internal — used by sampler to force RecordAndSample; not a user-visible exported attribute)
erpc.forced_trace_reasonwhen forced"header_or_query" or "network:<n>,method:<m>" etc.
request.iddetailed onlyJSON-RPC request ID as string
request.jsonrpc.paramsdetailed onlyJSON-serialized params array
network.iddetailed only, on responseNetwork ID string
user.iddetailed only, on responseAuth user ID
request.finalitydetailed only, on responseFinality label (e.g. "realtime", "finalized")
response.finalitydetailed only, on responseResponse finality
execution.attemptsdetailed only, on responseTotal attempts
execution.retriesdetailed only, on responseNumber of retries
execution.hedgesdetailed only, on responseNumber of hedges
response.result_sizedetailed only, on responseLength of JSON-RPC result field
upstream.idalways (if non-nil), on responseUpstream identifier
cache.hitalways (if non-nil), on responsebool: whether response was served from cache

Span attributes on Http.ReceivedRequest (set by StartHTTPServerSpan/EnrichHTTPServerSpan):

AttributePhaseValue
http.methodon requestHTTP method (semconv)
http.urlon requestFull request URL
http.schemeon requestURL scheme
http.user_agenton requestUser-Agent header value
erpc.force_traceon request, when forcedtrue (if forced via header/query)
erpc.forced_trace_reasonon request, when forced"header_or_query"
http.status_codeon responseHTTP response status code (semconv)

[common/tracing_util.go:L80-138]

Best practices

  • Set sampleRate: 0.050.2 in production — AlwaysSample() at scale sends enormous span volume to your collector.
  • Use forceTraceMatchers with method: "debug_*|trace_*" to guarantee full traces on expensive diagnostic methods regardless of sample rate — this costs nothing extra for normal traffic.
  • Never set sampleRate: 0 thinking it means "disabled" — SetDefaults rewrites it to 1.0. Use enabled: false to disable tracing entirely.
  • Enable detailed: true only in staging or on-demand: 2× span count and high-cardinality attributes (params, block numbers) can saturate a collector or inflate storage costs.
  • Always set tracing.endpoint explicitly — do not rely on OTEL_EXPORTER_OTLP_ENDPOINT to route spans to a remote collector; eRPC overrides it unconditionally.
  • Enable tracing.tls.enabled: true for any span export that leaves a trusted network; the default is WithInsecure().
  • Force-trace via the X-ERPC-Force-Trace: true request header during integration testing to capture full detail without raising global sample rate.

Edge cases & gotchas

  1. initOnce.Do means tracing config cannot change after first NewERPC. Tests or multi-tenant code creating multiple ERPC instances will silently use only the first instance's tracing config. Source: common/tracing_core.go:L53
  2. sampleRate: 0 in YAML means "always sample", not "never sample". SetDefaults replaces 0 with 1.0. To keep tracing enabled but silent, set 0.0000001 or a very small positive value. Source: common/defaults.go:L629-631
  3. Force-trace network matching requires URL parsing to have succeeded. forceTraceMatchers with network patterns never match admin or healthcheck requests. Source: erpc/http_server.go:L285-288
  4. W3C traceparent injection into HTTP responses is unconditional when tracing is enabled — including error responses. Trace IDs are observable to callers. Source: erpc/http_server.go:L701
  5. gRPC server has no OTel trace extraction. gRPC-originated requests start with a fresh root span, not as children of the caller's trace. Source: erpc/grpc_server.go
  6. TLS on the OTLP exporter is off by default. Both gRPC and HTTP exporters use WithInsecure() unless tracing.tls.enabled: true. Production deployments sending spans over the internet should enable TLS. Source: common/tracing_core.go:L187
  7. OTEL_EXPORTER_OTLP_ENDPOINT is silently overridden. eRPC always calls WithEndpoint(cfg.Endpoint), so this env var has no effect. Set tracing.endpoint in config explicitly. Source: common/tracing_core.go:L197
  8. OTEL_TRACES_SAMPLER and OTEL_PROPAGATORS have no effect. eRPC supplies its own sampler and propagator via explicit SDK options. Source: common/tracing_core.go:L109
  9. OTEL_EXPORTER_OTLP_HEADERS only takes effect when tracing.headers is nil/empty in config. Source: common/tracing_core.go:L200-202
  10. util.RedactEndpoint drops the entire hostname for standard http/https URLs. An endpoint like https://eth-mainnet.alchemyapi.io/v2/SECRET becomes https#redacted=ab3c4. Only native-protocol and repository-type endpoints keep scheme://host. Source: util/redact.go:L32-34
  11. LOG_LEVEL env var is applied twice — once globally before config load, and again when getConfig overrides cfg.LogLevel. The second application persists into the running instance and always wins over the YAML logLevel. Source: cmd/erpc/main.go:L354-363
  12. OTel debug logging (zerologr bridge) is wired only at tracing init time. If zerolog level is not <= Debug when InitializeTracing runs, OTel SDK internals are never logged, even if you lower the level later via the admin API. Source: common/tracing_core.go:L119-122
  13. console.error in TypeScript config scripts throws TypeError. Only debug, info, log, trace, and warn are registered in the Sobek runtime. Source: common/console.go:L15-21

Observability

There are no Prometheus metrics emitted by the tracing or logging subsystem. The tracing pipeline is a pure OTel concern; OTLP export errors are logged at trace level only and do not increment any counter.

Notable log messages:

LevelMessageWhen
info"OpenTelemetry tracing is disabled"tracing.enabled = false
info"initializing OpenTelemetry tracing" + endpoint/protocol/sampleRate/detailedBefore exporter creation
info"OpenTelemetry debug logging enabled"Only if zerolog level ≤ debug at init time
info"OpenTelemetry tracing initialized successfully"After successful init
info"force-trace matcher configured" + index/network/methodOnce per configured matcher
trace"open telemetry export error"OTLP export failure
error"failed to create span exporter"Exporter init failure
error"failed to create resource"OTel resource build failure
error"failed to initialize tracing"From NewERPC when InitializeTracing errors
error"failed to shutdown tracer provider"On process shutdown
warn"invalid log level '%s', defaulting to 'debug'"Unrecognized logLevel value
info(empty message, config JSON field)Startup when level ≤ info: full redacted config dump

OTel span name inventory. "normal" = emitted when tracing.enabled; "detail" = emitted only when tracing.enabled && tracing.detailed; "direct" = calls tracer.Start directly (same threshold as normal). OTel instrumentation name: "github.com/erpc/erpc".

All 126 span names (expand)
Span nameModeCall site
Cache.FindGetPoliciesdetailarchitecture/evm/json_rpc_cache.go:L173
Cache.Getnormalarchitecture/evm/json_rpc_cache.go:L153
Cache.GetForPolicydetailarchitecture/evm/json_rpc_cache.go:L241
Cache.Setnormalarchitecture/evm/json_rpc_cache.go:L572
ConnectorFailsafe.Deletedetaildata/failsafe.go:L286
ConnectorFailsafe.Getdetaildata/failsafe.go:L224
ConnectorFailsafe.Setdetaildata/failsafe.go:L253
Consensus.CollectResponsesdetailconsensus/executor.go:L189
Consensus.Runnormalconsensus/executor.go:L1282
CounterInt64.TryUpdatenormaldata/shared_state_variable.go:L365
CounterInt64.TryUpdateIfStalenormaldata/shared_state_variable.go:L391
CounterInt64.TryUpdateIfStale.AcquireMutexnormaldata/shared_state_variable.go:L405
CounterInt64.TryUpdateIfStale.ExecuteRefreshnormaldata/shared_state_variable.go:L430
DynamoDBConnector.Deletenormaldata/dynamodb.go:L833
DynamoDBConnector.Getnormaldata/dynamodb.go:L414
DynamoDBConnector.Listnormaldata/dynamodb.go:L874
DynamoDBConnector.Locknormaldata/dynamodb.go:L579
DynamoDBConnector.Setnormaldata/dynamodb.go:L355
DynamoDBConnector.Unlocknormaldata/dynamodb.go:L691
DynamoDBConnector.getSimpleValuedetaildata/dynamodb.go:L766
Evm.ExtractBlockReferenceFromRequestdetailarchitecture/evm/block_ref.go:L19
Evm.ExtractBlockReferenceFromResponsedetailarchitecture/evm/block_ref.go:L118
Evm.ExtractBlockTimestampFromResponsedetailarchitecture/evm/block_ref.go:L191
Evm.PickHighestBlockdetailarchitecture/evm/eth_getBlockByNumber.go:L336
Evm.extractRefFromJsonRpcRequestdetailarchitecture/evm/block_ref.go:L240
Evm.extractRefFromJsonRpcResponsedetailarchitecture/evm/block_ref.go:L314
EvmStatePoller.PollFinalizedBlockNumberdetailarchitecture/evm/evm_state_poller.go:L491
EvmStatePoller.PollLatestBlockNumberdetailarchitecture/evm/evm_state_poller.go:L394
GrpcBdsClient.GetBlockByHashdetailclients/grpc_bds_client.go:L365
GrpcBdsClient.GetBlockByNumberdetailclients/grpc_bds_client.go:L422
GrpcBdsClient.GetLogsdetailclients/grpc_bds_client.go:L632
GrpcBdsClient.QueryBlocksdetailclients/grpc_bds_client.go:L1097
GrpcBdsClient.QueryLogsdetailclients/grpc_bds_client.go:L1173
GrpcBdsClient.QueryTracesdetailclients/grpc_bds_client.go:L1209
GrpcBdsClient.QueryTransactionsdetailclients/grpc_bds_client.go:L1138
GrpcBdsClient.QueryTransfersdetailclients/grpc_bds_client.go:L1245
GrpcBdsClient.SendRequestnormalclients/grpc_bds_client.go:L194
Http.ParseRequestsdetailerpc/http_server.go:L397
Http.ReadBodydetailerpc/http_server.go:L373
Http.ReceivedRequestnormalcommon/tracing_util.go:L96
HttpJsonRpcClient.sendSingleRequestnormalclients/http_json_rpc_client.go:L675
HttpServer.WriteResponsedetailerpc/http_server.go:L680
JsonRpcRequest.Lockdetailcommon/json_rpc.go:L1229
JsonRpcRequest.RLockdetailcommon/json_rpc.go:L1235
JsonRpcResponse.IsResultEmptyishdetailcommon/json_rpc.go:L799
JsonRpcResponse.ParseFromStreamdetailcommon/json_rpc.go:L288
JsonRpcResponse.PeekBytesByPathdetailcommon/json_rpc.go:L486
JsonRpcResponse.PeekStringByPathdetailcommon/json_rpc.go:L464
Multiplexer.Closedetailerpc/multiplexer.go:L37
Network.EnrichStatePollerdetailerpc/networks.go:L2146
Network.EvmHighestFinalizedBlockNumberdetailerpc/networks.go:L679
Network.EvmHighestLatestBlockNumberdetailerpc/networks.go:L518
Network.EvmLowestFinalizedBlockNumberdetailerpc/networks.go:L855
Network.Forwardnormalerpc/networks.go:L943
Network.GetFinalitydetailerpc/networks.go:L1646
Network.NormalizeResponsedetailerpc/networks.go:L2235
Network.PostForward.eth_getBlockByNumberdetailarchitecture/evm/eth_getBlockByNumber.go:L44
Network.PostForward.eth_sendRawTransactiondetailarchitecture/evm/eth_sendRawTransaction.go:L280
Network.PostForwardHookdetailarchitecture/evm/hooks.go:L64
Network.PreForwardHookdetailarchitecture/evm/hooks.go:L41
Network.PreForwardHook.eth_chainIddetailarchitecture/evm/eth_chainId.go:L79
Network.TryForwarddetailerpc/networks.go:L1137
Network.UpstreamLoopdetailerpc/networks.go:L1227
Network.WaitForMultiplexResultnormalerpc/networks.go:L2058
Network.forwardAttemptnormalerpc/networks.go:L1188
PolicyEngine.GetOrdereddetailerpc/networks.go:L1023
PostgreSQLConnector.Deletenormaldata/postgresql.go:L1130
PostgreSQLConnector.Getnormaldata/postgresql.go:L466
PostgreSQLConnector.Listnormaldata/postgresql.go:L1165
PostgreSQLConnector.Locknormaldata/postgresql.go:L526
PostgreSQLConnector.PublishCounterInt64normaldata/postgresql.go:L683
PostgreSQLConnector.Setnormaldata/postgresql.go:L409
PostgreSQLConnector.Unlocknormaldata/postgresql.go:L589
PostgreSQLConnector.getCurrentValuedetaildata/postgresql.go:L974
PostgreSQLConnector.getWithWildcarddetaildata/postgresql.go:L1006
Project.Forwarddetailerpc/projects.go:L103
Project.PreForwardHookdetailarchitecture/evm/hooks.go:L14
Project.PreForwardHook.eth_blockNumberdetailarchitecture/evm/eth_blockNumber.go:L16
Project.PreForwardHook.eth_chainIddetailarchitecture/evm/eth_chainId.go:L30
Project.executeShadowRequestdetailerpc/shadow.go:L82
Query.Executedetailerpc/query_executor.go:L45
Query.ForwardSubrequestdetailerpc/query_shim.go:L427
Query.ResolveQueryBoundsdetailerpc/query_executor.go:L277
Query.ShimBlocksdetailerpc/query_shim.go:L18
Query.ShimLogsdetailerpc/query_shim.go:L112
Query.ShimTracesdetailerpc/query_shim.go:L187
Query.ShimTransactionsdetailerpc/query_shim.go:L55
QueryStream.Handlenormalerpc/request_processor.go:L76
RateLimiter.DoLimitnormalupstream/ratelimiter_budget.go:L279
RateLimiter.TryAcquirePermitdetailupstream/ratelimiter_budget.go:L161
RedisConnector.Deletenormaldata/redis.go:L636
RedisConnector.Getnormaldata/redis.go:L341
RedisConnector.Listnormaldata/redis.go:L682
RedisConnector.Locknormaldata/redis.go:L435
RedisConnector.PublishCounterInt64normaldata/redis.go:L558
RedisConnector.Setnormaldata/redis.go:L281
RedisConnector.Unlocknormaldata/redis.go:L612
Request.GenerateCacheHashdetailcommon/json_rpc.go:L1387
Request.Handledirectcommon/tracing_util.go:L165
Request.Lockdetailcommon/request.go:L925
Request.RLockdetailcommon/request.go:L931
Request.ResolveJsonRpcdetailcommon/request.go:L939
Response.IsObjectNulldetailcommon/response.go:L420
Response.Lockdetailcommon/response.go:L84
Response.RLockdetailcommon/response.go:L90
Response.ResolveJsonRpcdetailcommon/response.go:L293
Upstream.Forwardnormalupstream/upstream.go:L416
Upstream.PostForwardHookdetailarchitecture/evm/hooks.go:L110
Upstream.PostForwardHook.eth_getBlockByNumberdetailarchitecture/evm/eth_getBlockByNumber.go:L435
Upstream.PostForwardHook.eth_getBlockReceiptsdetailarchitecture/evm/eth_getBlockReceipts.go:L31
Upstream.PostForwardHook.eth_getLogsdetailarchitecture/evm/eth_getLogs.go:L350
Upstream.PostForwardHook.eth_sendRawTransactiondetailarchitecture/evm/eth_sendRawTransaction.go:L59
Upstream.PostForwardHook.trace_filterdetailarchitecture/evm/trace_filter.go:L362
Upstream.PreForwardHookdetailarchitecture/evm/hooks.go:L87
Upstream.PreForwardHook.eth_chainIddetailarchitecture/evm/eth_chainId.go:L124
Upstream.PreForwardHook.eth_getLogsdetailarchitecture/evm/eth_getLogs.go:L289
Upstream.PreForwardHook.trace_filterdetailarchitecture/evm/trace_filter.go:L298
Upstream.tryForward.PreRequestdetailupstream/upstream.go:L572
Upstream.tryForward.SendRequestdetailupstream/upstream.go:L630
UpstreamsRegistry.GetNetworkUpstreamsdetailupstream/registry.go:L349
UpstreamsRegistry.GetSortedUpstreamsdetailupstream/registry.go:L387
UpstreamsRegistry.buildProviderBootstrapTaskdetailupstream/registry.go:L485
UpstreamsRegistry.buildUpstreamBootstrapTaskdetailupstream/registry.go:L431
createSyntheticSuccessResponsedetailarchitecture/evm/eth_sendRawTransaction.go:L179
extractTxHashFromSendRawTransactiondetailarchitecture/evm/eth_sendRawTransaction.go:L136
verifyAndHandleNonceTooLowdetailarchitecture/evm/eth_sendRawTransaction.go:L206

Source code entry points

Related pages

  • Metrics & Prometheus — the Prometheus side of observability; no overlap with OTel spans.
  • Admin API — runtime log-level changes via the admin endpoint.
  • Health checks — healthcheck requests bypass force-trace network matchers.
  • Deployment — how to wire an OTel collector sidecar alongside eRPC.