Abrams Event Address / AEA-STATE/1 version 1.0

A precise address in space and time.

Abrams Research Systems developed AEA, a simple software record format that captures a vehicle's position, motion, orientation, and time as one consistent snapshot. When a drone, missile, or spacecraft loses GPS or radio contact from jamming, spoofing, or distance, the last recorded state is often hard to use because different systems track clocks and coordinate frames differently. AEA packages those existing measurements into a single record with a built-in corruption check so the data stays consistent and usable. The software is written and host-verified at TRL 3, and is designed to plug into existing flight software through a standard C interface. We believe that, once properly tested, AEA could help with faster recovery after loss of comms, more accurate course correction, lower processing load during recalibration, and reduced fuel spent on re-acquisition across drones, missiles, and deep-space missions.

Status: working reference software that builds and passes its published tests (TRL 3). Hardware and flight testing have not been done yet.

The idea

Give the moment its context.

The block-time view pictures events by their place and time. AEA turns that idea into an explicit record: position, time, velocity and attitude, together with the body, reference frame and time scale needed to interpret them.

Our reference test record is a real place and moment — Cambridge, 28 June 2009 (Hawking’s “time-traveller reception”) — chosen so anyone can recompute it. It is a mathematical test record derived from WGS 84 inputs and tagged ITRF2020 for testing, not an official IERS station coordinate.

Read the Cambridge test vector ↗

Record layout

136 bytes. Every field explicit.

A fixed 136-byte record layout defined in aea.h, carrying position, time, motion and attitude with the reference frame and clock declared in every record.

View record fields and technical notes
AEA record fields, copied from aea.h
OffsetBytesFieldMeaning
04versionRecord format identifier
44body_naifBody ID; 399 = Earth, 499 = Mars, 0 = none
88time_secSigned seconds since 1970-01-01 on the declared scale
164time_nsecNanoseconds, 0 to 999,999,999
202frameITRF2020, GCRS, BCRS or BODY
222time_scaleTAI, TT, TCB or TDB
2424pos_m[3]Position in metres in the declared frame
4824vel_mps[3]Velocity in metres per second in the declared frame
7232quat_xyzw[4]Attitude quaternion, x / y / z / w
10432hash[32]SHA-256 over the canonical first 104 bytes

From aea.h: “Naturally 8-byte aligned. Total struct size is exactly 136 bytes.” The header states: “Field order keeps every 8-byte field naturally aligned on an 8-byte boundary.”

The digest uses canonical Little-Endian encoding. Negative zero is canonicalized to positive zero before hashing. The library checks finite floating-point values; it does not enforce a unit-length attitude quaternion (producers should normalize quaternions before sealing per ICD §2.1). The identity quaternion can mean either null/unmeasured attitude or alignment with the frame axes.

Reference frames

Name the map.

  • ITRF2020 Earth-fixed Cartesian metres.
  • GCRS Geocentric Celestial Reference System.
  • BCRS Barycentric Celestial Reference System.
  • BODY Body-fixed Cartesian, centered on the declared NAIF body.

NAIF examples: Earth 399, Mars 499, Moon 301. Body 0 means none, not a barycenter.

Time scales

Name the clock.

Civil UTC is deliberately excluded because leap seconds make it non-monotonic; records use TAI, TT, TCB or TDB, with POSIX/UTC conversion defined in ICD §6.3.

Time is stored as signed seconds since 1970-01-01 on the declared scale, plus nanoseconds. Conversion and coordinate transformations remain the caller’s responsibility.

Read ICD §6.3 ↗

Reference C interface

Three functions.

#include "aea.h"

int32_t aea_seal(AeaRecord *record);
int32_t aea_verify(const AeaRecord *record);
uint32_t aea_version(void);

aea_seal validates the fields and writes the digest. aea_verify validates the fields and compares the recomputed digest. It returns 0 on a match, 1 on mismatch, or a negative validation error. aea_version takes no arguments.

Inspect the public header ↗
Technical version details
Visitor-facing name
AEA-STATE/1 version 1.0
Wire version field
1
ABI constant
0x00010000
Reference library used for these checks
v1.0.4 · commit 287392912020d2a8ec33d81fe426ba17ce350a5f

Digest & scope

Check the bytes. Understand the boundary.

The unkeyed SHA-256 digest is a check for accidental corruption of the record's first 104 bytes (bytes 0–103). In the exhaustive single-bit test it detected 1,082 of 1,088 flips; the 6 exceptions are documented ±0.0 sign flips. It does not protect against deliberate changes, because anyone can recompute it.

AEA does not navigate, dead-reckon, detect or bound drift, authenticate senders, reject spoofed packets, provide electronic warfare or anti-spoofing capabilities, save propellant, or detect SEUs.

AEA-AUTH/1 is a planned future profile for keyed signing. It is not built and is not part of the current library.

Hardware timing, stack depth and other on-target measurements: not yet measured.

Technical evaluation

Inspect the record. Reproduce the evidence.

An evaluator integration kit is available on request.

Request evaluation kit