Advance forge rollout, Ethereum rails, and NBC sources

This commit is contained in:
every.channel 2026-04-01 15:58:49 -07:00
parent be26313225
commit 7d84510eac
No known key found for this signature in database
88 changed files with 11230 additions and 302 deletions

View file

@ -16,6 +16,7 @@ A global, disaggregated mesh of relays that turns local ATSC antennas into a coh
- `crates/ec-linux-iptv`: Linux DVB ingest scaffolding.
- `crates/ec-iroh`: iroh transport scaffolding.
- `crates/ec-crypto`: stream key derivation helpers.
- `crates/ec-eth`: Ethereum-compatible protocol representations and commitments.
- `crates/ec-ts`: MPEG-TS timing and table parsing.
- `crates/ec-chopper`: deterministic ffmpeg chunking scaffolding.
- `crates/ec-moq`: MoQ data model and relay scaffolding.
@ -26,6 +27,7 @@ A global, disaggregated mesh of relays that turns local ATSC antennas into a coh
- `docs/USAGE.md`: runbook for viewer and ingest pipelines.
- `docs/IROH_EXAMPLES.md`: summary of iroh repos/examples used for design.
- `docs/`: architecture, roadmap, and MoQ notes.
- `contracts/`: Solidity contracts for compact private-chain settlement rails.
## Development
@ -53,7 +55,19 @@ Git hosting topology:
cat docs/GIT_HOSTING.md
```
NUC PXE rollout (Unifi + ProxyDHCP):
Sovereign forge deploy:
```sh
cat docs/DEPLOY_ECP_FORGE.md
```
OP Stack `ecp-forge` runbook:
```sh
cat docs/OP_STACK_ECP_FORGE.md
```
NUC PXE rollout (UniFi-only or ProxyDHCP):
```sh
cat docs/NUC_UNIFI_NETBOOT.md
@ -129,6 +143,67 @@ cargo run -p ec-node -- control-bridge-web \
`control endpoint id` and `control endpoint addr` on startup. Use the `endpoint addr` JSON for
`--gossip-peer` when bootstrapping.
Default discovery identity:
- If you pass `--stream-id`, that exact value is announced.
- If you do not pass `--stream-id`, `ec-node` now prefers a broadcast-scoped ID when the selected
channel exposes usable broadcast metadata. HDHomeRun sources also probe early TS packets to fill
missing `tsid` / `program_number`, and raw TS inputs can derive identity directly from PAT data.
- ATSC PSIP parsing now covers `MGT`, `TVCT/CVCT`, `STT`, `RRT`, `EIT`, and `ETT`. `EIT` and `ETT`
are accepted on the PIDs advertised by `MGT`, not only on the base PSIP PID `0x1FFB`.
- Discovery identity currently consumes `PAT` plus `VCT` data. `RRT`, `EIT`, `ETT`, and full `STT`
parsing are available for inspection and future policy, but they do not currently change the
default dedupe key beyond the existing broadcast identity fields.
- PAT-derived promotion is intentionally conservative: only single-program streams are promoted. If
the probe sees multiple non-zero programs, `ec-node` does not guess and keeps the stream
source-scoped.
- Sources without usable broadcast metadata still fall back to source-scoped IDs.
Ethereum rails:
- `ec-node` keeps BLAKE3 `manifest_id`s and `merkle+blake3` object proofs on the wire, and also
emits Ethereum-compatible ABI commitments for settlement.
- Manifests can now carry both local Ed25519 signatures and optional secp256k1 EIP-712 signatures
over `ManifestBody`. Set `EVERY_CHANNEL_MANIFEST_SIGNING_KEY` for the local signer and
`EVERY_CHANNEL_ETH_MANIFEST_SIGNING_KEY` for the Ethereum-native signer.
- Stream descriptors and iroh control announcements now carry Keccak commitments so broadcast
identity, discovery, and manifest settlement share one vocabulary.
- The new `contracts/EveryChannelRail.sol` contract is intentionally storage-light: it stores only
latest commitment pointers, while full manifests and media stay off-chain on iroh/relays/archive.
- Observation consensus now has dedicated Solidity surfaces:
`contracts/EveryChannelWitnessRegistry.sol` and
`contracts/EveryChannelObservationLedger.sol`.
- `scripts/op-stack/anvil-reality-smoke.sh` validates the observation rail against real archive
data pulled from `ecp-forge`, not only synthetic fixtures.
- `nix/modules/ec-op-stack.nix` and `docs/OP_STACK_ECP_FORGE.md` define the repo-owned OP Stack
operator path for `ecp-forge`.
- The dev shell now includes `forge`, `cast`, `anvil`, and `solc`, and the repo ships a
top-level `foundry.toml`.
Real-capture PSIP checks:
```sh
git clone --depth 1 https://github.com/tsduck/tsduck-test /tmp/tsduck-test
EC_REAL_ATSC_SAMPLE=/tmp/tsduck-test/input/test-040.ts \
cargo test -p ec-ts real_atsc_sample_matches_known_psip_shape -- --ignored --nocapture
EC_REAL_RRT_SAMPLE=/tmp/tsduck-test/input/test-052.ts \
cargo test -p ec-ts real_rrt_sample_matches_known_reference -- --ignored --nocapture
```
Ethereum commitment checks:
```sh
cargo test -p ec-eth -p ec-node -- --nocapture
nix develop -c bash -lc 'which forge cast anvil solc && solc --bin contracts/EveryChannelRail.sol >/dev/null'
```
Observation rail / OP Stack checks:
```sh
nix shell .#foundry .#solc -c forge test -vv
nix shell .#foundry .#solc nixpkgs#jq nixpkgs#openssh nixpkgs#curl -c ./scripts/op-stack/anvil-reality-smoke.sh
```
Coverage:
```sh