function deposit(uint256 assets, address receiver) public override returns (uint256) {
require(receiver != address(0));
uint256 stakeAsset = assets - fee;
stakedAsset[receiver] = stakeAsset;
uint256 participantShares = _convertToShares(stakeAsset);
IERC20(asset()).safeTransferFrom(msg.sender, participationFeeAddress, fee);
IERC20(asset()).safeTransferFrom(msg.sender, address(this), stakeAsset);
@> _mint(msg.sender, participantShares);
emit deposited(receiver, stakeAsset);
return participantShares;
}
function test_ReceiverSenderMismatch() public {
address alice = user1;
address bob = user2;
vm.startPrank(alice);
mockToken.approve(address(briVault), 10 ether);
briVault.deposit(5 ether, bob);
vm.stopPrank();
uint256 expected = 4925000000000000000;
assertEq(briVault.stakedAsset(bob), expected, "Bob has stakedAsset");
assertEq(briVault.stakedAsset(alice), 0, "Alice has no stakedAsset");
assertEq(briVault.balanceOf(alice), expected, "Alice has shares");
assertEq(briVault.balanceOf(bob), 0, "Bob has no shares");
vm.startPrank(alice);
uint256 aliceBalBefore = mockToken.balanceOf(alice);
briVault.cancelParticipation();
uint256 aliceBalAfter = mockToken.balanceOf(alice);
uint256 refund = aliceBalAfter - aliceBalBefore;
vm.stopPrank();
assertEq(refund, 0, "Alice gets 0 refund");
}
function test_ReceiverJoinsEvent_ZeroShares() public {
address alice = user1;
address bob = user2;
vm.startPrank(owner);
briVault.setCountry(countries);
vm.stopPrank();
vm.startPrank(alice);
mockToken.approve(address(briVault), 10 ether);
briVault.deposit(5 ether, bob);
vm.stopPrank();
vm.startPrank(bob);
briVault.joinEvent(10);
vm.stopPrank();
vm.startPrank(user3);
mockToken.approve(address(briVault), 10 ether);
briVault.deposit(5 ether, user3);
briVault.joinEvent(10);
vm.stopPrank();
vm.warp(eventEndDate + 1);
vm.startPrank(owner);
briVault.setWinner(10);
vm.stopPrank();
vm.startPrank(bob);
uint256 bobBalBefore = mockToken.balanceOf(bob);
briVault.withdraw();
uint256 bobBalAfter = mockToken.balanceOf(bob);
uint256 bobPayout = bobBalAfter - bobBalBefore;
vm.stopPrank();
vm.startPrank(user3);
uint256 user3BalBefore = mockToken.balanceOf(user3);
briVault.withdraw();
uint256 user3BalAfter = mockToken.balanceOf(user3);
uint256 user3Payout = user3BalAfter - user3BalBefore;
uint256 expectedUser3Shares = 4925000000000000000;
vm.stopPrank();
assertEq(briVault.userSharesToCountry(bob, 10), 0, "Bob has 0 shares registered");
assertEq(bobPayout, 0, "Bob receives 0 payout");
assertGt(user3Payout, 0, "User3 receives payout");
}
Mint shares to the receiver address, so both shares and staked assets are attached to the receiver.