You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The campaign contract stores only operational config (active flag, time window, cap, Merkle root). Campaign name, description, and an optional image_uri are stored only in the off-chain backend DB — meaning on-chain verification of campaign identity is impossible.
Problem
Users cannot verify a campaign's metadata from the contract alone
Forks of the backend can display arbitrary metadata for any contract ID
No trustless way to confirm what a campaign is about before registering
Summary
The campaign contract stores only operational config (active flag, time window, cap, Merkle root). Campaign
name,description, and an optionalimage_uriare stored only in the off-chain backend DB — meaning on-chain verification of campaign identity is impossible.Problem
Acceptance Criteria
set_metadata(env, admin, nonce, name: Symbol, description: String, image_uri: String)admin functionget_metadata(env) -> (Symbol, String, String)view functionmetadataevent on updatenameasSymbol(max 32 chars),descriptionandimage_uriasString(max 256 chars each) — reject withInvalidMetadataerror if too longbackend/src/jobs/eventIndexer.js(issue Backend: Implement Soroban event indexer worker #283) to index themetadataevent and sync with DBdocs/ARCHITECTURE_OVERVIEW.mdReferences
contracts/campaign/src/lib.rscontracts/rewards/src/lib.rs:81—metadata()view pattern to follow