Description
The current integer basis-point system (10 000 = 100%) cannot represent ratios like one-third exactly, leading to rounding errors in three-way splits. The contract should support higher-precision ratios using a configurable denominator.
Technical Context
Add ratio_denominator: u64 to the Invoice struct in types.rs. Validate that all ratios are < ratio_denominator and sum to exactly ratio_denominator. Update the payout calculation in contracts/split/src/lib.rs to use amount * ratio / ratio_denominator with checked arithmetic. Default denominator is 10_000.
Acceptance Criteria
Description
The current integer basis-point system (10 000 = 100%) cannot represent ratios like one-third exactly, leading to rounding errors in three-way splits. The contract should support higher-precision ratios using a configurable denominator.
Technical Context
Add
ratio_denominator: u64to theInvoicestruct intypes.rs. Validate that all ratios are< ratio_denominatorand sum to exactlyratio_denominator. Update the payout calculation incontracts/split/src/lib.rsto useamount * ratio / ratio_denominatorwith checked arithmetic. Default denominator is10_000.Acceptance Criteria
3with ratios[1, 1, 1]distributes exactly one-third each (within 1 stroop rounding)10_000continue to workfuzz/covers random denominators and ratio combinations