Goblin Cannon is Adam DePrince’s open implementation of a market-data path for the
transpacific route. Its great circle peaks near 71°N—above the Arctic Circle and
through the auroral oval. The quiet-host software tests meet the 2.1 ms
processing budget. Current BPSK, QPSK and 8-PSK traces measure useful
delivery through quiet, moderate and disturbed fading. Everything reported here uses a
simulated channel. Putting the link on air still needs a partner, two sites,
an RF chain, path-engineered antennas, and spectrum authorization.
Built by Adam DePrinceOpen implementationNo over-air transmission yet
≈ cRadio propagation through the atmosphere is close to light speed in vacuum.
≈ ⅔ cLight propagates materially slower through the glass in an undersea cable.
~13.5 MHzThe intended HF target for an ionospheric path beyond the horizon.
Open sourceThe baseband, market-data path, controls, accounting, and tests are inspectable.
The latency thesis
A longer-looking route can arrive first.
Undersea fiber pays twice: the signal travels slower inside glass, and the route follows cable landings and terrestrial networks rather than a straight market-to-market line.
HF skywave pays a different cost—the climb to the ionosphere, one or more skips, and a narrow, variable channel. But the wave travels through the atmosphere near c, and the geographic route can be far more direct. Goblin Cannon exists to turn that physical opening into a usable market-data feed.
The software keeps updates compact, sends continuously, and refuses to let an old queue consume a latency advantage. A newer value replaces an unsent older value for the same key. Across keys, the highest bid per on-air byte goes next; age does not increase priority.
The goal is the first useful price at the distant receiver—not bulk throughput, not a laboratory bitrate, and not a theoretical propagation number.
What exists · what is missing
I built the stack. I can't fund the radio link.
Trading firms have run HF market-data links across the Atlantic for years under experimental authorizations. The FCC experimental filings are public. IEEE Spectrum and Radio World have covered the work. Their stacks are closed. I respect what they proved.
This is the open implementation. New York to London is the calibration against the known case. Commercial U.S.–Asia HF links exist. I found no prior published implementation and no prior published analysis of the Chicago-to-Shanghai route.
The full software path exists: modem, market-data path, auction, control plane, accounting, loopback, and tests. I have not transmitted one symbol over the air.
I am one guy in Vermont. Financially, I am a bug on the windshield of the firms already in this band.
Putting it on the air requires two sites, an RF chain, antennas engineered for the path, and spectrum authorization.
Budget and equipment: not published here. The site costs—two locations, transmitters, path-engineered antennas, receive chains, and the licensing work—depend on the partner's existing footprint, and a number without that context would mislead in one direction or the other.
For U.S. testing, this needs a Part 5 experimental authorization; for commercial operation, the pending path is the coalition's petition for regular Part 90 operations, RM-11953, whose ECFS proceeding record was open on September 14, 2026 and recorded neither an NPRM date nor a Commission-decision date.
I can't fund it; you can.
A partner brings the funding, two operating sites, the RF chain, path-engineered antennas, and the spectrum-authorization work. I bring the open software stack, integration, test harness, and measurement. Start with the Goblin Reactor intake →
Simulated channel · route geometry
Geometry creates an opening. The channel decides.
The great-circle model explains the transpacific objective. It estimates propagation only. The measured processing budget and the polar channel results below are separate evidence; neither establishes end-to-end route performance.
Spherical Earth300 km virtual reflection heightEqual-length skipsIdealized fiber at c / 1.468
Transpacific path · 71.534° N vertex · four modeled skips
Chicago → Shanghai
Great-circle
11,357 km
Sky path
11,843 km
Propagation
39.503 ms
Idealized great-circle fiber floor55.610 ms
The northern vertex makes high-latitude fading the primary screening case. Current simulated channels report useful delivery, freshness and outage gaps; these finite traces do not establish route availability.
Atlantic comparison · two modeled skips
New York → London
Great-circle
5,570 km
Sky path
5,814 km
Propagation
19.392 ms
Idealized great-circle fiber floor27.276 ms
A geometric comparison only. These numbers exclude cable detours, terrestrial tails, radio hardware, serialization, modem residence, processing and acquisition.
Simulated channel · route geometry. The route unit tests check a Chicago–Shanghai estimate of 39.503 ms with four skips and a 300 km virtual layer. Great-circle geometry does not establish propagation availability. The 2.1 ms allowance covers added processing and buffering; transmission and modem delays are reported separately.
Current waveform and authenticated delivery
Simulated channel. The 71°N problem.
BPSK, QPSK and 8-PSK with convolutional or BCH coding, measured with faster recovery, equalizer uncertainty prediction and a compact authenticated header. Three seeds cover each bandwidth and high-latitude preset; quiet and moderate traces last 300 seconds, disturbed traces 100 seconds.
The transmit-power and noise reference are now calibrated. Carrier correction is off; RLS equalization and audio-clock recovery are on. The header is 13 bytes and retains the full 16-byte GCM tag. Parameters and nonce epochs travel over fiber. These finite simulated channels do not establish availability for the route that reaches 71.534°N.
Radio/software boundary for the recorded acceptance profile. The modem assumes the radio hands it audio with the carrier frequency offset already removed to within 10 Hz. It performs no Doppler-shift correction. Delay spread, Doppler spread, fading, phase rotation, multipath and noise are the modem's problem, and are what the recorded runs measure.
This boundary describes the recorded acceptance profile. The carrier-offset sweep uses 24 kHz QPSK+BCH, the combined recovery settings, the high-latitude quiet preset, 30 dB nominal SNR and three 300-second traces per offset. The tolerance applies to that measured configuration and the tested offset grid. Other modes and historical receiver versions have no tolerance established by this sweep. The library retains an optional carrier-correction loop, enabled by default; the recorded acceptance profile explicitly disables it. Equalizer phase tracking does not estimate a mean carrier frequency offset or perform AFC.
Doppler shift and Doppler spread
Doppler shift: a mean frequency offset of the received signal relative to the transmitted carrier; a translation of the whole spectrum. Hz. Caused by bulk ionospheric motion plus transmitter/receiver LO error. Removing it is a frequency-tracking (AFC) problem.
Doppler spread: the width of the Doppler power spectrum of a propagation path, i.e. the fading rate. Hz. In the Watterson / ITU-R F.1487 model it is the width of the Gaussian spectrum applied to each tap. It is not an offset and no AFC removes it; it appears as fast fading and phase rotation the equalizer must track. 30 Hz means a coherence time on the order of tens of milliseconds.
ITU-R F.1487 high-latitude channel presets
Preset
Delay spread (ms)
Doppler spread (Hz)
Annex 3
Quiet
1
0.5
§4.1
Moderate
3
10
§4.2
Disturbed
7
30
§4.3
Gaussian spectrum per tap; Doppler spread is the 2-sigma width, not sigma. Thus 30 Hz means σ = 15 Hz. The taps fade independently. Mean per-path Doppler shift is a separate parameter; these presets use zero. F.1487 Annex 1 §2 and Annex 3 §§1, 4.1–4.3.
The original 908 recorded runs all disable carrier correction. All 722 Watterson runs use zero mean per-path Doppler shift and zero injected residual carrier frequency offset or drift. Across all 908 runs, 906 configure zero residual offset and drift; the two null-channel exceptions are a +5 Hz carrier frequency offset test and a +1 Hz/minute carrier-frequency drift test.
Measured carrier frequency offset tolerance: 10 Hz
Every seed and both offset signs stay within 0.1 percentage points of the paired 0 Hz delivery value, at every tested magnitude up to the reported bound. The largest passing tested magnitude before the first failure is 10 Hz. This is a sampled bound for the stated quiet-preset configuration. Both signs reach delivery collapse by 320 Hz. No carrier-offset correction was added.
Zero-offset delivery varies by 0.0334 percentage points across the three seeds. All zero-offset observations and metrics match the previously published quiet controls. Delivery is delivered / framed messages; fresh goodput uses the existing source-key freshness metric.
Quiet high-latitude preset · 24 kHz QPSK+BCH · 30 dB nominal SNR · 300 seconds per seed · mean and seed range
The RF view reports measured sample power; the power audit checks the corrected noise reference and matched diversity controls using the existing 2% finite-waveform tolerance. The 24 kHz model extends beyond the Recommendation’s validated bandwidth scope. No live recordings or soak results are available.
Simulated channel · 24 kHz disturbed · current useful delivery
Fresh goodput counts messages still current at their source key when delivered. Missing decisions do not count as zero BER. The RF view uses separate ten-second screens and reports the observed-bit fraction. The paired experiment report isolates recovery, uncertainty prediction and header size against a freshly calibrated baseline.
On the disturbed 24 kHz trace, QPSK+BCH improves from 2.24–7.36 to 38.00–46.48 fresh bit/s. These settings remain selectable: quiet 24 kHz 8-PSK+BCH falls from 2071.89–2080.96 to 1944.91–1950.45 fresh bit/s, and disturbed 10 kHz delivery remains essentially absent.
Simulated channel · frequency diversity at matched transmit power
BPSK+BCH, compact authenticated records. Lower and upper controls each use full power; both copies share that same total power. Three spacings and off-preset delays test sensitivity to the exact echo. Values are fresh useful bit/s across three seeds.
Simulated channel · one shared two-path realization
24 of 24 configurations pass the 2.1 ms added-processing and buffering allowance, including twelve with the long disturbed-channel equalizer. Transmission time, modem/FEC residence and acquisition remain separately visible.
1.196 msWorst added p99.9
24/24Current configurations pass
2.1 msUnchanged processing and buffering limit
Simulated channel · current host measurements in milliseconds
Serial twelve-second paced loopbacks include source creation, the auction, framing, authentication, FEC, modem processing and 1 ms audio blocks. Added latency is each delivered message’s host time above its matched one-sample intrinsic reference. No physical audio device or network socket is measured. Host timings vary and are stored separately from deterministic simulated-time JSON.
Receiver training is bursty: the longest measured RX call is 14.010 ms. Passing delivered-message percentiles does not establish a 1 ms audio-callback deadline. This fixture creates source messages on its processing loop; delays before creation are outside that latency metric.
Authenticated records · explicit remaining defects
Simulated channel. Injection is rejected.
The −10 dB co-channel trace now records 373 authentication failures and zero foreign or corrupt sink deliveries. Authentication failures remain separate from RF lock loss.
Simulated channel · same-waveform interferer with an independent key
A zero authentication count means no invalid complete record reached that check. D6 separately rejects 31 deliberately tampered records, 8 same-session replays and 8 old-epoch records. Two sender processes used 16 distinct epoch/sequence nonces under one key. The compact format keeps the durable epoch in authenticated context supplied over fiber; no wall-clock nonce is used.
5 failing assertions across 5 cases remain in the current selection. Coordinated key rotation remains open: key IDs are authenticated in both header formats, but overlapping keys and mid-stream old-key retirement are not implemented.
With warm recovery and elapsed-time prediction, 10 kHz 64-QAM loses lock 1112 times in the ten-minute residual-drift trace; first loss is at 304 s. Carrier correction remains off.
Policy conflict: strict bid priority permits starvation during an endless higher-bid flood; Adam rejected increasing priority with age. No cross-key expiry/decay interval is approved.
Both 25-byte and fiber-selected 13-byte authenticated headers retain key IDs, full GCM tags and durable epochs; two-key overlap and coordinated mid-stream retirement remain unimplemented.
Simulated channel · validation coverage and source
908 recorded runs cover 905 unique case/seed combinations. Both hosts pass 21/21 CTest tests; 15 harness checks and 19 CLI/protobuf checks pass. 3 repeated authenticated-message runs have byte-identical canonical JSON. This is a selected campaign; no full-matrix or soak completion is claimed.
Simulated channel · current validation selection
Group
Current results
A2
characterized: 360
A4
THRESHOLD_TBD: 1, xfail: 1
A8
pass: 3
B1
pass: 4, xfail: 1
B4
pass: 3
B5
pass: 24
C2
THRESHOLD_TBD: 9, pass: 1, xfail: 1
C4
pass: 37
D3
xfail: 1
D4
pass: 97
D6
pass: 1, xfail: 1
E1
pass: 3
E2
characterized: 360
All unapproved acceptance margins remain THRESHOLD_TBD. Finite simulated traces do not establish route availability. Runtime overruns and every remaining defect are retained in the report.
The transmitter sends immediately when it can. Under backpressure, it holds one candidate for the next slot. A new candidate either replaces that winner or is rejected. Old quotes do not form a waiting line.
01
Encode a bank-relative delta.
The market bridge subtracts the synchronized bank price. It sends the bank identifier, radio symbol, and signed delta in base-254 form. The realtime framer encrypts the body with AES-256-GCM and authenticates the key identifier, epoch, sequences, bank and length.
02
Price the on-air bytes.
The market bridge derives its shadow bid from displacement since the last sent price, recent price velocity, instrument weight, and billable length. The transmitter compares bids against reserved wire length, including the authenticated header, tag and framing bound.
03
Gate the next-slot bid.
A client bid must fit its remaining budget. If the transmit queue is occupied, only one waiting winner remains. A newer same-key value replaces it even with a lower bid. Across keys, higher bid per wire byte wins, with newest winning ties. The winner is claimed and charged when serialization begins.
04
Confirm delivery or refund.
A matching receiver report closes the outstanding charge. A sent client bid with no match after the default one-second window is refunded by the accounting sweep.
Worked unit-test case
Freshness beats an old bid.
The same-key regression submits an older value with a 1,000-unit bid, then a newer value with a bid of one. Only the newer value reaches the framer. A falling price is still a newer price.
A client starts with 1,000 cents. Sending a 300-cent bid reserves it and leaves 700 cents. A matching delivery report closes that charge. A later 300-cent bid leaves 400 cents; when it remains unconfirmed beyond one second, the refund returns the balance to 700 cents.
Receiver permissions, synchronized price banks, and health state travel through the control plane. The canonical terrestrial record reconciles what was sent with what the radio receiver reports. Decisions, deliveries, suspicions, and refunds are logged.
Where the edge comes from
Physics creates the opening. Discipline keeps it.
Propagation speed is only the beginning. The rest of the system is built to avoid giving the advantage back through routing, batching, stale data, or unverifiable delivery.
The current polar campaign tests BPSK, QPSK and 8-PSK in both 10 kHz and 24 kHz profiles, with convolutional and BCH coding. The delivery explorer shows useful goodput, freshness and gaps across three seeds. Authentication overhead is included in those measurements.
Near-cAtmospheric propagation
DirectNo cable-landing route
CompactBank-relative price deltas
CurrentOne waiting winner
ContinuousNo block batching
TestedBPSK · QPSK · 8-PSK
VerifiedAES-256-GCM and replay rejection
MeasuredEnd-to-end event ledger
The ionosphere is not a wire
Variable sky. Explicit gaps.
01
Weak samples become erasures.
Confidence stays visible through demapping, so the decoder can treat ambiguity as missing information instead of inventing a price.
02
Fades do not leak partial messages.
Incomplete records and failed authentication are dropped. Plaintext reaches the message sink only after a complete record passes its authentication check.
03
Lost lock returns to search.
Recurring preambles allow reacquisition after fades. Replay protection survives RF resets; a process restart reserves a fresh durable transmitter epoch.
04
Stale control state closes the feed.
Missing heartbeats clear bank confidence; stale bases and disallowed symbols never become local quote packets.
05
Injection is rejected and counted.
AES-256-GCM rejects unauthenticated records before delivery. Authentication failures have their own control-plane counter and do not count as RF lock loss. Key IDs are authenticated; coordinated mid-stream key rotation and old-key retirement remain open.
A serious RF project
Open software. Real sky.
Goblin Cannon opens the baseband modem, market-data path, prioritization, control plane, accounting, and measurement machinery. To race a cable, a deployment still needs two physical sites and an RF system engineered for the path.
The target near 13.5 MHz is a system-design objective, not blanket authorization to transmit. Frequency, power, bandwidth, emissions, and operating rights must match the license and jurisdiction at each site.
Build around the open core
RF hardware and site equipment, specified per path with the partner.
Path-specific propagation planning and channel characterization
Clocking and exchange-to-exchange latency measurement
Spectrum authorization and operational controls
Open the method
Reproduce the path. Measure the race.
The repository contains the C++23 baseband library, sender and receiver, local loopback, control services, market-data adapters, accounting, and measurement tools. Prove the full software path locally, then connect the IQ stream to an RF chain built for the target route.
Goblin Cannon is a private, encrypted point-to-point link. It moves an operator's own feed between the operator's own sites; it is not a data-distribution service and does not redistribute anyone's data. The author tests against Massive.com data locally. Anyone using this software with market data is responsible for their own licensing with whatever vendor they use, including any redistribution agreements if their use goes beyond private encrypted transport. Not affiliated with or endorsed by Massive.com.
CMake 3.24+C++23x86_64OpenSSLProtobufgRPCRF hardware separate
~/goblin-cannon
$ git clone https://github.com/adamdeprince/goblin-cannon.git
$ cd goblin-cannon
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
$ cmake --build build
$ ctest --test-dir build --output-on-failure
# Run the software loopback node$ ./build/goblin_cannon_local_node