Repository navigation
feat: signed cross-provider verification with AirnodeHub - #10
Merged
Merged
Conversation
Adds AirnodeHub's dRPC listing as an attesting peer in D2 verification. Every answer it gives carries an EIP-191 signature, which Heightproof checks against the exact request sent (request hash) and the exact bytes received. - shared: attestation reading, passthrough request-hash derivation, signer recovery, and worker-side re-verification (noble, no viem dep) - web3: airnodeDrpcEndpoint(), per-endpoint fetchImpl for x402 payment, responses read as text so signatures survive; non-JSON-RPC HTTP errors (an unpaid 402) become failed observations - worker: re-checks every signature against the kept body and the compared result hash before storing; D2 reasons cite verified signers - migration 003: evm_attestation (jsonb), evm_attested_by - dashboard: verified signer in the request explorer - docs/airnode.md, README, detectors, CHANGELOG A signature is attribution, not truth: it changes no detector weight. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Adds AirnodeHub's dRPC listing as an attesting peer in cross-provider verification (D2). Every answer it gives carries an EIP-191 signature, so a disagreement incident comes with evidence that anyone can re-verify offline, without trusting Heightproof.
How it works
@heightproof/web3): reads responses as text, so the signed bytes survive. It checks the signature against the exact bytes received (signatureValid), and checks that the signed request hash matches the one derived from the exact request sent (requestBound), so an answer to a different request can't be replayed. Each endpoint can take its ownfetchImpl, for example one wrapped with@x402/fetchto pay the $0.01-per-call charge.003addsevm_attestation(jsonb, including the signed body, capped at 64 KiB) andevm_attested_by, which is set only after the worker's re-check passes.402, is now recorded as a failed observation instead of being parsed as an answer.shareduses@noble/curvesand@noble/hashesfor keccak and secp256k1 recovery. It does not depend on viem.Testing
eth_getBalanceagainst the real Airnode is recorded as a failed observation.npm run build,typecheck,lintandtestall pass, andtest:integrationpasses with 14 tests.Not yet exercised: a paid call end to end. It needs a wallet funded with aUSD on Base Sepolia.
Docs:
docs/airnode.md🤖 Generated with Claude Code