Summary
Non-final investments receive floor(amount * total_units / target_amount), while the final funder receives every accumulated remainder. This makes allocation dependent on transaction order and can transfer rounding value to the last participant.
Repository evidence
contracts/chainmove-pool/src/lib.rs floors proportional units in allocate_units.
- When
new_total == target_amount, the function assigns total_units - funded_units to the final investment.
Scope
- Specify a deterministic rounding/remainder policy that preserves total units without favoring transaction order.
- Persist any remainder state required by that policy.
- Expose allocation evidence in events or receipts.
Acceptance criteria
Tests
Non-goals
- Changing target amounts, asset custody, or investor eligibility.
Summary
Non-final investments receive
floor(amount * total_units / target_amount), while the final funder receives every accumulated remainder. This makes allocation dependent on transaction order and can transfer rounding value to the last participant.Repository evidence
contracts/chainmove-pool/src/lib.rsfloors proportional units inallocate_units.new_total == target_amount, the function assignstotal_units - funded_unitsto the final investment.Scope
Acceptance criteria
Tests
Non-goals