Reference
Changelog
SDK and program version history.
The protocol publishes the SDK as @entros/pulse-sdk on npm. Programs are deployed in place—program IDs do not change between versions. Material changes to instructions, PDAs, or scoring functions are documented here.
Pulse SDK
1.5.x
Current published version: 1.5.3. The 1.5.1–1.5.3 line is responsiveness, audio capture, and dependency hygiene on top of the 1.5.0 baseline; no API or breaking changes.
- 1.5.3 — Audio capture passes
voiceIsolation: trueingetUserMediaconstraints (W3C Media Capture Extensions); browsers and OS layers that support the constraint apply the platform's voice-isolation pipeline before samples reach the SDK, browsers that don't recognize it fall back to the default constraints. The F0 contour detector also yields to the host event loop between blocks so the verify spinner repaints through the F0 stage. Transitiveuuiddependency is overridden to^14.0.0to clear advisories surfaced by the upstream chain. - 1.5.2 — Heavy feature-extraction stages yield to the host event loop between blocks. The verify spinner repaints during long extraction stages instead of stalling.
- 1.5.1 — Republish carrying README cross-link to
@entros/verifyfor the drop-in path. No code change against 1.5.0.
1.5.0
submitViaWalletnow throws when an on-chain transaction reverts. Earlier versions returnedsuccess: truefor transactions that were included but failed in execution, which let a "verified!" UI render for a tx that mutated nothing. The thrown error preserves theInstructionErrorJSON shape so callers can match onCustomcodes.- Anchor IDLs (
entros_anchor,entros_verifier) are now bundled into the SDK at compile time; the SDK no longer fetches IDLs at runtime. Saves ~150–300ms per identity read and ~300–600ms per re-verification submit. Bundle size grows ~12KB gzipped.
1.4.x
- 1.4.0 — first-verification mints now bundle a validator-signed receipt as an
Ed25519Program::verifyinstruction immediately beforemint_anchor. The on-chain program enforces the binding (see entros-anchor errors 6015–6021). The SDK consumes the receipt from the/validate-featuresresponse and prepends the verify instruction transparently; callers do not need to handle the receipt directly. - 1.4.0 —
instructionsSysvaris now always passed tomint_anchor(the on-chain accounts struct requires it whether or not a receipt is bundled). SDKs older than 1.4.0 are silently broken against the deployed program. - 1.4.0 —
PulseConfig.onPrivacyFallbackcallback. Browsers that block encrypted localStorage (iOS Safari private mode, Brave shields, Firefox Total Cookie Protection) trigger this callback; the host app returnstrueto allow plaintext fallback orfalseto keep storage in-memory only. Without the callback, the SDK defaults to in-memory only—safer than the previous silent plaintext fallback. - 1.4.0 — validator-unreachable returns
{ ok: false, reason: "validation_unavailable" }instead of silently bypassing server validation. - 1.4.1 — Ed25519 receipt instruction is pinned immediately before
mint_anchorwith an explicit ComputeBudget so wallet adapters can't inject between them. - 1.4.2 —
requestSasAttestationskips the/attestcall when wallet ownership proof can't be produced (nosignMessage, signing throws, or no server nonce). Avoids doomed-to-400 requests after the executor's/attestownership requirement landed.
1.3.0
- New
PulseSDK.resetBaseline(),PulseSession.completeReset(), andsubmitResetViaWalletpublic API for the baseline-reset flow.IdentityStatetype gainslastResetTimestamp.
1.2.x
- Added
attestAgentOperatorandgetAgentHumanOperatorfor the Agent Anchor integration - Added
verifyEntrosAttestationfor the SAS attestation read path - Added Lissajous challenge generation for touch capture
- Hardened circuit input preparation against malformed fingerprint inputs
1.1.x
- Re-export of
PROGRAM_IDSand capture-window constants submitViaRelayerfor walletless mode
1.0.0
Initial public release. Capture, feature extraction, hashing, proof generation, wallet submission.
Programs
entros-anchor
- Current deployment enforces validator-signed mint-receipt binding on first verification: every
mint_anchorcall must be immediately preceded by anEd25519Program::verifyinstruction whose signed message ties the wallet, commitment, andvalidated_attimestamp to the registered validator pubkey. SDKs at 1.4.0 or later bundle the receipt automatically; older SDKs hitMissingValidatorReceipt(6015). Re-verification (update_anchor) binds via the on-chainVerificationResultPDA produced by the verifier program and is unaffected. - Cross-program binding patch on
update_anchoragainst the verifier program. Discovered and fixed in the same sprint as the T4a security wave. - Reset path (
reset_identity_state) gated behind a 7-day cooldown.
entros-verifier
- Groth16 verification key matches the published Hamming circuit at ~1,996 constraints.
verify_proofwrites aVerificationResultaccount that the Anchor program reads in the same transaction.
entros-registry
ProtocolConfiginitialized on devnet. Validator registration is gated until the Anonymity Ring transitions to permissionless operation.ProtocolConfigextended withvalidator_pubkey(offset 77, +32 bytes; LEN 77→109) for the mint-receipt binding above. Migration handled by the admin-onlyset_validator_pubkeyinstruction with a realloc + raw-byte write so accounts initialized at the legacy 69-byte size are upgraded in place.
Where to look next
- Roadmap: Near-term—what lands next
- Reference: Programs—current instruction set