@towns-protocol/contracts 0.0.302
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +21 -0
- package/README.md +206 -0
- package/docs/permitAndStake_integration_guide.md +266 -0
- package/docs/swap_integration_guide.md +591 -0
- package/package.json +57 -0
- package/scripts/common/DeployBase.s.sol +26 -0
- package/scripts/common/DeployFacet.s.sol +7 -0
- package/scripts/common/Deployer.s.sol +33 -0
- package/scripts/common/Interaction.s.sol +51 -0
- package/scripts/deployments/diamonds/DeployAppRegistry.s.sol +168 -0
- package/scripts/deployments/diamonds/DeployBaseRegistry.s.sol +263 -0
- package/scripts/deployments/diamonds/DeployRiverAirdrop.s.sol +203 -0
- package/scripts/deployments/diamonds/DeployRiverMigration.s.sol +129 -0
- package/scripts/deployments/diamonds/DeployRiverRegistry.s.sol +175 -0
- package/scripts/deployments/diamonds/DeploySpace.s.sol +285 -0
- package/scripts/deployments/diamonds/DeploySpaceFactory.s.sol +416 -0
- package/scripts/deployments/diamonds/DeploySpaceOwner.s.sol +183 -0
- package/scripts/deployments/diamonds/DeploySwapRouter.s.sol +176 -0
- package/scripts/deployments/diamonds/IDiamondInitHelper.sol +11 -0
- package/scripts/deployments/facets/DeployAppAccount.s.sol +51 -0
- package/scripts/deployments/facets/DeployAppRegistryFacet.s.sol +69 -0
- package/scripts/deployments/facets/DeployArchitect.s.sol +51 -0
- package/scripts/deployments/facets/DeployAttestationRegistry.s.sol +36 -0
- package/scripts/deployments/facets/DeployBanning.s.sol +30 -0
- package/scripts/deployments/facets/DeployChannels.s.sol +35 -0
- package/scripts/deployments/facets/DeployCreateSpace.s.sol +42 -0
- package/scripts/deployments/facets/DeployDropFacet.s.sol +49 -0
- package/scripts/deployments/facets/DeployERC721A.s.sol +48 -0
- package/scripts/deployments/facets/DeployERC721ANonTransferable.s.sol +49 -0
- package/scripts/deployments/facets/DeployERC721AQueryable.s.sol +30 -0
- package/scripts/deployments/facets/DeployEntitlementChecker.s.sol +49 -0
- package/scripts/deployments/facets/DeployEntitlementDataQueryable.s.sol +29 -0
- package/scripts/deployments/facets/DeployEntitlementsManager.s.sol +33 -0
- package/scripts/deployments/facets/DeployExecutorFacet.s.sol +60 -0
- package/scripts/deployments/facets/DeployFeatureManager.s.sol +38 -0
- package/scripts/deployments/facets/DeployGuardianFacet.s.sol +39 -0
- package/scripts/deployments/facets/DeployImplementationRegistry.s.sol +36 -0
- package/scripts/deployments/facets/DeployMainnetDelegation.s.sol +43 -0
- package/scripts/deployments/facets/DeployMembership.s.sol +77 -0
- package/scripts/deployments/facets/DeployMembershipMetadata.s.sol +30 -0
- package/scripts/deployments/facets/DeployMembershipToken.s.sol +47 -0
- package/scripts/deployments/facets/DeployMerkleAirdrop.s.sol +37 -0
- package/scripts/deployments/facets/DeployMetadata.s.sol +39 -0
- package/scripts/deployments/facets/DeployMockLegacyArchitect.s.sol +33 -0
- package/scripts/deployments/facets/DeployNodeOperator.s.sol +49 -0
- package/scripts/deployments/facets/DeployNodeRegistry.s.sol +37 -0
- package/scripts/deployments/facets/DeployOperatorRegistry.s.sol +36 -0
- package/scripts/deployments/facets/DeployPartnerRegistry.s.sol +41 -0
- package/scripts/deployments/facets/DeployPlatformRequirements.s.sol +75 -0
- package/scripts/deployments/facets/DeployPrepayFacet.s.sol +31 -0
- package/scripts/deployments/facets/DeployPricingModules.s.sol +36 -0
- package/scripts/deployments/facets/DeployReferrals.s.sol +34 -0
- package/scripts/deployments/facets/DeployReviewFacet.s.sol +31 -0
- package/scripts/deployments/facets/DeployRewardsDistributionV2.s.sol +76 -0
- package/scripts/deployments/facets/DeployRiverConfig.s.sol +41 -0
- package/scripts/deployments/facets/DeployRoles.s.sol +48 -0
- package/scripts/deployments/facets/DeploySchemaRegistry.s.sol +35 -0
- package/scripts/deployments/facets/DeploySignerFacet.s.sol +47 -0
- package/scripts/deployments/facets/DeploySimpleApp.s.sol +10 -0
- package/scripts/deployments/facets/DeploySpaceDelegation.s.sol +43 -0
- package/scripts/deployments/facets/DeploySpaceEntitlementGated.s.sol +31 -0
- package/scripts/deployments/facets/DeploySpaceFactoryInit.s.sol +33 -0
- package/scripts/deployments/facets/DeploySpaceOwnerFacet.s.sol +71 -0
- package/scripts/deployments/facets/DeployStreamRegistry.s.sol +50 -0
- package/scripts/deployments/facets/DeploySwapFacet.s.sol +33 -0
- package/scripts/deployments/facets/DeploySwapRouterFacet.s.sol +38 -0
- package/scripts/deployments/facets/DeployTipping.s.sol +31 -0
- package/scripts/deployments/facets/DeployTokenMigration.s.sol +40 -0
- package/scripts/deployments/facets/DeployTownsPoints.s.sol +53 -0
- package/scripts/deployments/facets/DeployTreasury.s.sol +30 -0
- package/scripts/deployments/facets/DeployUpgradeableBeacon.s.sol +34 -0
- package/scripts/deployments/facets/DeployWalletLink.s.sol +56 -0
- package/scripts/deployments/facets/DeployXChain.s.sol +35 -0
- package/scripts/deployments/utils/DeployAccountFactory.s.sol +40 -0
- package/scripts/deployments/utils/DeployEntitlementGatedExample.s.sol +23 -0
- package/scripts/deployments/utils/DeployEntrypoint.s.sol +28 -0
- package/scripts/deployments/utils/DeployMember.s.sol +95 -0
- package/scripts/deployments/utils/DeployMockDiamond.s.sol +7 -0
- package/scripts/deployments/utils/DeployMockERC20.s.sol +24 -0
- package/scripts/deployments/utils/DeployMockERC721A.s.sol +45 -0
- package/scripts/deployments/utils/DeployMockLegacyMembership.s.sol +29 -0
- package/scripts/deployments/utils/DeployMockMessenger.s.sol +42 -0
- package/scripts/deployments/utils/DeployMockNFT.s.sol +86 -0
- package/scripts/deployments/utils/DeployPoapEntitlement.s.sol +16 -0
- package/scripts/deployments/utils/DeployProxyBatchDelegation.s.sol +112 -0
- package/scripts/deployments/utils/DeploySpaceProxyInitializer.s.sol +28 -0
- package/scripts/deployments/utils/DeployTieredLogPricingV2.s.sol +23 -0
- package/scripts/deployments/utils/DeployTieredLogPricingV3.s.sol +23 -0
- package/scripts/deployments/utils/DeployTownsBase.s.sol +95 -0
- package/scripts/deployments/utils/DeployTownsMainnet.s.sol +66 -0
- package/scripts/deployments/utils/DeployTownsMulti.s.sol +53 -0
- package/scripts/deployments/utils/DeployWrappedTowns.s.sol +52 -0
- package/scripts/deployments/utils/LibLayerZeroValues.sol +34 -0
- package/scripts/deployments/utils/pricing/TieredLogPricing.s.sol +45 -0
- package/scripts/interactions/InteractAirdrop.s.sol +57 -0
- package/scripts/interactions/InteractAlphaPost.s.sol +32 -0
- package/scripts/interactions/InteractAlphaSparse.s.sol +173 -0
- package/scripts/interactions/InteractBaseAlpha.s.sol +84 -0
- package/scripts/interactions/InteractBaseBridge.s.sol +48 -0
- package/scripts/interactions/InteractBridgeLayerZero.s.sol +102 -0
- package/scripts/interactions/InteractClaimCondition.s.sol +56 -0
- package/scripts/interactions/InteractCreateSpace.s.sol +50 -0
- package/scripts/interactions/InteractDiamondCut.s.sol +47 -0
- package/scripts/interactions/InteractDropFacet.s.sol +32 -0
- package/scripts/interactions/InteractEnableNewSnapshotFormat.s.sol +27 -0
- package/scripts/interactions/InteractEnableNode2NodeAuth.s.sol +27 -0
- package/scripts/interactions/InteractMembership.s.sol +42 -0
- package/scripts/interactions/InteractMockERC721A.s.sol +20 -0
- package/scripts/interactions/InteractNodeOperators.s.sol +41 -0
- package/scripts/interactions/InteractPostDeploy.s.sol +59 -0
- package/scripts/interactions/InteractPrepay.s.sol +30 -0
- package/scripts/interactions/InteractRegisterApp.s.sol +61 -0
- package/scripts/interactions/InteractRiverAlpha.s.sol +30 -0
- package/scripts/interactions/InteractRiverAlphaSparse.s.sol +117 -0
- package/scripts/interactions/InteractRiverMainnet.s.sol +27 -0
- package/scripts/interactions/InteractRiverRegistry.s.sol +36 -0
- package/scripts/interactions/InteractRiverRegistrySetBlocklist.s.sol +30 -0
- package/scripts/interactions/InteractRiverRegistrySetFreq.s.sol +27 -0
- package/scripts/interactions/InteractRiverRegistrySetRepl.s.sol +30 -0
- package/scripts/interactions/InteractSetDefaultUri.s.sol +20 -0
- package/scripts/interactions/InteractSetDefaultUriLocalhost.s.sol +19 -0
- package/scripts/interactions/InteractTransferOwnership.s.sol +21 -0
- package/scripts/interactions/InteractUpdateMbRecencyCheck.s.sol +27 -0
- package/scripts/interactions/InteractUpdateMediaChunkCount.s.sol +27 -0
- package/scripts/interactions/InteractUpdateMediaChunkSize.s.sol +27 -0
- package/scripts/interactions/helpers/AlphaHelper.sol +149 -0
- package/scripts/interactions/helpers/RiverConfigValues.sol +22 -0
- package/scripts/interactions/interfaces/IL1StandardBridge.sol +35 -0
- package/scripts/interactions/interfaces/IL2StandardBridge.sol +69 -0
- package/src/airdrop/drop/DropBase.sol +210 -0
- package/src/airdrop/drop/DropClaim.sol +55 -0
- package/src/airdrop/drop/DropFacet.sol +176 -0
- package/src/airdrop/drop/DropGroup.sol +111 -0
- package/src/airdrop/drop/DropStorage.sol +23 -0
- package/src/airdrop/drop/IDropFacet.sol +136 -0
- package/src/airdrop/points/CheckIn.sol +71 -0
- package/src/airdrop/points/ITownsPoints.sol +64 -0
- package/src/airdrop/points/TownsPoints.sol +196 -0
- package/src/airdrop/points/TownsPointsStorage.sol +22 -0
- package/src/apps/BaseApp.sol +62 -0
- package/src/apps/ITownsApp.sol +28 -0
- package/src/apps/SchemaResolver.sol +170 -0
- package/src/apps/facets/attest/AttestationBase.sol +335 -0
- package/src/apps/facets/attest/AttestationLib.sol +64 -0
- package/src/apps/facets/attest/AttestationRegistry.sol +39 -0
- package/src/apps/facets/attest/AttestationStorage.sol +35 -0
- package/src/apps/facets/attest/IAttestationRegistry.sol +43 -0
- package/src/apps/facets/registry/AppRegistryBase.sol +403 -0
- package/src/apps/facets/registry/AppRegistryFacet.sol +173 -0
- package/src/apps/facets/registry/AppRegistryStorage.sol +53 -0
- package/src/apps/facets/registry/IAppRegistry.sol +159 -0
- package/src/apps/facets/schema/ISchema.sol +14 -0
- package/src/apps/facets/schema/SchemaBase.sol +88 -0
- package/src/apps/facets/schema/SchemaLib.sol +14 -0
- package/src/apps/facets/schema/SchemaRegistry.sol +51 -0
- package/src/apps/facets/schema/SchemaStorage.sol +34 -0
- package/src/apps/helpers/ISimpleApp.sol +51 -0
- package/src/apps/helpers/SimpleApp.sol +97 -0
- package/src/apps/helpers/SimpleAppStorage.sol +27 -0
- package/src/base/registry/facets/checker/EntitlementChecker.sol +237 -0
- package/src/base/registry/facets/checker/EntitlementCheckerStorage.sol +28 -0
- package/src/base/registry/facets/checker/IEntitlementChecker.sol +95 -0
- package/src/base/registry/facets/delegation/ISpaceDelegation.sol +69 -0
- package/src/base/registry/facets/delegation/SpaceDelegationFacet.sol +250 -0
- package/src/base/registry/facets/delegation/SpaceDelegationStorage.sol +35 -0
- package/src/base/registry/facets/distribution/v1/IRewardsDistribution.sol +51 -0
- package/src/base/registry/facets/distribution/v1/RewardsDistribution.sol +439 -0
- package/src/base/registry/facets/distribution/v1/RewardsDistributionStorage.sol +32 -0
- package/src/base/registry/facets/distribution/v2/DelegationProxy.sol +53 -0
- package/src/base/registry/facets/distribution/v2/IRewardsDistribution.sol +372 -0
- package/src/base/registry/facets/distribution/v2/RewardsDistributionBase.sol +299 -0
- package/src/base/registry/facets/distribution/v2/RewardsDistributionStorage.sol +37 -0
- package/src/base/registry/facets/distribution/v2/RewardsDistributionV2.sol +392 -0
- package/src/base/registry/facets/distribution/v2/StakingRewards.sol +466 -0
- package/src/base/registry/facets/mainnet/ICrossDomainMessenger.sol +58 -0
- package/src/base/registry/facets/mainnet/IMainnetDelegation.sol +127 -0
- package/src/base/registry/facets/mainnet/MainnetDelegation.sol +119 -0
- package/src/base/registry/facets/mainnet/MainnetDelegationBase.sol +274 -0
- package/src/base/registry/facets/mainnet/MainnetDelegationStorage.sol +36 -0
- package/src/base/registry/facets/operator/INodeOperator.sol +91 -0
- package/src/base/registry/facets/operator/NodeOperatorFacet.sol +189 -0
- package/src/base/registry/facets/operator/NodeOperatorStorage.sol +39 -0
- package/src/base/registry/facets/xchain/IXChain.sol +54 -0
- package/src/base/registry/facets/xchain/XChain.sol +158 -0
- package/src/base/registry/facets/xchain/XChainCheckLib.sol +105 -0
- package/src/base/registry/facets/xchain/XChainLib.sol +46 -0
- package/src/diamond/facets/beacon/UpgradeableBeacon.sol +38 -0
- package/src/diamond/facets/beacon/UpgradeableBeaconFacet.sol +34 -0
- package/src/diamond/facets/governance/votes/Checkpoints.sol +642 -0
- package/src/diamond/facets/governance/votes/Votes.sol +63 -0
- package/src/diamond/facets/governance/votes/VotesBase.sol +274 -0
- package/src/diamond/facets/governance/votes/VotesStorage.sol +21 -0
- package/src/diamond/facets/governance/votes/enumerable/IVotesEnumerable.sol +38 -0
- package/src/diamond/facets/governance/votes/enumerable/VotesEnumerable.sol +39 -0
- package/src/diamond/facets/governance/votes/enumerable/VotesEnumerableLib.sol +102 -0
- package/src/diamond/facets/metadata/IMetadata.sol +27 -0
- package/src/diamond/facets/metadata/MetadataFacet.sol +71 -0
- package/src/diamond/facets/token/ERC5643/ERC5643.sol +51 -0
- package/src/diamond/facets/token/ERC5643/ERC5643Base.sol +48 -0
- package/src/diamond/facets/token/ERC5643/ERC5643Storage.sol +26 -0
- package/src/diamond/facets/token/ERC5643/IERC5643.sol +44 -0
- package/src/diamond/facets/token/ERC721A/ERC721A.sol +270 -0
- package/src/diamond/facets/token/ERC721A/ERC721ABase.sol +829 -0
- package/src/diamond/facets/token/ERC721A/ERC721ANonTransferable.sol +21 -0
- package/src/diamond/facets/token/ERC721A/ERC721AStorage.sol +115 -0
- package/src/diamond/facets/token/ERC721A/IERC721A.sol +283 -0
- package/src/diamond/facets/token/ERC721A/extensions/ERC721AQueryable.sol +134 -0
- package/src/diamond/facets/token/ERC721A/extensions/IERC721AQueryable.sol +83 -0
- package/src/diamond/utils/Context.sol +19 -0
- package/src/factory/SpaceFactoryInit.sol +17 -0
- package/src/factory/facets/architect/Architect.sol +98 -0
- package/src/factory/facets/architect/ArchitectBase.sol +95 -0
- package/src/factory/facets/architect/ArchitectStorage.sol +28 -0
- package/src/factory/facets/architect/IArchitect.sol +155 -0
- package/src/factory/facets/architect/ImplementationStorage.sol +42 -0
- package/src/factory/facets/architect/pricing/IPricingModules.sol +41 -0
- package/src/factory/facets/architect/pricing/PricingModulesBase.sol +89 -0
- package/src/factory/facets/architect/pricing/PricingModulesFacet.sol +40 -0
- package/src/factory/facets/architect/pricing/PricingModulesStorage.sol +30 -0
- package/src/factory/facets/create/CreateSpace.sol +107 -0
- package/src/factory/facets/create/CreateSpaceLib.sol +335 -0
- package/src/factory/facets/create/ICreateSpace.sol +70 -0
- package/src/factory/facets/feature/FeatureConditionLib.sol +53 -0
- package/src/factory/facets/feature/FeatureManagerFacet.sol +66 -0
- package/src/factory/facets/feature/FeatureManagerLib.sol +168 -0
- package/src/factory/facets/feature/IFeatureManagerFacet.sol +73 -0
- package/src/factory/facets/partner/IPartnerRegistry.sol +56 -0
- package/src/factory/facets/partner/PartnerRegistry.sol +57 -0
- package/src/factory/facets/partner/PartnerRegistryBase.sol +132 -0
- package/src/factory/facets/partner/PartnerRegistryStorage.sol +40 -0
- package/src/factory/facets/platform/requirements/IPlatformRequirements.sol +143 -0
- package/src/factory/facets/platform/requirements/PlatformRequirementsBase.sol +124 -0
- package/src/factory/facets/platform/requirements/PlatformRequirementsFacet.sol +122 -0
- package/src/factory/facets/platform/requirements/PlatformRequirementsStorage.sol +41 -0
- package/src/factory/facets/registry/IImplementationRegistry.sol +46 -0
- package/src/factory/facets/registry/ImplementationRegistry.sol +64 -0
- package/src/factory/facets/registry/ImplementationRegistryStorage.sol +28 -0
- package/src/factory/facets/wallet-link/IWalletLink.sol +218 -0
- package/src/factory/facets/wallet-link/WalletLink.sol +108 -0
- package/src/factory/facets/wallet-link/WalletLinkBase.sol +492 -0
- package/src/factory/facets/wallet-link/interfaces/IDelegateRegistry.sol +63 -0
- package/src/factory/facets/wallet-link/interfaces/IDelegateRegistryV1.sol +35 -0
- package/src/factory/facets/wallet-link/interfaces/ISCL_EIP6565.sol +24 -0
- package/src/factory/facets/wallet-link/libraries/SolanaUtils.sol +161 -0
- package/src/factory/facets/wallet-link/libraries/WalletLib.sol +62 -0
- package/src/river/registry/facets/config/IRiverConfig.sol +117 -0
- package/src/river/registry/facets/config/RiverConfig.sol +174 -0
- package/src/river/registry/facets/node/INodeRegistry.sol +69 -0
- package/src/river/registry/facets/node/NodeRegistry.sol +143 -0
- package/src/river/registry/facets/operator/IOperatorRegistry.sol +28 -0
- package/src/river/registry/facets/operator/OperatorRegistry.sol +86 -0
- package/src/river/registry/facets/stream/IStreamRegistry.sol +184 -0
- package/src/river/registry/facets/stream/StreamRegistry.sol +396 -0
- package/src/river/registry/libraries/RegistryErrors.sol +24 -0
- package/src/river/registry/libraries/RegistryStorage.sol +181 -0
- package/src/router/ISwapRouter.sol +226 -0
- package/src/router/Permit2Hash.sol +92 -0
- package/src/router/SwapRouter.sol +463 -0
- package/src/router/SwapRouterStorage.sol +21 -0
- package/src/spaces/entitlements/ICrossChainEntitlement.sol +22 -0
- package/src/spaces/entitlements/IEntitlement.sol +61 -0
- package/src/spaces/entitlements/PolymarketEntitlement.sol +79 -0
- package/src/spaces/entitlements/poap/IPOAP.sol +26 -0
- package/src/spaces/entitlements/poap/PoapEntitlement.sol +56 -0
- package/src/spaces/entitlements/rule/IRuleEntitlement.sol +174 -0
- package/src/spaces/entitlements/rule/RuleEntitlement.sol +183 -0
- package/src/spaces/entitlements/rule/RuleEntitlementV2.sol +219 -0
- package/src/spaces/entitlements/user/IUserEntitlement.sol +24 -0
- package/src/spaces/entitlements/user/UserEntitlement.sol +273 -0
- package/src/spaces/facets/DependencyLib.sol +60 -0
- package/src/spaces/facets/Entitled.sol +172 -0
- package/src/spaces/facets/Permissions.sol +21 -0
- package/src/spaces/facets/account/AppAccount.sol +93 -0
- package/src/spaces/facets/account/AppAccountBase.sol +275 -0
- package/src/spaces/facets/account/AppAccountStorage.sol +63 -0
- package/src/spaces/facets/account/IAppAccount.sol +71 -0
- package/src/spaces/facets/account/SignerFacet.sol +26 -0
- package/src/spaces/facets/banning/Banning.sol +41 -0
- package/src/spaces/facets/banning/BanningBase.sol +33 -0
- package/src/spaces/facets/banning/BanningStorage.sol +23 -0
- package/src/spaces/facets/banning/IBanning.sol +35 -0
- package/src/spaces/facets/channels/ChannelBase.sol +87 -0
- package/src/spaces/facets/channels/ChannelService.sol +177 -0
- package/src/spaces/facets/channels/ChannelStorage.sol +34 -0
- package/src/spaces/facets/channels/Channels.sol +80 -0
- package/src/spaces/facets/channels/IChannel.sol +98 -0
- package/src/spaces/facets/dispatcher/DispatcherBase.sol +86 -0
- package/src/spaces/facets/dispatcher/DispatcherStorage.sol +21 -0
- package/src/spaces/facets/dispatcher/IDispatcher.sol +6 -0
- package/src/spaces/facets/entitlements/EntitlementsManager.sol +49 -0
- package/src/spaces/facets/entitlements/EntitlementsManagerBase.sol +87 -0
- package/src/spaces/facets/entitlements/EntitlementsManagerService.sol +142 -0
- package/src/spaces/facets/entitlements/EntitlementsManagerStorage.sol +34 -0
- package/src/spaces/facets/entitlements/IEntitlementsManager.sol +67 -0
- package/src/spaces/facets/entitlements/extensions/EntitlementDataQueryable.sol +153 -0
- package/src/spaces/facets/entitlements/extensions/IEntitlementDataQueryable.sol +32 -0
- package/src/spaces/facets/executor/ExecutorBase.sol +564 -0
- package/src/spaces/facets/executor/ExecutorFacet.sol +178 -0
- package/src/spaces/facets/executor/ExecutorStorage.sol +99 -0
- package/src/spaces/facets/executor/GroupLib.sol +128 -0
- package/src/spaces/facets/executor/IExecutor.sol +287 -0
- package/src/spaces/facets/executor/hooks/HookBase.sol +172 -0
- package/src/spaces/facets/executor/hooks/HookLib.sol +38 -0
- package/src/spaces/facets/executor/hooks/IHookBase.sol +48 -0
- package/src/spaces/facets/gated/EntitlementGated.sol +59 -0
- package/src/spaces/facets/gated/EntitlementGatedBase.sol +324 -0
- package/src/spaces/facets/gated/EntitlementGatedStorage.sol +29 -0
- package/src/spaces/facets/gated/IEntitlementGated.sol +55 -0
- package/src/spaces/facets/guardian/GuardianBase.sol +80 -0
- package/src/spaces/facets/guardian/GuardianFacet.sol +43 -0
- package/src/spaces/facets/guardian/GuardianStorage.sol +27 -0
- package/src/spaces/facets/guardian/IGuardian.sol +54 -0
- package/src/spaces/facets/membership/IMembership.sol +216 -0
- package/src/spaces/facets/membership/MembershipBase.sol +272 -0
- package/src/spaces/facets/membership/MembershipFacet.sol +191 -0
- package/src/spaces/facets/membership/MembershipStorage.sol +40 -0
- package/src/spaces/facets/membership/join/MembershipJoin.sol +547 -0
- package/src/spaces/facets/membership/metadata/IMembershipMetadata.sol +9 -0
- package/src/spaces/facets/membership/metadata/MembershipMetadata.sol +32 -0
- package/src/spaces/facets/membership/pricing/IMembershipPricing.sol +18 -0
- package/src/spaces/facets/membership/pricing/fixed/FixedPricing.sol +29 -0
- package/src/spaces/facets/membership/pricing/fixed/FixedPricingStorage.sol +27 -0
- package/src/spaces/facets/membership/pricing/tiered/TieredLogPricingOracleV2.sol +148 -0
- package/src/spaces/facets/membership/pricing/tiered/TieredLogPricingOracleV3.sol +137 -0
- package/src/spaces/facets/membership/token/MembershipToken.sol +25 -0
- package/src/spaces/facets/owner/ISpaceOwner.sol +85 -0
- package/src/spaces/facets/owner/SpaceOwner.sol +174 -0
- package/src/spaces/facets/owner/SpaceOwnerBase.sol +121 -0
- package/src/spaces/facets/owner/SpaceOwnerStorage.sol +41 -0
- package/src/spaces/facets/owner/SpaceOwnerUriBase.sol +54 -0
- package/src/spaces/facets/points/PointsBase.sol +35 -0
- package/src/spaces/facets/prepay/IPrepay.sol +43 -0
- package/src/spaces/facets/prepay/PrepayBase.sol +27 -0
- package/src/spaces/facets/prepay/PrepayFacet.sol +59 -0
- package/src/spaces/facets/prepay/PrepayStorage.sol +26 -0
- package/src/spaces/facets/proxy/ISpaceProxyInitializer.sol +21 -0
- package/src/spaces/facets/proxy/SpaceProxy.sol +15 -0
- package/src/spaces/facets/proxy/SpaceProxyInitializer.sol +55 -0
- package/src/spaces/facets/referrals/IReferrals.sol +98 -0
- package/src/spaces/facets/referrals/ReferralsBase.sol +81 -0
- package/src/spaces/facets/referrals/ReferralsFacet.sol +65 -0
- package/src/spaces/facets/referrals/ReferralsStorage.sol +36 -0
- package/src/spaces/facets/review/IReview.sol +50 -0
- package/src/spaces/facets/review/ReviewFacet.sol +105 -0
- package/src/spaces/facets/review/ReviewStorage.sol +29 -0
- package/src/spaces/facets/roles/IRoles.sol +197 -0
- package/src/spaces/facets/roles/Roles.sol +123 -0
- package/src/spaces/facets/roles/RolesBase.sol +420 -0
- package/src/spaces/facets/roles/RolesStorage.sol +132 -0
- package/src/spaces/facets/swap/ISwapFacet.sol +91 -0
- package/src/spaces/facets/swap/SwapFacet.sol +290 -0
- package/src/spaces/facets/swap/SwapFacetStorage.sol +24 -0
- package/src/spaces/facets/tipping/ITipping.sol +80 -0
- package/src/spaces/facets/tipping/TippingBase.sol +73 -0
- package/src/spaces/facets/tipping/TippingFacet.sol +123 -0
- package/src/spaces/facets/treasury/ITreasury.sol +64 -0
- package/src/spaces/facets/treasury/Treasury.sol +82 -0
- package/src/spaces/facets/xchain/SpaceEntitlementGated.sol +62 -0
- package/src/tokens/Member.sol +246 -0
- package/src/tokens/lock/ILock.sol +42 -0
- package/src/tokens/lock/LockBase.sol +64 -0
- package/src/tokens/lock/LockFacet.sol +44 -0
- package/src/tokens/lock/LockStorage.sol +26 -0
- package/src/tokens/mainnet/claimer/AuthorizedClaimerStorage.sol +26 -0
- package/src/tokens/mainnet/claimer/AuthorizedClaimers.sol +84 -0
- package/src/tokens/mainnet/claimer/IAuthorizedClaimers.sol +36 -0
- package/src/tokens/mainnet/delegation/ProxyBatchDelegation.sol +86 -0
- package/src/tokens/migration/ITokenMigration.sol +35 -0
- package/src/tokens/migration/TokenMigrationFacet.sol +86 -0
- package/src/tokens/migration/TokenMigrationStorage.sol +27 -0
- package/src/tokens/towns/base/IERC7802.sol +30 -0
- package/src/tokens/towns/base/IOptimismMintableERC20.sol +31 -0
- package/src/tokens/towns/base/ISemver.sol +13 -0
- package/src/tokens/towns/base/Towns.sol +283 -0
- package/src/tokens/towns/base/TownsDeployer.sol +32 -0
- package/src/tokens/towns/base/TownsLib.sol +31 -0
- package/src/tokens/towns/base/versions/TownsV2.sol +15 -0
- package/src/tokens/towns/mainnet/ITowns.sol +56 -0
- package/src/tokens/towns/mainnet/Towns.sol +220 -0
- package/src/tokens/towns/mainnet/libs/TokenInflationLib.sol +89 -0
- package/src/tokens/towns/multichain/Towns.sol +19 -0
- package/src/tokens/towns/multichain/wTowns.sol +18 -0
- package/src/utils/Airdrop.sol +156 -0
- package/src/utils/airdrop/merkle/IMerkleAirdrop.sol +55 -0
- package/src/utils/airdrop/merkle/MerkleAirdrop.sol +118 -0
- package/src/utils/airdrop/merkle/MerkleAirdropStorage.sol +29 -0
- package/src/utils/interfaces/AggregatorV3Interface.sol +37 -0
- package/src/utils/interfaces/IMulticall.sol +10 -0
- package/src/utils/interfaces/IWETH.sol +10 -0
- package/src/utils/libraries/BasisPoints.sol +24 -0
- package/src/utils/libraries/Create2Utils.sol +74 -0
- package/src/utils/libraries/CurrencyTransfer.sol +99 -0
- package/src/utils/libraries/CustomRevert.sol +49 -0
- package/src/utils/libraries/Factory.sol +66 -0
- package/src/utils/libraries/StringSet.sol +190 -0
- package/src/utils/libraries/Validator.sol +31 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.4;
|
|
3
|
+
|
|
4
|
+
import {ReviewStorage} from "./ReviewStorage.sol";
|
|
5
|
+
|
|
6
|
+
interface IReviewBase {
|
|
7
|
+
enum Action {
|
|
8
|
+
Add,
|
|
9
|
+
Update,
|
|
10
|
+
Delete
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
struct Review {
|
|
14
|
+
string comment;
|
|
15
|
+
uint8 rating;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
19
|
+
/* CUSTOM ERRORS */
|
|
20
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
21
|
+
|
|
22
|
+
error ReviewFacet__InvalidCommentLength();
|
|
23
|
+
error ReviewFacet__InvalidRating();
|
|
24
|
+
error ReviewFacet__ReviewAlreadyExists();
|
|
25
|
+
error ReviewFacet__ReviewDoesNotExist();
|
|
26
|
+
|
|
27
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
28
|
+
/* EVENTS */
|
|
29
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
30
|
+
|
|
31
|
+
/// @notice Emitted when a review is added
|
|
32
|
+
event ReviewAdded(address indexed user, string comment, uint8 rating);
|
|
33
|
+
|
|
34
|
+
/// @notice Emitted when a review is updated
|
|
35
|
+
event ReviewUpdated(address indexed user, string comment, uint8 rating);
|
|
36
|
+
|
|
37
|
+
/// @notice Emitted when a review is deleted
|
|
38
|
+
event ReviewDeleted(address indexed user);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
interface IReview is IReviewBase {
|
|
42
|
+
function setReview(Action action, bytes calldata data) external;
|
|
43
|
+
|
|
44
|
+
function getReview(address user) external view returns (ReviewStorage.Content memory);
|
|
45
|
+
|
|
46
|
+
function getAllReviews()
|
|
47
|
+
external
|
|
48
|
+
view
|
|
49
|
+
returns (address[] memory users, ReviewStorage.Content[] memory reviews);
|
|
50
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {IReview} from "./IReview.sol";
|
|
6
|
+
|
|
7
|
+
// libraries
|
|
8
|
+
|
|
9
|
+
import {ReviewStorage} from "./ReviewStorage.sol";
|
|
10
|
+
import {CustomRevert} from "src/utils/libraries/CustomRevert.sol";
|
|
11
|
+
import {EnumerableSetLib} from "solady/utils/EnumerableSetLib.sol";
|
|
12
|
+
import {FixedPointMathLib} from "solady/utils/FixedPointMathLib.sol";
|
|
13
|
+
|
|
14
|
+
// contracts
|
|
15
|
+
import {Facet} from "@towns-protocol/diamond/src/facets/Facet.sol";
|
|
16
|
+
import {Entitled} from "src/spaces/facets/Entitled.sol";
|
|
17
|
+
|
|
18
|
+
contract ReviewFacet is IReview, Entitled, Facet {
|
|
19
|
+
using EnumerableSetLib for EnumerableSetLib.AddressSet;
|
|
20
|
+
|
|
21
|
+
uint256 internal constant DEFAULT_MIN_COMMENT_LENGTH = 10;
|
|
22
|
+
uint256 internal constant DEFAULT_MAX_COMMENT_LENGTH = 4000;
|
|
23
|
+
|
|
24
|
+
function __Review_init() external onlyInitializing {
|
|
25
|
+
_addInterface(type(IReview).interfaceId);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function setReview(Action action, bytes calldata data) external {
|
|
29
|
+
_validateMembership(msg.sender);
|
|
30
|
+
|
|
31
|
+
ReviewStorage.Layout storage rs = ReviewStorage.layout();
|
|
32
|
+
|
|
33
|
+
if (action == Action.Add) {
|
|
34
|
+
Review memory newReview = abi.decode(data, (Review));
|
|
35
|
+
_validateReview(newReview);
|
|
36
|
+
|
|
37
|
+
ReviewStorage.Content storage review = rs.reviewByUser[msg.sender];
|
|
38
|
+
|
|
39
|
+
if (review.createdAt != 0) {
|
|
40
|
+
CustomRevert.revertWith(ReviewFacet__ReviewAlreadyExists.selector);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
(review.comment, review.rating, review.createdAt) = (
|
|
44
|
+
newReview.comment,
|
|
45
|
+
newReview.rating,
|
|
46
|
+
uint40(block.timestamp)
|
|
47
|
+
);
|
|
48
|
+
rs.usersReviewed.add(msg.sender);
|
|
49
|
+
|
|
50
|
+
emit ReviewAdded(msg.sender, newReview.comment, newReview.rating);
|
|
51
|
+
} else if (action == Action.Update) {
|
|
52
|
+
Review memory newReview = abi.decode(data, (Review));
|
|
53
|
+
_validateReview(newReview);
|
|
54
|
+
|
|
55
|
+
ReviewStorage.Content storage review = rs.reviewByUser[msg.sender];
|
|
56
|
+
|
|
57
|
+
if (review.createdAt == 0) {
|
|
58
|
+
CustomRevert.revertWith(ReviewFacet__ReviewDoesNotExist.selector);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
(review.comment, review.rating, review.updatedAt) = (
|
|
62
|
+
newReview.comment,
|
|
63
|
+
newReview.rating,
|
|
64
|
+
uint40(block.timestamp)
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
emit ReviewUpdated(msg.sender, newReview.comment, newReview.rating);
|
|
68
|
+
} else if (action == Action.Delete) {
|
|
69
|
+
delete rs.reviewByUser[msg.sender];
|
|
70
|
+
rs.usersReviewed.remove(msg.sender);
|
|
71
|
+
|
|
72
|
+
emit ReviewDeleted(msg.sender);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function getReview(address user) external view returns (ReviewStorage.Content memory review) {
|
|
77
|
+
assembly ("memory-safe") {
|
|
78
|
+
mstore(0x40, review)
|
|
79
|
+
}
|
|
80
|
+
review = ReviewStorage.layout().reviewByUser[user];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function getAllReviews()
|
|
84
|
+
external
|
|
85
|
+
view
|
|
86
|
+
returns (address[] memory users, ReviewStorage.Content[] memory reviews)
|
|
87
|
+
{
|
|
88
|
+
ReviewStorage.Layout storage rs = ReviewStorage.layout();
|
|
89
|
+
users = rs.usersReviewed.values();
|
|
90
|
+
reviews = new ReviewStorage.Content[](users.length);
|
|
91
|
+
for (uint256 i; i < users.length; ++i) {
|
|
92
|
+
reviews[i] = rs.reviewByUser[users[i]];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function _validateReview(Review memory review) internal pure {
|
|
97
|
+
uint256 length = bytes(review.comment).length;
|
|
98
|
+
if (length < DEFAULT_MIN_COMMENT_LENGTH || length > DEFAULT_MAX_COMMENT_LENGTH) {
|
|
99
|
+
CustomRevert.revertWith(ReviewFacet__InvalidCommentLength.selector);
|
|
100
|
+
}
|
|
101
|
+
if (review.rating > 5) {
|
|
102
|
+
CustomRevert.revertWith(ReviewFacet__InvalidRating.selector);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.19;
|
|
3
|
+
|
|
4
|
+
import {EnumerableSetLib} from "solady/utils/EnumerableSetLib.sol";
|
|
5
|
+
|
|
6
|
+
library ReviewStorage {
|
|
7
|
+
// keccak256(abi.encode(uint256(keccak256("spaces.facets.review.storage")) - 1)) &
|
|
8
|
+
// ~bytes32(uint256(0xff))
|
|
9
|
+
bytes32 internal constant STORAGE_SLOT =
|
|
10
|
+
0x575a00558d547e4e5b6480e3f9afffa169c969028d92350b23fc834c93401100;
|
|
11
|
+
|
|
12
|
+
struct Content {
|
|
13
|
+
string comment;
|
|
14
|
+
uint8 rating;
|
|
15
|
+
uint40 createdAt;
|
|
16
|
+
uint40 updatedAt;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
struct Layout {
|
|
20
|
+
mapping(address user => Content) reviewByUser;
|
|
21
|
+
EnumerableSetLib.AddressSet usersReviewed;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function layout() internal pure returns (Layout storage l) {
|
|
25
|
+
assembly {
|
|
26
|
+
l.slot := STORAGE_SLOT
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {IEntitlement} from "src/spaces/entitlements/IEntitlement.sol";
|
|
6
|
+
|
|
7
|
+
// libraries
|
|
8
|
+
|
|
9
|
+
// contracts
|
|
10
|
+
/// @title IRolesBase
|
|
11
|
+
/// @notice Base interface for role management
|
|
12
|
+
interface IRolesBase {
|
|
13
|
+
/// @notice Struct representing a role
|
|
14
|
+
/// @param id Unique identifier for the role
|
|
15
|
+
/// @param name Name of the role
|
|
16
|
+
/// @param disabled Flag indicating if the role is disabled
|
|
17
|
+
/// @param permissions List of permissions associated with the role
|
|
18
|
+
/// @param entitlements List of entitlements associated with the role
|
|
19
|
+
struct Role {
|
|
20
|
+
uint256 id;
|
|
21
|
+
string name;
|
|
22
|
+
bool disabled;
|
|
23
|
+
string[] permissions;
|
|
24
|
+
IEntitlement[] entitlements;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/// @notice Struct for creating an entitlement
|
|
28
|
+
/// @param module The entitlement module
|
|
29
|
+
/// @param data Additional data for the entitlement
|
|
30
|
+
struct CreateEntitlement {
|
|
31
|
+
IEntitlement module;
|
|
32
|
+
bytes data;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/// @notice Emitted when a new role is created
|
|
36
|
+
/// @param creator Address of the role creator
|
|
37
|
+
/// @param roleId Unique identifier of the created role
|
|
38
|
+
event RoleCreated(address indexed creator, uint256 indexed roleId);
|
|
39
|
+
|
|
40
|
+
/// @notice Emitted when a role is updated
|
|
41
|
+
/// @param updater Address of the role updater
|
|
42
|
+
/// @param roleId Unique identifier of the updated role
|
|
43
|
+
event RoleUpdated(address indexed updater, uint256 indexed roleId);
|
|
44
|
+
|
|
45
|
+
/// @notice Emitted when a role is removed
|
|
46
|
+
/// @param remover Address of the role remover
|
|
47
|
+
/// @param roleId Unique identifier of the removed role
|
|
48
|
+
event RoleRemoved(address indexed remover, uint256 indexed roleId);
|
|
49
|
+
|
|
50
|
+
/// @notice Emitted when permissions are added to a channel role
|
|
51
|
+
/// @param updater Address of the updater
|
|
52
|
+
/// @param roleId Unique identifier of the role
|
|
53
|
+
/// @param channelId Unique identifier of the channel
|
|
54
|
+
event PermissionsAddedToChannelRole(
|
|
55
|
+
address indexed updater,
|
|
56
|
+
uint256 indexed roleId,
|
|
57
|
+
bytes32 indexed channelId
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
/// @notice Emitted when permissions are removed from a channel role
|
|
61
|
+
/// @param updater Address of the updater
|
|
62
|
+
/// @param roleId Unique identifier of the role
|
|
63
|
+
/// @param channelId Unique identifier of the channel
|
|
64
|
+
event PermissionsRemovedFromChannelRole(
|
|
65
|
+
address indexed updater,
|
|
66
|
+
uint256 indexed roleId,
|
|
67
|
+
bytes32 indexed channelId
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
/// @notice Emitted when permissions are updated for a channel role
|
|
71
|
+
/// @param updater Address of the updater
|
|
72
|
+
/// @param roleId Unique identifier of the role
|
|
73
|
+
/// @param channelId Unique identifier of the channel
|
|
74
|
+
event PermissionsUpdatedForChannelRole(
|
|
75
|
+
address indexed updater,
|
|
76
|
+
uint256 indexed roleId,
|
|
77
|
+
bytes32 indexed channelId
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
// =============================================================
|
|
81
|
+
// Errors
|
|
82
|
+
// =============================================================
|
|
83
|
+
/// @notice Error thrown when a role does not exist
|
|
84
|
+
error Roles__RoleDoesNotExist();
|
|
85
|
+
/// @notice Error thrown when an entitlement already exists
|
|
86
|
+
error Roles__EntitlementAlreadyExists();
|
|
87
|
+
/// @notice Error thrown when an entitlement does not exist
|
|
88
|
+
error Roles__EntitlementDoesNotExist();
|
|
89
|
+
/// @notice Error thrown when an invalid permission is provided
|
|
90
|
+
error Roles__InvalidPermission();
|
|
91
|
+
/// @notice Error thrown when an invalid entitlement address is provided
|
|
92
|
+
error Roles__InvalidEntitlementAddress();
|
|
93
|
+
/// @notice Error thrown when a permission already exists
|
|
94
|
+
error Roles__PermissionAlreadyExists();
|
|
95
|
+
/// @notice Error thrown when a permission does not exist
|
|
96
|
+
error Roles__PermissionDoesNotExist();
|
|
97
|
+
/// @notice Error thrown when attempting to modify an immutable role
|
|
98
|
+
error Roles__RoleIsImmutable();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/// @title IRoles
|
|
102
|
+
/// @notice Interface for role management operations
|
|
103
|
+
interface IRoles is IRolesBase {
|
|
104
|
+
/// @notice Creates a new role
|
|
105
|
+
/// @param roleName Name of the role
|
|
106
|
+
/// @param permissions List of permissions for the role
|
|
107
|
+
/// @param entitlements List of entitlements for the role
|
|
108
|
+
/// @return roleId Unique identifier of the created role
|
|
109
|
+
function createRole(
|
|
110
|
+
string calldata roleName,
|
|
111
|
+
string[] calldata permissions,
|
|
112
|
+
CreateEntitlement[] calldata entitlements
|
|
113
|
+
) external returns (uint256 roleId);
|
|
114
|
+
|
|
115
|
+
/// @notice Retrieves all roles
|
|
116
|
+
/// @return roles Array of all roles
|
|
117
|
+
function getRoles() external view returns (Role[] memory roles);
|
|
118
|
+
|
|
119
|
+
/// @notice Retrieves a role by its ID
|
|
120
|
+
/// @param roleId Unique identifier of the role
|
|
121
|
+
/// @return role The role struct
|
|
122
|
+
function getRoleById(uint256 roleId) external view returns (Role memory role);
|
|
123
|
+
|
|
124
|
+
/// @notice Updates an existing role
|
|
125
|
+
/// @param roleId Unique identifier of the role to update
|
|
126
|
+
/// @param roleName New name for the role
|
|
127
|
+
/// @param permissions New list of permissions for the role
|
|
128
|
+
/// @param entitlements New list of entitlements for the role
|
|
129
|
+
function updateRole(
|
|
130
|
+
uint256 roleId,
|
|
131
|
+
string calldata roleName,
|
|
132
|
+
string[] calldata permissions,
|
|
133
|
+
CreateEntitlement[] calldata entitlements
|
|
134
|
+
) external;
|
|
135
|
+
|
|
136
|
+
/// @notice Removes a role
|
|
137
|
+
/// @param roleId Unique identifier of the role to remove
|
|
138
|
+
function removeRole(uint256 roleId) external;
|
|
139
|
+
|
|
140
|
+
// permissions
|
|
141
|
+
|
|
142
|
+
/// @notice Adds permissions to a role
|
|
143
|
+
/// @param roleId Unique identifier of the role
|
|
144
|
+
/// @param permissions List of permissions to add
|
|
145
|
+
function addPermissionsToRole(uint256 roleId, string[] calldata permissions) external;
|
|
146
|
+
|
|
147
|
+
/// @notice Removes permissions from a role
|
|
148
|
+
/// @param roleId Unique identifier of the role
|
|
149
|
+
/// @param permissions List of permissions to remove
|
|
150
|
+
function removePermissionsFromRole(uint256 roleId, string[] calldata permissions) external;
|
|
151
|
+
|
|
152
|
+
/// @notice Retrieves permissions for a role
|
|
153
|
+
/// @param roleId Unique identifier of the role
|
|
154
|
+
/// @return permissions List of permissions for the role
|
|
155
|
+
function getPermissionsByRoleId(
|
|
156
|
+
uint256 roleId
|
|
157
|
+
) external view returns (string[] memory permissions);
|
|
158
|
+
|
|
159
|
+
// entitlements
|
|
160
|
+
|
|
161
|
+
/// @notice Adds an entitlement to a role
|
|
162
|
+
/// @param roleId Unique identifier of the role
|
|
163
|
+
/// @param entitlement Entitlement to add
|
|
164
|
+
function addRoleToEntitlement(uint256 roleId, CreateEntitlement calldata entitlement) external;
|
|
165
|
+
|
|
166
|
+
/// @notice Removes an entitlement from a role
|
|
167
|
+
/// @param roleId Unique identifier of the role
|
|
168
|
+
/// @param entitlement Entitlement to remove
|
|
169
|
+
function removeRoleFromEntitlement(
|
|
170
|
+
uint256 roleId,
|
|
171
|
+
CreateEntitlement calldata entitlement
|
|
172
|
+
) external;
|
|
173
|
+
|
|
174
|
+
/// @notice Sets channel permission overrides for a role
|
|
175
|
+
/// @param roleId Unique identifier of the role
|
|
176
|
+
/// @param channelId Unique identifier of the channel
|
|
177
|
+
/// @param permissions List of permissions to set as overrides
|
|
178
|
+
function setChannelPermissionOverrides(
|
|
179
|
+
uint256 roleId,
|
|
180
|
+
bytes32 channelId,
|
|
181
|
+
string[] calldata permissions
|
|
182
|
+
) external;
|
|
183
|
+
|
|
184
|
+
/// @notice Retrieves channel permission overrides for a role
|
|
185
|
+
/// @param roleId Unique identifier of the role
|
|
186
|
+
/// @param channelId Unique identifier of the channel
|
|
187
|
+
/// @return permissions List of permission overrides for the channel
|
|
188
|
+
function getChannelPermissionOverrides(
|
|
189
|
+
uint256 roleId,
|
|
190
|
+
bytes32 channelId
|
|
191
|
+
) external view returns (string[] memory permissions);
|
|
192
|
+
|
|
193
|
+
/// @notice Clears channel permission overrides for a role
|
|
194
|
+
/// @param roleId Unique identifier of the role
|
|
195
|
+
/// @param channelId Unique identifier of the channel
|
|
196
|
+
function clearChannelPermissionOverrides(uint256 roleId, bytes32 channelId) external;
|
|
197
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {IRoles} from "./IRoles.sol";
|
|
6
|
+
|
|
7
|
+
// libraries
|
|
8
|
+
import {StringSet} from "../../../utils/libraries/StringSet.sol";
|
|
9
|
+
import {Permissions} from "../Permissions.sol";
|
|
10
|
+
import {RolesStorage} from "./RolesStorage.sol";
|
|
11
|
+
|
|
12
|
+
// contracts
|
|
13
|
+
import {Entitled} from "../Entitled.sol";
|
|
14
|
+
import {RolesBase} from "./RolesBase.sol";
|
|
15
|
+
|
|
16
|
+
contract Roles is IRoles, RolesBase, Entitled {
|
|
17
|
+
using StringSet for StringSet.Set;
|
|
18
|
+
using RolesStorage for RolesStorage.Role;
|
|
19
|
+
|
|
20
|
+
/// @inheritdoc IRoles
|
|
21
|
+
function createRole(
|
|
22
|
+
string calldata roleName,
|
|
23
|
+
string[] calldata permissions,
|
|
24
|
+
CreateEntitlement[] calldata entitlements
|
|
25
|
+
) external override returns (uint256) {
|
|
26
|
+
_validatePermission(Permissions.ModifySpaceSettings);
|
|
27
|
+
return _createRole(roleName, permissions, entitlements);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/// @inheritdoc IRoles
|
|
31
|
+
function getRoles() external view override returns (Role[] memory) {
|
|
32
|
+
return _getRoles();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/// @inheritdoc IRoles
|
|
36
|
+
function getRoleById(uint256 roleId) external view override returns (Role memory) {
|
|
37
|
+
_checkRoleExists(roleId);
|
|
38
|
+
return _getRoleById(roleId);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/// @inheritdoc IRoles
|
|
42
|
+
function updateRole(
|
|
43
|
+
uint256 roleId,
|
|
44
|
+
string calldata roleName,
|
|
45
|
+
string[] calldata permissions,
|
|
46
|
+
CreateEntitlement[] calldata entitlements
|
|
47
|
+
) external override {
|
|
48
|
+
_validatePermission(Permissions.ModifySpaceSettings);
|
|
49
|
+
_updateRole(roleId, roleName, permissions, entitlements);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/// @inheritdoc IRoles
|
|
53
|
+
function removeRole(uint256 roleId) external override {
|
|
54
|
+
_validatePermission(Permissions.ModifySpaceSettings);
|
|
55
|
+
_removeRole(roleId);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// permissions
|
|
59
|
+
/// @inheritdoc IRoles
|
|
60
|
+
function addPermissionsToRole(uint256 roleId, string[] calldata permissions) external override {
|
|
61
|
+
_validatePermission(Permissions.ModifySpaceSettings);
|
|
62
|
+
_checkRoleExists(roleId);
|
|
63
|
+
RolesStorage.layout().roleById[roleId].addPermissions(permissions);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/// @inheritdoc IRoles
|
|
67
|
+
function removePermissionsFromRole(
|
|
68
|
+
uint256 roleId,
|
|
69
|
+
string[] calldata permissions
|
|
70
|
+
) external override {
|
|
71
|
+
_validatePermission(Permissions.ModifySpaceSettings);
|
|
72
|
+
_checkRoleExists(roleId);
|
|
73
|
+
RolesStorage.layout().roleById[roleId].removePermissions(permissions);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/// @inheritdoc IRoles
|
|
77
|
+
function getPermissionsByRoleId(
|
|
78
|
+
uint256 roleId
|
|
79
|
+
) external view override returns (string[] memory permissions) {
|
|
80
|
+
permissions = RolesStorage.layout().roleById[roleId].permissions.values();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// entitlements
|
|
84
|
+
/// @inheritdoc IRoles
|
|
85
|
+
function addRoleToEntitlement(uint256 roleId, CreateEntitlement calldata entitlement) external {
|
|
86
|
+
_validatePermission(Permissions.ModifySpaceSettings);
|
|
87
|
+
_addRoleToEntitlement(roleId, entitlement);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/// @inheritdoc IRoles
|
|
91
|
+
function removeRoleFromEntitlement(
|
|
92
|
+
uint256 roleId,
|
|
93
|
+
CreateEntitlement calldata entitlement
|
|
94
|
+
) external {
|
|
95
|
+
_validatePermission(Permissions.ModifySpaceSettings);
|
|
96
|
+
_removeRoleFromEntitlement(roleId, entitlement);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// custom channel permission overrides
|
|
100
|
+
/// @inheritdoc IRoles
|
|
101
|
+
function setChannelPermissionOverrides(
|
|
102
|
+
uint256 roleId,
|
|
103
|
+
bytes32 channelId,
|
|
104
|
+
string[] calldata permissions
|
|
105
|
+
) external {
|
|
106
|
+
_validatePermission(Permissions.ModifySpaceSettings);
|
|
107
|
+
_setChannelPermissionOverrides(roleId, channelId, permissions);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/// @inheritdoc IRoles
|
|
111
|
+
function getChannelPermissionOverrides(
|
|
112
|
+
uint256 roleId,
|
|
113
|
+
bytes32 channelId
|
|
114
|
+
) external view returns (string[] memory permissions) {
|
|
115
|
+
return _getChannelPermissionOverrides(roleId, channelId);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/// @inheritdoc IRoles
|
|
119
|
+
function clearChannelPermissionOverrides(uint256 roleId, bytes32 channelId) external {
|
|
120
|
+
_validatePermission(Permissions.ModifySpaceSettings);
|
|
121
|
+
_clearChannelPermissionOverrides(roleId, channelId);
|
|
122
|
+
}
|
|
123
|
+
}
|