Solana is the canonical chain. Jobs, staking, deposits, rewards, and the authoritative node registry live on Solana. Each EVM deployment carries only a mirror of the node public-key set (versioned snapshots) plus this lightweight verifier. It stores no job, round, or feed state — everything it needs arrives in calldata and is checked cryptographically.
One signature, every chain
The Molpha signed message deliberately omitschainId. The node network signs (jobId, value, timestamp, …) once, and every EVM verifier checks that exact same message — no re-signing, no chain-specific payload. This is what lets a single signed result be consumed across every supported chain.
What the Verifier does
Node registry
Mirrors up to 256 oracle nodes, storing their secp256k1 public keys in gas-efficient SSTORE2 blobs. Every add/remove creates a new immutable registry version.
Deterministic selection
Derives the per-round signer group from a seed bound to the data payload, so callers cannot grind which nodes are eligible to sign.
Plain-sum aggregation
Reconstructs the coalition public key by summing the keys of the actual signers, then verifies one Schnorr signature against it.
Stateless verification
verify is a view call. The signed payload is self-contained and permissionlessly verifiable on any supported EVM chain.ecrecover precompile, which recovers precisely the s·G − e·P point the Schnorr check needs.
Core concepts
Registry versions
The node set is append-only and versioned. Each version is an immutable SSTORE2 snapshot of the key set;addNode / removeNode writes a brand-new snapshot, so the registry version increases by one on every mutation. Historical snapshots are never mutated, so a payload signed against an older registry version stays permanently verifiable.
- Index
0of each snapshot is the plain-sum aggregate key of all nodes in that version. - Indices
1 .. nodeCounthold the individual node keys. - A
DataUpdateis always verified against the exactregistryVersionit was signed for, even when newer versions exist.
signersBitmap can address.
Redundancy buffer and group size
For each round the contract selects a signer group slightly larger than the strict threshold, so a few nodes can drop out without failing the round:redundancyBuffer is a protocol-admin parameter. The actual signers must be a subset of this selected group, and there must be at least signaturesRequired of them.
Signers bitmap
Participation is encoded as auint256 bitmap: bit i-1 is set iff the 1-based node index i signed. With at most 256 nodes, a single uint256 is always sufficient.
Data structures
These are defined inIVerifier.
DataUpdate — the signed result payload
SchnorrSignature — the aggregate signature
Verifying a data update
verify is a view function. It returns true for a valid signature and false for a cryptographically invalid one. Structural / policy violations revert (bad registry version, empty registry, zeroed inputs, too few signers, or a signer outside the selection set). Integrators should treat a revert and a false return as equivalent “not verified” outcomes.
The checks run in order:
- The
registryVersionexists and has at least one node. - Structural guards: non-zero
signaturesRequired,signersBitmap,signature,commitment. popcount(signersBitmap) ≥ signaturesRequired.- Signers ⊆ the deterministically derived selection set.
- The aggregate Schnorr signature over the canonical message.
Consumer integration
See Verify on EVM for the full consumer-contract walkthrough and integration checklist. Because the Verifier is stateless with respect to feeds, your contract owns any freshness, replay, or value-bounds policy —verify only attests that the node network signed (jobId, value, timestamp, …) against a given registry version.
A successful verify proves at least signaturesRequired keys from the mirrored registryVersion signed the exact DataUpdate, and that every signer is inside the deterministic selection set. It does not prove freshness, prevent replay, or independently prove that the payload corresponds to genuine Solana job state. Those guarantees — and the protocol’s admin powers — are covered in the Security Model.