Estimated Effort: 4 weeks / 7 days
Impacted Subsystems / Files:
contracts/phase-protocol/src/lib.rs
app/api/market/[id]/offers/[offer_id]/route.ts
Context & Problem Statement:
Currently, settle() in contracts/phase-protocol/src/lib.rs executes a fixed 95% creator / 5% protocol treasury split. Complex creator entities, co-artists, and DAOs cannot split settlement proceeds automatically on-chain, requiring insecure manual redistribution off-chain.
Technical Requirements & Scope:
- Add
CollectionShares struct to contract storage mapping payee addresses to basis points (total 10,000 BP).
- Update
create_collection to accept optional Vec<(Address, u32)> share definitions.
- Refactor
settle() to iterate over payee shares and transfer exact stroop amounts atomically.
- Ensure treasury 5% fee split occurs prior to creator share distribution.
Multi-File Change Surface:
Requires breaking contract signature changes in contracts/phase-protocol/src/lib.rs, updating buildCreateCollectionTransaction and buildSettleTransaction in frontend UI, and updating API routes.
Acceptance Criteria:
Suggested Approach / Investigation Steps:
- Define
CollectionShares contract type and storage DataKey.
- Update
settle() Rust function with split loop and arithmetic overflow checks.
- Modify UI collection creation modal in
components/dashboard/ to configure splits.
Estimated Effort: 4 weeks / 7 days
Impacted Subsystems / Files:
contracts/phase-protocol/src/lib.rsapp/api/market/[id]/offers/[offer_id]/route.tsContext & Problem Statement:
Currently,
settle()incontracts/phase-protocol/src/lib.rsexecutes a fixed 95% creator / 5% protocol treasury split. Complex creator entities, co-artists, and DAOs cannot split settlement proceeds automatically on-chain, requiring insecure manual redistribution off-chain.Technical Requirements & Scope:
CollectionSharesstruct to contract storage mapping payee addresses to basis points (total 10,000 BP).create_collectionto accept optionalVec<(Address, u32)>share definitions.settle()to iterate over payee shares and transfer exact stroop amounts atomically.Multi-File Change Surface:
Requires breaking contract signature changes in
contracts/phase-protocol/src/lib.rs, updatingbuildCreateCollectionTransactionandbuildSettleTransactionin frontend UI, and updating API routes.Acceptance Criteria:
collection_shares_settledevent with array of payouts.Suggested Approach / Investigation Steps:
CollectionSharescontract type and storage DataKey.settle()Rust function with split loop and arithmetic overflow checks.components/dashboard/to configure splits.