Skip to content
Pre-Launch · Filing seed · Series A — Q4 2026

Wavestar Technology · Identity registry

One namespace for every actor in orbit.

did:orbit is the W3C DID method Wavestar uses as the shared registry spine across all four modules. Operators, satellites, ground stations, observers, cleared contracts, and regulatory filings all resolve under one root. Documents are signed, mirrored in the Trillian log, and append-only: corrections are new entries with a supersedes edge — never in-place updates.
Conformance
W3C DID Core 1.0
Method registered
did:orbit
Resolution
HTTPS + JWS envelope
Durability
Trillian-mirrored

Method grammar

The shape of a did:orbit identifier.

Every Wavestar identifier is a URI that resolves deterministically to a signed DID document. The grammar below is the full ABNF — there is no ambiguity and no proprietary escaping.
abnf
did                = "did:orbit:" type ":" authority ":" id [":" version]
type               = "operator" / "satellite" / "ground" / "observer" /
                     "contract" / "filing" / "instrument" / "slot"
authority          = 1*( ALPHA / DIGIT / "-" )   ; ISO-3166 + registry code
id                 = 1*( ALPHA / DIGIT / "-" / "_" )
version            = "v" 1*DIGIT
did:orbit
did:orbit:operator:fcc:starlink-services-llc
did:orbit
did:orbit:satellite:itu:usa-astra-1l-46804
did:orbit
did:orbit:ground:fcc:ksat-svalbard-sg1
did:orbit
did:orbit:observer:wavestar:leolabs-primary
did:orbit
did:orbit:contract:wavestar:dlm-2026-04-22-1400z-sg1-starlink-b7a4f2
did:orbit
did:orbit:filing:itu:sns-2026-04-15-usaat-ng2a

Resolution flow

Deterministic, signed, cache-friendly.

Resolution is a plain HTTPS GET. The response is a JWS-signed envelope containing the DID document plus a Trillian inclusion proof. Any client can verify without calling Wavestar a second time.
http
GET https://resolver.wavestar.space/1.0/identifiers/did:orbit:satellite:itu:usa-astra-1l-46804
Accept: application/did+ld+json

HTTP/1.1 200 OK
Content-Type: application/did+ld+json
Cache-Control: public, max-age=300, stale-while-revalidate=3600

{
  "didDocument": { ... },
  "didDocumentMetadata": {
    "versionId": "v7",
    "created":   "2026-01-04T08:12:44Z",
    "updated":   "2026-04-18T14:03:12Z",
    "deactivated": false
  },
  "didResolutionMetadata": {
    "contentType": "application/did+ld+json",
    "logInclusion": {
      "logId":     "wavestar-registry-v1",
      "treeSize":  14823117,
      "leafIndex": 14811404,
      "auditPath": [ "sha256-...", "sha256-..." ],
      "sthSignature": "ed25519-..."
    }
  },
  "proof": {
    "type":    "Ed25519Signature2020",
    "created": "2026-04-18T14:03:12Z",
    "verificationMethod":
      "did:orbit:operator:wavestar:registry-authority#key-2026-q2",
    "proofValue": "z58Pk7..."
  }
}

Sample documents

Three of the eight entity types, in full.

Every type has its own JSON-LD context. Fields below are normative; the full schema list lives in the developer docs.

Operator

json
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://spec.wavestar.space/did-orbit/v1"
  ],
  "id": "did:orbit:operator:fcc:starlink-services-llc",
  "type": ["Operator"],
  "legalName": "Starlink Services, LLC",
  "jurisdiction": "US-DE",
  "regulatoryFilings": {
    "fcc": ["IBFS:SAT-LOA-20200526-00055"],
    "itu": ["SNS:USASAT-NGSO-3"]
  },
  "verificationMethod": [
    {
      "id": "#key-ops-2026-q2",
      "type": "Ed25519VerificationKey2020",
      "controller": "did:orbit:operator:fcc:starlink-services-llc",
      "publicKeyMultibase": "z6Mkhn...NrWp"
    },
    {
      "id": "#key-settlement-2026-q2",
      "type": "Bls12381G2Key2020",
      "controller": "did:orbit:operator:fcc:starlink-services-llc",
      "publicKeyMultibase": "zUC7Kz...XyQq"
    }
  ],
  "assertionMethod": ["#key-ops-2026-q2"],
  "authentication":  ["#key-ops-2026-q2"],
  "capabilityInvocation": ["#key-settlement-2026-q2"],
  "service": [
    {
      "id": "#clearing-endpoint",
      "type": "WavestarClearingMember",
      "serviceEndpoint": "https://clearing.starlink.com/wavestar"
    }
  ]
}

Satellite

json
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://spec.wavestar.space/did-orbit/v1"
  ],
  "id": "did:orbit:satellite:itu:usa-astra-1l-46804",
  "type": ["Satellite"],
  "operator": "did:orbit:operator:lux:ses-sa",
  "noradCatalogId": 46804,
  "cosparId": "2020-079A",
  "orbitalRegime": "GEO",
  "subsatellitePoint": { "longitudeDeg": -19.2, "updated": "2026-04-20T00:00:00Z" },
  "massKg": 4500,
  "powerW": 13000,
  "payloads": [
    {
      "id": "#ku-band-transponders",
      "type": "KuBandTransponder",
      "count": 32,
      "spectrumFilings": ["did:orbit:filing:itu:sns-astra-1l-kuband"]
    }
  ],
  "status": "operational",
  "launch": {
    "date": "2020-11-15T02:44:00Z",
    "vehicle": "Ariane 5 ECA",
    "supersedes": "did:orbit:satellite:itu:usa-astra-1k-37775"
  }
}

Cleared contract

json
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://spec.wavestar.space/did-orbit/v1"
  ],
  "id": "did:orbit:contract:wavestar:dlm-2026-04-22-1400z-sg1-starlink-b7a4f2",
  "type": ["ClearedContract", "DownlinkMinutes"],
  "instrument": "DLM",
  "buyer":  "did:orbit:operator:fcc:starlink-services-llc",
  "seller": "did:orbit:ground:fcc:ksat-svalbard-sg1",
  "ccpNovatedTo": "did:orbit:operator:wavestar:ccp",
  "window": {
    "start": "2026-04-22T14:00:00Z",
    "end":   "2026-04-22T14:10:00Z",
    "minutes": 10
  },
  "price": { "amount": "0.42", "currency": "USDC", "perUnit": "minute" },
  "settlement": {
    "cashLeg": "eip155:8453/erc20:0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "resourceLeg":
      "did:orbit:observer:wavestar:quorum-2026-q2#attestation",
    "status": "settled",
    "settledAt": "2026-04-22T14:10:04Z"
  },
  "logEntry": {
    "logId":     "wavestar-registry-v1",
    "leafIndex": 14811404,
    "leafHash":  "sha256:b7a4f2..."
  }
}

Method rules

The non-obvious invariants.

  • 01

    Append-only by construction

    No DID document is ever mutated in place. Corrections create a new version with a supersedes edge pointing to the prior version. The Trillian log preserves every intermediate state for audit.
  • 02

    Signed by the controller

    Every CREATE and UPDATE is signed by a key the prior version already authorised. The registry rejects any transition that breaks the key-continuity proof chain.
  • 03

    One authority per type

    Operator DIDs anchor to the jurisdiction that licenses them (FCC, Ofcom, ArCT, etc.). Satellite DIDs anchor to ITU SNS filings. Cross-checks are automatic.
  • 04

    No private state in the DID document

    DID documents hold public keys, service endpoints, and public filings — never PII, never proprietary commercial terms. Private data moves over separate tenant-scoped APIs.
  • 05

    Multibase everywhere

    Public keys use multibase encoding. Resolvers read the prefix to determine the algorithm. Mixing Ed25519 and BLS12-381 on the same document is normal.
  • 06

    Deactivation, not deletion

    A decommissioned satellite has its DID marked deactivated with a reason code. The document stays resolvable forever, which is required for historic trade settlement audits.

CRUD operations

Four verbs. Every one signed.

Create
POST /1.0/identifiers (signed envelope)

Produces a new DID. Requires a sponsoring authority signature plus the initial controller key.

Resolve
GET /1.0/identifiers/{did}

Public, unauthenticated. Returns DID document plus Trillian inclusion proof.

Update
PUT /1.0/identifiers/{did} (prior-controller-signed)

Rotates keys, updates service endpoints, adds payload records. Validated against the prior version's authentication set.

Deactivate
DELETE /1.0/identifiers/{did} (controller-signed)

Sets the deactivated flag and a reason code. Document remains resolvable; new trades referencing a deactivated DID are rejected by clearing.

Philosophy

One namespace across four modules means a ground station, a satellite, an operator, and a cleared trade all point at each other by reference. The moat is not the clearing engine. The moat is the registry.
Wavestar PRD·§ 4 — Org model

Build on did:orbit

Resolver SDKs in TypeScript, Rust, Go, and Python.

The resolver libraries verify Trillian inclusion proofs and controller signatures automatically — you get a verified DID document or a typed error, never an unsigned blob.