Location: contracts/stellar-save/src/lib.rs
pub fn validate_payout_recipient(
env: Env,
group_id: u64,
recipient: Address,
) -> Result<bool, StellarSaveError>- Verifies recipient has a member profile in the group
- Uses
StorageKeyBuilder::member_profileto check existence - Returns
falseif not a member
- Calls
has_received_payout()to verify recipient hasn't already been paid - Returns
falseif already received payout - Ensures each member receives exactly one payout
- Gets recipient's payout position using
get_payout_position() - Compares position with group's current cycle
- Returns
falseif position doesn't match current cycle - Ensures correct rotation order
- Returns
Ok(true)if all checks pass - Returns
Ok(false)if any check fails - Returns
Err(StellarSaveError::GroupNotFound)if group doesn't exist
-
test_validate_payout_recipient_not_member
- Verifies non-members return false
- Expected:
false
-
test_validate_payout_recipient_already_received
- Verifies members who already received payout return false
- Expected:
false
-
test_validate_payout_recipient_wrong_position
- Verifies members not next in queue return false
- Expected:
false
-
test_validate_payout_recipient_valid
- Verifies eligible recipient returns true
- Expected:
true
-
test_validate_payout_recipient_group_not_found
- Verifies error when group doesn't exist
- Expected:
StellarSaveError::GroupNotFound
GroupNotFound- When group doesn't existNotMember- Handled internally by returning false- All other validation failures return
Ok(false)
let is_eligible = contract.validate_payout_recipient(
env,
group_id,
recipient_address
)?;
if is_eligible {
// Execute payout
} else {
// Reject payout
}- Uses
has_received_payout()for payout history check - Uses
get_payout_position()for queue position check - Uses
StorageKeyBuilder::member_profile()for membership check - Uses
StorageKeyBuilder::group_data()for group validation
- Code compiles successfully (pending existing codebase fixes)
- All 5 tests added
- Function integrated into contract impl block
- Follows existing code patterns