Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ claude.md
plan.md

# Soroban test snapshot files generated by the test runner
creator-keys/test_snapshots/
**/test_snapshots/

issue.md
pr.md
7 changes: 7 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[workspace]
members = ["creator-keys", "creator-keys-factory", "referral-contract"]
members = ["creator-keys", "creator-keys-factory", "referral-contract", "lp-reward-contract"]
resolver = "2"

[workspace.package]
Expand Down
65 changes: 65 additions & 0 deletions creator-keys/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ pub mod acl_limits_merge_sunset;
/// and could not be called.
pub mod curve_subscriptions_swaps;
pub mod events;
pub mod lp_reward;
pub mod ratings_royalties_dividends;

pub mod test_feature_impl;
Expand Down Expand Up @@ -15291,6 +15292,67 @@ impl CreatorKeysContract {

Ok(new_expires_at)
}

// =========================================================================
// Issue #1002: Liquidity provider reward contract for key pairs
// =========================================================================

/// Locks tokens as liquidity and records LP share.
pub fn add_liquidity(
env: Env,
key_id: Address,
provider: Address,
amount: i128,
) -> Result<u64, lp_reward::LpRewardError> {
lp_reward::add_liquidity(&env, key_id, provider, amount)
}

/// Convenience alias with (provider, key_id, amount) parameter order.
pub fn add_liquidity_for(
env: Env,
provider: Address,
key_id: Address,
amount: i128,
) -> Result<u64, lp_reward::LpRewardError> {
lp_reward::add_liquidity(&env, key_id, provider, amount)
}

/// Returns tokens plus accrued fee rewards, closing the position.
pub fn remove_liquidity(env: Env, lp_id: u64) -> Result<i128, lp_reward::LpRewardError> {
lp_reward::remove_liquidity(&env, lp_id)
}

/// Claims rewards without removing liquidity.
pub fn claim_lp_rewards(env: Env, lp_id: u64) -> Result<i128, lp_reward::LpRewardError> {
lp_reward::claim_lp_rewards(&env, lp_id)
}

/// Returns contribution, share, and pending rewards at any point.
pub fn get_lp_position(
env: Env,
lp_id: u64,
) -> Result<lp_reward::LpPosition, lp_reward::LpRewardError> {
lp_reward::get_lp_position(&env, lp_id)
}

/// Accrues fee rewards to key pair pool proportional to trading volume.
pub fn accrue_lp_trading_fee(
env: Env,
key_id: Address,
fee_amount: i128,
) -> Result<(), lp_reward::LpRewardError> {
lp_reward::accrue_trading_fee(&env, key_id, fee_amount)
}

/// Read-only view of total pool liquidity for a key pair.
pub fn get_lp_total_liquidity(env: Env, key_id: Address) -> i128 {
lp_reward::get_total_liquidity(&env, key_id)
}

/// Read-only view of total collected trading rewards for a key pair.
pub fn get_lp_pool_rewards(env: Env, key_id: Address) -> i128 {
lp_reward::get_pool_rewards(&env, key_id)
}
}

// ============================================================================
Expand Down Expand Up @@ -17979,3 +18041,6 @@ mod test_issues_904_905_906_908;

#[cfg(test)]
mod test_unique_traders;

#[cfg(test)]
mod test_lp_reward;
Loading
Loading