@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,98 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {IArchitect} from "src/factory/facets/architect/IArchitect.sol";
|
|
6
|
+
import {IRuleEntitlement} from "src/spaces/entitlements/rule/IRuleEntitlement.sol";
|
|
7
|
+
import {IRuleEntitlementV2} from "src/spaces/entitlements/rule/IRuleEntitlement.sol";
|
|
8
|
+
|
|
9
|
+
import {IUserEntitlement} from "src/spaces/entitlements/user/IUserEntitlement.sol";
|
|
10
|
+
import {ISpaceOwner} from "src/spaces/facets/owner/ISpaceOwner.sol";
|
|
11
|
+
import {ISpaceProxyInitializer} from "src/spaces/facets/proxy/ISpaceProxyInitializer.sol";
|
|
12
|
+
|
|
13
|
+
// libraries
|
|
14
|
+
|
|
15
|
+
// contracts
|
|
16
|
+
import {ArchitectBase} from "./ArchitectBase.sol";
|
|
17
|
+
|
|
18
|
+
import {Facet} from "@towns-protocol/diamond/src/facets/Facet.sol";
|
|
19
|
+
import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
|
|
20
|
+
import {PausableBase} from "@towns-protocol/diamond/src/facets/pausable/PausableBase.sol";
|
|
21
|
+
import {ReentrancyGuard} from "solady/utils/ReentrancyGuard.sol";
|
|
22
|
+
|
|
23
|
+
contract Architect is IArchitect, ArchitectBase, OwnableBase, PausableBase, ReentrancyGuard, Facet {
|
|
24
|
+
function __Architect_init(
|
|
25
|
+
ISpaceOwner ownerImplementation,
|
|
26
|
+
IUserEntitlement userEntitlementImplementation,
|
|
27
|
+
IRuleEntitlementV2 ruleEntitlementImplementation,
|
|
28
|
+
IRuleEntitlement legacyRuleEntitlement
|
|
29
|
+
) external onlyInitializing {
|
|
30
|
+
_setImplementations(
|
|
31
|
+
ownerImplementation,
|
|
32
|
+
userEntitlementImplementation,
|
|
33
|
+
ruleEntitlementImplementation,
|
|
34
|
+
legacyRuleEntitlement
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// =============================================================
|
|
39
|
+
// Space
|
|
40
|
+
// =============================================================
|
|
41
|
+
|
|
42
|
+
/// @inheritdoc IArchitect
|
|
43
|
+
function getSpaceByTokenId(uint256 tokenId) external view returns (address) {
|
|
44
|
+
return _getSpaceByTokenId(tokenId);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/// @inheritdoc IArchitect
|
|
48
|
+
function getTokenIdBySpace(address space) external view returns (uint256) {
|
|
49
|
+
return _getTokenIdBySpace(space);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// =============================================================
|
|
53
|
+
// Implementations
|
|
54
|
+
// =============================================================
|
|
55
|
+
|
|
56
|
+
/// @inheritdoc IArchitect
|
|
57
|
+
function setSpaceArchitectImplementations(
|
|
58
|
+
ISpaceOwner spaceToken,
|
|
59
|
+
IUserEntitlement userEntitlementImplementation,
|
|
60
|
+
IRuleEntitlementV2 ruleEntitlementImplementation,
|
|
61
|
+
IRuleEntitlement legacyRuleEntitlement
|
|
62
|
+
) external onlyOwner {
|
|
63
|
+
_setImplementations(
|
|
64
|
+
spaceToken,
|
|
65
|
+
userEntitlementImplementation,
|
|
66
|
+
ruleEntitlementImplementation,
|
|
67
|
+
legacyRuleEntitlement
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/// @inheritdoc IArchitect
|
|
72
|
+
function getSpaceArchitectImplementations()
|
|
73
|
+
external
|
|
74
|
+
view
|
|
75
|
+
returns (
|
|
76
|
+
ISpaceOwner spaceToken,
|
|
77
|
+
IUserEntitlement userEntitlementImplementation,
|
|
78
|
+
IRuleEntitlementV2 ruleEntitlementImplementation,
|
|
79
|
+
IRuleEntitlement legacyRuleEntitlement
|
|
80
|
+
)
|
|
81
|
+
{
|
|
82
|
+
return _getImplementations();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// =============================================================
|
|
86
|
+
// Proxy Initializer
|
|
87
|
+
// =============================================================
|
|
88
|
+
|
|
89
|
+
/// @inheritdoc IArchitect
|
|
90
|
+
function getProxyInitializer() external view returns (ISpaceProxyInitializer) {
|
|
91
|
+
return _getProxyInitializer();
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/// @inheritdoc IArchitect
|
|
95
|
+
function setProxyInitializer(ISpaceProxyInitializer proxyInitializer) external onlyOwner {
|
|
96
|
+
_setProxyInitializer(proxyInitializer);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {IArchitectBase} from "./IArchitect.sol";
|
|
6
|
+
|
|
7
|
+
import {IRuleEntitlement} from "src/spaces/entitlements/rule/IRuleEntitlement.sol";
|
|
8
|
+
import {IRuleEntitlementV2} from "src/spaces/entitlements/rule/IRuleEntitlement.sol";
|
|
9
|
+
import {IUserEntitlement} from "src/spaces/entitlements/user/IUserEntitlement.sol";
|
|
10
|
+
import {ISpaceOwner} from "src/spaces/facets/owner/ISpaceOwner.sol";
|
|
11
|
+
import {ISpaceProxyInitializer} from "src/spaces/facets/proxy/ISpaceProxyInitializer.sol";
|
|
12
|
+
|
|
13
|
+
// libraries
|
|
14
|
+
|
|
15
|
+
import {ArchitectStorage} from "./ArchitectStorage.sol";
|
|
16
|
+
import {ImplementationStorage} from "./ImplementationStorage.sol";
|
|
17
|
+
import {Address} from "@openzeppelin/contracts/utils/Address.sol";
|
|
18
|
+
|
|
19
|
+
// contracts
|
|
20
|
+
|
|
21
|
+
// modules
|
|
22
|
+
|
|
23
|
+
abstract contract ArchitectBase is IArchitectBase {
|
|
24
|
+
// =============================================================
|
|
25
|
+
// Spaces
|
|
26
|
+
// =============================================================
|
|
27
|
+
function _getTokenIdBySpace(address space) internal view returns (uint256) {
|
|
28
|
+
return ArchitectStorage.layout().tokenIdBySpace[space];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function _getSpaceByTokenId(uint256 tokenId) internal view returns (address) {
|
|
32
|
+
return ArchitectStorage.layout().spaceByTokenId[tokenId];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// =============================================================
|
|
36
|
+
// Implementations
|
|
37
|
+
// =============================================================
|
|
38
|
+
|
|
39
|
+
function _setImplementations(
|
|
40
|
+
ISpaceOwner spaceOwnerToken,
|
|
41
|
+
IUserEntitlement userEntitlement,
|
|
42
|
+
IRuleEntitlementV2 ruleEntitlement,
|
|
43
|
+
IRuleEntitlement legacyRuleEntitlement
|
|
44
|
+
) internal {
|
|
45
|
+
if (address(spaceOwnerToken).code.length == 0) {
|
|
46
|
+
revert Architect__NotContract();
|
|
47
|
+
}
|
|
48
|
+
if (address(userEntitlement).code.length == 0) {
|
|
49
|
+
revert Architect__NotContract();
|
|
50
|
+
}
|
|
51
|
+
if (address(ruleEntitlement).code.length == 0) {
|
|
52
|
+
revert Architect__NotContract();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
ImplementationStorage.Layout storage ds = ImplementationStorage.layout();
|
|
56
|
+
ds.spaceOwnerToken = spaceOwnerToken;
|
|
57
|
+
ds.userEntitlement = userEntitlement;
|
|
58
|
+
ds.ruleEntitlement = ruleEntitlement;
|
|
59
|
+
ds.legacyRuleEntitlement = legacyRuleEntitlement;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function _getImplementations()
|
|
63
|
+
internal
|
|
64
|
+
view
|
|
65
|
+
returns (
|
|
66
|
+
ISpaceOwner spaceOwnerToken,
|
|
67
|
+
IUserEntitlement userEntitlementImplementation,
|
|
68
|
+
IRuleEntitlementV2 ruleEntitlementImplementation,
|
|
69
|
+
IRuleEntitlement legacyRuleEntitlement
|
|
70
|
+
)
|
|
71
|
+
{
|
|
72
|
+
ImplementationStorage.Layout storage ds = ImplementationStorage.layout();
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
ds.spaceOwnerToken,
|
|
76
|
+
ds.userEntitlement,
|
|
77
|
+
ds.ruleEntitlement,
|
|
78
|
+
ds.legacyRuleEntitlement
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// =============================================================
|
|
83
|
+
// Proxy Initializer
|
|
84
|
+
// =============================================================
|
|
85
|
+
function _getProxyInitializer() internal view returns (ISpaceProxyInitializer) {
|
|
86
|
+
return ImplementationStorage.layout().proxyInitializer;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function _setProxyInitializer(ISpaceProxyInitializer proxyInitializer) internal {
|
|
90
|
+
ImplementationStorage.Layout storage ds = ImplementationStorage.layout();
|
|
91
|
+
ds.proxyInitializer = proxyInitializer;
|
|
92
|
+
|
|
93
|
+
emit Architect__ProxyInitializerSet(address(proxyInitializer));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
|
|
6
|
+
// contracts
|
|
7
|
+
|
|
8
|
+
library ArchitectStorage {
|
|
9
|
+
// keccak256(abi.encode(uint256(keccak256("spaces.facets.architect.storage")) - 1)) &
|
|
10
|
+
// ~bytes32(uint256(0xff))
|
|
11
|
+
bytes32 internal constant SLOT_POSITION =
|
|
12
|
+
0x06bd04a817647c31ee485c8a0baab96facd62dbfd4b475796bb17ca2c12f0000;
|
|
13
|
+
|
|
14
|
+
struct Layout {
|
|
15
|
+
uint256 spaceCount;
|
|
16
|
+
mapping(address spaceAddress => uint256 tokenId) tokenIdBySpace;
|
|
17
|
+
mapping(uint256 tokenId => address spaceAddress) spaceByTokenId;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function layout() internal pure returns (Layout storage ds) {
|
|
21
|
+
bytes32 position = SLOT_POSITION;
|
|
22
|
+
|
|
23
|
+
// solhint-disable-next-line no-inline-assembly
|
|
24
|
+
assembly {
|
|
25
|
+
ds.slot := position
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
|
|
6
|
+
// libraries
|
|
7
|
+
|
|
8
|
+
import {IRuleEntitlement} from "src/spaces/entitlements/rule/IRuleEntitlement.sol";
|
|
9
|
+
import {IRuleEntitlementV2} from "src/spaces/entitlements/rule/IRuleEntitlement.sol";
|
|
10
|
+
import {IUserEntitlement} from "src/spaces/entitlements/user/IUserEntitlement.sol";
|
|
11
|
+
import {IMembershipBase} from "src/spaces/facets/membership/IMembership.sol";
|
|
12
|
+
|
|
13
|
+
import {ISpaceOwner} from "src/spaces/facets/owner/ISpaceOwner.sol";
|
|
14
|
+
import {ISpaceProxyInitializer} from "src/spaces/facets/proxy/ISpaceProxyInitializer.sol";
|
|
15
|
+
|
|
16
|
+
// contracts
|
|
17
|
+
interface IArchitectBase {
|
|
18
|
+
// =============================================================
|
|
19
|
+
// STRUCTS
|
|
20
|
+
// =============================================================
|
|
21
|
+
|
|
22
|
+
struct MembershipRequirementsOld {
|
|
23
|
+
bool everyone;
|
|
24
|
+
address[] users;
|
|
25
|
+
bytes ruleData;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
struct MembershipOld {
|
|
29
|
+
IMembershipBase.Membership settings;
|
|
30
|
+
MembershipRequirementsOld requirements;
|
|
31
|
+
string[] permissions;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
struct CreateSpaceOld {
|
|
35
|
+
Metadata metadata;
|
|
36
|
+
MembershipOld membership;
|
|
37
|
+
ChannelInfo channel;
|
|
38
|
+
Prepay prepay;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
struct SpaceInfo {
|
|
42
|
+
string name;
|
|
43
|
+
string uri;
|
|
44
|
+
string shortDescription;
|
|
45
|
+
string longDescription;
|
|
46
|
+
Membership membership;
|
|
47
|
+
ChannelInfo channel;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
51
|
+
/* CreateSpace */
|
|
52
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
53
|
+
|
|
54
|
+
struct MembershipRequirements {
|
|
55
|
+
bool everyone;
|
|
56
|
+
address[] users;
|
|
57
|
+
bytes ruleData;
|
|
58
|
+
bool syncEntitlements;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
struct Metadata {
|
|
62
|
+
string name;
|
|
63
|
+
string uri;
|
|
64
|
+
string shortDescription;
|
|
65
|
+
string longDescription;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
struct Membership {
|
|
69
|
+
IMembershipBase.Membership settings;
|
|
70
|
+
MembershipRequirements requirements;
|
|
71
|
+
string[] permissions;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
struct ChannelInfo {
|
|
75
|
+
string metadata;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
struct Prepay {
|
|
79
|
+
uint256 supply;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
struct CreateSpace {
|
|
83
|
+
Metadata metadata;
|
|
84
|
+
Membership membership;
|
|
85
|
+
ChannelInfo channel;
|
|
86
|
+
Prepay prepay;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* @notice Options for creating a space
|
|
90
|
+
* @param to Address that will receive the space NFT (defaults to msg.sender if not specified)
|
|
91
|
+
*/
|
|
92
|
+
|
|
93
|
+
struct SpaceOptions {
|
|
94
|
+
address to;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
98
|
+
/* Events */
|
|
99
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
100
|
+
event SpaceCreated(address indexed owner, uint256 indexed tokenId, address indexed space);
|
|
101
|
+
|
|
102
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
103
|
+
/* Errors */
|
|
104
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
105
|
+
|
|
106
|
+
error Architect__InvalidStringLength();
|
|
107
|
+
error Architect__InvalidNetworkId();
|
|
108
|
+
error Architect__InvalidAddress();
|
|
109
|
+
error Architect__NotContract();
|
|
110
|
+
error Architect__InvalidPricingModule();
|
|
111
|
+
|
|
112
|
+
event Architect__ProxyInitializerSet(address indexed proxyInitializer);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
interface IArchitect is IArchitectBase {
|
|
116
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
117
|
+
/* Registry */
|
|
118
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
119
|
+
function getSpaceByTokenId(uint256 tokenId) external view returns (address space);
|
|
120
|
+
|
|
121
|
+
function getTokenIdBySpace(address space) external view returns (uint256);
|
|
122
|
+
|
|
123
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
124
|
+
/* Implementations */
|
|
125
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
126
|
+
|
|
127
|
+
function setSpaceArchitectImplementations(
|
|
128
|
+
ISpaceOwner ownerTokenImplementation,
|
|
129
|
+
IUserEntitlement userEntitlementImplementation,
|
|
130
|
+
IRuleEntitlementV2 ruleEntitlementImplementation,
|
|
131
|
+
IRuleEntitlement legacyRuleEntitlement
|
|
132
|
+
) external;
|
|
133
|
+
|
|
134
|
+
function getSpaceArchitectImplementations()
|
|
135
|
+
external
|
|
136
|
+
view
|
|
137
|
+
returns (
|
|
138
|
+
ISpaceOwner ownerTokenImplementation,
|
|
139
|
+
IUserEntitlement userEntitlementImplementation,
|
|
140
|
+
IRuleEntitlementV2 ruleEntitlementImplementation,
|
|
141
|
+
IRuleEntitlement legacyRuleEntitlement
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
145
|
+
/* Proxy Initializer */
|
|
146
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
147
|
+
/// @notice Retrieves the current proxy initializer
|
|
148
|
+
/// @return The address of the current ISpaceProxyInitializer contract
|
|
149
|
+
function getProxyInitializer() external view returns (ISpaceProxyInitializer);
|
|
150
|
+
|
|
151
|
+
/// @notice Sets a new proxy initializer
|
|
152
|
+
/// @param proxyInitializer The address of the new ISpaceProxyInitializer contract to be set
|
|
153
|
+
/// @dev This function should only be callable by the contract owner or authorized roles
|
|
154
|
+
function setProxyInitializer(ISpaceProxyInitializer proxyInitializer) external;
|
|
155
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
|
|
6
|
+
import {IEntitlementChecker} from "src/base/registry/facets/checker/IEntitlementChecker.sol";
|
|
7
|
+
import {IWalletLink} from "src/factory/facets/wallet-link/IWalletLink.sol";
|
|
8
|
+
import {IRuleEntitlement} from "src/spaces/entitlements/rule/IRuleEntitlement.sol";
|
|
9
|
+
import {IRuleEntitlementV2} from "src/spaces/entitlements/rule/IRuleEntitlement.sol";
|
|
10
|
+
import {IUserEntitlement} from "src/spaces/entitlements/user/IUserEntitlement.sol";
|
|
11
|
+
import {ISpaceOwner} from "src/spaces/facets/owner/ISpaceOwner.sol";
|
|
12
|
+
import {ISpaceProxyInitializer} from "src/spaces/facets/proxy/ISpaceProxyInitializer.sol";
|
|
13
|
+
// libraries
|
|
14
|
+
|
|
15
|
+
// contracts
|
|
16
|
+
|
|
17
|
+
library ImplementationStorage {
|
|
18
|
+
// keccak256(abi.encode(uint256(keccak256("spaces.facets.architect.implementation.storage")) -
|
|
19
|
+
// 1))
|
|
20
|
+
// & ~bytes32(uint256(0xff))
|
|
21
|
+
bytes32 internal constant SLOT_POSITION =
|
|
22
|
+
0x9e34afa7b4d27d347d25d9d9dab4f1a106fa081382e6c4243e834d093e787d00;
|
|
23
|
+
|
|
24
|
+
struct Layout {
|
|
25
|
+
ISpaceOwner spaceOwnerToken;
|
|
26
|
+
IUserEntitlement userEntitlement;
|
|
27
|
+
IRuleEntitlementV2 ruleEntitlement;
|
|
28
|
+
IWalletLink walletLink;
|
|
29
|
+
IEntitlementChecker entitlementChecker;
|
|
30
|
+
IRuleEntitlement legacyRuleEntitlement;
|
|
31
|
+
ISpaceProxyInitializer proxyInitializer;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function layout() internal pure returns (Layout storage ds) {
|
|
35
|
+
bytes32 position = SLOT_POSITION;
|
|
36
|
+
|
|
37
|
+
// solhint-disable-next-line no-inline-assembly
|
|
38
|
+
assembly {
|
|
39
|
+
ds.slot := position
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
|
|
6
|
+
// libraries
|
|
7
|
+
|
|
8
|
+
// contracts
|
|
9
|
+
|
|
10
|
+
interface IPricingModulesBase {
|
|
11
|
+
// =============================================================
|
|
12
|
+
// Structs
|
|
13
|
+
// =============================================================
|
|
14
|
+
struct PricingModule {
|
|
15
|
+
string name;
|
|
16
|
+
string description;
|
|
17
|
+
address module;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// =============================================================
|
|
21
|
+
// Errors
|
|
22
|
+
// =============================================================
|
|
23
|
+
error InvalidPricingModule(address module);
|
|
24
|
+
|
|
25
|
+
// =============================================================
|
|
26
|
+
// Events
|
|
27
|
+
// =============================================================
|
|
28
|
+
event PricingModuleAdded(address indexed module);
|
|
29
|
+
event PricingModuleUpdated(address indexed module);
|
|
30
|
+
event PricingModuleRemoved(address indexed module);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
interface IPricingModules is IPricingModulesBase {
|
|
34
|
+
function isPricingModule(address module) external view returns (bool);
|
|
35
|
+
|
|
36
|
+
function addPricingModule(address module) external;
|
|
37
|
+
|
|
38
|
+
function removePricingModule(address module) external;
|
|
39
|
+
|
|
40
|
+
function listPricingModules() external view returns (PricingModule[] memory);
|
|
41
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
|
|
6
|
+
import {IPricingModulesBase} from "./IPricingModules.sol";
|
|
7
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
|
8
|
+
import {IMembershipPricing} from "src/spaces/facets/membership/pricing/IMembershipPricing.sol";
|
|
9
|
+
|
|
10
|
+
// libraries
|
|
11
|
+
import {PricingModulesStorage} from "./PricingModulesStorage.sol";
|
|
12
|
+
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
|
13
|
+
import {CustomRevert} from "src/utils/libraries/CustomRevert.sol";
|
|
14
|
+
|
|
15
|
+
// contracts
|
|
16
|
+
|
|
17
|
+
library PricingModulesBase {
|
|
18
|
+
using EnumerableSet for EnumerableSet.AddressSet;
|
|
19
|
+
|
|
20
|
+
function isPricingModule(address module) internal view returns (bool) {
|
|
21
|
+
PricingModulesStorage.Layout storage ds = PricingModulesStorage.layout();
|
|
22
|
+
return ds.pricingModules.contains(module);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function addPricingModule(address module) internal {
|
|
26
|
+
PricingModulesStorage.Layout storage ds = PricingModulesStorage.layout();
|
|
27
|
+
|
|
28
|
+
if (module == address(0)) {
|
|
29
|
+
CustomRevert.revertWith(IPricingModulesBase.InvalidPricingModule.selector, module);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (!verifyInterface(module)) {
|
|
33
|
+
CustomRevert.revertWith(IPricingModulesBase.InvalidPricingModule.selector, module);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (ds.pricingModules.contains(module)) {
|
|
37
|
+
CustomRevert.revertWith(IPricingModulesBase.InvalidPricingModule.selector, module);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
ds.pricingModules.add(module);
|
|
41
|
+
|
|
42
|
+
emit IPricingModulesBase.PricingModuleAdded(module);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function removePricingModule(address module) internal {
|
|
46
|
+
PricingModulesStorage.Layout storage ds = PricingModulesStorage.layout();
|
|
47
|
+
|
|
48
|
+
if (module == address(0)) {
|
|
49
|
+
CustomRevert.revertWith(IPricingModulesBase.InvalidPricingModule.selector, module);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// verify module exists
|
|
53
|
+
if (!ds.pricingModules.contains(module)) {
|
|
54
|
+
CustomRevert.revertWith(IPricingModulesBase.InvalidPricingModule.selector, module);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
ds.pricingModules.remove(module);
|
|
58
|
+
|
|
59
|
+
emit IPricingModulesBase.PricingModuleRemoved(module);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function listPricingModules()
|
|
63
|
+
internal
|
|
64
|
+
view
|
|
65
|
+
returns (IPricingModulesBase.PricingModule[] memory)
|
|
66
|
+
{
|
|
67
|
+
PricingModulesStorage.Layout storage ds = PricingModulesStorage.layout();
|
|
68
|
+
uint256 length = ds.pricingModules.length();
|
|
69
|
+
IPricingModulesBase.PricingModule[]
|
|
70
|
+
memory pricingModules = new IPricingModulesBase.PricingModule[](length);
|
|
71
|
+
for (uint256 i = 0; i < length; i++) {
|
|
72
|
+
address moduleAddress = ds.pricingModules.at(i);
|
|
73
|
+
IMembershipPricing module = IMembershipPricing(moduleAddress);
|
|
74
|
+
pricingModules[i] = IPricingModulesBase.PricingModule({
|
|
75
|
+
name: module.name(),
|
|
76
|
+
description: module.description(),
|
|
77
|
+
module: moduleAddress
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return pricingModules;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// =============================================================
|
|
84
|
+
// Internal
|
|
85
|
+
// =============================================================
|
|
86
|
+
function verifyInterface(address module) internal view returns (bool) {
|
|
87
|
+
return IERC165(module).supportsInterface(type(IMembershipPricing).interfaceId);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {IPricingModules} from "./IPricingModules.sol";
|
|
6
|
+
|
|
7
|
+
// contracts
|
|
8
|
+
|
|
9
|
+
import {PricingModulesBase} from "./PricingModulesBase.sol";
|
|
10
|
+
import {Facet} from "@towns-protocol/diamond/src/facets/Facet.sol";
|
|
11
|
+
import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
|
|
12
|
+
|
|
13
|
+
contract PricingModulesFacet is IPricingModules, OwnableBase, Facet {
|
|
14
|
+
function __PricingModulesFacet_init(address[] memory pricingModules) external onlyInitializing {
|
|
15
|
+
__PricingModulesFacet_init_unchained(pricingModules);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function __PricingModulesFacet_init_unchained(address[] memory pricingModules) internal {
|
|
19
|
+
_addInterface(type(IPricingModules).interfaceId);
|
|
20
|
+
for (uint256 i = 0; i < pricingModules.length; i++) {
|
|
21
|
+
PricingModulesBase.addPricingModule(pricingModules[i]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function addPricingModule(address pricingModule) external onlyOwner {
|
|
26
|
+
PricingModulesBase.addPricingModule(pricingModule);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function isPricingModule(address module) external view returns (bool) {
|
|
30
|
+
return PricingModulesBase.isPricingModule(module);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function removePricingModule(address module) external onlyOwner {
|
|
34
|
+
PricingModulesBase.removePricingModule(module);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function listPricingModules() external view returns (PricingModule[] memory) {
|
|
38
|
+
return PricingModulesBase.listPricingModules();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
|
|
6
|
+
// libraries
|
|
7
|
+
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
|
8
|
+
|
|
9
|
+
// contracts
|
|
10
|
+
|
|
11
|
+
library PricingModulesStorage {
|
|
12
|
+
using EnumerableSet for EnumerableSet.AddressSet;
|
|
13
|
+
|
|
14
|
+
// keccak256(abi.encode(uint256(keccak256("spaces.facets.architect.pricing.module.storage")) -
|
|
15
|
+
// 1))
|
|
16
|
+
// & ~bytes32(uint256(0xff))
|
|
17
|
+
bytes32 internal constant SLOT_POSITION =
|
|
18
|
+
0x6438323c68a77f029335e6433efb7c07e7cd1775df0c27e75bcd3591a8bc5d00;
|
|
19
|
+
|
|
20
|
+
struct Layout {
|
|
21
|
+
// The set of all pricing modules
|
|
22
|
+
EnumerableSet.AddressSet pricingModules;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function layout() internal pure returns (Layout storage l) {
|
|
26
|
+
assembly {
|
|
27
|
+
l.slot := SLOT_POSITION
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|