Skip to content

feat(liquidity): add incremental top_up_pair_liquidity - #323

Open
mxrtins04 wants to merge 1 commit into
StableRoute-Org:mainfrom
mxrtins04:feature/contracts-liquidity-topup
Open

feat(liquidity): add incremental top_up_pair_liquidity#323
mxrtins04 wants to merge 1 commit into
StableRoute-Org:mainfrom
mxrtins04:feature/contracts-liquidity-topup

Conversation

@mxrtins04

Copy link
Copy Markdown
Contributor

Summary

Adds top_up_pair_liquidity(caller, source, destination, delta) as an additive counterpart to set_pair_liquidity. compute_route_fee debits PairLiquidity via saturating_sub, but the only existing restore path (set_pair_liquidity) overwrites the value absolutely, so a stale oracle read can erase concurrent debits. This entrypoint increments instead of overwriting.

Changes

  • src/lib.rs: new top_up_pair_liquidity(env: Env, caller: Address, source: Symbol, destination: Symbol, delta: i128) entrypoint, dual admin-or-oracle auth, AmountMustBePositive on non-positive delta, saturating_add accumulation, i128::MAX sentinel preserved, inline tests
  • README.md: added entrypoint to error lists, registration-first invariant lists, paused sweep tables, liquidity consumption section, event reference
  • docs/abi.md: documented signature, params, auth rules, errors, event emissions
  • docs/roles.md: documented dual-auth policy and oracle responsibility

Testing

  • Inline tests covering: successful increment (0 to 500 to 800), non-positive delta rejection (0 and negative), unauthorized caller rejection, oracle-authorized success, unregistered pair rejection, i128::MAX sentinel preservation, saturation to i128::MAX on overflow, net value after saturating_sub debit followed by top-up
  • Paused sweep tests confirming top_up_pair_liquidity succeeds while paused under both admin and oracle paths, consistent with other config setters
  • cargo fmt --all -- --check, cargo build, cargo test all pass
  • Minimum 95% coverage on impacted modules

Security / rollback notes

  • No change to existing set_pair_liquidity or compute_route_fee behavior; purely additive
  • Auth path identical to existing admin-or-oracle check, no new privilege surface
  • Requires pair to be registered (require_pair_registered), consistent with other liquidity operations
  • Rollback: revert this PR's commit(s); no migration or storage schema change involved

Closes #201

@mikewheeleer

Copy link
Copy Markdown
Contributor

@mxrtins04 solid and well-scoped, merging now 🚢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a top_up_pair_liquidity entrypoint so the oracle can increment instead of overwrite

2 participants