Specification v0.1 · open source · no token sale
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.
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
The scale is public pure. It reads no external state, so there is no oracle to bribe, stall or corrupt.
Nobody votes on how much a kilogram to orbit is worth in OKG. μ and R are not parameters.
Anyone can recompute every number on this page with a calculator, then diff it against the deployed contract.
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, ballistic | 0.293 | 0.00888 | 0.9% |
| 100 km (Kármán line), ballistic | 0.967 | 0.02928 | 2.9% |
| 100 km at 1 km/s | 1.359 | 0.04115 | 4.1% |
| 100 km at 3 km/s (HASTOL class) | 5.359 | 0.16228 | 16.2% |
| 150 km at 5 km/s | 13.831 | 0.41884 | 41.9% |
| LEO 400 km, circular | 33.022 | 1.00000 | 100.0% |
| LEO 800 km | 34.664 | 1.04972 | 105.0% |
| MEO 20 200 km (GPS) | 54.956 | 1.66421 | 166.4% |
| GEO 35 786 km | 57.729 | 1.74819 | 174.8% |
| Escape (11 186 m/s) | 62.455 | 1.89130 | 189.1% |
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.
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.
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.
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/s | 4.1% | 95.9% |
| 100 km at 3 km/s | 16.2% | 83.8% |
| 150 km at 5 km/s | 41.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.
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.
| Year | Rideshare | List, heavy | List, small | Contract (NASA LSP) |
|---|---|---|---|---|
| 2016 | — | 6 549 | — | 64 414 |
| 2019 | 6 177 | — | — | 187 158 |
| 2022 | 5 936 | 8 154 | 16 467 | 78 277 |
| 2023 | 6 738 | — | 25 006 | — |
| 2024 | 6 041 | 4 266 | 26 684 | 37 469 |
| 2025 | 6 377 | 7 717 | 28 333 | — |
| 2026 | 6 600 | 7 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.
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.
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
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
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.
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.
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.
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
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.
As of 12 October 2026, specification v0.1.
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.
OKG is a unit for measuring physical work, not a financial instrument.
The scale is physics. It states how much energy is required, and says nothing about what that costs or whether anyone will succeed.
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