Skip to content

Solution: LP-0003 Private Allowlist / Airdrop Distributor - #126

Open
edenbd1 wants to merge 1 commit into
logos-co:masterfrom
edenbd1:lp-0003-submission
Open

Solution: LP-0003 Private Allowlist / Airdrop Distributor#126
edenbd1 wants to merge 1 commit into
logos-co:masterfrom
edenbd1:lp-0003-submission

Conversation

@edenbd1

@edenbd1 edenbd1 commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

A distributor commits an eligibility set on chain. An eligible recipient claims
their allocation without revealing which entry is theirs — not to observers, and
not to the distributor.

What is verified on chain

A claim travels on LEZ's privacy-preserving path, carrying a real STARK receipt
the sequencer checks against the node-pinned PRIVACY_PRESERVING_CIRCUIT_ID.
What lands is a single marker account whose address is
SHA256(prefix ‖ distribution_id ‖ nullifier), where the nullifier is derived
from the recipient's secret. An observer who knows every candidate address still
cannot compute the nullifier, so no marker maps back to a recipient.

Evidence, on the current public testnet

claim program 4a8dab271c2ac4f3b19c38b45e3f05fa4f413a0ac84a7b28030abebc8c5fdf59
verifier program 90f615d4045db10c2e42c44d15bf80f36a7a72e31df51e3bda6c46e4a22defe7
claim (privacy tx) d9236824835c9f6a986c3bc687c04e2c722ad0984009fb0a936767d3c584e13b
curl -s -X POST https://testnet.lez.logos.co -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"getTransaction","params":["<hash>"]}'

The two program hashes are SHA256(borsh(bytecode)) of the binaries committed in
the repository, so they can be recomputed without trusting this table.
./scripts/verify-onchain-claim.sh runs five checks against the live chain,
ending at "the marker PDA is owned by the verifier program" — which no
transaction lookup can fake.

The video shows a fresh claim being proved and submitted during the recording,
with RISC0_DEV_MODE=0 visible before any proving starts, and the same five
checks passing against it afterwards.

Beyond the unit tests

docs/onchain-audit.md records three adversarial demonstrations run against the
live deployed programs rather than against a local harness: a claim that does
not genuinely prove membership, one that redirects its allocation, and one that
replays a spent nullifier. All three are rejected on chain.

Against the criteria

29 tests, CI green, including a workflow that runs the whole lifecycle against a
real standalone LEZ sequencer with RISC0_DEV_MODE=0. CU costs are measured per
instruction. The Basecamp module ships as a .lgx with darwin-arm64 and
linux-amd64 variants; scripts/package-lgx.py --verify recomputes every manifest
hash from the archive's own contents, and the video shows that check passing.

Happy to address anything in review.

@github-actions

Copy link
Copy Markdown

✅ Validation passed

A reviewer will assess against the prize criteria.
ℹ️ Solution submission for LP-0003.
ℹ️ Checking repo: https://github.com/edenbd1/lp-0003-private-airdrop-distributor


Automated check. See solution template and TERMS.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant