add conversion rate in a fallback and receive, no need for unfair conversion
Signed-off-by: Uncle Fatso <uncle.fatso@ghostchain.io>
This commit is contained in:
		
							parent
							
								
									8e9374b2d0
								
							
						
					
					
						commit
						8746bc747a
					
				| @ -20,11 +20,13 @@ contract Reserve is ERC20Permit { | ||||
|     } | ||||
| 
 | ||||
|     fallback() external payable { | ||||
|         _mint(msg.sender, msg.value); | ||||
|         _accumulateDonation(msg.value); | ||||
|         _mint(msg.sender, msg.value * conversionRate); | ||||
|     } | ||||
| 
 | ||||
|     receive() external payable { | ||||
|         _mint(msg.sender, msg.value); | ||||
|         _accumulateDonation(msg.value); | ||||
|         _mint(msg.sender, msg.value * conversionRate); | ||||
|     } | ||||
| 
 | ||||
|     function changeRate(uint256 rate) external { | ||||
| @ -52,8 +54,7 @@ contract Reserve is ERC20Permit { | ||||
|     } | ||||
| 
 | ||||
|     function mint(address account) external payable { | ||||
|         uint256 donation = msg.value * donationRate / 1e5; | ||||
|         accumulatedDonation += donation; | ||||
|         _accumulateDonation(msg.value); | ||||
|         _mint(account, msg.value * conversionRate); | ||||
|     } | ||||
| 
 | ||||
| @ -70,4 +71,9 @@ contract Reserve is ERC20Permit { | ||||
|         uint256 valueDiff = address(this).balance - accumulatedDonation; | ||||
|         return amount * valueDiff / totalSupply(); | ||||
|     } | ||||
| 
 | ||||
|     function _accumulateDonation(uint256 value) private { | ||||
|         uint256 donation = value * donationRate / 1e5; | ||||
|         accumulatedDonation += donation; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -270,4 +270,30 @@ contract ReserveTest is Test { | ||||
|         assertEq(reserve.accumulatedDonation(), sendAmount); | ||||
|         assertEq(address(reserve).balance, sendAmount); | ||||
|     } | ||||
| 
 | ||||
|     function test_reserveFallback() public { | ||||
|         assertEq(address(reserve).balance, 0); | ||||
|         assertEq(reserve.balanceOf(aliceAddress), 0); | ||||
| 
 | ||||
|         vm.prank(aliceAddress); | ||||
|         (bool success, ) = address(reserve).call(abi.encodeWithSignature("nonExistentFunction()")); | ||||
|         require(success, "Fallback call failed"); | ||||
| 
 | ||||
|         assertEq(address(reserve).balance, 0); | ||||
|         assertEq(reserve.balanceOf(aliceAddress), 0); | ||||
|     } | ||||
| 
 | ||||
|     function test_reserveReceive() public { | ||||
|         assertEq(address(reserve).balance, 0); | ||||
|         assertEq(reserve.balanceOf(aliceAddress), 0); | ||||
| 
 | ||||
|         deal(aliceAddress, sendAmount); | ||||
|         vm.prank(aliceAddress); | ||||
|         (bool success, ) = address(reserve).call{value: sendAmount}(""); | ||||
|         require(success, "Transfer of native failed"); | ||||
| 
 | ||||
|         uint256 estimatedReceiveAmount = sendAmount * reserve.conversionRate(); | ||||
|         assertEq(address(reserve).balance, sendAmount); | ||||
|         assertEq(reserve.balanceOf(aliceAddress), estimatedReceiveAmount); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user