Repository navigation
Solution: LP-0018 — logos-osm: OpenStreetMap registry, SDK, CLI and Basecamp app on LEZ - #187
Draft
YodHeVauHe wants to merge 15 commits into
Draft
YodHeVauHe wants to merge 15 commits into
YodHeVauHe wants to merge 15 commits into
Conversation
Changes: - Add solutions/LP-0018.md from the LP-0000 template for logos-osm (YodHeVauHe/logos-osm @ a0824db) - Record the testnet v0.3 practice deployment (program ID, registry PDA, init and register smoke-test txs), labelled as not the testnet 0.4 deployment - Mark testnet 0.4, real Storage roundtrip, module catalog, SPEL-generated IDL and all Adoption criteria as pending Verification: - Ran .github/scripts/validate-submission.sh locally against the file: no errors; one non-blocking warning (no module.json in logos-osm) - Checked logos-osm main CI on a0824db with gh run view: rust, nix and chain jobs succeeded
✅ Validation passedA reviewer will assess against the prize criteria. Automated check. See solution template and TERMS. |
…adapter Changes: - Point the submission at logos-osm main a8b587e and link the green CI run 41270856840 - Note the repo-level module.json that indexes the osm, osm-app and consumer-example manifests - Replace the legacy Storage adapter gap with the LogosctlStorage adapter and its single-node real upload-download result, keeping multi-node and registry-backed roundtrips listed as pending Verification: - .github/scripts/validate-submission.sh run locally against this file (Validation passed, no warnings) - git diff --check
…ucibility Changes: - Point the submission at logos-osm main 89e36fd (merge of PR logos-co#7) and note CI state - Add a "Coverage on testnet v0.3" section: 25 regions across 17 countries hosted and registered, evidence doc, verify output and explorer links for kenya, china/henan and colombia - Describe reproducibility: pinned regions/versions file, tools/coverage.sh setup/node/host/verify, idempotent host and keyless verify - Record the "Incorrect fee" gas-reserve root cause and client-side fix - Update Host, Download and Coverage criteria text without checking boxes; network retrieval by an independent node is stated as not proven - Refresh pending work: public network retrieval / multi-node, testnet 0.4 deploy (~Nov 30), 5 independent consumers, SPEL IDL (SPEL main still pins LEZ v0.2.5-rc2), demo video Verification: - Ran .github/scripts/validate-submission.sh from a logos-co/lambda-prize master checkout against solutions/LP-0018.md: "Validation passed", no warnings
Changes: - Point the CI line at main 89e36fd, fully green in run 41336085397 (rust Ubuntu/Windows, nix, LEZ v0.3.1 chain e2e; dispatch-only live Geofabrik job skipped) - Add storage-retrieval run 41335257985 to the network retrieval note: control CID fetched, 0/2 regions fetched - Note that the storage-retrieval verify step is continue-on-error, so a green run does not mean retrieval worked Verification: - gh run view 41336085397: conclusion success, every job passed except the skipped dispatch-only job - Read logs of storage-retrieval run 41335257985: control OK, china/henan and kenya FAIL - Checked via gh api that referenced docs/coverage files exist on main, coverage set has 25 regions across 17 countries, and PRs logos-co#4-logos-co#7 are merged - Ran .github/scripts/validate-submission.sh locally against the updated file: passed, no warnings
Changes: - Check the module catalog criterion with the logos-repo.json URL, releases, index and the linux-amd64-only limitation. - Check the OSM registry SDK criterion now that osm is published as a separate Basecamp module. - Note the downloadable osm-app release under Basecamp app GUI; interactive loading stays pending. - Remove the catalog item from Pending work and renumber. Verification: - curl of logos-repo.json and index.json; downloaded .lgx SHA-256 values match the index. - validate-submission.sh with the PR title and solutions/LP-0018.md: passed, no warnings.
Changes: - Expand the SPEL IDL criterion with the pinned SPEL commit, release and LEZ version, and link logos-osm PR logos-co#9 (docs/idl.md); the box stays unchecked. - Update the SPEL item in Pending work. Verification: - validate-submission.sh with the PR title and solutions/LP-0018.md: passed, no warnings.
Changes: - Basecamp app GUI: verified on Linux against testnet v0.3 (Basecamp 66505d5 portable), with evidence and reproduction links on the logos-osm PR logos-co#10 branch; criterion stays unchecked (PR logos-co#10 not merged, catalog osm-app 1.0.0 predates the fixes, Host/Download not exercised, macOS pending) - Catalog: note PR logos-co#8 is not yet merged and osm-app will be republished after PR logos-co#10 - Clear UX, SDK/module and FURPS usability lines updated to match; osm module now noted as published - Pending work item 4 rewritten: merge PRs logos-co#8/logos-co#9/logos-co#10, republish osm-app, exercise Host/Download, consumer module in Basecamp, macOS - Add the Basecamp check to Other materials Verification: - validate-submission.sh with the workflow layout (base/ checkout, pr/solutions/LP-0018.md, PR title): Validation passed, no warnings - curl of the two new logos-osm evidence URLs: HTTP 200
Changes: - Reference logos-osm main 25c4570 (PRs logos-co#8, logos-co#9, logos-co#10 merged) and its green CI run 41423033732 - Record the catalog republish as osm/osm-app 1.0.1 with release links and sha256 - Update the Basecamp app and SDK criteria with the 1.0.1 recheck: load and hosted list pass, app Download fails (file:// path, unescaped error JSON), Host selected not run, consumer resolve works and download times out; criteria stay unchecked - Point Basecamp evidence at logos-osm PR logos-co#11 and update the pending list Verification: - gh run view 41423033732: success (rust ubuntu/windows, nix, chain; live Geofabrik skipped) - curl + sha256sum of osm-1.0.1.lgx and osm-app-1.0.1.lgx match index.json - validate-submission.sh with base/ = master and pr/solutions/LP-0018.md, PR_TITLE of logos-co#187: Validation passed, no warnings
…0.2 Download Changes: - Check Host workflow, Bulk host and Local import, citing logos-osm PRs logos-co#13 (real Storage leg in the chain e2e) and logos-co#14 (testnet v0.3 bulk host and local import txs) and their green CI runs - Update the Basecamp app, SDK/module and Clear UX lines with the 1.0.2 Download and consumer results from logos-osm PR logos-co#12; leave them unchecked pending PR logos-co#12 CI - Update E2E-in-CI with PR logos-co#13, still pending until merged and green on main - Recount coverage from the live registry: 28 regions across 20 countries - Add the 1.0.2 catalog releases and sha256 values, and rewrite Pending work item 4 Verification: - Ran osm_registry_cli get against testnet v0.3: 28 entries, 20 countries, all hosted - Read the logos-osm PR logos-co#13 and logos-co#14 check rollups (chain jobs success) and the PR logos-co#13 chain job log - Ran .github/scripts/validate-submission.sh locally with the PR title: passed, no warnings
… CI is green Changes: - Check Basecamp app GUI and Clear UX: catalog 1.0.2 loads in Basecamp on Linux, downloads china/henan with a verified checksum, and shows hosted status, versions and verification results; logos-osm PR logos-co#12 CI is green - State the green CI heads for logos-osm PRs logos-co#12, logos-co#13 and logos-co#14 Verification: - Read the logos-osm PR logos-co#12 check rollup on b432f05: all jobs success (live Geofabrik skipped) - Ran .github/scripts/validate-submission.sh locally with the PR title: passed, no warnings
…s-co#11-logos-co#14 merged Changes: - Check the "E2E against a real sequencer in CI, green" box, citing main CI run 41458197956 on f91ddb2 (the logos-co#13 merge), whose chain job runs a real Logos Storage node. - Point the CI summary, Host, Bulk host and Basecamp GUI lines at main f91ddb2 and run 41458197956. - Mark logos-osm PRs logos-co#11, logos-co#12, logos-co#13 and logos-co#14 as merged and drop the "not yet merged" wording. - Point basecamp-check, evidence and bulk-import links at main instead of branch paths. - Note that catalog 1.0.2 was built from 6debd97, now in main's history, with module and app sources unchanged on main; the catalog pin is left as is. - Drop the merge step from pending work item 4. Verification: - .github/scripts/validate-submission.sh from origin/master, run on solutions/LP-0018.md with PR_TITLE, PR_REPO, BASE_REPO and CHANGED_FILES set: Validation passed. - gh run view 41458197956: completed success, chain job success. - git diff --name-only 6debd97 origin/main in logos-osm: only CI, tests, tools, coverage and docs files differ. - grep for "not yet merged" and branch-path links in solutions/LP-0018.md: none.
…ent node Changes: - Download workflow box checked: run 41469069413 fetched china/henan by its registry CID on a fresh runner node from the hosting node, MD5 matching on chain. - Update the known-gap, summary, network-retrieval and next-steps lines to match. Verification: - .github/scripts/validate-submission.sh with pr/ and base/ (origin/master) layout: Validation passed. - Run 41469069413 verify.md artifact: china/henan PASS, MD5 54c5fbf47dc51588de2ffb0a0a94a771.
Changes: - Link tools/storage_tunnel_peer.sh and coverage/verify-gha-tunnel-2026-11-02.md on main now that logos-osm PR logos-co#17 is merged. Verification: - Both main URLs return HTTP 200. - .github/scripts/validate-submission.sh with pr/ and base/ (origin/master) layout: Validation passed.
… logos-osm logos-co#15, logos-co#16, logos-co#18 Changes: - check SDK/module: osm-consumer-app on osm_consumer_example, published to the catalog, run inside Basecamp on Linux with Resolve and verified Download - check Platform support: Rust CI on Ubuntu, macOS and Windows; aarch64-darwin Nix builds of all four modules; darwin-arm64 catalog variants; not loaded on a Mac - catalog line: 1.0.3 releases and the two example packages with linux-amd64 and darwin-arm64 Verification: - sha256sum of the four downloaded .lgx files matched index.json - osm-consumer-app installed from the catalog .lgx files resolved and downloaded china/henan in Basecamp on Linux (verified: yes, MD5 matches) - logos-osm run 41481684109 green on PR logos-co#18, including nix macOS; PR logos-co#18 merged as 8a60170 - bash .github/scripts/validate-submission.sh with the PR check's layout and env: Validation passed
Changes: - CI line now cites logos-osm main run 41509457241 at 53ab0e2, fully green including the macOS rust and nix aarch64-darwin jobs, instead of run 41458197956 at f91ddb2 - Note that the macOS arm64 runner was not acquired on attempt 1 and the ci-runner-retry workflow reran it to green on attempt 2 Verification: - gh api on run 41509457241 attempt 2: every job success except the dispatch-only live Geofabrik job (skipped) - Read the ci-runner-retry run 41513549696 log: "Rerunning run 41509457241: 1 job(s) never acquired a hosted runner" - Ran .github/scripts/validate-submission.sh from origin/master against solutions/LP-0018.md: Validation passed
6 tasks done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Solution: LP-0018 — logos-osm: OpenStreetMap registry, SDK, CLI and Basecamp app on LEZ
Submitted by: YodHeVauHe (Be'Zaleel Quant), FoundationStone Algorithms Limited
Summary
logos-osmdistributes Geofabrik OpenStreetMap PBF snapshots through Logos. It consists of:region,parent,level,cid,source_url,checksum,version,hosted,timestamp) in a public registry PDA, with single and batch registration;osm_sdk) covering discovery of the frozen 72-region predefined set, Geofabrik MD5 verification, hosting, local import, registry queries by region / parent / CID, download (Storage by CID, Geofabrik fallback) and update checks;osmCLI, a C FFI, a Basecamp core module (osm-module), a QML distribution app (osm-app) and a separate consumer example module (examples/basecamp-consumer), built withlogos-module-builder.The program has been deployed to the public Logos testnet v0.3 as a practice deployment and smoke-tested (init + register + read-back). On that deployment, 28 real Geofabrik regions across 20 countries are now hosted in Logos Storage and registered on chain (25 from the coverage run, plus greece, chile and belarus from the bulk host and local import runs), with keyless verifies passing 25/25 and 3/3 on the hosting node (see Coverage on testnet v0.3). Retrieval of that data by an independent node over the network is not yet proven. The testnet 0.4 deployment required by the prize is pending because testnet 0.4 is not yet live.
Repository
25c4570(main, after merging PRs Update LP-0013 to add RFP-001 as part of delivery #8 (module catalog), fix statuses #9 (SPEL/IDL notes) and Solution: Music Escrow Protocol — atomic music distribution on LEZ #10 (Basecamp app fixes)); deployed program built from913cacf(unchanged; later changes are client-side only).LICENSE-MIT,LICENSE-APACHE; crates declareMIT OR Apache-2.0).idl/osm-registry.idl.jsonmainat53ab0e2(run 41509457241: rust fmt/clippy/test on Ubuntu, macOS and Windows, C++ unit tests, nix module/app builds on Linux and macOS (aarch64-darwin), and the LEZ v0.3.1 sequencer deploy + IDL freshness + on-chain e2e job with a real Logos Storage node; the live Geofabrik job is dispatch-only and was skipped). The macOS arm64 hosted runner was not acquired on the first attempt, so theci-runner-retryworkflow reran that job and it passed on attempt 2. The separatestorage-retrievalworkflow is not part ofciand is reported under Not proven: network retrieval.module.jsonindexes theosm,osm-appand consumer-examplemetadata.jsonmanifests used bylogos-module-builder; a test keeps them consistent.Approach
Registry program. One public registry PDA (seed
registry) owned by the program holds a Borsh-encodedRegistrykeyed by the Geofabrik region path, soregionis unique andparent/levelplace it in the tree. Instructions:init_registry,register_region,register_batch(multiple regions in one transaction for bulk hosting). Validation (non-empty region, valid level, checksum format, timestamp) lives in a shared crate,osm_registry_core, used by both the guest and the SDK so client-side and on-chain checks cannot drift. Queries by region, parent and CID are done off-chain by reading the registry account and decoding it, which keeps the on-chain program small; results are ordered by timestamp (region path as tie-breaker). A size bound test keeps the registry under the LEZ 100 KiB account ceiling for the closed region set.SPEL vs. LEZ v0.3.1. The program was first written against SPEL / the older
ProgramInputAPI. Public testnet v0.3 runs LEZ v0.3.1, which replaced that API with the plan/apply model (run_program(plan, apply), shard effects, segmented program upload), while upstream SPEL still targets LEZ v0.2.5-rc2. To run on a real public network we ported the guest to v0.3.1 directly rather than wait for SPEL. As a consequence the IDL is currently produced by an in-repo generator (make idl, checked for freshness in CI) that describes the plan/apply instruction and account contract, not by SPEL tooling; see the IDL criterion below.Region model. The predefined, non-overlapping set (48 country-level entries and 24 subregions of US, India, China and Russia) is frozen in
regions.jsonand embedded in the SDK, so discovery works without network access;--refreshpulls fresh canonical URLs from the Geofabrik index. Because the set is a partition, bulk host never creates parent/child overlap.Integrity. Geofabrik's published MD5 is checked at fetch/import time only; after that, integrity comes from the Storage CID recorded on-chain, so downloads of hosted regions do not need Geofabrik.
What did not work / known gap. The first Storage adapter (
LogoscoreStorage) targeted the legacy Storage module API (uploadFile/downloadFile/nameObject). It has been replaced byLogosctlStorage, which calls the currentstorage_module3.0.2 API (uploadUrl/downloadToUrl) through logosctl 0.3.2 and waits for the completion events. A real upload-download of the 3,507,206-byte Andorra PBF passed on one local Storage node with matching MD5 and SHA-256, and the 25-region coverage run (below) then did fetch → MD5 → store → fetch-back → register → registry read-back → download-by-on-chain-CID against real Storage and the public testnet v0.3 for every region, on that one node. Over relays alone, independent nodes and GitHub Actions runners found the hosting node but could not complete a transfer, because the hosting box is behind NAT and the testnet relays dropped the streams. A multi-node transfer was then done through a reverse tunnel: a fresh node on a GitHub runner downloadedchina/henanby its registry CID from the hosting node with a matching MD5 (run 41469069413).Fee bug found during coverage hosting. Registrations started failing with the sequencer's generic "Incorrect fee" error. The cause was the fee-reserve screen (
PayerCannotFund): the wallet declaresgas_limit = 2,000,000by default, so the reserve exceeded the payer's balance although aRegisteractually costs about 1.1–1.2M. The client now sets--gas-limit(500,000 for the coverage run), preflights the payer balance against the reserve with an explicit error, and reconciles slow confirmations viagetTransactioninstead of resubmitting. The on-chain program is unchanged.Why Logos. Map distribution today depends on central hosts. A registry on LEZ gives a censorship-resistant, publicly auditable index of which snapshot (by CID and checksum) is authentic for each region, with no operator able to silently swap data; Logos Storage lets many independent operators mirror the same CID, and content addressing means a downloader never has to trust the mirror. A centralised alternative would reintroduce a single party who can withhold or alter the index.
Success Criteria Checklist
Legend:
[x]= met with evidence in the repo / CI;[ ]= not yet met (pending), with the current state explained.Functionality
osm discoverlists the frozen predefined set with level/parent;--refreshfetches the Geofabrik index for current URLs/versions (osm_sdk/src/regions.rs,regions.json).osm_sdk/src/host.rsand theosm hostcommand. On testnet v0.3 it ran for real for 25 regions (Geofabrik fetch, MD5 check, upload to real Logos Storage, fetch-back check, on-chain register, read-back) throughosm prepare,osm fetch-cidandosm register-entry(coverage evidence). It then ran as oneosm hostcall for greece and chile (PR #14, below). In CI, the LEZ v0.3.1 chain job onmainruns a real Logos Storage node (logosctl 0.3.2,storage_module3.0.2; added in PR #13, merged). That job runs fixture fetch → MD5 → store → register → query → download-by-CID as a required step, with nocontinue-on-error. It is green onmainatf91ddb2(run 41458197956). Testnet 0.4 and retrieval by other nodes are tracked under their own criteria.osm download). Download by a registry-resolved CID from another node is verified: in run 41469069413 a fresh Storage node on a GitHub runner (peer16Uiu2HAmAWEbJQshRYQCxmbav6FEVux4kVSYLyxKg9Xe4gvKtLvD, empty data dir) read the registryC5UwQUopzYvYREczjNJNf8fjmzrmf2QWK2f7Dd2YRgrSfrom testnet v0.3, resolvedchina/henanto CIDzDvZRwzm5FYsh7BU1kK1TzjuZU92FyLFvqMjGUm5zm9pzWMLMUSP, and downloaded it through Logos Storage from the hosting node (peer16Uiu2HAm2cmq5yqh7YLDqbYVQ2b9B7NrnMPMwHd6AVmBwGswdjJX): 50,468,082 bytes in 22.3 s, MD554c5fbf47dc51588de2ffb0a0a94a771= on-chain checksum. The hosting box is behind NAT with HTTPS-only egress, so it reaches the runner through a Cloudflare quick tunnel the runner opens (storage-retrieval-tunnelworkflow +tools/storage_tunnel_peer.sh, merged in logos-osm PR #17; evidence in coverage/verify-gha-tunnel-2026-11-02.md); the tunnel carries only the libp2p connection. Limit: one region, and the tunnel is opened per run; a permanently reachable node still needs a public host.osm hostcall go into oneregister_batchtransaction, and--excludeopts a region out. On testnet v0.3,osm host greece chile belarus --exclude belarusregistered greece and chile in one transaction (207214ce…bea0, block 74320). Belarus stayed unregistered, and the keyless verify passed (docs/bulk-import-testnet-v0.3.md, PR #14, merged; CI green onmainatf91ddb2: run 41458197956). The chain CI job onmain(from PR #13) asserts the same thing (2 registered in one batch tx, 0 skipped, belarus not registered) against a local sequencer with real Storage. The app has per-region checkboxes, Select all and Clear. Because the set is a partition, no overlap warning is needed. Not run from the app: Host selected, which spends deployer tokens.osm importchecks the file against Geofabrik's MD5, then stores and registers it by CID. On testnet v0.3,osm import belarus <file>registered belarus (9314ed80…1966, block 74323), and the keyless verify passed: fetched MD5 = on-chain checksum = Geofabrik sidecar (PR #14, merged). In the chain CI job onmain(from PR #13), a tampered PBF is rejected (exit 2, nothing registered), and the genuine file imports withhosted=trueand downloads back from Logos Storage with a matching MD5.osm check-updatescompares Geofabrik versions against registry entries per region path.parent/level, queries by region / parent / CID, and batch registration. Exercised against a real LEZ v0.3.1 sequencer in CI and on public testnet v0.3 (see below).docs/sdk.md), the consumer example moduleexamples/basecamp-consumer, and theosmcore module published as a separate Basecamp module in the module catalog (osm1.0.2, linux-amd64), so other modules can depend on it withoutosm-app.Usability
docs/basecamp-check.md. The app is a downloadable.lgxin the module catalog (osm-app1.0.2, linux-amd64). It was checked in Basecamp on Linux against testnet v0.3 on 2026-11-02, with Basecamp66505d5portable, standalone mode and catalog 1.0.2 modules. Basecamp loadsstorage_module3.0.2,osm1.0.2 andosm-app_backend. After Refresh, the app marks all 28 registry entries as hosted (e.g. greecehosted · 261101; hungary, romania, bulgaria and south-koreahosted · 261031). Download ofchina/henanwrote 50,468,082 bytes and showedverified: yesandchecksum verified. The file's MD5,54c5fbf47dc51588de2ffb0a0a94a771, matches the registry. Storage was the hosting node on the same machine, not a remote peer. The 1.0.1 Download failure had two causes, both fixed in logos-osm PR #12 (merged as4843e1e): thefile://destination URL, and module errors returned as unescaped JSON. 1.0.2 was released from PR Solution: LP-0013 — Token Program: Mint Authority (RFP-001) #12's branch commit6debd97, which is now inmain's history; between6debd97andmainatf91ddb2the module and app sources are unchanged, so the catalog pin was left at6debd97. CI is green onmainatf91ddb2(run 41458197956). Host selected was not run, because it spends deployer tokens. macOS is not verified (the prize checks macOS through the Adoption criteria). Evidence: screenshots anddocs/basecamp-check.md.docs/sdk.mddocuments the API, and "Embedding example" shows a third-party Basecamp UI app,examples/basecamp-consumer-app(osm-consumer-app), whose only module dependency is the consumerexamples/basecamp-consumer(osm_consumer_example), which callsosmthrough the generated SDK client (logos-osm PR #15, merged asadeb95c). All three are published in the module catalog:osm_consumer_example-v1.0.2(sha2567bded8d0df4a55d5e2250416f5980c3e3b37514e993b611771d1e7cfe78dbacc),osm-consumer-app-v1.0.0(sha256c6c910ac0d0b9c436ac87c8fa411f37c9cf6acd889ec7c5313d679754904f9fa) andosm-v1.0.3(sha256bdf74fb43a35cc3d36fce237eb46b8b4bc6308cab4f3ecd7105daa457cce4bc0); the downloaded.lgxfiles match the index. Installed from those files, the app was run inside Basecamp on Linux (66505d5portable, testnet v0.3) on 2026-11-02: Resolvechina/henanshowed the on-chain entry, and Download wrote 50,468,082 bytes from Logos Storage withverified: yes; the MD554c5fbf47dc51588de2ffb0a0a94a771matches the registry. Storage was the hosting node on the same machine. Evidence:docs/basecamp-check.md→ "Consumer app from the catalog" and thesdk-catalog-consumer-app-*screenshots (logos-osm PR #18, merged as8a60170).osmcovershost(store + register; multiple regions → one batch transaction),import,lookup --region/--parent/--cid,check-updates,downloadandinit-registry.hosted · <version>ornot hosted. After a download, the status line shows the destination andverified: yes, followed bychecksum verified(screenshotbasecamp-osm-app-1.0.2-download-verified-china-henan.png). Hosting from the app was not exercised.Reliability
osm_sdk).Performance
register_region(1 entry: 3,801 cycles) andregister_batch(2 entries: 4,877 cycles), captured on a standalone LEZ v0.3.1 sequencer in RISC Zero dev mode (docs/cycles.md). These are localnet samples, not testnet 0.4 measurements.Supportability
21d0ceb), and anix macOSCI job builds theosmmodule,osm-app, the consumer example and the consumer app, plus their.lgxpackages, for aarch64-darwin (run 41481684109; PR #18, merged as8a60170, vendors the CI-builtlibosm_ffi.dylib). From 1.0.3, the catalog publisheslinux-amd64anddarwin-arm64variants ofosm,osm-app,osm_consumer_exampleandosm-consumer-app, with the darwin builds run onmacos-latestby the release action (docs/catalog.md). Limits: the darwin packages are built in CI but were not loaded in Basecamp on a Mac; Windows is covered by the Rust CI only; Android is not built. The prize requires Windows and Android from testnet 0.4.logos-module-builder:osm-module(mkLogosModule),osm-app(mkLogosQmlModule) and the consumer example (mkLogosModule) inflake.nix; module and app Nix builds pass in CI.logos-repo.jsonURL https://raw.githubusercontent.com/YodHeVauHe/logos-osm-modules/main/logos-repo.json. Catalog repositoryYodHeVauHe/logos-osm-modules, created from thelogos-modules-release-basetemplate (this account's GitHub fork of that repo already serves another catalog, and GitHub allows one fork per account). Current releasesosm-v1.0.3(osm-1.0.3.lgx, sha256bdf74fb43a35cc3d36fce237eb46b8b4bc6308cab4f3ecd7105daa457cce4bc0),osm-app-v1.0.3(osm-app-1.0.3.lgx, sha25653e8a7b73ebc5a878563c1ba6aae6c13443b6accd64a72c61b62c16904931cb9),osm_consumer_example-v1.0.2andosm-consumer-app-v1.0.0were published on 2026-11-02 withlinux-amd64anddarwin-arm64variants, built from logos-osm commit3bc74e9(PR LP-0009: Clarification Request — Schnorr Signing and Keycard #18, merged as8a60170; catalog commitad2b431), and the downloaded files match the index sha256 values. Before them,osm-v1.0.2(osm-1.0.2.lgx, sha2569e410627533f931bf1daaf987f7df954a1c4cf3fad892f0f97df041cd8c9388c) andosm-app-v1.0.2(osm-app-1.0.2.lgx, sha256b530b767fca7116ab6123c49420e95fed9b2f7b280acefc449c2169b3252d145) were published on 2026-11-02. They were built from logos-osm PR Solution: LP-0013 — Token Program: Mint Authority (RFP-001) #12's branch commit6debd97(PR merged; the commit is inmain's history, and module and app sources matchmainatf91ddb2) and carry the Download fix. They followosm-v1.0.1(osm-1.0.1.lgx, sha2563ededd2d2469591b25cfa6b1a342758c44c46d48ebc3d44b36bf84a227fc8b6f) andosm-app-v1.0.1(osm-app-1.0.1.lgx, sha256df760d733f6c0cb2a7904a0a19b9e407ef847b9964637f505473340e6c70b430) were published bylogos-modules-release-actionon 2026-11-02, after the 1.0.0 releases. The index lists 1.0.3, 1.0.2, 1.0.1 and 1.0.0 ofosmandosm-app, and the 1.0.3 and 1.0.2 files fetched with curl match its sha256 values. Releases up to 1.0.2 are linux-amd64 only; from 1.0.3 theosmmodule also vendors an aarch64-darwinlibosm_ffi.dylibbuilt in CI, sodarwin-arm64is published too. Details:docs/catalog.mdand the standalone module flakes the releases are built from (logos-osm PR Update LP-0013 to add RFP-001 as part of delivery #8, merged). 1.0.1 carries the Basecamp fixes from PR Solution: Music Escrow Protocol — atomic music distribution on LEZ #10 (merged).idl/osm-registry.idl.jsonand regenerated/freshness-checked in CI, but it is produced by an in-repo generator for the LEZ v0.3.1 plan/apply API, not by SPEL. SPELmain(c6f73ce) and release v0.7.0 pin LEZ v0.2.5-rc2, and no open SPEL PR moves to v0.3.x (checked 2026-11-02).docs/idl.md(logos-osm PR fix statuses #9, merged) records this evidence and maps each SPEL IDL field to the in-repo IDL, including the different instruction discriminator (Borsh enum index vs. SPEL'sSHA256("global:<name>")[..8]).main, the chain CI job deploys the guest to a standalone LEZ v0.3.1 sequencer and runs it against a real Logos Storage node (logosctl 0.3.2,storage_module3.0.2; PR #13, merged asf91ddb2). It covers host (fixture fetch → MD5 → store → register) → query → download-by-CID, CLI bulk host and local import, all as required steps. Green onmainatf91ddb2(run 41458197956). This is a local sequencer and a single Storage node in CI; testnet 0.4 and retrieval by other nodes are tracked under their own criteria.docs/sdk.md→ "Worked example".Adoption (required) — all pending
osm_registry_cli geton 2026-11-02 (all 28hosted = true). The keyless verifies passed 25/25 (evidence) and 3/3 for greece, chile and belarus (PR #14, merged). Not yet counted, because it is on v0.3, not 0.4, and retrieval by an independent node over the network is not yet proven. The run is reproducible, so it can be repeated on 0.4.FURPS Self-Assessment
Full assessment:
docs/furps.md.Functionality
Registry program with
init_registry,register_region,register_batch; SDK/CLI for discovery, host, bulk host, import, lookup (region / parent / CID), update check and download. 28 regions / 20 countries hosted and registered on testnet v0.3. That includes one bulk-host batch transaction and one local import, and the registry-backed verifies pass 25/25 and 3/3 on the hosting node. Retrieval by an independent node is verified forchina/henanthrough a reverse tunnel (run 41469069413); the hosting node is not yet permanently reachable. Out of scope by design: live OSM sync, rendering, routing, custom regions.Usability
osm discoverworks with no chain or Storage configuration. Registry commands need a program ID, wallet home and fee payer (OSM_RPC_URL,LEE_WALLET_HOME_DIR). SDK guide with a resolve-to-CID worked example and a consumer module example. The Basecamp app builds in CI and both modules are published in the module catalog (linux-amd64). On Linux the catalog 1.0.2 app loads in Basecamp, shows the testnet v0.3 registry's hosted regions, and downloads a hosted region with a verified checksum (logos-osm PR #12, merged). Hosting from the app and macOS are not yet verified.Reliability
Shared validation between guest and SDK; MD5 mismatch fails before registration; exponential back-off retries on network/Storage operations; timestamp-ordered query results; registry size bound tested against the 100 KiB account limit. Registration is idempotent per region path (upsert).
Performance
Localnet guest cycles: 3,801 for a one-entry register and 4,877 for a two-entry batch (LEZ v0.3.1, RISC Zero dev mode). Queries are off-chain reads of a single account.
Supportability
Workspace split into shared types, guest, SDK, CLI, FFI, Basecamp module, app and consumer example. CI on
main: fmt, clippy and tests (Ubuntu, Windows), C++ unit tests, in-memory e2e, Nix builds of module and app, and a job that builds LEZ v0.3.1, deploys the guest to a standalone sequencer, checks IDL freshness and runs the on-chain e2e (host, query, download-by-CID, bulk host, local import) against a real Logos Storage node. Deployment steps and program IDs are in the README.Supporting Materials
Testnet v0.3 practice deployment — NOT the testnet 0.4 deployment the prize requires. Public Logos testnet v0.3 LEZ zone (
https://testnet.lez.logos.co), LEZ v0.3.1wallet program-loader, immutable program header, deployed 2026-10-30.C31bCPXKa5uy1hzmegqMABWLbavoSJbY4Rhrc5yNXPrYC5UwQUopzYvYREczjNJNf8fjmzrmf2QWK2f7Dd2YRgrS2e27ae50d12ae9e823c6ac7659a3fa625b4a30fab5ad8d844ff25707adec36b6InitRegistry4df3a67cd07905a5155c97bbc9478d358bef737ef5a2310d51527358697b104aRegisterRegion(kenya)6f9ffdbdf48f6089fb90c2a51f8376f9fbae47397c7179c48aee6f656897425cThe
kenyasmoke-test entry was read back from the registry PDA withosm_registry_cli get; it was unhosted (hosted: false, placeholder CID). The coverage run later replaced it (registration is an upsert per region path) with a hosted entry, listed below. Segment-upload transaction hashes are in the README Program IDs section. Explorer: https://explorer.testnet.lez.logos.co/.Coverage on testnet v0.3
Same program and registry PDA as above. Full table (region, country, size, Geofabrik MD5 = on-chain checksum, Storage CID, snapshot, block, tx) and method:
docs/coverage-testnet-v0.3.md.osm_registry_cli geton 2026-11-02. Each ishosted = truewith its Storage CID and Geofabrik MD5 on chain. The 25 from the coverage run use snapshots 261030/261031. Greece and chile (bulk host, one batch transaction) and belarus (local import) use 261101 (docs/bulk-import-testnet-v0.3.md, PR #14, merged).kenya,china/henan,colombia.coverage/verify-node1-2026-11-01.md(and.json): 25/25 PASS, run 2026-11-01 20:08 EAT through the hosting node.coverage/verify-bulk-import-2026-11-02.md: 3/3 PASS (greece, chile, belarus).Reproducibility. Versions (LEZ v0.3.1,
logosctl0.3.2 with SHA-256,storage_module3.0.2, networklogos.test), the RPC, program ID, registry PDA and the 25 regions are pinned incoverage/regions-testnet-v0.3.json. From a clean checkout:verifyreads the registry with the sequencer'sgetAccountJSON-RPC, decodes it, downloads each on-chain CID through a Storage node and compares the bytes with the on-chain checksum (--registry-onlychecks the chain side alone). The same steps are available asmake coverage-*targets. Astorage-retrievalGitHub workflow runs the keyless verify from a fresh runner as the public network check.Network retrieval: proven through a reverse tunnel, not over relays. All 28 objects sit on one Storage node on a box behind NAT (private address, Cloudflare egress, port mapping failed, relay-only addresses). Two fresh verifier nodes and three GitHub Actions runs (41330147318, 41331443910, 41331566883) found the hosting node as a provider but did not complete a transfer. The latest
storage-retrievalrun, on the final PR #7 head (41335257985), fetched the public Logos docs control CID (2,276,462 bytes in 7.1 s) but 0/2 of our regions (china/henan,kenya: no download completed within 600 s; thekenyamanifest was not found). That workflow's verify step iscontinue-on-error, so its green status does not mean a retrieval succeeded. The fix is a publicly reachable Storage node seeded with the same bytes; the steps are in the coverage doc. An independent fetch has since succeeded: run 41469069413 downloadedchina/henan(50,468,082 bytes, MD554c5fbf47dc51588de2ffb0a0a94a771= on-chain) on a fresh runner node from the hosting node, which dialed the runner through a Cloudflare quick tunnel. Without such a tunnel the hosting node is still unreachable, so the CIDs are not generally online yet.Other materials:
logos-repo.json(catalog repository)docs/basecamp-check.mdonmain: the first check, the 1.0.1 recheck (PR #11, merged) and the 1.0.2 Download recheck (PR #12, merged), with evidence.docs/bulk-import-testnet-v0.3.md(PR #14, merged)Pending work
storage-retrievalCI workflow) fetching them with matching checksums. Multi-node transfer is demonstrated for one region through a reverse tunnel (run 41469069413).tools/coverage.sh host/verifythere.mainc6f73ce still pins LEZ v0.2.5-rc2). The mapping to SPEL's format is documented indocs/idl.md(logos-osm PR fix statuses #9).mainatf91ddb2. Catalog 1.0.2 is published. Basecamp on Linux downloads a hosted region from the app with a verified checksum. The consumer'sdownloadRegionworks under logosctl when pointed at a Storage node.)Terms & Conditions
By submitting this solution, I confirm that I have read and agree to the Terms & Conditions.