@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,142 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
|
6
|
+
import {IEntitlement} from "src/spaces/entitlements/IEntitlement.sol";
|
|
7
|
+
|
|
8
|
+
// libraries
|
|
9
|
+
|
|
10
|
+
import {EntitlementsManagerStorage} from "./EntitlementsManagerStorage.sol";
|
|
11
|
+
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
|
12
|
+
|
|
13
|
+
// contracts
|
|
14
|
+
error EntitlementsService__InvalidEntitlementAddress();
|
|
15
|
+
error EntitlementsService__InvalidEntitlementInterface();
|
|
16
|
+
|
|
17
|
+
error EntitlementsService__ImmutableEntitlement();
|
|
18
|
+
error EntitlementsService__EntitlementDoesNotExist();
|
|
19
|
+
error EntitlementsService__EntitlementAlreadyExists();
|
|
20
|
+
|
|
21
|
+
library EntitlementsManagerService {
|
|
22
|
+
using EnumerableSet for EnumerableSet.AddressSet;
|
|
23
|
+
using EntitlementsManagerStorage for EntitlementsManagerStorage.Layout;
|
|
24
|
+
|
|
25
|
+
string internal constant IN_TOWN = "";
|
|
26
|
+
|
|
27
|
+
function checkEntitlement(address entitlement) internal view {
|
|
28
|
+
EntitlementsManagerStorage.Layout storage ds = EntitlementsManagerStorage.layout();
|
|
29
|
+
|
|
30
|
+
if (!ds.entitlements.contains(entitlement)) {
|
|
31
|
+
revert EntitlementsService__EntitlementDoesNotExist();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// TODO define what isImmutable means
|
|
36
|
+
function addEntitlement(address entitlement, bool isImmutable) internal {
|
|
37
|
+
IEntitlement ie = IEntitlement(entitlement);
|
|
38
|
+
EntitlementsManagerStorage.Layout storage ds = EntitlementsManagerStorage.layout();
|
|
39
|
+
|
|
40
|
+
if (ds.entitlements.contains(entitlement)) {
|
|
41
|
+
revert EntitlementsService__EntitlementAlreadyExists();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
ds.entitlements.add(entitlement);
|
|
45
|
+
ds.entitlementByAddress[entitlement] = EntitlementsManagerStorage.Entitlement({
|
|
46
|
+
entitlement: IEntitlement(entitlement),
|
|
47
|
+
isImmutable: isImmutable,
|
|
48
|
+
isCrosschain: ie.isCrosschain()
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function removeEntitlement(address entitlement) internal {
|
|
53
|
+
EntitlementsManagerStorage.Layout storage ds = EntitlementsManagerStorage.layout();
|
|
54
|
+
|
|
55
|
+
if (!ds.entitlements.contains(entitlement)) {
|
|
56
|
+
revert EntitlementsService__EntitlementDoesNotExist();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (ds.entitlementByAddress[entitlement].isImmutable) {
|
|
60
|
+
revert EntitlementsService__ImmutableEntitlement();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
ds.entitlements.remove(entitlement);
|
|
64
|
+
delete ds.entitlementByAddress[entitlement];
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function getEntitlement(
|
|
68
|
+
address entitlement
|
|
69
|
+
)
|
|
70
|
+
internal
|
|
71
|
+
view
|
|
72
|
+
returns (
|
|
73
|
+
string memory name,
|
|
74
|
+
address moduleAddress,
|
|
75
|
+
string memory moduleType,
|
|
76
|
+
bool isImmutable
|
|
77
|
+
)
|
|
78
|
+
{
|
|
79
|
+
EntitlementsManagerStorage.Layout storage ds = EntitlementsManagerStorage.layout();
|
|
80
|
+
|
|
81
|
+
if (!ds.entitlements.contains(entitlement)) {
|
|
82
|
+
revert EntitlementsService__EntitlementDoesNotExist();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
IEntitlement ie = IEntitlement(entitlement);
|
|
86
|
+
string memory temp1 = ie.name();
|
|
87
|
+
address temp2 = address(ds.entitlementByAddress[entitlement].entitlement);
|
|
88
|
+
string memory temp3 = ie.moduleType();
|
|
89
|
+
bool temp4 = ds.entitlementByAddress[entitlement].isImmutable;
|
|
90
|
+
|
|
91
|
+
return (temp1, temp2, temp3, temp4);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function getEntitlements() internal view returns (address[] memory entitlements) {
|
|
95
|
+
return EntitlementsManagerStorage.layout().entitlements.values();
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// =============================================================
|
|
99
|
+
// Validation
|
|
100
|
+
// =============================================================
|
|
101
|
+
|
|
102
|
+
function validateEntitlement(address entitlement) internal view {
|
|
103
|
+
if (entitlement == address(0)) {
|
|
104
|
+
revert EntitlementsService__InvalidEntitlementAddress();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
try IERC165(entitlement).supportsInterface(type(IEntitlement).interfaceId) returns (
|
|
108
|
+
bool supported
|
|
109
|
+
) {
|
|
110
|
+
if (!supported) {
|
|
111
|
+
revert EntitlementsService__InvalidEntitlementInterface();
|
|
112
|
+
}
|
|
113
|
+
} catch {
|
|
114
|
+
revert EntitlementsService__InvalidEntitlementInterface();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// =============================================================
|
|
119
|
+
// Proxy Methods
|
|
120
|
+
// =============================================================
|
|
121
|
+
function proxyGetEntitlementDataByRole(
|
|
122
|
+
address entitlement,
|
|
123
|
+
uint256 role
|
|
124
|
+
) internal view returns (bytes memory) {
|
|
125
|
+
checkEntitlement(entitlement);
|
|
126
|
+
return IEntitlement(entitlement).getEntitlementDataByRoleId(role);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function proxyAddRoleToEntitlement(
|
|
130
|
+
address entitlement,
|
|
131
|
+
uint256 role,
|
|
132
|
+
bytes calldata entitlementData
|
|
133
|
+
) internal {
|
|
134
|
+
checkEntitlement(entitlement);
|
|
135
|
+
IEntitlement(entitlement).setEntitlement(role, entitlementData);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function proxyRemoveRoleFromEntitlement(address entitlement, uint256 role) internal {
|
|
139
|
+
checkEntitlement(entitlement);
|
|
140
|
+
IEntitlement(entitlement).removeEntitlement(role);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
|
9
|
+
|
|
10
|
+
// contracts
|
|
11
|
+
|
|
12
|
+
library EntitlementsManagerStorage {
|
|
13
|
+
// keccak256(abi.encode(uint256(keccak256("spaces.facets.entitlements.manager.storage")) - 1)) &
|
|
14
|
+
// ~bytes32(uint256(0xff))
|
|
15
|
+
bytes32 internal constant STORAGE_SLOT =
|
|
16
|
+
0xa558e822bd359dacbe30f0da89cbfde5f95895b441e13a4864caec1423c93100;
|
|
17
|
+
|
|
18
|
+
struct Entitlement {
|
|
19
|
+
IEntitlement entitlement;
|
|
20
|
+
bool isImmutable;
|
|
21
|
+
bool isCrosschain;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
struct Layout {
|
|
25
|
+
mapping(address => Entitlement) entitlementByAddress;
|
|
26
|
+
EnumerableSet.AddressSet entitlements;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function layout() internal pure returns (Layout storage ds) {
|
|
30
|
+
assembly {
|
|
31
|
+
ds.slot := STORAGE_SLOT
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
|
|
6
|
+
// libraries
|
|
7
|
+
|
|
8
|
+
// contracts
|
|
9
|
+
interface IEntitlementsManagerBase {
|
|
10
|
+
struct Entitlement {
|
|
11
|
+
string name;
|
|
12
|
+
address moduleAddress;
|
|
13
|
+
string moduleType;
|
|
14
|
+
bool isImmutable;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// =============================================================
|
|
18
|
+
// Events
|
|
19
|
+
// =============================================================
|
|
20
|
+
event EntitlementModuleAdded(address indexed caller, address entitlement);
|
|
21
|
+
event EntitlementModuleRemoved(address indexed caller, address entitlement);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface IEntitlementsManager is IEntitlementsManagerBase {
|
|
25
|
+
/// @notice Allows the space owner to add immutable entitlements to the space
|
|
26
|
+
/// @param entitlements The entitlements to add
|
|
27
|
+
function addImmutableEntitlements(address[] calldata entitlements) external;
|
|
28
|
+
|
|
29
|
+
/// @notice Checks if a user is entitled to a permission in the space
|
|
30
|
+
/// @param user The user to check
|
|
31
|
+
/// @param permission The permission to check
|
|
32
|
+
/// @return True if the user is entitled to the permission, false otherwise
|
|
33
|
+
function isEntitledToSpace(
|
|
34
|
+
address user,
|
|
35
|
+
string calldata permission
|
|
36
|
+
) external view returns (bool);
|
|
37
|
+
|
|
38
|
+
/// @notice Checks if a user is entitled to a permission in a channel
|
|
39
|
+
/// @param channelId The channel to check
|
|
40
|
+
/// @param user The user to check
|
|
41
|
+
/// @param permission The permission to check
|
|
42
|
+
/// @return True if the user is entitled to the permission, false otherwise
|
|
43
|
+
function isEntitledToChannel(
|
|
44
|
+
bytes32 channelId,
|
|
45
|
+
address user,
|
|
46
|
+
string calldata permission
|
|
47
|
+
) external view returns (bool);
|
|
48
|
+
|
|
49
|
+
/// @notice Adds an entitlement to the space
|
|
50
|
+
/// @param entitlement The entitlement to add
|
|
51
|
+
function addEntitlementModule(address entitlement) external;
|
|
52
|
+
|
|
53
|
+
/// @notice Removes an entitlement from the space
|
|
54
|
+
/// @param entitlement The entitlement to remove
|
|
55
|
+
function removeEntitlementModule(address entitlement) external;
|
|
56
|
+
|
|
57
|
+
/// @notice Gets an entitlement from the space
|
|
58
|
+
/// @param entitlement The entitlement to get
|
|
59
|
+
/// @return entitlements The entitlement module address
|
|
60
|
+
function getEntitlement(
|
|
61
|
+
address entitlement
|
|
62
|
+
) external view returns (Entitlement memory entitlements);
|
|
63
|
+
|
|
64
|
+
/// @notice Gets all entitlements from the space
|
|
65
|
+
/// @return entitlements The entitlement modules
|
|
66
|
+
function getEntitlements() external view returns (Entitlement[] memory entitlements);
|
|
67
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {IEntitlement} from "src/spaces/entitlements/IEntitlement.sol";
|
|
6
|
+
import {IEntitlementDataQueryable} from "src/spaces/facets/entitlements/extensions/IEntitlementDataQueryable.sol";
|
|
7
|
+
import {IEntitlementGatedBase} from "src/spaces/facets/gated/IEntitlementGated.sol";
|
|
8
|
+
import {IRolesBase} from "src/spaces/facets/roles/IRoles.sol";
|
|
9
|
+
|
|
10
|
+
// libraries
|
|
11
|
+
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
|
12
|
+
import {ChannelService} from "src/spaces/facets/channels/ChannelService.sol";
|
|
13
|
+
import {EntitlementGatedStorage} from "src/spaces/facets/gated/EntitlementGatedStorage.sol";
|
|
14
|
+
import {RolesStorage} from "src/spaces/facets/roles/RolesStorage.sol";
|
|
15
|
+
import {StringSet} from "../../../../utils/libraries/StringSet.sol";
|
|
16
|
+
|
|
17
|
+
// contracts
|
|
18
|
+
import {Facet} from "@towns-protocol/diamond/src/facets/Facet.sol";
|
|
19
|
+
import {RolesBase} from "src/spaces/facets/roles/RolesBase.sol";
|
|
20
|
+
|
|
21
|
+
contract EntitlementDataQueryable is
|
|
22
|
+
IRolesBase,
|
|
23
|
+
IEntitlementDataQueryable,
|
|
24
|
+
IEntitlementGatedBase,
|
|
25
|
+
RolesBase,
|
|
26
|
+
Facet
|
|
27
|
+
{
|
|
28
|
+
using StringSet for StringSet.Set;
|
|
29
|
+
using EnumerableSet for EnumerableSet.Bytes32Set;
|
|
30
|
+
|
|
31
|
+
function getEntitlementDataByPermission(
|
|
32
|
+
string calldata permission
|
|
33
|
+
) external view returns (EntitlementData[] memory) {
|
|
34
|
+
Role[] memory roles = _getRolesWithPermission(permission);
|
|
35
|
+
return _getEntitlements(roles);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function getChannelEntitlementDataByPermission(
|
|
39
|
+
bytes32 channelId,
|
|
40
|
+
string calldata permission
|
|
41
|
+
) external view returns (EntitlementData[] memory) {
|
|
42
|
+
Role[] memory roles = _getChannelRolesWithPermission(channelId, permission);
|
|
43
|
+
return _getEntitlements(roles);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function getCrossChainEntitlementData(
|
|
47
|
+
bytes32 transactionId,
|
|
48
|
+
uint256 roleId
|
|
49
|
+
) external view returns (EntitlementData memory) {
|
|
50
|
+
EntitlementGatedStorage.Layout storage ds = EntitlementGatedStorage.layout();
|
|
51
|
+
|
|
52
|
+
Transaction storage transaction = ds.transactions[transactionId];
|
|
53
|
+
|
|
54
|
+
if (!transaction.finalized) {
|
|
55
|
+
revert EntitlementGated_TransactionNotRegistered();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
IEntitlement re = IEntitlement(transaction.entitlement);
|
|
59
|
+
|
|
60
|
+
return EntitlementData(re.moduleType(), re.getEntitlementDataByRoleId(roleId));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// =============================================================
|
|
64
|
+
// Internal
|
|
65
|
+
// =============================================================
|
|
66
|
+
function _getChannelRolesWithPermission(
|
|
67
|
+
bytes32 channelId,
|
|
68
|
+
string calldata permission
|
|
69
|
+
) internal view returns (Role[] memory) {
|
|
70
|
+
// retrieve the roles associated with the channel
|
|
71
|
+
uint256[] memory channelRoles = ChannelService.getRolesByChannel(channelId);
|
|
72
|
+
uint256 channelRolesLength = channelRoles.length;
|
|
73
|
+
|
|
74
|
+
// initialize arrays to store the matching role IDs
|
|
75
|
+
uint256[] memory matchedRoleIds = new uint256[](channelRolesLength);
|
|
76
|
+
uint256 matchedRoleCount = 0;
|
|
77
|
+
|
|
78
|
+
// access roles storage layout
|
|
79
|
+
RolesStorage.Layout storage rs = RolesStorage.layout();
|
|
80
|
+
|
|
81
|
+
// iterate through channel roles and check for the requested permission
|
|
82
|
+
for (uint256 i; i < channelRolesLength; ++i) {
|
|
83
|
+
uint256 roleId = channelRoles[i];
|
|
84
|
+
|
|
85
|
+
RolesStorage.Role storage role = rs.roleById[channelRoles[i]];
|
|
86
|
+
|
|
87
|
+
bool hasPermission = false;
|
|
88
|
+
|
|
89
|
+
// check if role is associated with the channel and has the requested permission
|
|
90
|
+
if (rs.channelOverridesByRole[roleId].contains(channelId)) {
|
|
91
|
+
StringSet.Set storage permissions = rs.permissionOverridesByRole[roleId][channelId];
|
|
92
|
+
hasPermission = permissions.contains(permission);
|
|
93
|
+
}
|
|
94
|
+
// check the default permissions if this role didn't have a channel override.
|
|
95
|
+
else if (role.permissions.contains(permission)) {
|
|
96
|
+
hasPermission = true;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// store the role ID if it has the requested permission
|
|
100
|
+
if (hasPermission) {
|
|
101
|
+
matchedRoleIds[matchedRoleCount] = roleId;
|
|
102
|
+
unchecked {
|
|
103
|
+
++matchedRoleCount;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// create an array of roles with the matching IDs
|
|
109
|
+
Role[] memory rolesWithPermission = new Role[](matchedRoleCount);
|
|
110
|
+
for (uint256 i; i < matchedRoleCount; ++i) {
|
|
111
|
+
rolesWithPermission[i] = _getRoleById(matchedRoleIds[i]);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return rolesWithPermission;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function _getEntitlements(
|
|
118
|
+
Role[] memory roles
|
|
119
|
+
) internal view returns (EntitlementData[] memory entitlementData) {
|
|
120
|
+
uint256 entitlementCount;
|
|
121
|
+
uint256 rolesLength = roles.length;
|
|
122
|
+
|
|
123
|
+
for (uint256 i; i < rolesLength; ++i) {
|
|
124
|
+
if (!roles[i].disabled) {
|
|
125
|
+
unchecked {
|
|
126
|
+
entitlementCount += roles[i].entitlements.length;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
entitlementData = new EntitlementData[](entitlementCount);
|
|
132
|
+
|
|
133
|
+
uint256 currentIndex = 0;
|
|
134
|
+
|
|
135
|
+
for (uint256 i; i < rolesLength; ++i) {
|
|
136
|
+
if (!roles[i].disabled) {
|
|
137
|
+
IEntitlement[] memory entitlements = roles[i].entitlements;
|
|
138
|
+
uint256 length = entitlements.length;
|
|
139
|
+
for (uint256 j; j < length; ++j) {
|
|
140
|
+
IEntitlement entitlement = IEntitlement(entitlements[j]);
|
|
141
|
+
|
|
142
|
+
entitlementData[currentIndex] = EntitlementData(
|
|
143
|
+
entitlement.moduleType(),
|
|
144
|
+
entitlement.getEntitlementDataByRoleId(roles[i].id)
|
|
145
|
+
);
|
|
146
|
+
unchecked {
|
|
147
|
+
++currentIndex;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
|
|
6
|
+
// libraries
|
|
7
|
+
|
|
8
|
+
// contracts
|
|
9
|
+
interface IEntitlementDataQueryableBase {
|
|
10
|
+
struct EntitlementData {
|
|
11
|
+
string entitlementType;
|
|
12
|
+
bytes entitlementData;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
interface IEntitlementDataQueryable is IEntitlementDataQueryableBase {
|
|
17
|
+
// Entitlement data pertaining to all roles in the space.
|
|
18
|
+
function getEntitlementDataByPermission(
|
|
19
|
+
string calldata permission
|
|
20
|
+
) external view returns (EntitlementData[] memory);
|
|
21
|
+
|
|
22
|
+
// Entitlement data pertaining to all roles assigned to a channel.
|
|
23
|
+
function getChannelEntitlementDataByPermission(
|
|
24
|
+
bytes32 channelId,
|
|
25
|
+
string calldata permission
|
|
26
|
+
) external view returns (EntitlementData[] memory);
|
|
27
|
+
|
|
28
|
+
function getCrossChainEntitlementData(
|
|
29
|
+
bytes32 transactionId,
|
|
30
|
+
uint256 roleId
|
|
31
|
+
) external view returns (EntitlementData memory);
|
|
32
|
+
}
|