Developers · Receipt verification keys
Rotate and retire receipt-signing verification keys
Partners must re-fetch a current public receipt and honor revocation and currently_valid. Verifying a signature against this document is not a grant. Algorithm remains Ed25519. Historical receipts are not re-signed.
What this is
Abraxas signs eligibility receipts with an environment-scoped Ed25519 key. Partners verify the public receipt, including signature_valid and currently_valid. This registry lets operators rotate or revoke verification keys without exposing private signing material and without silently trusting unknown key IDs.
This is not a key-management dashboard, browser key editor, self-service Production issuer, or blockchain key registry.
Architecture
env ABRAXAS_SIGNING_KEY (private, environment-only) env ABRAXAS_PUBLIC_KEY + ABRAXAS_SIGNING_KEY_ID optional ABRAXAS_RECEIPT_VERIFICATION_REGISTRY (public lifecycle entries) -> issue only with active in-window key for this runtime -> verify receipt.signing_key_id through the registry -> GET /api/receipts/verification-keys (public-safe document) partners re-fetch public receipt; signature is not a grant
Operator rotation
- Add the new key's public JWK and key ID to ABRAXAS_RECEIPT_VERIFICATION_REGISTRY as status active, environment-scoped, with schema 1.0.0.
- Configure ABRAXAS_SIGNING_KEY and ABRAXAS_SIGNING_KEY_ID in that environment only. Never commit private material.
- Issue new receipts with the active in-window key. Do not re-sign historical receipts.
- Mark the previous key retiring with allow_historical_verification true so existing signatures still verify.
- After the overlap window, mark it retired. Historical verification remains allowed only while lifecycle rules say so.
- Revoke only for compromise or explicit invalidation. Revoked keys never verify.
- Never copy DEMO registry entries or private keys into Production, or the reverse.
Partner trust document
// Backend first. Re-fetch the current receipt. Honor currently_valid and revocation.
const keys = await fetch("https://abraxasworld.xyz/api/receipts/verification-keys");
const document = await keys.json();
// document.keys[].public_jwk is Ed25519 OKP { kty, crv, x } only.
// Never send signing_key_id, private keys, or environment overrides to Abraxas.
const receipt = await fetch("https://abraxasworld.xyz/api/receipts/" + receiptId + "/public");
const view = await receipt.json();
if (view.signature_valid !== true || view.currently_valid !== true) {
return { allowed: false };
}
Public receipt: Partner Flow · Kit: Integration Kit · Actions: Portable action contract · Mainnet: Mainnet readiness