Skip to content

Commit

Permalink
Merge branch 'main' into characterSheets-V2
Browse files Browse the repository at this point in the history
  • Loading branch information
MrDeadCe11 committed Nov 28, 2023
2 parents 98d9e69 + 74f9912 commit 25d7e11
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 53 deletions.
107 changes: 54 additions & 53 deletions .gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
CharacterAccountTest:testEquipAndUnequipViaMultiSendDelegateCall() (gas: 843696)
CharacterAccountTest:testEquipItemToCharacter() (gas: 855771)
CharacterAccountTest:testEquipViaMultiSendDelegateCall() (gas: 863227)
CharacterAccountTest:testUnequipItemToCharacter() (gas: 849930)
CharacterAccountTest:testEquipAndUnequipViaMultiSendDelegateCall() (gas: 843652)
CharacterAccountTest:testEquipItemToCharacter() (gas: 855727)
CharacterAccountTest:testEquipViaMultiSendDelegateCall() (gas: 863183)
CharacterAccountTest:testUnequipItemToCharacter() (gas: 849886)
CharacterEligibilityAdaptorTest:testIsEligible() (gas: 49781)
CharacterEligibilityAdaptorTest:testSupportsInterface() (gas: 10624)
CharacterSheetsFactoryTest:testCreateAndInitialize() (gas: 3882661)
CharacterSheetsFactoryTest:testCreateAndInitializeWithZeroDao() (gas: 3678413)
CharacterSheetsFactoryTest:testCreateAndInitialize() (gas: 3882617)
CharacterSheetsFactoryTest:testCreateAndInitializeWithZeroDao() (gas: 3678369)
CharacterSheetsFactoryTest:testCreateCharacterEligibilityAdaptor() (gas: 111277)
CharacterSheetsFactoryTest:testCreateCharacterSheets() (gas: 109404)
CharacterSheetsFactoryTest:testCreateClassLevelAdaptor() (gas: 111988)
Expand All @@ -14,63 +14,64 @@ CharacterSheetsFactoryTest:testCreateExperience() (gas: 109413)
CharacterSheetsFactoryTest:testCreateItems() (gas: 111163)
CharacterSheetsFactoryTest:testDeployment() (gas: 9899)
CharacterSheetsFactoryTest:testDeploymentRevert() (gas: 16036)
CharacterSheetsFactoryTest:testInitializeContracts() (gas: 3833804)
CharacterSheetsFactoryTest:testInitializeContracts() (gas: 3833849)
CharacterSheetsFactoryTest:testUpdateImplementationAddressStorage() (gas: 21216)
CharacterSheetsTest:testChangeBaseUri() (gas: 71436)
CharacterSheetsTest:testChangeBaseUriRevertNotAdmin() (gas: 71314)
CharacterSheetsTest:testEquipItemToCharacter() (gas: 324082)
CharacterSheetsTest:testChangeBaseUri() (gas: 71392)
CharacterSheetsTest:testChangeBaseUriRevertNotAdmin() (gas: 71270)
CharacterSheetsTest:testEquipItemToCharacter() (gas: 323994)
CharacterSheetsTest:testEquipItemToCharacterReverts() (gas: 214820)
CharacterSheetsTest:testGetCharacterSheetByCharacterId() (gas: 20415)
CharacterSheetsTest:testGetPlayerIdFromAccountAddress() (gas: 24193)
CharacterSheetsTest:testRemovePlayer() (gas: 925037)
CharacterSheetsTest:testRenounceSheet() (gas: 72481)
CharacterSheetsTest:testRenounceSheetReverts() (gas: 72218)
CharacterSheetsTest:testRestoreSheetAfterRemove() (gas: 765254)
CharacterSheetsTest:testRestoreSheetAfterRenounce() (gas: 702713)
CharacterSheetsTest:testRollCharacterSheet() (gas: 574864)
CharacterSheetsTest:testRemovePlayer() (gas: 924795)
CharacterSheetsTest:testRenounceSheet() (gas: 72503)
CharacterSheetsTest:testRenounceSheetReverts() (gas: 72240)
CharacterSheetsTest:testRestoreSheetAfterRemove() (gas: 765034)
CharacterSheetsTest:testRestoreSheetAfterRenounce() (gas: 702823)
CharacterSheetsTest:testRollCharacterSheet() (gas: 574908)
CharacterSheetsTest:testRollCharacterSheetFailNonMember() (gas: 61098)
CharacterSheetsTest:testRollCharacterSheetRevertAlreadyACharacter() (gas: 67800)
CharacterSheetsTest:testRollFailsForRenouncedSheet() (gas: 117868)
CharacterSheetsTest:testSafeTransferFrom() (gas: 453023)
CharacterSheetsTest:testRollFailsForRenouncedSheet() (gas: 117890)
CharacterSheetsTest:testSafeTransferFrom() (gas: 452979)
CharacterSheetsTest:testSafeTransferFromBackAndForth() (gas: 248600)
CharacterSheetsTest:testTransferFrom() (gas: 446058)
CharacterSheetsTest:testUnequipItemFromCharacter() (gas: 306573)
CharacterSheetsTest:testUpdateCharacterMetadata() (gas: 98340)
CharacterSheetsTest:testUpdateContractImplementation() (gas: 5065199)
ClassLevelAdaptorTest:testLevelRequirementsMet() (gas: 304476)
CharacterSheetsTest:testTransferFrom() (gas: 446036)
CharacterSheetsTest:testUnequipItemFromCharacter() (gas: 306485)
CharacterSheetsTest:testUpdateCharacterMetadata() (gas: 98384)
CharacterSheetsTest:testUpdateContractImplementation() (gas: 5065067)
ClassLevelAdaptorTest:testLevelRequirementsMet() (gas: 304432)
ClassLevelAdaptorTest:testSupportsInterface() (gas: 10602)
ClassesTest:testAssignClass() (gas: 253986)
ClassesTest:testAssignClass() (gas: 253854)
ClassesTest:testClaimClass() (gas: 135793)
ClassesTest:testCreateClass() (gas: 131530)
ClassesTest:testFuzz_DeLevelClass(uint256) (runs: 256, μ: 390539, ~: 376879)
ClassesTest:testLevelClass() (gas: 282272)
ClassesTest:testRenounceClass() (gas: 215624)
ClassesTest:testRevokeClass() (gas: 187844)
ClassesTest:testTransferClass() (gas: 722302)
ExperienceTest:testBurnExp() (gas: 194278)
ExperienceTest:testDropExp() (gas: 250751)
ClassesTest:testCreateClass() (gas: 131486)
ClassesTest:testFuzz_DeLevelClass(uint256) (runs: 256, μ: 390385, ~: 376747)
ClassesTest:testLevelClass() (gas: 282184)
ClassesTest:testRenounceClass() (gas: 215536)
ClassesTest:testRevokeClass() (gas: 187712)
ClassesTest:testTransferClass() (gas: 722170)
ExperienceTest:testBurnExp() (gas: 194190)
ExperienceTest:testDropExp() (gas: 250663)
ExperienceTest:testExperienceDeployment() (gas: 18173)
HatsAdaptorTest:testHatsAdaptorDeployment() (gas: 113016)
HatsAdaptorTest:testIsCharacter() (gas: 79317)
HatsAdaptorTest:testIsGameMaster() (gas: 59677)
HatsAdaptorTest:testIsPlayer() (gas: 81791)
HatsAdaptorTest:testAddGameMaster() (gas: 146903)
HatsAdaptorTest:testHatsAdaptorDeployment() (gas: 113039)
HatsAdaptorTest:testIsCharacter() (gas: 79360)
HatsAdaptorTest:testIsGameMaster() (gas: 59545)
HatsAdaptorTest:testIsPlayer() (gas: 81923)
HatsAdaptorTest:testMintCharacterHat() (gas: 170310)
HatsAdaptorTest:testMintPlayerHat() (gas: 683337)
HatsEligibilityModulesTest:testAddClassToElderModule() (gas: 1765700)
HatsEligibilityModulesTest:testAddNewAdmin() (gas: 2684796)
HatsEligibilityModulesTest:testAddNewGameMaster() (gas: 2708833)
HatsEligibilityModulesTest:testElderEligibilityModule() (gas: 1988091)
HatsEligibilityModulesTest:testNewModuleSetup() (gas: 2627512)
HatsEligibilityModulesTest:testRemoveAdmin() (gas: 2683024)
HatsEligibilityModulesTest:testRemoveGameMaster() (gas: 2711035)
ItemsTest:testClaimItem() (gas: 922511)
ItemsTest:testClaimItemRevert() (gas: 1358758)
ItemsTest:testCraftItem() (gas: 517191)
ItemsTest:testCraftItemRevert() (gas: 483593)
HatsAdaptorTest:testMintPlayerHat() (gas: 683403)
HatsEligibilityModulesTest:testAddClassToElderModule() (gas: 1765612)
HatsEligibilityModulesTest:testAddNewAdmin() (gas: 2684753)
HatsEligibilityModulesTest:testAddNewGameMaster() (gas: 2708790)
HatsEligibilityModulesTest:testElderEligibilityModule() (gas: 1987871)
HatsEligibilityModulesTest:testNewModuleSetup() (gas: 2627447)
HatsEligibilityModulesTest:testRemoveAdmin() (gas: 2682981)
HatsEligibilityModulesTest:testRemoveGameMaster() (gas: 2710992)
ItemsTest:testClaimItem() (gas: 922291)
ItemsTest:testClaimItemRevert() (gas: 1358494)
ItemsTest:testCraftItem() (gas: 517103)
ItemsTest:testCraftItemRevert() (gas: 483549)
ItemsTest:testCreateCraftableItem() (gas: 59691)
ItemsTest:testCreateItemTypeRevert() (gas: 67254)
ItemsTest:testDeleteItem() (gas: 267255)
ItemsTest:testDismantleItems() (gas: 1056131)
ItemsTest:testDropLoot() (gas: 1353266)
ItemsTest:testDropLootRevert() (gas: 289097)
ItemsTest:testCreateItemTypeRevert() (gas: 67210)
ItemsTest:testDeleteItem() (gas: 267184)
ItemsTest:testDismantleItems() (gas: 1055955)
ItemsTest:testDropLoot() (gas: 1353090)
ItemsTest:testDropLootRevert() (gas: 288965)
ItemsTest:testURI() (gas: 17797)
22 changes: 22 additions & 0 deletions src/adaptors/HatsAdaptor.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {IHats} from "hats-protocol/Interfaces/IHats.sol";
import {ERC1155HolderUpgradeable} from
"openzeppelin-contracts-upgradeable/token/ERC1155/utils/ERC1155HolderUpgradeable.sol";
import {IHatsEligibility} from "hats-protocol/Interfaces/IHatsEligibility.sol";
import {IAddressEligibilityModule} from "../interfaces/IAddressEligibilityModule.sol";
import {HatsModuleFactory} from "hats-module/HatsModuleFactory.sol";
import {ImplementationAddressStorage} from "../ImplementationAddressStorage.sol";
import {IClonesAddressStorage} from "../interfaces/IClonesAddressStorage.sol";
Expand Down Expand Up @@ -67,6 +68,13 @@ contract HatsAdaptor is Initializable, OwnableUpgradeable, UUPSUpgradeable, ERC1
event AdminEligibilityModuleUpdated(address newAdminEligibilityModule);
event HatTreeInitialized(address owner, bytes hatsAddresses, bytes hatsStrings, bytes customModuleImplementations);

modifier onlyAdmin() {
if (!_hats.isWearerOfHat(msg.sender, _hatsData.adminHatId)) {
revert Errors.AdminOnly();
}
_;
}

constructor() {
_disableInitializers();
}
Expand Down Expand Up @@ -180,6 +188,14 @@ contract HatsAdaptor is Initializable, OwnableUpgradeable, UUPSUpgradeable, ERC1
emit HatsUpdated(newHats);
}

function addGameMasters(address[] calldata newGameMasters) external onlyAdmin {
IAddressEligibilityModule(gameMasterHatEligibilityModule).addEligibleAddresses(newGameMasters);
//check eligibility module for emitted event
for (uint256 i = 0; i < newGameMasters.length; i++) {
_ifNotHatMint(newGameMasters[i], _hatsData.gameMasterHatId);
}
}

function mintPlayerHat(address wearer) external returns (bool) {
if (_hatsData.playerHatId == uint256(0)) {
revert Errors.VariableNotSet();
Expand Down Expand Up @@ -245,6 +261,12 @@ contract HatsAdaptor is Initializable, OwnableUpgradeable, UUPSUpgradeable, ERC1
return _hats.balanceOf(wearer, _hatsData.gameMasterHatId) > 0;
}

function _ifNotHatMint(address wearer, uint256 hatId) internal {
if (!_hats.isWearerOfHat(wearer, hatId)) {
_hats.mintHat(hatId, wearer);
}
}

//solhint-disable-next-line no-empty-blocks
function _authorizeUpgrade(address newImplementation) internal virtual override onlyOwner {}

Expand Down
7 changes: 7 additions & 0 deletions src/interfaces/IAddressEligibilityModule.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IAddressEligibilityModule {
function addEligibleAddresses(address[] calldata _addresses) external;
function removeEligibleAddresses(address[] calldata _addresses) external;
}
9 changes: 9 additions & 0 deletions test/HatsAdaptor.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,13 @@ contract HatsAdaptorTest is SetUp {
assertFalse(deployments.hatsAdaptor.isGameMaster(accounts.player1), "player one should not be a GameMaster.");
assertFalse(deployments.hatsAdaptor.isGameMaster(accounts.character1), "npc1 should not be a GameMaster.");
}

function testAddGameMaster() public {
address[] memory gameMasters = createAddressMemoryArray(1);
gameMasters[0] = accounts.rando;
vm.prank(accounts.admin);
deployments.hatsAdaptor.addGameMasters(gameMasters);

assertEq(deployments.hatsAdaptor.isGameMaster(accounts.rando), true, "rando not gm");
}
}

0 comments on commit 25d7e11

Please sign in to comment.