Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop' into feature/script-imp…
Browse files Browse the repository at this point in the history
…rovement
  • Loading branch information
ggviana committed Jul 9, 2021
2 parents 407d50e + 8549326 commit 3299426
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 72 deletions.
20 changes: 0 additions & 20 deletions abi/AavePodCall.json
Original file line number Diff line number Diff line change
Expand Up @@ -844,31 +844,11 @@
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountOfOptions",
"type": "uint256"
}
],
"name": "unmintWithRewards",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "withdrawWithRewards",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
20 changes: 0 additions & 20 deletions abi/AavePodPut.json
Original file line number Diff line number Diff line change
Expand Up @@ -844,31 +844,11 @@
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "amountOfOptions",
"type": "uint256"
}
],
"name": "unmintWithRewards",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "withdrawWithRewards",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
6 changes: 3 additions & 3 deletions contracts/options/rewards/AavePodCall.sol
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ contract AavePodCall is PodCall, AaveIncentives {
*
* @param amountOfOptions The amount option tokens to be burned
*/
function unmintWithRewards(uint256 amountOfOptions) external unmintWindow {
function unmint(uint256 amountOfOptions) external override unmintWindow {
_claimRewards(_getClaimableAssets());
uint256 rewardsToSend = shares[msg.sender].mul(_rewardBalance()).div(totalShares);
uint256 rewardsToSend = (shares[msg.sender].mul(amountOfOptions).div(mintedOptions[msg.sender])).mul(_rewardBalance()).div(totalShares);

(uint256 strikeToSend, uint256 underlyingToSend) = _unmintOptions(amountOfOptions, msg.sender);

Expand All @@ -73,7 +73,7 @@ contract AavePodCall is PodCall, AaveIncentives {
* @dev If assets had been exercised during the option series the minter may withdraw
* the exercised assets or a combination of exercised and strike asset tokens.
*/
function withdrawWithRewards() external withdrawWindow {
function withdraw() external override withdrawWindow {
_claimRewards(_getClaimableAssets());
uint256 rewardsToSend = shares[msg.sender].mul(_rewardBalance()).div(totalShares);

Expand Down
6 changes: 3 additions & 3 deletions contracts/options/rewards/AavePodPut.sol
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ contract AavePodPut is PodPut, AaveIncentives {
*
* @param amountOfOptions The amount option tokens to be burned
*/
function unmintWithRewards(uint256 amountOfOptions) external unmintWindow {
function unmint(uint256 amountOfOptions) external override unmintWindow {
_claimRewards(_getClaimableAssets());
uint256 rewardsToSend = shares[msg.sender].mul(_rewardBalance()).div(totalShares);
uint256 rewardsToSend = (shares[msg.sender].mul(amountOfOptions).div(mintedOptions[msg.sender])).mul(_rewardBalance()).div(totalShares);

(uint256 strikeToSend, uint256 underlyingToSend) = _unmintOptions(amountOfOptions, msg.sender);
require(strikeToSend > 0, "AavePodPut: amount of options is too low");
Expand All @@ -75,7 +75,7 @@ contract AavePodPut is PodPut, AaveIncentives {
* @dev If assets had been exercised during the option series the minter may withdraw
* the exercised assets or a combination of exercised and strike asset tokens.
*/
function withdrawWithRewards() external withdrawWindow {
function withdraw() external override withdrawWindow {
_claimRewards(_getClaimableAssets());
uint256 rewardsToSend = shares[msg.sender].mul(_rewardBalance()).div(totalShares);

Expand Down
46 changes: 33 additions & 13 deletions test/options/rewards/AavePodCall.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const { takeSnapshot, revertToSnapshot } = require('../../util/snapshot')

describe('AavePodCall', () => {
let snapshotId
let deployer, minter
let deployer, minter0, minter1
let AavePodCall, MintableInterestBearing
let configurationManager, underlyingAsset, strikeAsset, option, aaveRewardDistributor

Expand All @@ -18,7 +18,7 @@ describe('AavePodCall', () => {
const claimable = ethers.BigNumber.from(20e18.toString())

before(async () => {
;[deployer, minter] = await ethers.getSigners()
;[deployer, minter0, minter1] = await ethers.getSigners()
;[AavePodCall, MintableInterestBearing, configurationManager, aaveRewardDistributor] = await Promise.all([
ethers.getContractFactory('AavePodCall'),
ethers.getContractFactory('MintableInterestBearing'),
Expand Down Expand Up @@ -67,20 +67,40 @@ describe('AavePodCall', () => {
await revertToSnapshot(snapshotId)
})

it('unmints and gets the rewards', async () => {
await mintOptions(option, amountToMint, minter)
await option.connect(minter).unmintWithRewards(amountToMint)
expect(await option.balanceOf(minter.address)).to.be.equal(0)
expect(await underlyingAsset.balanceOf(minter.address)).to.be.equal(amountToMint)
expect(await rewardToken.balanceOf(minter.address)).to.be.equal(claimable)
it('unmints entirely and gets the rewards', async () => {
await mintOptions(option, amountToMint, minter0)
await option.connect(minter0).unmint(amountToMint)
expect(await option.balanceOf(minter0.address)).to.be.equal(0)
expect(await underlyingAsset.balanceOf(minter0.address)).to.be.equal(amountToMint)
expect(await rewardToken.balanceOf(minter0.address)).to.be.equal(claimable)
})

it('unmints partially and gets partial rewards', async () => {
await mintOptions(option, amountToMint, minter0)
await mintOptions(option, amountToMint, minter1)

const partialAmountToUnmint = amountToMint.div(2)
const partialCollateralAmount = partialAmountToUnmint

// Minter 0 unminting partially
await option.connect(minter0).unmint(partialAmountToUnmint)
expect(await option.balanceOf(minter0.address)).to.be.equal(partialAmountToUnmint)
expect(await underlyingAsset.balanceOf(minter0.address)).to.be.equal(partialCollateralAmount)
expect(await rewardToken.balanceOf(minter0.address)).to.be.equal(claimable.div(4))

// Minter 1 didn't lose rewards
await option.connect(minter1).unmint(amountToMint)
expect(await option.balanceOf(minter1.address)).to.be.equal(0)
expect(await underlyingAsset.balanceOf(minter1.address)).to.be.equal(amountToMint)
expect(await rewardToken.balanceOf(minter1.address)).to.be.equal(claimable.div(2))
})

it('withdraws and gets the rewards', async () => {
await mintOptions(option, amountToMint, minter)
await mintOptions(option, amountToMint, minter0)
await skipToWithdrawWindow(option)
await option.connect(minter).withdrawWithRewards()
expect(await option.shares(minter.address)).to.be.equal(0)
expect(await underlyingAsset.balanceOf(minter.address)).to.be.equal(amountToMint)
expect(await rewardToken.balanceOf(minter.address)).to.be.equal(claimable)
await option.connect(minter0).withdraw()
expect(await option.shares(minter0.address)).to.be.equal(0)
expect(await underlyingAsset.balanceOf(minter0.address)).to.be.equal(amountToMint)
expect(await rewardToken.balanceOf(minter0.address)).to.be.equal(claimable)
})
})
46 changes: 33 additions & 13 deletions test/options/rewards/AavePodPut.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const { takeSnapshot, revertToSnapshot } = require('../../util/snapshot')

describe('AavePodPut', () => {
let snapshotId
let deployer, minter
let deployer, minter0, minter1
let AavePodPut, MintableInterestBearing
let configurationManager, underlyingAsset, strikeAsset, option, aaveRewardDistributor

Expand All @@ -18,7 +18,7 @@ describe('AavePodPut', () => {
const claimable = ethers.BigNumber.from(20e18.toString())

before(async () => {
;[deployer, minter] = await ethers.getSigners()
;[deployer, minter0, minter1] = await ethers.getSigners()
;[AavePodPut, MintableInterestBearing, configurationManager, aaveRewardDistributor] = await Promise.all([
ethers.getContractFactory('AavePodPut'),
ethers.getContractFactory('MintableInterestBearing'),
Expand Down Expand Up @@ -67,20 +67,40 @@ describe('AavePodPut', () => {
await revertToSnapshot(snapshotId)
})

it('unmints and gets the rewards', async () => {
await mintOptions(option, amountToMint, minter)
await option.connect(minter).unmintWithRewards(amountToMint)
expect(await option.balanceOf(minter.address)).to.be.equal(0)
expect(await strikeAsset.balanceOf(minter.address)).to.be.equal(strikePrice)
expect(await rewardToken.balanceOf(minter.address)).to.be.equal(claimable)
it('unmints entirely and gets the rewards', async () => {
await mintOptions(option, amountToMint, minter0)
await option.connect(minter0).unmint(amountToMint)
expect(await option.balanceOf(minter0.address)).to.be.equal(0)
expect(await strikeAsset.balanceOf(minter0.address)).to.be.equal(strikePrice)
expect(await rewardToken.balanceOf(minter0.address)).to.be.equal(claimable)
})

it('unmints partially and gets partial rewards', async () => {
await mintOptions(option, amountToMint, minter0)
await mintOptions(option, amountToMint, minter1)

const partialAmountToUnmint = amountToMint.div(2)
const partialCollateralAmount = strikePrice.div(2)

// Minter 0 unminting partially
await option.connect(minter0).unmint(partialAmountToUnmint)
expect(await option.balanceOf(minter0.address)).to.be.equal(partialAmountToUnmint)
expect(await strikeAsset.balanceOf(minter0.address)).to.be.equal(partialCollateralAmount)
expect(await rewardToken.balanceOf(minter0.address)).to.be.equal(claimable.div(4))

// Minter 1 didn't lose rewards
await option.connect(minter1).unmint(amountToMint)
expect(await option.balanceOf(minter1.address)).to.be.equal(0)
expect(await strikeAsset.balanceOf(minter1.address)).to.be.equal(strikePrice)
expect(await rewardToken.balanceOf(minter1.address)).to.be.equal(claimable.div(2))
})

it('withdraws and gets the rewards', async () => {
await mintOptions(option, amountToMint, minter)
await mintOptions(option, amountToMint, minter0)
await skipToWithdrawWindow(option)
await option.connect(minter).withdrawWithRewards()
expect(await option.shares(minter.address)).to.be.equal(0)
expect(await strikeAsset.balanceOf(minter.address)).to.be.equal(strikePrice)
expect(await rewardToken.balanceOf(minter.address)).to.be.equal(claimable)
await option.connect(minter0).withdraw()
expect(await option.shares(minter0.address)).to.be.equal(0)
expect(await strikeAsset.balanceOf(minter0.address)).to.be.equal(strikePrice)
expect(await rewardToken.balanceOf(minter0.address)).to.be.equal(claimable)
})
})

0 comments on commit 3299426

Please sign in to comment.