240519-hacktrick-foundryTest/test/MyToken.t.sol

68 lines
2.3 KiB
Solidity

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;
import {Test, console} from "forge-std/Test.sol";
import {MyToken} from "../src/MyToken.sol";
contract MyTokenTest is Test {
MyToken public myToken;
address public owner;
address public user;
function setUp() public {
owner = address(0x100);
user = address(0x101);
vm.deal(owner, 100 ether);
vm.deal(user, 100 ether);
vm.startPrank(owner);
myToken = new MyToken(1000);
vm.stopPrank();
}
function test_buyAndTransferTokens() public {
vm.startPrank(user); // User operations under here
uint ethAmount = 0.01 ether;
// uint ethAmount = 0.001 ether; // This will cause myToken.buyTokens() to revert
uint userBalanceBeforeBuy = myToken.balanceOf(user);
uint totalSupplyBeforeBuy = myToken.totalSupply();
console.log("User balance before buy:", userBalanceBeforeBuy);
console.log("Total supply before buy:", totalSupplyBeforeBuy);
uint expectedBalance = userBalanceBeforeBuy + ethAmount / myToken.tokenPrice();
myToken.buyTokens{value: ethAmount}();
uint userBalanceAfterBuy = myToken.balanceOf(user);
uint totalSupplyAfterBuy = myToken.totalSupply();
console.log("User balance after buy:", userBalanceAfterBuy);
console.log("Total supply after buy:", totalSupplyAfterBuy);
assert(userBalanceAfterBuy > userBalanceBeforeBuy);
assertEq(userBalanceAfterBuy, expectedBalance);
assertEq(totalSupplyAfterBuy, totalSupplyBeforeBuy + ethAmount / myToken.tokenPrice());
console.log("====================");
uint ownerBalanceBeforeTransfer = myToken.balanceOf(owner);
uint userBalanceBeforeTransfer = myToken.balanceOf(user);
console.log("Owner balance before transfer:", ownerBalanceBeforeTransfer);
console.log("User balance before transfer:", userBalanceBeforeTransfer);
myToken.transfer(owner, userBalanceBeforeTransfer);
uint ownerBalanceAfterTransfer = myToken.balanceOf(owner);
uint userBalanceAfterTransfer = myToken.balanceOf(user);
console.log("Owner balance after transfer:", ownerBalanceAfterTransfer);
console.log("User balance after transfer:", userBalanceAfterTransfer);
assert(ownerBalanceAfterTransfer > ownerBalanceBeforeTransfer);
assertEq(ownerBalanceAfterTransfer, ownerBalanceBeforeTransfer + userBalanceBeforeTransfer);
vm.stopPrank();
}
}