Skip to content

Commit

Permalink
Merge pull request #106 from gammaswap/feat/multiple-staking-routers
Browse files Browse the repository at this point in the history
publish package
  • Loading branch information
0xDanr committed Apr 29, 2024
2 parents ba66b9a + 3061b79 commit a332a9f
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 13 deletions.
17 changes: 12 additions & 5 deletions contracts/PositionManagerWithStaking.sol
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,29 @@ contract PositionManagerWithStaking is PositionManager, IAutoStakable {
}

/// @dev See {IAutoStakable-depositReservesAndStake}.
function depositReservesAndStake(DepositReservesParams calldata params) external isExpired(params.deadline) returns(uint256[] memory reserves, uint256 shares) {
function depositReservesAndStake(DepositReservesParams calldata params, address _stakingRouter) external isExpired(params.deadline) returns(uint256[] memory reserves, uint256 shares) {
address gammaPool = getGammaPoolAddress(params.cfmm, params.protocolId);
address receiver = _stakingRouter != address(0) ? _stakingRouter : params.to;
(reserves, shares) = IGammaPool(gammaPool)
.depositReserves(address(stakingRouter), params.amountsDesired, params.amountsMin,
.depositReserves(receiver, params.amountsDesired, params.amountsMin,
abi.encode(SendTokensCallbackData({cfmm: params.cfmm, protocolId: params.protocolId, payer: msg.sender})));

stakingRouter.stakeLpForAccount(params.to, gammaPool, shares);
if(_stakingRouter != address(0)) {
IStakingPoolRouter(_stakingRouter).stakeLpForAccount(params.to, gammaPool, shares);
}

emit DepositReserve(gammaPool, reserves, shares);
}

/// @dev See {IAutoStakable-withdrawReservesAndUnstake}.
function withdrawReservesAndUnstake(WithdrawReservesParams calldata params) external isExpired(params.deadline) returns (uint256[] memory reserves, uint256 assets) {
function withdrawReservesAndUnstake(WithdrawReservesParams calldata params, address _stakingRouter) external isExpired(params.deadline) returns (uint256[] memory reserves, uint256 assets) {
address user = msg.sender;

address gammaPool = getGammaPoolAddress(params.cfmm, params.protocolId);
stakingRouter.unstakeLpForAccount(user, gammaPool, params.amount);

if(_stakingRouter != address(0)) {
IStakingPoolRouter(_stakingRouter).unstakeLpForAccount(user, gammaPool, params.amount);
}

send(gammaPool, msg.sender, gammaPool, params.amount);
(reserves, assets) = IGammaPool(gammaPool).withdrawReserves(params.to);
Expand Down
6 changes: 4 additions & 2 deletions contracts/interfaces/IAutoStakable.sol
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,16 @@ interface IAutoStakable {
/// @dev Deposit reserve tokens into a GammaPool and stake GS LP tokens
/// @dev See more {IPositionManager-depositReserves}
/// @param params - struct containing parameters to identify a GammaPool to deposit reserve tokens to
/// @param stakingRouter - address of router used for staking contracts
/// @return reserves - reserve tokens deposited into GammaPool
/// @return shares - GS LP token shares minted for depositing
function depositReservesAndStake(IPositionManager.DepositReservesParams calldata params) external returns(uint256[] memory reserves, uint256 shares);
function depositReservesAndStake(IPositionManager.DepositReservesParams calldata params, address stakingRouter) external returns(uint256[] memory reserves, uint256 shares);

/// @dev Unstake GS LP tokens from staking router and withdraw reserve tokens from a GammaPool
/// @dev See more {IPositionManager-withdrawReserves}
/// @param params - struct containing parameters to identify a GammaPool to withdraw reserve tokens from
/// @param stakingRouter - address of router used for staking contracts
/// @return reserves - reserve tokens withdrawn from GammaPool
/// @return assets - CFMM LP token shares equivalent of reserves withdrawn from GammaPool
function withdrawReservesAndUnstake(IPositionManager.WithdrawReservesParams calldata params) external returns (uint256[] memory reserves, uint256 assets);
function withdrawReservesAndUnstake(IPositionManager.WithdrawReservesParams calldata params, address stakingRouter) external returns (uint256[] memory reserves, uint256 assets);
}
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@gammaswap/v1-periphery",
"version": "1.2.6",
"version": "1.2.7",
"description": "Periphery contracts for the GammaSwap V1 protocol",
"homepage": "https://gammaswap.com",
"scripts": {
Expand Down Expand Up @@ -67,7 +67,7 @@
"typescript": "^4.7.4"
},
"dependencies": {
"@gammaswap/v1-core": "^1.2.3",
"@gammaswap/v1-core": "^1.2.7",
"@openzeppelin/contracts": "^4.7.0"
}
}
8 changes: 4 additions & 4 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -576,10 +576,10 @@
resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8"
integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==

"@gammaswap/v1-core@^1.2.3":
version "1.2.3"
resolved "https://npm.pkg.github.com/download/@gammaswap/v1-core/1.2.3/b1df5e7e559752b8a98e9bd680fcf3e2faad409c#b1df5e7e559752b8a98e9bd680fcf3e2faad409c"
integrity sha512-GNu8Cwf3rjw7jqQ2USurJoOZqkU3oihFzVNBhKV/hxTFCGrwUgo+GDxxLt4UPQoauZ9V30Ue6QrNzY23wVQ1sw==
"@gammaswap/v1-core@^1.2.7":
version "1.2.7"
resolved "https://npm.pkg.github.com/download/@gammaswap/v1-core/1.2.7/02a1c46dc6d2df88196c3d23b312d37378d7ae54#02a1c46dc6d2df88196c3d23b312d37378d7ae54"
integrity sha512-eSxNUf829k188M62zjM51BXBqOSlQoH5DOhFPR8s2HfUuqWqUISa5M6x01eaXv5pYUovW81l42QsEkCoyHxifQ==
dependencies:
"@openzeppelin/contracts" "^4.7.0"

Expand Down

0 comments on commit a332a9f

Please sign in to comment.