fix(bounties): file upload, profile links, clearer claim copy#117
Merged
Conversation
- Add direct file upload (video/image) to the claim modal via Pinata, so users no longer need to paste a media URL - Link bounty/claim authors to their on-site member profile instead of Basescan - Localize the MediaEmbed fallback "View media" link (was hardcoded EN) - Reword "Envie sua Prova" / proof description for clearer PT-BR/EN copy Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
The claim modal cancel button rendered the raw key "bounties.cta.cancel" because the key was absent from both locale files. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Audit fixes against the verified PoidhV3 source: P1 — UI showed actions the contract rejects: - Submit-for-Vote now issuer-only (contract: submitClaimForVote reverts WrongCaller for non-issuers); shown only when the open bounty had an external contributor. - Vote Yes/No now gated to active contributors excluding the issuer (who auto-votes YES at submit); non-participants reverted NotActiveParticipant. Resolve stays permissionless. P2 — correctness: - Fix `bounties` getter ABI: was missing `id` and had wrong field order/types vs the on-chain struct (latent decode bug). - Block bounty creation when not signing as an EOA — createSoloBounty/ createOpenBounty require msg.sender == tx.origin, so smart-account signers always revert. Adds a warning banner + disables submit (distinct copy for in-app vs external wallets in SA mode). - Filter withdrawn (address(0)) slots out of the contributors list. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Rename createClaim's 4th ABI param imageUri -> uri to match the PoidhV3 contract (cosmetic; encoding is positional). - Remove dead POIDH_ERROR_MESSAGES key IssuerCannotWithdrawFromOpenBounty (no such error exists on-chain). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Real Gnars claim data shows most video bounties store a thumbnail image in claim.url and the actual clip as a social link in the description. So: - Detect YouTube/Vimeo links (in claim.url or the description) and render an inline iframe player — the real clip instead of a bare text link. - When claim.url is empty, fall back to the first direct image/video link found in the description. - Strip any URL rendered as media from the description text to avoid showing it twice. Validated against 108 live Gnars claims: 4 now embed a YouTube player, 98 keep their image preview; the rest are non-embeddable social links (kept as links) or text-only. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Summary
/members/{address}) instead of BasescanMediaEmbedfallback linkChanges
src/components/bounties/ClaimBountyModal.tsx— file<input>+/api/pinata/uploadintegration (500MB video / 100MB image limit), upload state, uploaded-file chip with remove, fallback URL inputsrc/components/bounties/BountyDetailView.tsx— drop BasescanonAddressClick/customExplorerUrloverrides on issuer + claim author;AddressDisplaydefault routes to member profile. Removed now-unusedgetExplorerUrlimportsrc/components/bounties/MediaEmbed.tsx— localize the hardcoded "View media" fallback link viadetail.viewMediamessages/{pt-br,en}/bounties.json— rewordeddetail.submitYourProof/detail.proofDescription/claimModal.title; added upload UI keysAddresses
claim.urlgets populatedTest plan
/members/{address}Generated with Claude Code