@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,28 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.23;
3
+
4
+ //interfaces
5
+
6
+ //libraries
7
+
8
+ //contracts
9
+ import {EntryPoint} from "account-abstraction/core/EntryPoint.sol";
10
+ import {Deployer} from "scripts/common/Deployer.s.sol";
11
+
12
+ contract DeployEntrypoint is Deployer {
13
+ function versionName() public pure override returns (string memory) {
14
+ return "utils/entrypoint";
15
+ }
16
+
17
+ function __deploy(address deployer) internal override returns (address) {
18
+ if (!isAnvil()) revert("not supported");
19
+
20
+ bytes32 salt = bytes32(uint256(1));
21
+ bytes32 initCodeHash = hashInitCode(type(EntryPoint).creationCode);
22
+ address soonToBe = computeCreate2Address(salt, initCodeHash);
23
+ vm.broadcast(deployer);
24
+ EntryPoint entrypoint = new EntryPoint{salt: salt}();
25
+ require(address(entrypoint) == soonToBe, "address mismatch");
26
+ return address(entrypoint);
27
+ }
28
+ }
@@ -0,0 +1,95 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.0;
3
+
4
+ //interfaces
5
+
6
+ //libraries
7
+ import {MerkleTree} from "test/utils/MerkleTree.sol";
8
+
9
+ //contracts
10
+ import {Deployer} from "scripts/common/Deployer.s.sol";
11
+ import {Member} from "src/tokens/Member.sol";
12
+
13
+ contract DeployMember is Deployer {
14
+ Member private member;
15
+ MerkleTree private merkle;
16
+
17
+ function versionName() public pure override returns (string memory) {
18
+ return "utils/member";
19
+ }
20
+
21
+ function __deploy(address deployer) internal override returns (address) {
22
+ vm.startBroadcast(deployer);
23
+ member = new Member(
24
+ "Council Member",
25
+ "MEMBER",
26
+ "https://bafybeihuygd5wm43kmxl4pocbv5uchdrkimhfwk75qgbmtlrqsy2bwwijq.ipfs.nftstorage.link/metadata/",
27
+ ""
28
+ );
29
+ member.startWaitlistMint();
30
+ member.startPublicMint();
31
+ vm.stopBroadcast();
32
+ return address(member);
33
+ }
34
+
35
+ function deployWithProof(address deployer) public returns (address) {
36
+ address[] memory accounts = new address[](5);
37
+ accounts[0] = address(0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266);
38
+ accounts[1] = address(0x70997970C51812dc3A010C7d01b50e0d17dc79C8);
39
+ accounts[2] = address(0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC);
40
+ accounts[3] = address(0x90F79bf6EB2c4f870365E785982E1f101E93b906);
41
+ accounts[4] = address(0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65);
42
+
43
+ uint256[] memory allowances = new uint256[](5);
44
+ allowances[0] = 1;
45
+ allowances[1] = 1;
46
+ allowances[2] = 1;
47
+ allowances[3] = 1;
48
+ allowances[4] = 1;
49
+
50
+ uint256[] memory points = new uint256[](5);
51
+ points[0] = 1;
52
+ points[1] = 1;
53
+ points[2] = 1;
54
+ points[3] = 1;
55
+ points[4] = 1;
56
+
57
+ merkle = new MerkleTree();
58
+ (bytes32 root, bytes32[][] memory tree) = merkle.constructTree(
59
+ accounts,
60
+ allowances,
61
+ points
62
+ );
63
+
64
+ vm.startBroadcast(deployer);
65
+ member = new Member(
66
+ "Council Member",
67
+ "MEMBER",
68
+ "https://bafybeihuygd5wm43kmxl4pocbv5uchdrkimhfwk75qgbmtlrqsy2bwwijq.ipfs.nftstorage.link/metadata/",
69
+ root
70
+ );
71
+
72
+ member.privateMint{value: member.MINT_PRICE()}(
73
+ accounts[0],
74
+ allowances[0],
75
+ merkle.getProof(tree, 0)
76
+ );
77
+
78
+ member.privateMint{value: member.MINT_PRICE()}(
79
+ accounts[1],
80
+ allowances[1],
81
+ merkle.getProof(tree, 1)
82
+ );
83
+
84
+ member.privateMint{value: member.MINT_PRICE()}(
85
+ accounts[2],
86
+ allowances[2],
87
+ merkle.getProof(tree, 2)
88
+ );
89
+
90
+ member.startWaitlistMint();
91
+ member.startPublicMint();
92
+ vm.stopBroadcast();
93
+ return address(member);
94
+ }
95
+ }
@@ -0,0 +1,7 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.23;
3
+
4
+ // deployments
5
+ import {DeployDiamond} from "@towns-protocol/diamond/scripts/deployments/diamonds/DeployDiamond.s.sol";
6
+
7
+ contract DeployMockDiamond is DeployDiamond {}
@@ -0,0 +1,24 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.24;
3
+
4
+ import {Deployer} from "scripts/common/Deployer.s.sol";
5
+ import {MockERC20} from "test/mocks/MockERC20.sol";
6
+
7
+ contract DeployMockERC20 is Deployer {
8
+ function versionName() public pure override returns (string memory) {
9
+ return "utils/mockERC20";
10
+ }
11
+
12
+ function __deploy(address deployer) internal override returns (address) {
13
+ // bytes32 salt = bytes32(uint256(uint160(deployer))); // create a salt from address
14
+
15
+ // bytes32 initCodeHash = hashInitCode(type(MockERC20).creationCode);
16
+ // address predeterminedAddress = vm.computeCreate2Address(salt, initCodeHash);
17
+
18
+ vm.startBroadcast(deployer);
19
+ MockERC20 deployment = new MockERC20("TownsTest", "TToken");
20
+ vm.stopBroadcast();
21
+
22
+ return address(deployment);
23
+ }
24
+ }
@@ -0,0 +1,45 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.24;
3
+
4
+ // interfaces
5
+ import {IDiamond} from "@towns-protocol/diamond/src/Diamond.sol";
6
+
7
+ // libraries
8
+ import {LibDeploy} from "@towns-protocol/diamond/src/utils/LibDeploy.sol";
9
+ import {DynamicArrayLib} from "solady/utils/DynamicArrayLib.sol";
10
+ import {DeployERC721A} from "../facets/DeployERC721A.s.sol";
11
+
12
+ // contracts
13
+ import {MockERC721A} from "../../../test/mocks/MockERC721A.sol";
14
+
15
+ library DeployMockERC721A {
16
+ using DynamicArrayLib for DynamicArrayLib.DynamicArray;
17
+
18
+ function selectors() internal pure returns (bytes4[] memory res) {
19
+ DynamicArrayLib.DynamicArray memory arr = DynamicArrayLib.p().reserve(16);
20
+ arr.p(MockERC721A.mintTo.selector);
21
+ arr.p(MockERC721A.mint.selector);
22
+ arr.p(MockERC721A.burn.selector);
23
+ {
24
+ bytes4[] memory selectors_ = DeployERC721A.selectors();
25
+ for (uint256 i; i < selectors_.length; ++i) {
26
+ arr.p(selectors_[i]);
27
+ }
28
+ }
29
+ bytes32[] memory selectors__ = arr.asBytes32Array();
30
+ assembly ("memory-safe") {
31
+ res := selectors__
32
+ }
33
+ }
34
+
35
+ function makeCut(
36
+ address facetAddress,
37
+ IDiamond.FacetCutAction action
38
+ ) internal pure returns (IDiamond.FacetCut memory) {
39
+ return IDiamond.FacetCut(facetAddress, action, selectors());
40
+ }
41
+
42
+ function deploy() internal returns (address) {
43
+ return LibDeploy.deployCode("MockERC721A.sol", "");
44
+ }
45
+ }
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.23;
3
+
4
+ //interfaces
5
+ import {IDiamond} from "@towns-protocol/diamond/src/Diamond.sol";
6
+
7
+ //libraries
8
+ import {LibDeploy} from "@towns-protocol/diamond/src/utils/LibDeploy.sol";
9
+
10
+ //contracts
11
+ import {MockLegacyMembership} from "test/mocks/legacy/membership/MockLegacyMembership.sol";
12
+
13
+ library DeployMockLegacyMembership {
14
+ function selectors() internal pure returns (bytes4[] memory res) {
15
+ res = new bytes4[](1);
16
+ res[0] = MockLegacyMembership.joinSpaceLegacy.selector;
17
+ }
18
+
19
+ function makeCut(
20
+ address facetAddress,
21
+ IDiamond.FacetCutAction action
22
+ ) internal pure returns (IDiamond.FacetCut memory) {
23
+ return IDiamond.FacetCut(facetAddress, action, selectors());
24
+ }
25
+
26
+ function deploy() internal returns (address) {
27
+ return LibDeploy.deployCode("MockLegacyMembership.sol", "");
28
+ }
29
+ }
@@ -0,0 +1,42 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.23;
3
+
4
+ //interfaces
5
+
6
+ //libraries
7
+
8
+ //contracts
9
+ import {Deployer} from "scripts/common/Deployer.s.sol";
10
+ import {MockMessenger} from "test/mocks/MockMessenger.sol";
11
+
12
+ contract DeployMockMessenger is Deployer {
13
+ function versionName() public pure override returns (string memory) {
14
+ return "facets/mockMessengerFacet";
15
+ }
16
+
17
+ function __deploy(address deployer) internal override returns (address) {
18
+ if (isAnvil() || isTesting()) {
19
+ vm.startBroadcast(deployer);
20
+ MockMessenger messenger = new MockMessenger();
21
+ vm.stopBroadcast();
22
+ return address(messenger);
23
+ } else {
24
+ return _getMessenger();
25
+ }
26
+ }
27
+
28
+ function _getMessenger() internal view returns (address) {
29
+ // Base or Base (Sepolia)
30
+ if (block.chainid == 8453 || block.chainid == 84_532) {
31
+ return 0x4200000000000000000000000000000000000007;
32
+ } else if (block.chainid == 1) {
33
+ // Mainnet
34
+ return 0x866E82a600A1414e583f7F13623F1aC5d58b0Afa;
35
+ } else if (block.chainid == 11_155_111) {
36
+ // Sepolia
37
+ return 0xC34855F4De64F1840e5686e64278da901e261f20;
38
+ } else {
39
+ revert("DeployMockMessenger: Invalid network");
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,86 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.23;
3
+
4
+ // interfaces
5
+
6
+ // libraries
7
+ import {DeployDiamondCut} from "@towns-protocol/diamond/scripts/deployments/facets/DeployDiamondCut.sol";
8
+ import {DeployDiamondLoupe} from "@towns-protocol/diamond/scripts/deployments/facets/DeployDiamondLoupe.sol";
9
+ import {DeployIntrospection} from "@towns-protocol/diamond/scripts/deployments/facets/DeployIntrospection.sol";
10
+ import {DeployMockERC721A} from "../../deployments/utils/DeployMockERC721A.s.sol";
11
+ import {LibString} from "solady/utils/LibString.sol";
12
+
13
+ // contracts
14
+ import {DiamondHelper} from "@towns-protocol/diamond/scripts/common/helpers/DiamondHelper.s.sol";
15
+ import {Diamond} from "@towns-protocol/diamond/src/Diamond.sol";
16
+ import {MultiInit} from "@towns-protocol/diamond/src/initializers/MultiInit.sol";
17
+
18
+ // deployers
19
+ import {DeployFacet} from "../../common/DeployFacet.s.sol";
20
+ import {Deployer} from "../../common/Deployer.s.sol";
21
+
22
+ contract DeployMockNFT is DiamondHelper, Deployer {
23
+ using LibString for string;
24
+
25
+ DeployFacet private facetHelper = new DeployFacet();
26
+
27
+ function versionName() public pure override returns (string memory) {
28
+ return "utils/mockNFT";
29
+ }
30
+
31
+ function diamondInitParams(address deployer) public returns (Diamond.InitParams memory) {
32
+ // Queue up all facets for batch deployment
33
+ facetHelper.add("MultiInit");
34
+ facetHelper.add("DiamondCutFacet");
35
+ facetHelper.add("DiamondLoupeFacet");
36
+ facetHelper.add("IntrospectionFacet");
37
+ facetHelper.add("MockERC721A");
38
+
39
+ // Deploy all facets in a single batch transaction
40
+ facetHelper.deployBatch(deployer);
41
+
42
+ // Get deployed addresses
43
+ address facet = facetHelper.getDeployedAddress("DiamondCutFacet");
44
+ addFacet(
45
+ makeCut(facet, FacetCutAction.Add, DeployDiamondCut.selectors()),
46
+ facet,
47
+ DeployDiamondCut.makeInitData()
48
+ );
49
+
50
+ facet = facetHelper.getDeployedAddress("DiamondLoupeFacet");
51
+ addFacet(
52
+ makeCut(facet, FacetCutAction.Add, DeployDiamondLoupe.selectors()),
53
+ facet,
54
+ DeployDiamondLoupe.makeInitData()
55
+ );
56
+
57
+ facet = facetHelper.getDeployedAddress("IntrospectionFacet");
58
+ addFacet(
59
+ makeCut(facet, FacetCutAction.Add, DeployIntrospection.selectors()),
60
+ facet,
61
+ DeployIntrospection.makeInitData()
62
+ );
63
+
64
+ // Add ERC721A mock
65
+ facet = facetHelper.getDeployedAddress("MockERC721A");
66
+ addCut(makeCut(facet, FacetCutAction.Add, DeployMockERC721A.selectors()));
67
+
68
+ address multiInit = facetHelper.getDeployedAddress("MultiInit");
69
+
70
+ return
71
+ Diamond.InitParams({
72
+ baseFacets: baseFacets(),
73
+ init: multiInit,
74
+ initData: abi.encodeCall(MultiInit.multiInit, (_initAddresses, _initDatas))
75
+ });
76
+ }
77
+
78
+ function __deploy(address deployer) internal override returns (address) {
79
+ Diamond.InitParams memory initDiamondCut = diamondInitParams(deployer);
80
+
81
+ vm.broadcast(deployer);
82
+ Diamond diamond = new Diamond(initDiamondCut);
83
+
84
+ return address(diamond);
85
+ }
86
+ }
@@ -0,0 +1,16 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.24;
3
+
4
+ import {Deployer} from "scripts/common/Deployer.s.sol";
5
+ import {PoapEntitlement} from "src/spaces/entitlements/poap/PoapEntitlement.sol";
6
+
7
+ contract DeployPoapEntitlement is Deployer {
8
+ function versionName() public pure override returns (string memory) {
9
+ return "utils/poapEntitlement";
10
+ }
11
+
12
+ function __deploy(address deployer) internal override returns (address) {
13
+ vm.broadcast(deployer);
14
+ return address(new PoapEntitlement(0x22C1f6050E56d2876009903609a2cC3fEf83B415));
15
+ }
16
+ }
@@ -0,0 +1,112 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.23;
3
+
4
+ // interfaces
5
+
6
+ // libraries
7
+
8
+ // contracts
9
+ import {Deployer} from "../../common/Deployer.s.sol";
10
+ import {ProxyBatchDelegation} from "src/tokens/mainnet/delegation/ProxyBatchDelegation.sol";
11
+ import {MockMessenger} from "test/mocks/MockMessenger.sol";
12
+
13
+ // deployments
14
+ import {DeployTownsMainnet} from "./DeployTownsMainnet.s.sol";
15
+
16
+ contract DeployProxyBatchDelegation is Deployer {
17
+ address internal constant CLAIMERS = 0x0bEe55b52d01C4D5d4D0cfcE1d6e0baE6722db05;
18
+ address internal constant BASE_REGISTRY = 0x7c0422b31401C936172C897802CF0373B35B7698;
19
+ address internal constant BASE_REGISTRY_SEPOLIA = 0x08cC41b782F27d62995056a4EF2fCBAe0d3c266F;
20
+ address internal constant MESSENGER = 0x866E82a600A1414e583f7F13623F1aC5d58b0Afa;
21
+ address internal constant MESSENGER_SEPOLIA = 0xC34855F4De64F1840e5686e64278da901e261f20;
22
+
23
+ // Mainnet
24
+ DeployTownsMainnet internal townsHelper = new DeployTownsMainnet();
25
+
26
+ address public townsToken;
27
+ address public claimers;
28
+ address public mainnetDelegation;
29
+ address public messenger;
30
+ address public vault;
31
+
32
+ function versionName() public pure override returns (string memory) {
33
+ return "utils/proxyBatchDelegation";
34
+ }
35
+
36
+ function setDependencies(address mainnetDelegation_, address messenger_) external {
37
+ mainnetDelegation = mainnetDelegation_;
38
+ messenger = messenger_;
39
+ }
40
+
41
+ function __deploy(address deployer) internal override returns (address) {
42
+ townsToken = townsHelper.deploy(deployer);
43
+ debug("DeployProxyBatchDelegation: townsToken: %s", townsToken);
44
+
45
+ vault = townsHelper.vault();
46
+
47
+ claimers = _getClaimers(deployer);
48
+ debug("DeployProxyBatchDelegation: claimers: %s", claimers);
49
+
50
+ if (messenger == address(0)) {
51
+ if (isAnvil() || isTesting()) {
52
+ vm.broadcast(deployer);
53
+ messenger = address(new MockMessenger());
54
+ } else {
55
+ messenger = getMessenger();
56
+ }
57
+ }
58
+ debug("DeployProxyBatchDelegation: messenger: %s", messenger);
59
+
60
+ if (mainnetDelegation == address(0)) {
61
+ mainnetDelegation = _getMainnetDelegation();
62
+ }
63
+
64
+ if (townsToken == address(0)) {
65
+ revert("DeployProxyBatchDelegation: Towns token not deployed");
66
+ }
67
+
68
+ if (claimers == address(0)) {
69
+ revert("DeployProxyBatchDelegation: Claimers not deployed");
70
+ }
71
+
72
+ vm.broadcast(deployer);
73
+ return
74
+ address(new ProxyBatchDelegation(townsToken, claimers, messenger, mainnetDelegation));
75
+ }
76
+
77
+ function _getClaimers(address deployer) internal returns (address) {
78
+ if (block.chainid == 1) {
79
+ return CLAIMERS;
80
+ }
81
+
82
+ vm.broadcast(deployer);
83
+ return deployCode("AuthorizedClaimers", "");
84
+ }
85
+
86
+ function _getMainnetDelegation() internal returns (address) {
87
+ if (block.chainid == 84_532 || block.chainid == 11_155_111) {
88
+ // base registry on base sepolia
89
+ return BASE_REGISTRY_SEPOLIA;
90
+ }
91
+
92
+ if (block.chainid == 1) {
93
+ // Base Registry contract on Base
94
+ return BASE_REGISTRY;
95
+ }
96
+
97
+ return getDeployment("baseRegistry");
98
+ }
99
+
100
+ function getMessenger() public view returns (address) {
101
+ // Base or Base (Sepolia)
102
+ if (block.chainid == 8453 || block.chainid == 84_532) {
103
+ return 0x4200000000000000000000000000000000000007;
104
+ } else if (block.chainid == 1) {
105
+ return MESSENGER;
106
+ } else if (block.chainid == 11_155_111) {
107
+ return MESSENGER_SEPOLIA;
108
+ } else {
109
+ revert("DeployProxyDelegation: Invalid network");
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,28 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.23;
3
+
4
+ //interfaces
5
+
6
+ //libraries
7
+
8
+ //contracts
9
+ import {SpaceProxyInitializer} from "src/spaces/facets/proxy/SpaceProxyInitializer.sol";
10
+ import {Deployer} from "scripts/common/Deployer.s.sol";
11
+
12
+ contract DeploySpaceProxyInitializer is Deployer {
13
+ function versionName() public pure override returns (string memory) {
14
+ return "utils/spaceProxyInitializer";
15
+ }
16
+
17
+ function __deploy(address deployer) internal override returns (address) {
18
+ bytes32 salt = bytes32(uint256(1));
19
+ bytes32 initCodeHash = hashInitCode(type(SpaceProxyInitializer).creationCode);
20
+ address soonToBe = vm.computeCreate2Address(salt, initCodeHash);
21
+
22
+ vm.broadcast(deployer);
23
+ SpaceProxyInitializer initializer = new SpaceProxyInitializer{salt: salt}();
24
+
25
+ require(address(initializer) == soonToBe, "address mismatch");
26
+ return address(initializer);
27
+ }
28
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.23;
3
+
4
+ //interfaces
5
+
6
+ //libraries
7
+
8
+ //contracts
9
+ import {TieredLogPricing} from "scripts/deployments/utils/pricing/TieredLogPricing.s.sol";
10
+ import {TieredLogPricingOracleV2} from "src/spaces/facets/membership/pricing/tiered/TieredLogPricingOracleV2.sol";
11
+
12
+ contract DeployTieredLogPricingV2 is TieredLogPricing {
13
+ function versionName() public pure override returns (string memory) {
14
+ return "utils/tieredLogPricingV2";
15
+ }
16
+
17
+ function __deploy(address deployer) internal override returns (address) {
18
+ address oracle = isAnvil() ? _setupLocalOracle(deployer) : _getOracleAddress();
19
+
20
+ vm.broadcast(deployer);
21
+ return address(new TieredLogPricingOracleV2(oracle));
22
+ }
23
+ }
@@ -0,0 +1,23 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.23;
3
+
4
+ //interfaces
5
+
6
+ //libraries
7
+
8
+ //contracts
9
+ import {TieredLogPricing} from "scripts/deployments/utils/pricing/TieredLogPricing.s.sol";
10
+ import {TieredLogPricingOracleV3} from "src/spaces/facets/membership/pricing/tiered/TieredLogPricingOracleV3.sol";
11
+
12
+ contract DeployTieredLogPricingV3 is TieredLogPricing {
13
+ function versionName() public pure override returns (string memory) {
14
+ return "utils/tieredLogPricingV3";
15
+ }
16
+
17
+ function __deploy(address deployer) internal override returns (address) {
18
+ address oracle = isAnvil() ? _setupLocalOracle(deployer) : _getOracleAddress();
19
+
20
+ vm.broadcast(deployer);
21
+ return address(new TieredLogPricingOracleV3(oracle));
22
+ }
23
+ }
@@ -0,0 +1,95 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.19;
3
+
4
+ //interfaces
5
+
6
+ //libraries
7
+ import {Create2Utils} from "../../../src/utils/libraries/Create2Utils.sol";
8
+
9
+ //contracts
10
+ import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
11
+ import {Deployer} from "scripts/common/Deployer.s.sol";
12
+ import {Towns} from "src/tokens/towns/base/Towns.sol";
13
+ import {TownsDeployer} from "src/tokens/towns/base/TownsDeployer.sol";
14
+ import {TownsDeployer} from "src/tokens/towns/base/TownsDeployer.sol";
15
+ import {MockTowns} from "test/mocks/MockTowns.sol";
16
+ import {MockTownsDeployer} from "test/mocks/MockTownsDeployer.sol";
17
+
18
+ contract DeployTownsBase is Deployer {
19
+ address public l1Token = 0x000000Fa00b200406de700041CFc6b19BbFB4d13;
20
+ bytes32 public implSalt;
21
+ bytes32 public proxySalt;
22
+
23
+ function versionName() public pure override returns (string memory) {
24
+ return "utils/towns";
25
+ }
26
+
27
+ function __deploy(address deployer) internal override returns (address) {
28
+ (implSalt, proxySalt) = _getSalts();
29
+
30
+ address vault = _getVault(deployer);
31
+ address proxy = _proxyAddress(_implAddress(implSalt), proxySalt, l1Token, vault);
32
+
33
+ vm.startBroadcast(deployer);
34
+ if (isAnvil()) {
35
+ new MockTownsDeployer(l1Token, vault, implSalt, proxySalt);
36
+ } else {
37
+ new TownsDeployer(l1Token, vault, implSalt, proxySalt);
38
+ }
39
+ vm.stopBroadcast();
40
+
41
+ return proxy;
42
+ }
43
+
44
+ function _implAddress(bytes32 salt) internal view returns (address impl) {
45
+ if (isAnvil()) {
46
+ impl = Create2Utils.computeCreate2Address(salt, type(MockTowns).creationCode);
47
+ } else {
48
+ impl = Create2Utils.computeCreate2Address(salt, type(Towns).creationCode);
49
+ }
50
+ }
51
+
52
+ function _proxyAddress(
53
+ address impl,
54
+ bytes32 salt,
55
+ address remoteToken,
56
+ address owner
57
+ ) internal pure returns (address proxy) {
58
+ bytes memory byteCode = abi.encodePacked(
59
+ type(ERC1967Proxy).creationCode,
60
+ abi.encode(
61
+ impl,
62
+ abi.encodePacked(Towns.initialize.selector, abi.encode(remoteToken, owner))
63
+ )
64
+ );
65
+
66
+ proxy = Create2Utils.computeCreate2Address(salt, byteCode);
67
+ }
68
+
69
+ function setSalts(bytes32 impl, bytes32 proxy) public {
70
+ implSalt = impl;
71
+ proxySalt = proxy;
72
+ }
73
+
74
+ function _getVault(address deployer) internal view returns (address) {
75
+ if (isAnvil()) {
76
+ return deployer;
77
+ } else {
78
+ return 0x63217D4c321CC02Ed306cB3843309184D347667B; // DAO
79
+ }
80
+ }
81
+
82
+ function _getSalts() internal view returns (bytes32 impl, bytes32 proxy) {
83
+ if (implSalt != bytes32(0) && proxySalt != bytes32(0)) {
84
+ return (implSalt, proxySalt);
85
+ }
86
+
87
+ if (isAnvil()) {
88
+ impl = 0x4e59b44847b379578588920ca78fbf26c0b4956c346fdfc0a289d4a53c0000c0;
89
+ proxy = 0x4e59b44847b379578588920ca78fbf26c0b4956c83c2f2967966f90700000000;
90
+ } else {
91
+ impl = 0x4e59b44847b379578588920ca78fbf26c0b4956c8ea716a80f934b1756000020;
92
+ proxy = 0x4e59b44847b379578588920ca78fbf26c0b4956c1594db1b919831030e120040;
93
+ }
94
+ }
95
+ }