Problem Statement Today milestonex-campaign is single-campaign-per-instance. There is no contract-level multi-campaign registry. The deprecated core contract attempts multi-campaign (create_campaign returns an auto-incremented id) but is the wrong API/architecture.
Expected Outcome A new contract (or major revision to campaign/) that supports many campaigns in one instance, with:
create_campaign(creator, metadata) -> u64 returning a campaign ID.
donate(env, donor, campaign_id, amount, asset) taking the campaign id.
- Status transitions per campaign, scoped correctly.
- Reads/writes scoped by ID.
- A
MAX_CAMPAIGNS_PER_INSTANCE constant.
- Same typed-error space.
Acceptance Criteria
- New contract
milestonex-campaigns-registry (or equivalent) implements the API.
- Tests: 5+ concurrent campaigns, distinct counters, distinct statuses.
- Migration plan from single-campaign pattern is documented.
- Backward compatibility maintained (or a hardfork documented).
Implementation Notes
- This is a major feature; coordinate with roadmap.
- Reference the existing
common and campaign modular design to avoid duplicating logic.
Affected Files / Modules
- New:
crates/contracts/campaigns-registry/ (or equivalent)
Cargo.toml
README.md
- New docs:
docs/multi-campaign.md
Dependencies — Issue 9 (type unification), Issue 12 (typed-error stability), Issue 14 (deployment plumbing).
Problem Statement Today
milestonex-campaignis single-campaign-per-instance. There is no contract-level multi-campaign registry. The deprecatedcorecontract attempts multi-campaign (create_campaignreturns an auto-incremented id) but is the wrong API/architecture.Expected Outcome A new contract (or major revision to
campaign/) that supports many campaigns in one instance, with:create_campaign(creator, metadata) -> u64returning a campaign ID.donate(env, donor, campaign_id, amount, asset)taking the campaign id.MAX_CAMPAIGNS_PER_INSTANCEconstant.Acceptance Criteria
milestonex-campaigns-registry(or equivalent) implements the API.Implementation Notes
commonandcampaignmodular design to avoid duplicating logic.Affected Files / Modules
crates/contracts/campaigns-registry/(or equivalent)Cargo.tomlREADME.mddocs/multi-campaign.mdDependencies — Issue 9 (type unification), Issue 12 (typed-error stability), Issue 14 (deployment plumbing).