Specification v0.1 · open source · no token sale

Measure launch progress
in energy, not in promises.

Space R&D funding is normally accounted for in dollars spent and reports filed. OrbitKG accounts for it in specific mechanical energy actually delivered to a payload. That gives a unit nobody can fake, nobody can vote on, and nobody has to be asked about — it follows from two physical constants.

The unit is the project name
1 OKG = 1 kg to a 400 km circular orbit
= 33.0223 MJ/kg
= 9.17 kWh/kg · reference altitude 400 km · equatorial launch site

A metric with no oracle in it

Every target — a suborbital hop, a tether catch point, GEO, an escape trajectory — is expressed as a ratio of specific energies and lands on one continuous axis. Measured from a sea-level equatorial pad that already carries the Earth's rotation, with inertial (ECI) velocities:

Δε(h, v) = μ/R − μ/(R + h) + v²/2 − V_ROT²/2

μ     = 3.986004418 × 10¹⁴ m³/s²   Earth gravitational parameter
R     = 6 371 000 m                mean radius
V_ROT = 465 m/s                    equatorial rotation, credited to the vehicle

No price feed

The scale is public pure. It reads no external state, so there is no oracle to bribe, stall or corrupt.

No governance

Nobody votes on how much a kilogram to orbit is worth in OKG. μ and R are not parameters.

Independently checkable

Anyone can recompute every number on this page with a calculator, then diff it against the deployed contract.

The transition table

Generated by the contract itself, not typed in by hand — reproduce it with npx hardhat run scripts/energy-table.js.

Target Δε, MJ/kg OKG per kg Share of the way to orbit
30 km, ballistic0.2930.008880.9%
100 km (Kármán line), ballistic0.9670.029282.9%
100 km at 1 km/s1.3590.041154.1%
100 km at 3 km/s (HASTOL class)5.3590.1622816.2%
150 km at 5 km/s13.8310.4188441.9%
LEO 400 km, circular33.0221.00000100.0%
LEO 800 km34.6641.04972105.0%
MEO 20 200 km (GPS)54.9561.66421166.4%
GEO 35 786 km57.7291.74819174.8%
Escape (11 186 m/s)62.4551.89130189.1%

Suborbital is ~3% of the way

The gap between "reached the Kármán line" and "reached orbit" is 34× in energy. The scale makes it impossible to present the first as the second.

Altitude is cheap, velocity is expensive

Lifting 30 km costs under 1% of reaching orbit. A mechanism that adds kilometres of altitude solves almost nothing; a mechanism that adds kilometres per second solves almost everything.

Energy is a floor, not a price

Physical floor
$0.46
per kg to LEO — 9.17 kWh at $0.05/kWh
Market today
~$2 700
per kg on the most efficient reusable vehicles
The gap
~5 900×
this is the work, not an error in the scale

That factor is not a reason to peg anything to it. It is the subject matter of the protocol: for every kilogram there is roughly $2 700 lying between the physical floor and the market price, and any team that closes part of that gap on its own segment creates measurable value.

The scale must not be used as a price peg. It measures physics. Money lives separately and is never mixed into the scale contract.

Splitting the climb into segments

Each segment has its own market level and its own physical floor. splitAtHandoff() computes how much energy is left for the boost stage when the carrier only reaches a handoff point:

Carrier delivers to Carrier share Boost stage share
100 km at 1 km/s4.1%95.9%
100 km at 3 km/s16.2%83.8%
150 km at 5 km/s41.9%58.1%

This is why tether and electromagnetic schemes are interesting: they absorb the larger part of the total orbital energy, and they may restore it slowly from sunlight. A tether works like a flywheel — it accumulates cheap continuous energy and releases it in rare powerful impulses. A rocket cannot do that: its energy source is its propellant.

What a unit of work actually costs

The floor is physics. The price is whatever sellers quote. Quotes come in $/kg, but a kilogram to a sun-synchronous orbit, to GTO and to 185 km are different amounts of work, so $/kg figures from different missions cannot be compared. Dividing each price by the OKG the scale assigns to its orbit gives $/OKG — the price of one unit of work, the same unit for every orbit. No public series does this. This one does: 38 public price points from 1969 to 2026, run through EnergyScale, deflated to 2025 dollars with CPI-U.

There is no single "cost of launch". Buying a slot on a rideshare, a whole vehicle, or a full service with mission assurance are three different prices, so the index keeps three series and never mixes them. The vehicle series is further split by class, because a small launcher and a heavy one differ by a factor of three per kilogram.

Rideshare · Feb 2026
$6 600
per OKG — SpaceX Transporter, $7 000/kg to SSO, posted price divided by package mass
Vehicle list, heavy · Feb 2026
$7 868
per OKG — Falcon 9, $74M for 5.5 t to GTO, list price divided by maximum stated capacity
Contract · Jul 2024
$37 469
per OKG — NASA JPSS-4, $112.7M for 2 930 kg to 833 km, award value divided by spacecraft mass

Annual medians, 2025 dollars per OKG, selected years

Year Rideshare List, heavy List, small Contract (NASA LSP)
2016—6 549—64 414
20196 177——187 158
20225 9368 15416 46778 277
20236 738—25 006—
20246 0414 26626 68437 469
20256 3777 71728 333—
20266 6007 868——

A year with one point is just that point: 2024 "heavy" is Vulcan's starting price alone. Saturn V in 1969 comes to $11 941/OKG in 2025 dollars — above today's Falcon 9 list price, not below it. The "~$2 700/kg" above divides Falcon 9's list price by its maximum expendable LEO capacity; the index pairs the same list price with the 5.5 t to GTO it is quoted for, which is why Falcon 9 appears at $7 868/OKG rather than ~$2 800. All years and the medium and super-heavy classes are in the JSON.

What the series show

Rideshare is flat in real terms: $6 177 in 2019, $6 600 in 2026. The "+$500/kg a year" SpaceX's sales lead described is roughly inflation. The cheapest work ever quoted sits around $4 000/OKG — Proton-M in 2016 and Vulcan in 2024. Government contracts run five to twenty times the vehicle list price, because one spacecraft rides a whole rocket and the award includes services.

What it is not

Not a price feed and not wired into any contract. The contract series is one agency, the rideshare series one seller; the deflator is general CPI, not an aerospace index; inclination is ignored. Every point carries its source and its doubts in the data file. If a value does not reproduce, that is a bug in the index and it gets fixed in the open.

The script deploys the scale to a local chain and asks the contract for every OKG/kg figure, so the index cannot drift from what anyone else gets by calling it:

# methodology: INDEX.md · data: data/launch-prices.yaml, data/cpi-u.yaml
npm run index                           # 38 points → data/launch-index.json

INDEX.md · launch-prices.yaml · launch-index.json

Funding milestones denominated in OKG

MilestoneRegistry pays for delivered energy, not for effort. The cost of a target in OKG is computed by the scale, never declared by the applicant.

fund()            anyone contributes to the grant pool — IRREVERSIBLE
propose()         any team declares a target (h, v, mass) + proposal CID + bond
approve()         the DAO approves an amount and a deadline; funds are reserved
submitDelivery()  the team submits a telemetry CID before the deadline
verify()          a verifier enters the confirmed (h, v, mass) from telemetry

                  payout = grant × min(achieved, target) / target

Equal access

propose() is open to any address. The founder's team walks the same path as everyone else: application, bond, public CID, independent verification, payment for confirmed work. There is no privileged route.

No self-dealing

Neither approve(), verify() nor reject() can be called on your own application. This does not eliminate collusion between two addresses — no contract can — but it removes the one-party payout and leaves a trail in the events.

The pool cannot be withdrawn

There is deliberately no withdraw, rescue, sweep or emergencyExit — not for the DAO, not for anyone. Funds leave by exactly one path: payment for a verified milestone. A test scans the ABI to enforce this.

Consequence for anyone who contributes: a contribution is irreversible by construction. A founder who puts their own money into the pool gets it back only as payment for confirmed work, in the general queue, with public proof.

Reserve: a floor per token, not a sum

ReserveVault splits every contribution between a redeemable reserve and the grant pool. The floor is kept per token: $10 000 behind 200 000 tokens is $0.05 each; the same $10 000 behind 1 000 000 is $0.008. So the split is a formula, not a parameter:

share to reserve = unitBacking / salePrice,   unitBacking = max(floor, current backing per token)

sell at $0.25 with a $0.05 floor  →  20% to the reserve, 80% to grants
  • · Backing per token never decreases. Every operation rounds in favour of the reserve; a 120-step mixed sequence of buys, redemptions and top-ups checks it.
  • · The floor is redeemable. redeem() burns tokens and pays the pro-rata share of the reserve. A reserve that cannot be claimed is a number in a report, not a floor.
  • · The floor can only be raised, and only to a level the reserve already covers. There is no function to lower it.
  • · The reserve cannot be withdrawn. The same ABI scan as for the grant pool.

The trade-off is stated, not hidden: the higher the backing, the larger the share each sale must send to the reserve, and the less reaches grants. Preserving backing and spending on R&D are arithmetically opposed. The token of this contract is ORB, a claim on the reserve — a separate thing from OKG, which measures physical work and anchors no price.

Status, stated plainly

As of 12 October 2026, specification v0.1.

Implemented and tested

  • ✓EnergyScale — the whole scale, deployed as a standalone contract, 17 tests against values computed outside the contract
  • ✓MilestoneRegistry — full milestone lifecycle, bonds, pool accounting, team track record, no-self-dealing, no withdrawal paths, 27 tests
  • ✓ReserveVault — a redeemable floor kept per token, contributions split between reserve and grant pool, backing provably non-decreasing, no withdrawal paths, 38 tests
  • ✓Launch cost index — 38 public price points (1969–2026) run through the scale into $/OKG, three series, CPI-U deflator, regenerated from sources by one command; data, not a contract, and not covered by the unit tests

Not implemented

  • ○Endowment contour (principal preserved, grants paid from yield only)
  • ○Delivery voucher — a claim on real delivery, denominated in OKG
  • ○Efficiency premium for closing the cost gap — promisedCostPerOkg and achievedCostPerOkg are recorded but do not affect payout
  • ○On-chain telemetry validation; multi-signature verifiers

Nothing is deployed to a public network

There are no mainnet addresses, no token sale, no fundraising and no waiting list. The bonding-curve token economy this repository started with (BondingCurveSale, POLManager, BuybackManager, LC) has been removed from this repository: as written, it directed funds toward defending a price rather than toward R&D.

What this is not

OKG is a unit for measuring physical work, not a financial instrument.

  • · This site is not an offer to buy or sell anything.
  • · No yield, appreciation or return of any kind is promised or implied.
  • · A contribution to the grant pool is not refundable — by construction, not by policy.
  • · The legal classification of any token issuance depends on jurisdiction and requires an opinion that is not given here.

The scale is physics. It states how much energy is required, and says nothing about what that costs or whether anyone will succeed.

Reproduce it, then argue with it

The useful contribution here is not money. It is checking the numbers, and — if you build launch hardware — telling us where the unit breaks against reality.

git clone https://github.com/apbodrov/orbitkg
npm install && npm test                        # 82 tests

npx hardhat run scripts/energy-table.js       # print the scale from the contract
npx hardhat run scripts/demo-milestone.js     # full milestone cycle on a local network