Skip to content

Commit

Permalink
A
Browse files Browse the repository at this point in the history
  • Loading branch information
Zcy19980412 committed Dec 1, 2024
2 parents 74623f9 + 9efe0cb commit 24e1d7b
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 3 deletions.
3 changes: 2 additions & 1 deletion src/fat-token.sol
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ contract FatToken is ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
/********************************************/

/******************* state ********************/
mapping(address tokenOwner => address gameCA) private _delegateTo;
mapping(address tokenOwner => address gameCA) public _delegateTo;
/********************************************/

uint constant public FATS_PER_ETH = 10000000;
Expand Down Expand Up @@ -87,6 +87,7 @@ contract FatToken is ERC20Upgradeable, OwnableUpgradeable, UUPSUpgradeable {
function undelegate(address to) public {
address delegator = _delegateTo[to];
if (delegator == msg.sender) {
_approve(to, delegator, 0);
delete _delegateTo[to];
} else {
revert FatToken_InvalidOperator(delegator, msg.sender);
Expand Down
39 changes: 37 additions & 2 deletions test/fat-token-test.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,54 @@ contract FatTokenTest is Test {
vm.stopPrank();
}

function testMint() public {
function _adminMint() internal {
deal(admin,1 ether);
vm.prank(admin);
fatTokenAddress.call{value: 1 ether}("");
}

function testMint() public {
_adminMint();
assertEq(fatToken.balanceOf(admin), fatToken.FATS_PER_ETH()* 1 ether);
}

function testBurn() public {
_adminMint();
uint256 burnAmount = fatToken.balanceOf(admin);
vm.prank(admin);
fatToken.burn(payable(userA), burnAmount);
assertEq(userA.balance, burnAmount / fatToken.FATS_PER_ETH());
}

function _txoriginDelegateToUserA() internal {
deal(fatTokenAddress, tx.origin, 3 ether);
vm.prank(tx.origin);
fatToken.delegateTo(userA);
vm.prank(userA);
fatToken.transferFrom(tx.origin,userA, 1 ether);
}

function testDelegateTo() public {

_txoriginDelegateToUserA();
assertEq(fatToken.balanceOf(userA), 1 ether);
// only delegator: userA can transfer token.
vm.expectRevert();
vm.prank(tx.origin);
fatToken.transfer(userA, 1 ether);
}

function testUnDelegateTo() public {
_txoriginDelegateToUserA();

vm.prank(userA);
fatToken.undelegate(tx.origin);

vm.prank(tx.origin);
fatToken.transfer(userA, 1 ether);

// only delegator: userA can transfer token.
vm.expectRevert();
vm.prank(userA);
fatToken.transferFrom(tx.origin, userA,1 ether);
}
}

0 comments on commit 24e1d7b

Please sign in to comment.