Platform Developers Tools Testnet Community
Resources Documentation Hub Infinite Sandbox Digital Seals ZK Proofs TEE Attestation Wallets & Signing Glossary Comparison Smart Contracts Stablecoin Infrastructure API Reference Open Source Community Programs Use Cases Grants Program Foundation

Developer Preview - Testnet Coming Soon

Build Verifiable AI dApps in Minutes.

Submit AI inference jobs, verify execution with cryptographic and hardware-backed proofs, and settle results on-chain with deterministic finality. Move from the developer docs to the tooling stack and into the testnet rollout path without changing your integration model.

EVM Precompiles TEE Attestation zkML Verification PoUW Consensus

Download the current whitepaper PDF and tokenomics PDF.

Scroll to explore platform capabilities
submit_inference
# pip install aethelred-sdk
import hashlib

from aethelred import AethelredClient, ProofType

client = AethelredClient("https://rpc.testnet.aethelred.org")
prompt = b'{"prompt":"Hello AI"}'

submit = client.jobs.submit(
    model_hash=bytes.fromhex("09f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3"),
    input_hash=hashlib.sha256(prompt).digest(),
    proof_type=ProofType.HYBRID,
    priority=5,
    max_gas=1_000_000,
    timeout_blocks=120,
    metadata={"source": "website-home-hero"},
)

job = client.jobs.wait_for_completion(submit.job_id, poll_interval=2.0, timeout=120.0)
if job.status.value != "JOB_STATUS_COMPLETED":
    raise RuntimeError(f"job failed with status={job.status.value}")

seals = client.seals.list(model_hash="09f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3")
seal = next((item for item in seals if item.job_id == job.id), None)
if seal is None:
    raise RuntimeError(f"no seal found for job {job.id}")

verification = client.seals.verify(seal.id)
print(f"seal valid: {verification.valid}")
// npm install @aethelred/sdk
import { AethelredClient, JobStatus, Network, ProofType } from '@aethelred/sdk';

async function sha256Hex(value) {
  const bytes = new TextEncoder().encode(value);
  const digest = await crypto.subtle.digest('SHA-256', bytes);
  return Array.from(new Uint8Array(digest))
    .map((b) => b.toString(16).padStart(2, '0'))
    .join('');
}

async function main() {
  const modelHash = '09f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3';
  const client = new AethelredClient({ network: Network.TESTNET });

  const submit = await client.jobs.submit({
    modelHash,
    inputHash: await sha256Hex(JSON.stringify({ prompt: 'Hello AI' })),
    proofType: ProofType.HYBRID,
    priority: 5,
    maxGas: '1000000',
    timeoutBlocks: 120,
    metadata: { source: 'website-home-hero' },
  });

  const job = await client.jobs.waitForCompletion(submit.jobId, {
    pollInterval: 2000,
    timeout: 120000,
  });
  if (job.status !== JobStatus.COMPLETED) {
    throw new Error(`job failed with status=${job.status}`);
  }

  const seals = await client.seals.list();
  const seal = seals.find((item) => item.jobId === job.id);
  if (!seal) {
    throw new Error(`no seal found for job ${job.id}`);
  }

  const verification = await client.seals.verify(seal.id);
  console.log(`seal valid: ${verification.valid}`);
}

main().catch((error) => {
  console.error(error);
});
// Cargo.toml: aethelred-sdk = "1"
use aethelred_sdk::{
    jobs::SubmitJobRequest, AethelredClient, JobStatus, Network, ProofType,
};
use std::time::Duration;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = AethelredClient::new(Network::Testnet).await?;

    let submit = client
        .jobs()
        .submit(SubmitJobRequest {
            model_hash: "09f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3".into(),
            input_hash: "f4d3a381d89f9f7a35bfa48d9b5f9d7c6c18d2a8b431c1d6a2d2d413c3e7ed09".into(),
            proof_type: Some(ProofType::ProofTypeHybrid),
            priority: Some(5),
            max_gas: Some("1000000".into()),
            timeout_blocks: Some(120),
        })
        .await?;

    let job = client
        .jobs()
        .wait_for_completion(
            &submit.job_id,
            Duration::from_secs(2),
            Duration::from_secs(120),
        )
        .await?;
    if job.status != JobStatus::JobStatusCompleted {
        return Err(format!("job failed with status {:?}", job.status).into());
    }

    let seals = client.seals().list(None).await?;
    let seal = seals
        .into_iter()
        .find(|item| item.job_id == job.id)
        .ok_or_else(|| format!("no seal found for job {}", job.id))?;

    let verification = client.seals().verify(&seal.id).await?;
    println!("seal valid: {}", verification.valid);
    Ok(())
}
package main

import (
    "context"
    "fmt"
    "time"

    "github.com/aethelred/sdk-go/client"
    "github.com/aethelred/sdk-go/jobs"
    "github.com/aethelred/sdk-go/types"
)

func main() {
    ctx := context.Background()

    c, err := client.NewClient(client.Testnet)
    if err != nil {
        panic(err)
    }

    submit, err := c.Jobs.Submit(ctx, jobs.SubmitRequest{
        ModelHash: "09f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3c5d6a1f9f7e2b3",
        InputHash: "f4d3a381d89f9f7a35bfa48d9b5f9d7c6c18d2a8b431c1d6a2d2d413c3e7ed09",
        ProofType: types.ProofTypeHybrid,
        Priority:  5,
        MaxGas:    "1000000",
        TimeoutBlocks: 120,
        Metadata:  map[string]string{"source": "website-home-hero"},
    })
    if err != nil {
        panic(err)
    }
    fmt.Printf("job id: %s\n", submit.JobID)

    job, err := c.Jobs.WaitForCompletion(ctx, submit.JobID, 2*time.Second, 120*time.Second)
    if err != nil {
        panic(err)
    }
    if job.Status != types.JobStatusCompleted {
        panic(fmt.Sprintf("job failed with status %s", job.Status))
    }

    seals, err := c.Seals.List(ctx, nil)
    if err != nil {
        panic(err)
    }

    var sealID string
    for _, seal := range seals {
        if seal.JobID == job.ID {
            sealID = seal.ID
            break
        }
    }
    if sealID == "" {
        panic(fmt.Sprintf("no seal found for job %s", job.ID))
    }

    verification, err := c.Seals.Verify(ctx, sealID)
    if err != nil {
        panic(err)
    }
    fmt.Printf("seal valid: %t\n", verification.Valid)
}
4 SDKs Python, TypeScript, Rust, and Go integration paths
5 proof systems Groth16, PLONK, EZKL, Halo2, and STARK in one verifier surface
2 verification lanes TEE attestation plus zkML proof settlement

Why Aethelred

Purpose-built infrastructure for verifiable AI inference

Aethelred gives developers predictable performance, proof-backed execution, and a practical toolchain from prototype to production.

0x0400

EVM-Compatible Precompiles

Use 0x0400 (TEE) and 0x0300 (zkML) precompiles directly from Solidity without external oracles.

SDKs

Multi-Language SDKs

Python, TypeScript, Rust, and Go SDKs with consistent API shape, async support, and production-ready docs.

PQ

Post-Quantum Security

ML-DSA-65 + ECDSA hybrid signatures ship by default so applications can plan for long-term cryptographic resilience.

BFT

Deterministic Finality

Deterministic CometBFT finality removes reorg uncertainty from critical AI workflows. External finality numbers publish only from VERIFIED benchmark packs and are withheld from this page until review completes.

AI

Framework Integrations

Native support for PyTorch, LangChain, and Hugging Face lets teams onboard existing model workflows quickly.

>_

Developer Tooling

Use CLI automation, VS Code Sovereign Copilot, local Docker devnet tooling, and integrated diagnostics.

Reference Architectures

Where the current protocol fits best

These use-case pages translate the current Aethelred protocol surface into workload-specific architectures without inventing production stats, customer names, or unsupported capabilities.

Need the full workload library?

Use the central Use Cases page to compare all eight reference architectures, then continue into the dedicated Stablecoin Infrastructure page when the workflow includes issuer-authorized settlement or reserve-controlled routing.

Open Use Cases

Quick Start

Get started in 3 steps

From zero to your first on-chain AI inference in under five minutes.

STEP 01

Install the CLI

Install the Aethelred CLI via Homebrew or Cargo on macOS, Linux, and WSL.

terminal
brew install aethelred-foundation/tap/aeth
# or: cargo install aeth
STEP 02

Connect to Testnet

Configure the network and create a wallet. Fund it from the testnet faucet at launch.

terminal
aeth config set --network testnet
aeth config set --rpc https://rpc.testnet.aethelred.io
aeth wallet create --name mykey
STEP 03

Submit your first job

Submit an AI inference job in one command while the network handles verification and settlement.

terminal
aeth pouw submit-job \
  --model-hash abc123 \
  --input ./prompt.json \
  --verification-type hybrid \
  --from mykey

Network

Network specifications

Designed for institutional-grade verifiable AI compute at scale.

Consensus

PoUW

Verification

Hybrid

Proof Systems

5

SDKs

4

Supply

10B AETHEL

Community

Join the builder community

Connect with engineers building the future of verifiable AI.

Discord

Real-time discussion with developers, validators, and protocol engineers.

Join server →

Developer Forum

Technical discussions, AIP proposals, and governance-focused research threads.

Browse forum →

Twitter / X

Release updates, roadmap milestones, and ecosystem announcements.

@AethelredL1 →

Start building on Aethelred

Build your first verifiable AI workflow today.

Start in the developer docs, prepare deployments with the tooling stack, and validate planned connectivity in the testnet dashboard.

Open Developer Docs