If the initial host handed over the role to another participant, he/she cannot become the host again without depositing as he/she is not registered as a participant.
function testHostCannotBecomeHostAgain() public {
vm.startPrank(user1);
cd.deposit(address(wbtc), 2e18);
vm.stopPrank();
assertEq(cd.getParticipationStatus(user1), true, "User not participant");
vm.startPrank(deployer);
cd.changeHost(user1);
vm.stopPrank();
assertEq(cd.host(), user1, "User1 is not host");
vm.startPrank(user1);
vm.expectRevert(ChristmasDinner.OnlyParticipantsCanBeHost.selector);
cd.changeHost(deployer);
vm.stopPrank();
}
[PASS] testHostCannotBecomeHostAgain() (gas: 112396)
Traces:
[112396] ChristmasDinnerTest::testHostCannotBecomeHostAgain()
├─ [0] VM::startPrank(user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF])
│ └─ ← [Return]
├─ [90270] ChristmasDinner::deposit(ERC20Mock: [0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f], 2000000000000000000 [2e18])
│ ├─ [35666] ERC20Mock::transferFrom(user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF], ChristmasDinner: [0x8Ad159a275AEE56fb2334DBb69036E9c7baCEe9b], 2000000000000000000 [2e18])
│ │ ├─ emit Transfer(from: user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF], to: ChristmasDinner: [0x8Ad159a275AEE56fb2334DBb69036E9c7baCEe9b], value: 2000000000000000000 [2e18])
│ │ └─ ← [Return] true
│ ├─ emit NewSignup(: user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF], : 2000000000000000000 [2e18], : true)
│ └─ ← [Stop]
├─ [0] VM::stopPrank()
│ └─ ← [Return]
├─ [571] ChristmasDinner::getParticipationStatus(user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF]) [staticcall]
│ └─ ← [Return] true
├─ [0] VM::assertEq(true, true, "User not participant") [staticcall]
│ └─ ← [Return]
├─ [0] VM::startPrank(deployer: [0xaE0bDc4eEAC5E950B67C6819B118761CaAF61946])
│ └─ ← [Return]
├─ [6902] ChristmasDinner::changeHost(user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF])
│ ├─ emit NewHost(: user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF])
│ └─ ← [Stop]
├─ [0] VM::stopPrank()
│ └─ ← [Return]
├─ [414] ChristmasDinner::host() [staticcall]
│ └─ ← [Return] user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF]
├─ [0] VM::assertEq(user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF], user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF], "User1 is not host") [staticcall]
│ └─ ← [Return]
├─ [0] VM::startPrank(user1: [0x29E3b139f4393aDda86303fcdAa35F60Bb7092bF])
│ └─ ← [Return]
├─ [0] VM::expectRevert(OnlyParticipantsCanBeHost())
│ └─ ← [Return]
├─ [2738] ChristmasDinner::changeHost(deployer: [0xaE0bDc4eEAC5E950B67C6819B118761CaAF61946])
-> │ └─ ← [Revert] OnlyParticipantsCanBeHost()
├─ [0] VM::stopPrank()
│ └─ ← [Return]
└─ ← [Stop]
Suite result: ok. 1 passed; 0 failed; 0 skipped; finished in 3.92s (131.96µs CPU time)
constructor (address _WBTC, address _WETH, address _USDC) {
host = msg.sender;
i_WBTC = IERC20(_WBTC);
whitelisted[_WBTC] = true;
i_WETH = IERC20(_WETH);
whitelisted[_WETH] = true;
i_USDC = IERC20(_USDC);
whitelisted[_USDC] = true;
+ participant[host] = true;
}