User Story:
As a developer, I want shared types, a version scheme, and utility functions centralized so that the campaign and factory contracts stay consistent and callers can verify contract compatibility.
Acceptance Criteria:
common crate with shared types (CampaignStatus, MilestoneStatus, AssetInfo, ErrorCode) and utilities (address validation, timestamp helpers) used by both campaign and factory
VERSION: u32 constant and fn version() -> u32 in each contract, bumped on any breaking change, with a semver policy documented in CHANGELOG.md
- Document the rule for what belongs in
common vs. contract-specific code, so future contributors don't have to guess
- Unit tests for every shared utility, including boundary cases for the timestamp helpers
User Story:
As a developer, I want shared types, a version scheme, and utility functions centralized so that the campaign and factory contracts stay consistent and callers can verify contract compatibility.
Acceptance Criteria:
commoncrate with shared types (CampaignStatus,MilestoneStatus,AssetInfo,ErrorCode) and utilities (address validation, timestamp helpers) used by bothcampaignandfactoryVERSION: u32constant andfn version() -> u32in each contract, bumped on any breaking change, with a semver policy documented inCHANGELOG.mdcommonvs. contract-specific code, so future contributors don't have to guess