Contributors
Journalism is often collaborative.CapsuleContributorsRegistryV3 represents that collaboration explicitly instead of forcing every relationship into the primary author field.
A contributor record contains a wallet, display name, role, contribution type, share in basis points, attribution URI and active state.
Contributor roles
The V3 contract defines:
These contributor roles are local to the Capsule contributor registry. They are not the same enum as PressChain protocol roles such as Journalist or Editor.
Add a contributor
The contract method is:Share accounting
shareBps uses basis points, where 10,000 represents 100 percent. The registry enforces a maximum combined active allocation of 10,000 basis points.
Duplicate protection
The same wallet cannot be attached twice to the same Capsule. The registry also tracks whether an address is currently an active contributor or source. That makes permission checks efficient for downstream contracts such as evidence attachment.Deactivation preserves history
setContributorActive changes active state and updates active share accounting. It does not erase the contributor record.
This is the right behavior for provenance. If a source or co-author relationship changes later, the historical attachment can remain auditable while current permissions and active shares update.
Application example
A newsroom investigation might have:- primary Capsule author: reporter A
- co-author contributor: reporter B, 4,000 bps
- author contributor: reporter A, 4,000 bps
- source contributor: data researcher, 2,000 bps
Attribution URI
UseattributionURI for a durable record that explains the contribution or points to canonical attribution metadata. Avoid putting private source details in public metadata simply because the contract has a string field.
A confidential human source may require a privacy-preserving identity or no public wallet attachment at all, depending on the reporting context. Protocol transparency should not override source safety.
Read helpers
The contract exposesgetContributorIds, getContributor, contributorCountByCapsuleId and isCapsuleContributor for application reads. Build your contributor panel from these functions or from a projection that can be traced back to them.