Trusted Mode and Proof Verification

The problem

Every Platform query response includes a cryptographic proof — a signed hash from the current validator quorum that attests the response matches the platform state tree. To verify these proofs the SDK needs the quorum public keys for the active validator set.

On a full node you can look up quorum keys directly from the Core chain. In a browser or lightweight environment you cannot. Trusted mode solves this.

How trusted mode works

When you create an SDK with trusted: true, the connect() call does an extra step before returning: it fetches the current quorum public keys from a well-known HTTPS endpoint and caches them in memory.

const sdk = EvoSDK.testnetTrusted();
await sdk.connect(); // fetches quorum keys, then connects to DAPI

The trust model:

  • You trust the HTTPS endpoint (operated by Dash Core Group) to return correct quorum public keys.
  • Once the keys are cached, every subsequent query response is verified against them — you do not trust individual DAPI nodes for the data itself.

This is a pragmatic trade-off: you trust one endpoint for the validator set, but verify all actual data cryptographically.

When to use trusted mode

ScenarioTrusted mode?Why
Browser appYesNo access to Core chain
Node.js scriptYesSimplest setup
Server with Core RPCOptionalCan fetch quorum keys from your own node
Local Docker setupYesUse EvoSDK.localTrusted()

If you do not use trusted mode, the SDK still works but cannot verify proofs. Queries return data but you are trusting the responding DAPI node.

Proofs in responses

By default, the SDK verifies proofs internally and returns just the data. To inspect the proof metadata yourself, use the WithProof variants:

// Standard — proof verified internally, returns data only
const identity = await sdk.identities.fetch(id);

// With proof — returns both data and proof metadata
const { data, proof, metadata } = await sdk.identities.fetchWithProof(id);
console.log('Block height:', metadata.height);
console.log('Core chain locked height:', metadata.coreChainLockedHeight);

Some methods also offer an Unproved variant that skips proof verification entirely, useful when you trust the node or want faster responses:

const identity = await sdk.identities.fetchUnproved(id);