@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.
Files changed (396) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +206 -0
  3. package/docs/permitAndStake_integration_guide.md +266 -0
  4. package/docs/swap_integration_guide.md +591 -0
  5. package/package.json +57 -0
  6. package/scripts/common/DeployBase.s.sol +26 -0
  7. package/scripts/common/DeployFacet.s.sol +7 -0
  8. package/scripts/common/Deployer.s.sol +33 -0
  9. package/scripts/common/Interaction.s.sol +51 -0
  10. package/scripts/deployments/diamonds/DeployAppRegistry.s.sol +168 -0
  11. package/scripts/deployments/diamonds/DeployBaseRegistry.s.sol +263 -0
  12. package/scripts/deployments/diamonds/DeployRiverAirdrop.s.sol +203 -0
  13. package/scripts/deployments/diamonds/DeployRiverMigration.s.sol +129 -0
  14. package/scripts/deployments/diamonds/DeployRiverRegistry.s.sol +175 -0
  15. package/scripts/deployments/diamonds/DeploySpace.s.sol +285 -0
  16. package/scripts/deployments/diamonds/DeploySpaceFactory.s.sol +416 -0
  17. package/scripts/deployments/diamonds/DeploySpaceOwner.s.sol +183 -0
  18. package/scripts/deployments/diamonds/DeploySwapRouter.s.sol +176 -0
  19. package/scripts/deployments/diamonds/IDiamondInitHelper.sol +11 -0
  20. package/scripts/deployments/facets/DeployAppAccount.s.sol +51 -0
  21. package/scripts/deployments/facets/DeployAppRegistryFacet.s.sol +69 -0
  22. package/scripts/deployments/facets/DeployArchitect.s.sol +51 -0
  23. package/scripts/deployments/facets/DeployAttestationRegistry.s.sol +36 -0
  24. package/scripts/deployments/facets/DeployBanning.s.sol +30 -0
  25. package/scripts/deployments/facets/DeployChannels.s.sol +35 -0
  26. package/scripts/deployments/facets/DeployCreateSpace.s.sol +42 -0
  27. package/scripts/deployments/facets/DeployDropFacet.s.sol +49 -0
  28. package/scripts/deployments/facets/DeployERC721A.s.sol +48 -0
  29. package/scripts/deployments/facets/DeployERC721ANonTransferable.s.sol +49 -0
  30. package/scripts/deployments/facets/DeployERC721AQueryable.s.sol +30 -0
  31. package/scripts/deployments/facets/DeployEntitlementChecker.s.sol +49 -0
  32. package/scripts/deployments/facets/DeployEntitlementDataQueryable.s.sol +29 -0
  33. package/scripts/deployments/facets/DeployEntitlementsManager.s.sol +33 -0
  34. package/scripts/deployments/facets/DeployExecutorFacet.s.sol +60 -0
  35. package/scripts/deployments/facets/DeployFeatureManager.s.sol +38 -0
  36. package/scripts/deployments/facets/DeployGuardianFacet.s.sol +39 -0
  37. package/scripts/deployments/facets/DeployImplementationRegistry.s.sol +36 -0
  38. package/scripts/deployments/facets/DeployMainnetDelegation.s.sol +43 -0
  39. package/scripts/deployments/facets/DeployMembership.s.sol +77 -0
  40. package/scripts/deployments/facets/DeployMembershipMetadata.s.sol +30 -0
  41. package/scripts/deployments/facets/DeployMembershipToken.s.sol +47 -0
  42. package/scripts/deployments/facets/DeployMerkleAirdrop.s.sol +37 -0
  43. package/scripts/deployments/facets/DeployMetadata.s.sol +39 -0
  44. package/scripts/deployments/facets/DeployMockLegacyArchitect.s.sol +33 -0
  45. package/scripts/deployments/facets/DeployNodeOperator.s.sol +49 -0
  46. package/scripts/deployments/facets/DeployNodeRegistry.s.sol +37 -0
  47. package/scripts/deployments/facets/DeployOperatorRegistry.s.sol +36 -0
  48. package/scripts/deployments/facets/DeployPartnerRegistry.s.sol +41 -0
  49. package/scripts/deployments/facets/DeployPlatformRequirements.s.sol +75 -0
  50. package/scripts/deployments/facets/DeployPrepayFacet.s.sol +31 -0
  51. package/scripts/deployments/facets/DeployPricingModules.s.sol +36 -0
  52. package/scripts/deployments/facets/DeployReferrals.s.sol +34 -0
  53. package/scripts/deployments/facets/DeployReviewFacet.s.sol +31 -0
  54. package/scripts/deployments/facets/DeployRewardsDistributionV2.s.sol +76 -0
  55. package/scripts/deployments/facets/DeployRiverConfig.s.sol +41 -0
  56. package/scripts/deployments/facets/DeployRoles.s.sol +48 -0
  57. package/scripts/deployments/facets/DeploySchemaRegistry.s.sol +35 -0
  58. package/scripts/deployments/facets/DeploySignerFacet.s.sol +47 -0
  59. package/scripts/deployments/facets/DeploySimpleApp.s.sol +10 -0
  60. package/scripts/deployments/facets/DeploySpaceDelegation.s.sol +43 -0
  61. package/scripts/deployments/facets/DeploySpaceEntitlementGated.s.sol +31 -0
  62. package/scripts/deployments/facets/DeploySpaceFactoryInit.s.sol +33 -0
  63. package/scripts/deployments/facets/DeploySpaceOwnerFacet.s.sol +71 -0
  64. package/scripts/deployments/facets/DeployStreamRegistry.s.sol +50 -0
  65. package/scripts/deployments/facets/DeploySwapFacet.s.sol +33 -0
  66. package/scripts/deployments/facets/DeploySwapRouterFacet.s.sol +38 -0
  67. package/scripts/deployments/facets/DeployTipping.s.sol +31 -0
  68. package/scripts/deployments/facets/DeployTokenMigration.s.sol +40 -0
  69. package/scripts/deployments/facets/DeployTownsPoints.s.sol +53 -0
  70. package/scripts/deployments/facets/DeployTreasury.s.sol +30 -0
  71. package/scripts/deployments/facets/DeployUpgradeableBeacon.s.sol +34 -0
  72. package/scripts/deployments/facets/DeployWalletLink.s.sol +56 -0
  73. package/scripts/deployments/facets/DeployXChain.s.sol +35 -0
  74. package/scripts/deployments/utils/DeployAccountFactory.s.sol +40 -0
  75. package/scripts/deployments/utils/DeployEntitlementGatedExample.s.sol +23 -0
  76. package/scripts/deployments/utils/DeployEntrypoint.s.sol +28 -0
  77. package/scripts/deployments/utils/DeployMember.s.sol +95 -0
  78. package/scripts/deployments/utils/DeployMockDiamond.s.sol +7 -0
  79. package/scripts/deployments/utils/DeployMockERC20.s.sol +24 -0
  80. package/scripts/deployments/utils/DeployMockERC721A.s.sol +45 -0
  81. package/scripts/deployments/utils/DeployMockLegacyMembership.s.sol +29 -0
  82. package/scripts/deployments/utils/DeployMockMessenger.s.sol +42 -0
  83. package/scripts/deployments/utils/DeployMockNFT.s.sol +86 -0
  84. package/scripts/deployments/utils/DeployPoapEntitlement.s.sol +16 -0
  85. package/scripts/deployments/utils/DeployProxyBatchDelegation.s.sol +112 -0
  86. package/scripts/deployments/utils/DeploySpaceProxyInitializer.s.sol +28 -0
  87. package/scripts/deployments/utils/DeployTieredLogPricingV2.s.sol +23 -0
  88. package/scripts/deployments/utils/DeployTieredLogPricingV3.s.sol +23 -0
  89. package/scripts/deployments/utils/DeployTownsBase.s.sol +95 -0
  90. package/scripts/deployments/utils/DeployTownsMainnet.s.sol +66 -0
  91. package/scripts/deployments/utils/DeployTownsMulti.s.sol +53 -0
  92. package/scripts/deployments/utils/DeployWrappedTowns.s.sol +52 -0
  93. package/scripts/deployments/utils/LibLayerZeroValues.sol +34 -0
  94. package/scripts/deployments/utils/pricing/TieredLogPricing.s.sol +45 -0
  95. package/scripts/interactions/InteractAirdrop.s.sol +57 -0
  96. package/scripts/interactions/InteractAlphaPost.s.sol +32 -0
  97. package/scripts/interactions/InteractAlphaSparse.s.sol +173 -0
  98. package/scripts/interactions/InteractBaseAlpha.s.sol +84 -0
  99. package/scripts/interactions/InteractBaseBridge.s.sol +48 -0
  100. package/scripts/interactions/InteractBridgeLayerZero.s.sol +102 -0
  101. package/scripts/interactions/InteractClaimCondition.s.sol +56 -0
  102. package/scripts/interactions/InteractCreateSpace.s.sol +50 -0
  103. package/scripts/interactions/InteractDiamondCut.s.sol +47 -0
  104. package/scripts/interactions/InteractDropFacet.s.sol +32 -0
  105. package/scripts/interactions/InteractEnableNewSnapshotFormat.s.sol +27 -0
  106. package/scripts/interactions/InteractEnableNode2NodeAuth.s.sol +27 -0
  107. package/scripts/interactions/InteractMembership.s.sol +42 -0
  108. package/scripts/interactions/InteractMockERC721A.s.sol +20 -0
  109. package/scripts/interactions/InteractNodeOperators.s.sol +41 -0
  110. package/scripts/interactions/InteractPostDeploy.s.sol +59 -0
  111. package/scripts/interactions/InteractPrepay.s.sol +30 -0
  112. package/scripts/interactions/InteractRegisterApp.s.sol +61 -0
  113. package/scripts/interactions/InteractRiverAlpha.s.sol +30 -0
  114. package/scripts/interactions/InteractRiverAlphaSparse.s.sol +117 -0
  115. package/scripts/interactions/InteractRiverMainnet.s.sol +27 -0
  116. package/scripts/interactions/InteractRiverRegistry.s.sol +36 -0
  117. package/scripts/interactions/InteractRiverRegistrySetBlocklist.s.sol +30 -0
  118. package/scripts/interactions/InteractRiverRegistrySetFreq.s.sol +27 -0
  119. package/scripts/interactions/InteractRiverRegistrySetRepl.s.sol +30 -0
  120. package/scripts/interactions/InteractSetDefaultUri.s.sol +20 -0
  121. package/scripts/interactions/InteractSetDefaultUriLocalhost.s.sol +19 -0
  122. package/scripts/interactions/InteractTransferOwnership.s.sol +21 -0
  123. package/scripts/interactions/InteractUpdateMbRecencyCheck.s.sol +27 -0
  124. package/scripts/interactions/InteractUpdateMediaChunkCount.s.sol +27 -0
  125. package/scripts/interactions/InteractUpdateMediaChunkSize.s.sol +27 -0
  126. package/scripts/interactions/helpers/AlphaHelper.sol +149 -0
  127. package/scripts/interactions/helpers/RiverConfigValues.sol +22 -0
  128. package/scripts/interactions/interfaces/IL1StandardBridge.sol +35 -0
  129. package/scripts/interactions/interfaces/IL2StandardBridge.sol +69 -0
  130. package/src/airdrop/drop/DropBase.sol +210 -0
  131. package/src/airdrop/drop/DropClaim.sol +55 -0
  132. package/src/airdrop/drop/DropFacet.sol +176 -0
  133. package/src/airdrop/drop/DropGroup.sol +111 -0
  134. package/src/airdrop/drop/DropStorage.sol +23 -0
  135. package/src/airdrop/drop/IDropFacet.sol +136 -0
  136. package/src/airdrop/points/CheckIn.sol +71 -0
  137. package/src/airdrop/points/ITownsPoints.sol +64 -0
  138. package/src/airdrop/points/TownsPoints.sol +196 -0
  139. package/src/airdrop/points/TownsPointsStorage.sol +22 -0
  140. package/src/apps/BaseApp.sol +62 -0
  141. package/src/apps/ITownsApp.sol +28 -0
  142. package/src/apps/SchemaResolver.sol +170 -0
  143. package/src/apps/facets/attest/AttestationBase.sol +335 -0
  144. package/src/apps/facets/attest/AttestationLib.sol +64 -0
  145. package/src/apps/facets/attest/AttestationRegistry.sol +39 -0
  146. package/src/apps/facets/attest/AttestationStorage.sol +35 -0
  147. package/src/apps/facets/attest/IAttestationRegistry.sol +43 -0
  148. package/src/apps/facets/registry/AppRegistryBase.sol +403 -0
  149. package/src/apps/facets/registry/AppRegistryFacet.sol +173 -0
  150. package/src/apps/facets/registry/AppRegistryStorage.sol +53 -0
  151. package/src/apps/facets/registry/IAppRegistry.sol +159 -0
  152. package/src/apps/facets/schema/ISchema.sol +14 -0
  153. package/src/apps/facets/schema/SchemaBase.sol +88 -0
  154. package/src/apps/facets/schema/SchemaLib.sol +14 -0
  155. package/src/apps/facets/schema/SchemaRegistry.sol +51 -0
  156. package/src/apps/facets/schema/SchemaStorage.sol +34 -0
  157. package/src/apps/helpers/ISimpleApp.sol +51 -0
  158. package/src/apps/helpers/SimpleApp.sol +97 -0
  159. package/src/apps/helpers/SimpleAppStorage.sol +27 -0
  160. package/src/base/registry/facets/checker/EntitlementChecker.sol +237 -0
  161. package/src/base/registry/facets/checker/EntitlementCheckerStorage.sol +28 -0
  162. package/src/base/registry/facets/checker/IEntitlementChecker.sol +95 -0
  163. package/src/base/registry/facets/delegation/ISpaceDelegation.sol +69 -0
  164. package/src/base/registry/facets/delegation/SpaceDelegationFacet.sol +250 -0
  165. package/src/base/registry/facets/delegation/SpaceDelegationStorage.sol +35 -0
  166. package/src/base/registry/facets/distribution/v1/IRewardsDistribution.sol +51 -0
  167. package/src/base/registry/facets/distribution/v1/RewardsDistribution.sol +439 -0
  168. package/src/base/registry/facets/distribution/v1/RewardsDistributionStorage.sol +32 -0
  169. package/src/base/registry/facets/distribution/v2/DelegationProxy.sol +53 -0
  170. package/src/base/registry/facets/distribution/v2/IRewardsDistribution.sol +372 -0
  171. package/src/base/registry/facets/distribution/v2/RewardsDistributionBase.sol +299 -0
  172. package/src/base/registry/facets/distribution/v2/RewardsDistributionStorage.sol +37 -0
  173. package/src/base/registry/facets/distribution/v2/RewardsDistributionV2.sol +392 -0
  174. package/src/base/registry/facets/distribution/v2/StakingRewards.sol +466 -0
  175. package/src/base/registry/facets/mainnet/ICrossDomainMessenger.sol +58 -0
  176. package/src/base/registry/facets/mainnet/IMainnetDelegation.sol +127 -0
  177. package/src/base/registry/facets/mainnet/MainnetDelegation.sol +119 -0
  178. package/src/base/registry/facets/mainnet/MainnetDelegationBase.sol +274 -0
  179. package/src/base/registry/facets/mainnet/MainnetDelegationStorage.sol +36 -0
  180. package/src/base/registry/facets/operator/INodeOperator.sol +91 -0
  181. package/src/base/registry/facets/operator/NodeOperatorFacet.sol +189 -0
  182. package/src/base/registry/facets/operator/NodeOperatorStorage.sol +39 -0
  183. package/src/base/registry/facets/xchain/IXChain.sol +54 -0
  184. package/src/base/registry/facets/xchain/XChain.sol +158 -0
  185. package/src/base/registry/facets/xchain/XChainCheckLib.sol +105 -0
  186. package/src/base/registry/facets/xchain/XChainLib.sol +46 -0
  187. package/src/diamond/facets/beacon/UpgradeableBeacon.sol +38 -0
  188. package/src/diamond/facets/beacon/UpgradeableBeaconFacet.sol +34 -0
  189. package/src/diamond/facets/governance/votes/Checkpoints.sol +642 -0
  190. package/src/diamond/facets/governance/votes/Votes.sol +63 -0
  191. package/src/diamond/facets/governance/votes/VotesBase.sol +274 -0
  192. package/src/diamond/facets/governance/votes/VotesStorage.sol +21 -0
  193. package/src/diamond/facets/governance/votes/enumerable/IVotesEnumerable.sol +38 -0
  194. package/src/diamond/facets/governance/votes/enumerable/VotesEnumerable.sol +39 -0
  195. package/src/diamond/facets/governance/votes/enumerable/VotesEnumerableLib.sol +102 -0
  196. package/src/diamond/facets/metadata/IMetadata.sol +27 -0
  197. package/src/diamond/facets/metadata/MetadataFacet.sol +71 -0
  198. package/src/diamond/facets/token/ERC5643/ERC5643.sol +51 -0
  199. package/src/diamond/facets/token/ERC5643/ERC5643Base.sol +48 -0
  200. package/src/diamond/facets/token/ERC5643/ERC5643Storage.sol +26 -0
  201. package/src/diamond/facets/token/ERC5643/IERC5643.sol +44 -0
  202. package/src/diamond/facets/token/ERC721A/ERC721A.sol +270 -0
  203. package/src/diamond/facets/token/ERC721A/ERC721ABase.sol +829 -0
  204. package/src/diamond/facets/token/ERC721A/ERC721ANonTransferable.sol +21 -0
  205. package/src/diamond/facets/token/ERC721A/ERC721AStorage.sol +115 -0
  206. package/src/diamond/facets/token/ERC721A/IERC721A.sol +283 -0
  207. package/src/diamond/facets/token/ERC721A/extensions/ERC721AQueryable.sol +134 -0
  208. package/src/diamond/facets/token/ERC721A/extensions/IERC721AQueryable.sol +83 -0
  209. package/src/diamond/utils/Context.sol +19 -0
  210. package/src/factory/SpaceFactoryInit.sol +17 -0
  211. package/src/factory/facets/architect/Architect.sol +98 -0
  212. package/src/factory/facets/architect/ArchitectBase.sol +95 -0
  213. package/src/factory/facets/architect/ArchitectStorage.sol +28 -0
  214. package/src/factory/facets/architect/IArchitect.sol +155 -0
  215. package/src/factory/facets/architect/ImplementationStorage.sol +42 -0
  216. package/src/factory/facets/architect/pricing/IPricingModules.sol +41 -0
  217. package/src/factory/facets/architect/pricing/PricingModulesBase.sol +89 -0
  218. package/src/factory/facets/architect/pricing/PricingModulesFacet.sol +40 -0
  219. package/src/factory/facets/architect/pricing/PricingModulesStorage.sol +30 -0
  220. package/src/factory/facets/create/CreateSpace.sol +107 -0
  221. package/src/factory/facets/create/CreateSpaceLib.sol +335 -0
  222. package/src/factory/facets/create/ICreateSpace.sol +70 -0
  223. package/src/factory/facets/feature/FeatureConditionLib.sol +53 -0
  224. package/src/factory/facets/feature/FeatureManagerFacet.sol +66 -0
  225. package/src/factory/facets/feature/FeatureManagerLib.sol +168 -0
  226. package/src/factory/facets/feature/IFeatureManagerFacet.sol +73 -0
  227. package/src/factory/facets/partner/IPartnerRegistry.sol +56 -0
  228. package/src/factory/facets/partner/PartnerRegistry.sol +57 -0
  229. package/src/factory/facets/partner/PartnerRegistryBase.sol +132 -0
  230. package/src/factory/facets/partner/PartnerRegistryStorage.sol +40 -0
  231. package/src/factory/facets/platform/requirements/IPlatformRequirements.sol +143 -0
  232. package/src/factory/facets/platform/requirements/PlatformRequirementsBase.sol +124 -0
  233. package/src/factory/facets/platform/requirements/PlatformRequirementsFacet.sol +122 -0
  234. package/src/factory/facets/platform/requirements/PlatformRequirementsStorage.sol +41 -0
  235. package/src/factory/facets/registry/IImplementationRegistry.sol +46 -0
  236. package/src/factory/facets/registry/ImplementationRegistry.sol +64 -0
  237. package/src/factory/facets/registry/ImplementationRegistryStorage.sol +28 -0
  238. package/src/factory/facets/wallet-link/IWalletLink.sol +218 -0
  239. package/src/factory/facets/wallet-link/WalletLink.sol +108 -0
  240. package/src/factory/facets/wallet-link/WalletLinkBase.sol +492 -0
  241. package/src/factory/facets/wallet-link/interfaces/IDelegateRegistry.sol +63 -0
  242. package/src/factory/facets/wallet-link/interfaces/IDelegateRegistryV1.sol +35 -0
  243. package/src/factory/facets/wallet-link/interfaces/ISCL_EIP6565.sol +24 -0
  244. package/src/factory/facets/wallet-link/libraries/SolanaUtils.sol +161 -0
  245. package/src/factory/facets/wallet-link/libraries/WalletLib.sol +62 -0
  246. package/src/river/registry/facets/config/IRiverConfig.sol +117 -0
  247. package/src/river/registry/facets/config/RiverConfig.sol +174 -0
  248. package/src/river/registry/facets/node/INodeRegistry.sol +69 -0
  249. package/src/river/registry/facets/node/NodeRegistry.sol +143 -0
  250. package/src/river/registry/facets/operator/IOperatorRegistry.sol +28 -0
  251. package/src/river/registry/facets/operator/OperatorRegistry.sol +86 -0
  252. package/src/river/registry/facets/stream/IStreamRegistry.sol +184 -0
  253. package/src/river/registry/facets/stream/StreamRegistry.sol +396 -0
  254. package/src/river/registry/libraries/RegistryErrors.sol +24 -0
  255. package/src/river/registry/libraries/RegistryStorage.sol +181 -0
  256. package/src/router/ISwapRouter.sol +226 -0
  257. package/src/router/Permit2Hash.sol +92 -0
  258. package/src/router/SwapRouter.sol +463 -0
  259. package/src/router/SwapRouterStorage.sol +21 -0
  260. package/src/spaces/entitlements/ICrossChainEntitlement.sol +22 -0
  261. package/src/spaces/entitlements/IEntitlement.sol +61 -0
  262. package/src/spaces/entitlements/PolymarketEntitlement.sol +79 -0
  263. package/src/spaces/entitlements/poap/IPOAP.sol +26 -0
  264. package/src/spaces/entitlements/poap/PoapEntitlement.sol +56 -0
  265. package/src/spaces/entitlements/rule/IRuleEntitlement.sol +174 -0
  266. package/src/spaces/entitlements/rule/RuleEntitlement.sol +183 -0
  267. package/src/spaces/entitlements/rule/RuleEntitlementV2.sol +219 -0
  268. package/src/spaces/entitlements/user/IUserEntitlement.sol +24 -0
  269. package/src/spaces/entitlements/user/UserEntitlement.sol +273 -0
  270. package/src/spaces/facets/DependencyLib.sol +60 -0
  271. package/src/spaces/facets/Entitled.sol +172 -0
  272. package/src/spaces/facets/Permissions.sol +21 -0
  273. package/src/spaces/facets/account/AppAccount.sol +93 -0
  274. package/src/spaces/facets/account/AppAccountBase.sol +275 -0
  275. package/src/spaces/facets/account/AppAccountStorage.sol +63 -0
  276. package/src/spaces/facets/account/IAppAccount.sol +71 -0
  277. package/src/spaces/facets/account/SignerFacet.sol +26 -0
  278. package/src/spaces/facets/banning/Banning.sol +41 -0
  279. package/src/spaces/facets/banning/BanningBase.sol +33 -0
  280. package/src/spaces/facets/banning/BanningStorage.sol +23 -0
  281. package/src/spaces/facets/banning/IBanning.sol +35 -0
  282. package/src/spaces/facets/channels/ChannelBase.sol +87 -0
  283. package/src/spaces/facets/channels/ChannelService.sol +177 -0
  284. package/src/spaces/facets/channels/ChannelStorage.sol +34 -0
  285. package/src/spaces/facets/channels/Channels.sol +80 -0
  286. package/src/spaces/facets/channels/IChannel.sol +98 -0
  287. package/src/spaces/facets/dispatcher/DispatcherBase.sol +86 -0
  288. package/src/spaces/facets/dispatcher/DispatcherStorage.sol +21 -0
  289. package/src/spaces/facets/dispatcher/IDispatcher.sol +6 -0
  290. package/src/spaces/facets/entitlements/EntitlementsManager.sol +49 -0
  291. package/src/spaces/facets/entitlements/EntitlementsManagerBase.sol +87 -0
  292. package/src/spaces/facets/entitlements/EntitlementsManagerService.sol +142 -0
  293. package/src/spaces/facets/entitlements/EntitlementsManagerStorage.sol +34 -0
  294. package/src/spaces/facets/entitlements/IEntitlementsManager.sol +67 -0
  295. package/src/spaces/facets/entitlements/extensions/EntitlementDataQueryable.sol +153 -0
  296. package/src/spaces/facets/entitlements/extensions/IEntitlementDataQueryable.sol +32 -0
  297. package/src/spaces/facets/executor/ExecutorBase.sol +564 -0
  298. package/src/spaces/facets/executor/ExecutorFacet.sol +178 -0
  299. package/src/spaces/facets/executor/ExecutorStorage.sol +99 -0
  300. package/src/spaces/facets/executor/GroupLib.sol +128 -0
  301. package/src/spaces/facets/executor/IExecutor.sol +287 -0
  302. package/src/spaces/facets/executor/hooks/HookBase.sol +172 -0
  303. package/src/spaces/facets/executor/hooks/HookLib.sol +38 -0
  304. package/src/spaces/facets/executor/hooks/IHookBase.sol +48 -0
  305. package/src/spaces/facets/gated/EntitlementGated.sol +59 -0
  306. package/src/spaces/facets/gated/EntitlementGatedBase.sol +324 -0
  307. package/src/spaces/facets/gated/EntitlementGatedStorage.sol +29 -0
  308. package/src/spaces/facets/gated/IEntitlementGated.sol +55 -0
  309. package/src/spaces/facets/guardian/GuardianBase.sol +80 -0
  310. package/src/spaces/facets/guardian/GuardianFacet.sol +43 -0
  311. package/src/spaces/facets/guardian/GuardianStorage.sol +27 -0
  312. package/src/spaces/facets/guardian/IGuardian.sol +54 -0
  313. package/src/spaces/facets/membership/IMembership.sol +216 -0
  314. package/src/spaces/facets/membership/MembershipBase.sol +272 -0
  315. package/src/spaces/facets/membership/MembershipFacet.sol +191 -0
  316. package/src/spaces/facets/membership/MembershipStorage.sol +40 -0
  317. package/src/spaces/facets/membership/join/MembershipJoin.sol +547 -0
  318. package/src/spaces/facets/membership/metadata/IMembershipMetadata.sol +9 -0
  319. package/src/spaces/facets/membership/metadata/MembershipMetadata.sol +32 -0
  320. package/src/spaces/facets/membership/pricing/IMembershipPricing.sol +18 -0
  321. package/src/spaces/facets/membership/pricing/fixed/FixedPricing.sol +29 -0
  322. package/src/spaces/facets/membership/pricing/fixed/FixedPricingStorage.sol +27 -0
  323. package/src/spaces/facets/membership/pricing/tiered/TieredLogPricingOracleV2.sol +148 -0
  324. package/src/spaces/facets/membership/pricing/tiered/TieredLogPricingOracleV3.sol +137 -0
  325. package/src/spaces/facets/membership/token/MembershipToken.sol +25 -0
  326. package/src/spaces/facets/owner/ISpaceOwner.sol +85 -0
  327. package/src/spaces/facets/owner/SpaceOwner.sol +174 -0
  328. package/src/spaces/facets/owner/SpaceOwnerBase.sol +121 -0
  329. package/src/spaces/facets/owner/SpaceOwnerStorage.sol +41 -0
  330. package/src/spaces/facets/owner/SpaceOwnerUriBase.sol +54 -0
  331. package/src/spaces/facets/points/PointsBase.sol +35 -0
  332. package/src/spaces/facets/prepay/IPrepay.sol +43 -0
  333. package/src/spaces/facets/prepay/PrepayBase.sol +27 -0
  334. package/src/spaces/facets/prepay/PrepayFacet.sol +59 -0
  335. package/src/spaces/facets/prepay/PrepayStorage.sol +26 -0
  336. package/src/spaces/facets/proxy/ISpaceProxyInitializer.sol +21 -0
  337. package/src/spaces/facets/proxy/SpaceProxy.sol +15 -0
  338. package/src/spaces/facets/proxy/SpaceProxyInitializer.sol +55 -0
  339. package/src/spaces/facets/referrals/IReferrals.sol +98 -0
  340. package/src/spaces/facets/referrals/ReferralsBase.sol +81 -0
  341. package/src/spaces/facets/referrals/ReferralsFacet.sol +65 -0
  342. package/src/spaces/facets/referrals/ReferralsStorage.sol +36 -0
  343. package/src/spaces/facets/review/IReview.sol +50 -0
  344. package/src/spaces/facets/review/ReviewFacet.sol +105 -0
  345. package/src/spaces/facets/review/ReviewStorage.sol +29 -0
  346. package/src/spaces/facets/roles/IRoles.sol +197 -0
  347. package/src/spaces/facets/roles/Roles.sol +123 -0
  348. package/src/spaces/facets/roles/RolesBase.sol +420 -0
  349. package/src/spaces/facets/roles/RolesStorage.sol +132 -0
  350. package/src/spaces/facets/swap/ISwapFacet.sol +91 -0
  351. package/src/spaces/facets/swap/SwapFacet.sol +290 -0
  352. package/src/spaces/facets/swap/SwapFacetStorage.sol +24 -0
  353. package/src/spaces/facets/tipping/ITipping.sol +80 -0
  354. package/src/spaces/facets/tipping/TippingBase.sol +73 -0
  355. package/src/spaces/facets/tipping/TippingFacet.sol +123 -0
  356. package/src/spaces/facets/treasury/ITreasury.sol +64 -0
  357. package/src/spaces/facets/treasury/Treasury.sol +82 -0
  358. package/src/spaces/facets/xchain/SpaceEntitlementGated.sol +62 -0
  359. package/src/tokens/Member.sol +246 -0
  360. package/src/tokens/lock/ILock.sol +42 -0
  361. package/src/tokens/lock/LockBase.sol +64 -0
  362. package/src/tokens/lock/LockFacet.sol +44 -0
  363. package/src/tokens/lock/LockStorage.sol +26 -0
  364. package/src/tokens/mainnet/claimer/AuthorizedClaimerStorage.sol +26 -0
  365. package/src/tokens/mainnet/claimer/AuthorizedClaimers.sol +84 -0
  366. package/src/tokens/mainnet/claimer/IAuthorizedClaimers.sol +36 -0
  367. package/src/tokens/mainnet/delegation/ProxyBatchDelegation.sol +86 -0
  368. package/src/tokens/migration/ITokenMigration.sol +35 -0
  369. package/src/tokens/migration/TokenMigrationFacet.sol +86 -0
  370. package/src/tokens/migration/TokenMigrationStorage.sol +27 -0
  371. package/src/tokens/towns/base/IERC7802.sol +30 -0
  372. package/src/tokens/towns/base/IOptimismMintableERC20.sol +31 -0
  373. package/src/tokens/towns/base/ISemver.sol +13 -0
  374. package/src/tokens/towns/base/Towns.sol +283 -0
  375. package/src/tokens/towns/base/TownsDeployer.sol +32 -0
  376. package/src/tokens/towns/base/TownsLib.sol +31 -0
  377. package/src/tokens/towns/base/versions/TownsV2.sol +15 -0
  378. package/src/tokens/towns/mainnet/ITowns.sol +56 -0
  379. package/src/tokens/towns/mainnet/Towns.sol +220 -0
  380. package/src/tokens/towns/mainnet/libs/TokenInflationLib.sol +89 -0
  381. package/src/tokens/towns/multichain/Towns.sol +19 -0
  382. package/src/tokens/towns/multichain/wTowns.sol +18 -0
  383. package/src/utils/Airdrop.sol +156 -0
  384. package/src/utils/airdrop/merkle/IMerkleAirdrop.sol +55 -0
  385. package/src/utils/airdrop/merkle/MerkleAirdrop.sol +118 -0
  386. package/src/utils/airdrop/merkle/MerkleAirdropStorage.sol +29 -0
  387. package/src/utils/interfaces/AggregatorV3Interface.sol +37 -0
  388. package/src/utils/interfaces/IMulticall.sol +10 -0
  389. package/src/utils/interfaces/IWETH.sol +10 -0
  390. package/src/utils/libraries/BasisPoints.sol +24 -0
  391. package/src/utils/libraries/Create2Utils.sol +74 -0
  392. package/src/utils/libraries/CurrencyTransfer.sol +99 -0
  393. package/src/utils/libraries/CustomRevert.sol +49 -0
  394. package/src/utils/libraries/Factory.sol +66 -0
  395. package/src/utils/libraries/StringSet.sol +190 -0
  396. 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
+ }