[#894] Add claim UI + proof API + campaign end state#912
Conversation
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: REQUEST CHANGES
Summary
The proof API and basic claim button are in place, but the campaign-end experience still misses required issue #894 behaviors.
Findings
- [high] After campaign end, the page does not render the required final-results section at all. Issue #894 explicitly requires milestone achieved, distributed vs burned amounts, and a burn transaction link, but this PR only swaps
UserPointsforClaimPanel.- File:
src/app/airdrop/page.tsx:16 - Suggestion: Add the post-campaign results block described in the issue before or alongside
ClaimPanel, including milestone outcome, distribution/burn totals, and burn tx link.
- File:
- [medium] Already-claimed users cannot see the required transaction link unless the claim happened in the current browser session. The component derives
txHashonly from the currentwriteContractsuccess path, so a wallet that claimed previously will showClaimedwith no explorer link.- File:
src/components/airdrop/ClaimPanel.tsx:138 - Suggestion: Load and render the persisted claim transaction hash for already-claimed users, or extend the proof/claim-status API so the UI can show the explorer link even on a fresh page load.
- File:
Decision
Requesting changes because the post-campaign page still omits required final-results information, and the already-claimed state does not fully meet the issue requirements.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: REQUEST CHANGES
Summary
The previous blockers are addressed, but the new final-results section is still using the wrong source of truth for the post-campaign outcome.
Findings
- [high]
CampaignResultsderives the final milestone/distribution from live/api/airdrop/statusmilestone flags, which reflect current status logic rather than the finalized TWAP result from the campaign finalization flow. Issue #894 requires the post-campaign page to show the final campaign results, and those should come from the finalized outcome, not from whichever milestone the live status endpoint currently marks as reached.- File:
src/components/airdrop/ClaimPanel.tsx:43 - Suggestion: Read the finalized campaign result (for example the stored final milestone / distribution / burn metadata produced by the finalize step) and render that, rather than recomputing from live status data.
- File:
Decision
Requesting changes because the post-campaign results can show the wrong milestone, distributed amount, and burn amount if live status diverges from the finalized TWAP-based result.
…status Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
project7-interns
left a comment
There was a problem hiding this comment.
Verdict: APPROVE
Summary
The follow-up update resolves the finalized-results source issue from my prior review. The post-campaign results block now reads from a dedicated finalized-results endpoint derived from pl_airdrop_proofs, rather than recomputing from live status milestones.
Findings
- No remaining code-level blockers in the changed files.
Decision
Approving because the claim UI and campaign-end state I reviewed now satisfy issue #894.
Fixes #894
Summary
pl_airdrop_proofsMerkleClaim.claim(amount, proof)on-chainclaimed(address)from contract to show claimed statusClaimPanel(after campaign end) orUserPoints(during campaign), based onAIRDROP_CONFIG.CAMPAIGN_ENDNEXT_PUBLIC_MERKLE_CLAIM_ADDRESSenv varTest plan
🤖 Generated with Claude Code