Tested setups
hashspan emits standard OpenTelemetry spans, so it works with anything that speaks OTLP. This page shows what it is checked against: first what CI runs again on every change or every week, then the networks, backends and setups it was run with, each with its evidence. Integration setups are on Integrations, the scenarios on Base Sepolia on Testnet runs.
Checked in CI
Section titled “Checked in CI”Run again on every change, or every week against the newest releases, so each release keeps them.
| Setup | Run | What was checked | Evidence |
|---|---|---|---|
| Anvil, local chain (31337) Anvil 1.8.3 | every CI run | Send and confirm spans, decoded revert reasons and replaced transactions, in the integration tests. | CI workflow |
| ERC-4337 bundler on Anvil Alto 0.0.21, EntryPoint 0.7 | every CI run | User operations sent through a real bundler: send and confirm spans with the operation hash, its success and the bundle transaction. | test |
| Node.js 22.3, the latest 22.x and 24.x | every CI run | The packed packages are installed into an empty project and loaded with require() and import on each version. | CI workflow · smoke test |
| viem 2.21.0 and the newest 2.x | weekly in CI | Both ends of the supported range: the newest release with typecheck and every viem test, the oldest with the unit and integration tests. | workflow |
| x402 SDK @x402/core 2.13.0 and the newest 2.x | weekly in CI | Both ends of the supported range: the newest release with every x402 test, the oldest with the adapter’s own tests. | workflow |
| Coinbase CDP SDK 1.57 and the newest 1.x | every CI run, weekly | The lowest supported release on every change, the newest one every week, with the CDP unit and integration tests. | workflow |
| Vercel AI SDK ai 7, @ai-sdk/otel 1 | every CI run | The example agent: hashspan spans nest under the SDK’s execute_tool spans. | recipe · example agent |
| Coinbase AgentKit 0.10.4 | weekly in CI | ViemWalletProvider, CdpEvmWalletProvider and CdpSmartWalletProvider: send and confirm spans for sendTransaction, nativeTransfer and the ERC-20 approve action. | setup · viem test · CDP test |
| GOAT SDK @goat-sdk/wallet-viem 0.3.0 | weekly in CI | The send_token and approve_token_evm tools record send and confirm spans. | setup · test |
| Mastra @mastra/core 1.74, @mastra/otel-bridge 1.5 | weekly in CI | With the OpenTelemetry bridge, send and confirm spans nest under Mastra’s execute_tool span. | setup · test |
| LangChain and OpenAI Agents (OpenInference) LangChain 1.5, OpenAI Agents SDK 0.18 | weekly in CI | Both instrumentations and hashspan in one trace, with the agent run inside an active span. | setup · LangChain test · OpenAI Agents test |
Run on a testnet
Section titled “Run on a testnet”Real transactions on Base Sepolia, with the spans checked against the receipts. The lab’s scenario runs are on Testnet runs.
| Setup | Run | What was checked | Evidence |
|---|---|---|---|
| Base Sepolia (84532) public RPC | 2026-10-02, hashspan 0.8.0 | A payment and a reverted withdrawal. Status, block, gas, the L1 data fee and the total fee on the confirm spans equal the sealed receipts on two public RPCs; the revert reason was decoded. Also run with 0.6.0 earlier the same day, with the same result. This 0.8.0 run is the trace on the home page and in the local lab. | payment · reverted withdrawal · testnet runs |
Tracing backends
Section titled “Tracing backends”Where the agent trace was sent over OTLP and opened in the UI. Setup for each is on the backends page.
| Setup | Run | What was checked | Evidence |
|---|---|---|---|
| Jaeger 2.21.0 | 2026-10-03, hashspan 0.3.0 to 0.9.0 | The local lab backend: the full trace, with span links between send and confirm. | local lab |
| Prometheus and Grafana Prometheus 3.15.0, Grafana 13.2.3 | 2026-10-03, hashspan 0.9.0 | The send, confirmation and fee histograms over OTLP into Prometheus, on the hashspan Grafana dashboard. | recipe · dashboard |
| Grafana Tempo Tempo 3.0.0, Grafana 13.2.3 | 2026-10-02, hashspan 0.5.0 | All 13 spans received; TraceQL finds the failed confirm under its tool call. | hashspan#135 · setup |
| Langfuse, self-hosted 4.49.0 | 2026-10-02, hashspan 0.5.0 | All 13 observations; GenAI spans become agent, tool and generation observations, the reverted confirm has level ERROR. | hashspan#135 · setup |
| Honeycomb US region | 2026-10-02, hashspan 0.5.0 | All 13 spans; attribute types kept; the GenAI view shows the agent span with its token usage. | hashspan#135 · setup |
Other setups
Section titled “Other setups”Run once, end to end, and checked by hand.
| Setup | Run | What was checked | Evidence |
|---|---|---|---|
| OpenTelemetry JS SDK, from an empty project sdk-trace-node 2.11.0, exporter-trace-otlp-proto 0.222.0, viem 2.57.2 | 2026-10-03, hashspan 0.9.0 | The quickstart’s complete example, from npm init to an OTLP export with the tool, send and confirm spans. The home page, quickstart and recipe code samples are also typechecked daily against the latest packages on npm. | quickstart |
| A service that is not an agent viem 2.57.2, sdk-trace-node 2.11.0, local Anvil (chain 31337) | 2026-10-05, hashspan 0.12.0 | A request handler span with a send and a confirm span under it, and no agent option: the confirm span has status success, block, gas used and fee, and no span has a gen_ai attribute. The account is an address only (Anvil signs); the service.name of the OpenTelemetry resource tells services apart. | home page · quickstart |
| An EIP-1193 provider through viem custom() viem 2.57.2, a provider that forwards to Anvil (chain 31337) | 2026-10-05, hashspan 0.12.0 | A job span with a send and a confirm span under it. The provider received eth_chainId and eth_sendTransaction; the confirm span has status success and the fee. This is the path Circle and Fireblocks providers use. Neither service was run, only the path. | wallet services |
| Pimlico OpenTelemetry instrumentation for viem 0.0.5-alpha.1, viem 2.57.2 | 2026-10-02, hashspan 0.8.2 | Both on the same clients: its JSON-RPC spans for signing and sending nest under the send span, in one trace. Use it or traceTransport(), not both: with both, every request is recorded twice. | compare page |
How releases are checked
Section titled “How releases are checked”All of it is public in the repository:
- More than 2,000 tests: unit tests and integration tests against Anvil, with coverage thresholds of 98% of lines and 92% of branches.
- Mutation testing of the code that computes fees and matches receipts, so a wrong fee or a receipt given to the wrong transaction fails a test (#207).
- A real ERC-4337 bundler for user operations, and every documented integration run against Anvil.
- Releases with npm provenance and a CycloneDX SBOM attached to each GitHub release.
- OpenSSF Scorecard on every push to main, with the workflows audited by zizmor.
- Bugs found upstream while building hashspan are reported to their projects and listed, with the fix and the release that carries it, in upstream findings.