Run a TEE-attested seller
A seller running on Intel TDX hardware can prove it cryptographically to every buyer, before any payment. This guide takes an existing seller (see Become a provider) and adds TEE attestation with the antseed-verifier SDK, so buyers that require verification will route to you.
How it works
- Your seller loads the SDK's prover at startup and advertises the capability
verifier.antseed-verifierin its discovery metadata. - A buyer challenges you on the reserved route
/_antseed/attest/antseed-verifierwith a fresh nonce. The prover mints an Intel TDX quote bound to that nonce and your peer ID, signs the evidence bundle with your identity key, and returns it. - The buyer verifies the quote against Intel's DCAP certificate chain locally. Attestation runs before provider matching, payment and metering. It is free and unmetered, and limited to 10 attestations per buyer per minute.
If the prover fails to load at startup, the seller exits rather than advertising a capability it can't answer.
Prerequisites
- A genuine Intel TDX VM, for example a GCP
c3confidential VM (Ubuntu 24.04) with TDX enabled. The prover mints quotes throughconfigfs-tsm(/sys/kernel/config/tsm/report), which only exists on real TDX hardware and requires root. - A working seller (
antseed seller startserving requests) on that VM. - Node.js 20+.
1. Install the verifier SDK
The CLI resolves the ID antseed-verifier to the npm package @antseed/antseed-verifier at a pinned version, and installs it into ~/.antseed/plugins on first use.
To test an unpublished source checkout, install it into the plugins directory from the monorepo package:
git clone https://github.com/AntSeed/antseed.git
cd antseed
pnpm install
pnpm --filter @antseed/antseed-verifier build
cd packages/antseed-verifier
npm pack
npm install --prefix ~/.antseed/plugins ./antseed-antseed-verifier-*.tgz
The loader expects the package at ~/.antseed/plugins/node_modules/@antseed/antseed-verifier.
2. Configure the prover
The prover reads its configuration from the environment only, never from buyer-supplied values:
# Required: your peer ID (EVM address, without 0x)
export ANTSEED_TEE_PEER_ID=<peerId>
# Recommended: your seller identity key (hex). Enables the seller-bound
# capability: the evidence bundle is signed so buyers can recover your peer ID.
# Disabled automatically if the key's address doesn't match ANTSEED_TEE_PEER_ID.
export ANTSEED_VERIFIER_SIGNING_KEY=<hex-private-key>
# Node quote source. Defaults to configfs; leave unset on a standard TDX VM.
# export ANTSEED_VERIFIER_NODE_TEE=configfs
3. Start the seller with the verifier
sudo -E antseed seller start --verifiers antseed-verifier
sudo is needed because configfs quote minting requires root; -E keeps your environment.
You can enable the verifier three ways, in precedence order:
--verifiers antseed-verifieron the command lineANTSEED_VERIFIER_SDKS=antseed-verifierin the environment"verifiers": ["antseed-verifier"]undersellerin~/.antseed/config.json(theantseed seller setupwizard can write this)
The first ID in the list becomes your advertised default. On success the seller prints:
Verifier prover embedded: antseed-verifier
Verifiers advertised: antseed-verifier
4. Confirm you're advertising
From any other machine:
antseed network peer <peerId>
The output includes Verifiers: antseed-verifier (default).
antseed network browse also shows a Verifier column once any peer advertises one.
5. Attest your inference provider too (optional)
The two gating capabilities, seller-node-tee-genuine and seller-bound, cover your node. If your downstream inference provider also runs confidential hardware, the prover can relay its evidence so buyers see it. seller-provider-tee-genuine, seller-provider-gpu-cc (NVIDIA Confidential Computing) and seller-provider-measured-image are reported for buyer policy:
# An endpoint that returns the provider's evidence for a nonce ({nonce} → hex)
export ANTSEED_VERIFIER_PROVIDER_EVIDENCE_URL='http://127.0.0.1:9000/evidence?nonce={nonce}'
export ANTSEED_VERIFIER_PROVIDER_TEE_FIELD=quote
# The frozen report_data binding scheme the provider's quote uses:
# antseed-rd-v1 Antseed's canonical scheme
# nonce-pubkey-sha256-v1 used by some third-party providers
export ANTSEED_VERIFIER_PROVIDER_BINDING_SCHEME=antseed-rd-v1
export ANTSEED_VERIFIER_PROVIDER_BINDING_PUBKEY_FIELD=e2e_pubkey
# Optional: per-GPU NVIDIA CC evidence field → enables seller-provider-gpu-cc
# export ANTSEED_VERIFIER_PROVIDER_GPU_FIELD=gpu_evidence
The SDK is provider-agnostic: no vendor hosts or schemas are built in, so pointing it at a different confidential-inference backend is configuration only. For a worked example against a live third-party TDX provider, see the SDK's end-to-end guide.
6. Test the full loop as a buyer
From a second machine (no special hardware needed):
antseed buyer start --verifiers antseed-verifier --require-verifier --peer <peerId>
Send any request through the buyer proxy. The buyer log shows Verified <peerId>... via antseed-verifier.
If attestation fails under --require-verifier, the request is refused with a 502 that names the failed claims. That refusal is the guarantee your buyers rely on.
Troubleshooting
| Symptom | Cause |
|---|---|
| Seller exits at startup with a verifier load error | SDK not installed in ~/.antseed/plugins, or its version doesn't match the CLI's pinned version |
seller-node-tee-genuine fails locally | Not a genuine TDX VM, not running as root, or configfs-tsm unavailable |
seller-bound missing from verdicts | ANTSEED_VERIFIER_SIGNING_KEY unset, or its address doesn't match ANTSEED_TEE_PEER_ID |
| Buyer reports TCB failures | Host platform needs microcode/TCB updates; buyers running ANTSEED_VERIFIER_STRICT_TCB=true accept only UpToDate |
See also
- Verify a seller's TEE: the buyer side of this handshake.
- AIP-3: Pluggable Verifier SDKs: the protocol specification.
- Don't Trust the TEE Label: why this exists.