Skip to content

Commit

Permalink
test: add real withdraws example
Browse files Browse the repository at this point in the history
  • Loading branch information
rndquu committed May 2, 2024
1 parent fbdbef6 commit e5275af
Showing 1 changed file with 65 additions and 2 deletions.
67 changes: 65 additions & 2 deletions packages/contracts/test/Staking.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@ contract StakingTest is Test {

address user1 = address(1);

address realDepositor1 = 0xf6501068a54f3EAb46C1F145CB9d3fb91658B220;
address realDepositor2 = 0x2582a712c2C2e9Fbd9f5B081bE4B4f699d2489B5;
address realDepositor3 = 0x0709e442A5469B88bB090dD285b1B3a63fb0c226;

uint bondingShareIdOfRealDepositor1 = 48;
uint bondingShareIdOfRealDepositor2 = 47;
uint bondingShareIdOfRealDepositor3 = 44;

function setUp() public {
vm.createSelectFork("https://mainnet.gateway.tenderly.co");

Expand Down Expand Up @@ -107,14 +115,69 @@ contract StakingTest is Test {
debugBondingShare(bondingShareId);
}

function testCustomFormulas() public {
// roll to block number when `bondingV2.removeLiquidity()` should be available for `realDepositor3`
vm.roll(24315972 + 1);

// realDepositor1 withdraws liquidity
assertEq(ERC20(uad3CrvLpTokenAddress).balanceOf(realDepositor1), 0);
assertEq(ERC20(ubqTokenAddress).balanceOf(realDepositor1), 12242185853218459177465); // ~12k

IBondingShareV2.Bond memory bond = bondingShareV2.getBond(bondingShareIdOfRealDepositor1);
vm.prank(realDepositor1);
bondingV2.removeLiquidity(
bond.lpAmount, // LPs amount
bondingShareIdOfRealDepositor1 // bonding share id
);

assertEq(ERC20(uad3CrvLpTokenAddress).balanceOf(realDepositor1), 150927894809276244280); // ~150
assertEq(ERC20(ubqTokenAddress).balanceOf(realDepositor1), 23816893272038182740158); // ~23k

// realDepositor2 withdraws liquidity
assertEq(ERC20(uad3CrvLpTokenAddress).balanceOf(realDepositor2), 915946097150755562); // ~0.9
assertEq(ERC20(ubqTokenAddress).balanceOf(realDepositor2), 8748284150652479999); // ~8

bond = bondingShareV2.getBond(bondingShareIdOfRealDepositor2);
vm.prank(realDepositor2);
bondingV2.removeLiquidity(
bond.lpAmount, // LPs amount
bondingShareIdOfRealDepositor2 // bonding share id
);

assertEq(ERC20(uad3CrvLpTokenAddress).balanceOf(realDepositor2), 2708245857533002767); // ~2.7
assertEq(ERC20(ubqTokenAddress).balanceOf(realDepositor2), 145777588678932844186); // ~145

// realDepositor3 withdraws liquidity
assertEq(ERC20(uad3CrvLpTokenAddress).balanceOf(realDepositor3), 0);
assertEq(ERC20(ubqTokenAddress).balanceOf(realDepositor3), 800729500834182916344357); // ~800k

bond = bondingShareV2.getBond(bondingShareIdOfRealDepositor3);
vm.prank(realDepositor3);
bondingV2.removeLiquidity(
bond.lpAmount, // LPs amount
bondingShareIdOfRealDepositor3 // bonding share id
);

assertEq(ERC20(uad3CrvLpTokenAddress).balanceOf(realDepositor3), 354898012277868635829); // ~354
assertEq(ERC20(ubqTokenAddress).balanceOf(realDepositor3), 864627805002427234615553); // ~864k
}

function debug(address user) public {
console.log('===debug()===');
console.log('Balance user1 (UAD3CRV LP):', ERC20(uad3CrvLpTokenAddress).balanceOf(user) / 1e18);
console.log('Balance user1 (UBQ):', ERC20(ubqTokenAddress).balanceOf(user) / 1e18);
console.log('Balance user (UAD3CRV LP):', ERC20(uad3CrvLpTokenAddress).balanceOf(user) / 1e18);
console.log('Balance user (UBQ):', ERC20(ubqTokenAddress).balanceOf(user) / 1e18);
console.log('Balance BondingV2 (UAD3CRV LP):', ERC20(uad3CrvLpTokenAddress).balanceOf(address(bondingV2)) / 1e18);
console.log('BondingShareV2 totalLP:', bondingShareV2.totalLP() / 1e18);
}

function debugNotNormalized(address user) public {
console.log('===debug()===');
console.log('Balance user (UAD3CRV LP):', ERC20(uad3CrvLpTokenAddress).balanceOf(user));
console.log('Balance user (UBQ):', ERC20(ubqTokenAddress).balanceOf(user));
console.log('Balance BondingV2 (UAD3CRV LP):', ERC20(uad3CrvLpTokenAddress).balanceOf(address(bondingV2)));
console.log('BondingShareV2 totalLP:', bondingShareV2.totalLP());
}

function debugBondingShare(uint bondingShareId) public {
console.log('===bonding share info===');
IBondingShareV2.Bond memory bond = bondingShareV2.getBond(bondingShareId);
Expand Down

0 comments on commit e5275af

Please sign in to comment.