@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,37 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.18;
3
+
4
+ // interfaces
5
+
6
+ // libraries
7
+
8
+ import {StakingRewards} from "./StakingRewards.sol";
9
+ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
10
+
11
+ // contracts
12
+
13
+ library RewardsDistributionStorage {
14
+ // keccak256(abi.encode(uint256(keccak256("facets.registry.rewards.distribution.v2.storage")) -
15
+ // 1)) & ~bytes32(uint256(0xff))
16
+ bytes32 internal constant STORAGE_SLOT =
17
+ 0x7b071c8e0da733b969167f083e1913dbb26456aeda63d64176fc92d3926ff300;
18
+
19
+ /// @notice The layout of the rewards distribution storage
20
+ /// @param staking The storage of the staking rewards logic
21
+ /// @param proxyById The mapping of deposit ID to proxy address
22
+ /// @param isRewardNotifier The mapping of reward notifier whitelist
23
+ /// @param depositsByDepositor The mapping of deposit IDs by depositor
24
+ struct Layout {
25
+ StakingRewards.Layout staking;
26
+ mapping(uint256 depositId => address proxy) proxyById;
27
+ mapping(address rewardNotifier => bool) isRewardNotifier;
28
+ mapping(address depositor => EnumerableSet.UintSet) depositsByDepositor;
29
+ uint256 periodRewardAmount;
30
+ }
31
+
32
+ function layout() internal pure returns (Layout storage s) {
33
+ assembly {
34
+ s.slot := STORAGE_SLOT
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,392 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.23;
3
+
4
+ // interfaces
5
+ import {IRewardsDistribution} from "./IRewardsDistribution.sol";
6
+
7
+ // libraries
8
+ import {CustomRevert} from "../../../../../utils/libraries/CustomRevert.sol";
9
+ import {RewardsDistributionStorage} from "./RewardsDistributionStorage.sol";
10
+ import {StakingRewards} from "./StakingRewards.sol";
11
+ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
12
+ import {SafeTransferLib} from "solady/utils/SafeTransferLib.sol";
13
+
14
+ // contracts
15
+ import {UpgradeableBeaconBase} from "../../../../../diamond/facets/beacon/UpgradeableBeacon.sol";
16
+ import {MainnetDelegationBase} from "../../mainnet/MainnetDelegationBase.sol";
17
+ import {DelegationProxy} from "./DelegationProxy.sol";
18
+ import {RewardsDistributionBase} from "./RewardsDistributionBase.sol";
19
+ import {Facet} from "@towns-protocol/diamond/src/facets/Facet.sol";
20
+ import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
21
+ import {Nonces} from "@towns-protocol/diamond/src/utils/Nonces.sol";
22
+ import {EIP712Base} from "@towns-protocol/diamond/src/utils/cryptography/EIP712Base.sol";
23
+
24
+ contract RewardsDistributionV2 is
25
+ IRewardsDistribution,
26
+ RewardsDistributionBase,
27
+ MainnetDelegationBase,
28
+ OwnableBase,
29
+ UpgradeableBeaconBase,
30
+ EIP712Base,
31
+ Nonces,
32
+ Facet
33
+ {
34
+ using CustomRevert for bytes4;
35
+ using EnumerableSet for EnumerableSet.UintSet;
36
+ using SafeTransferLib for address;
37
+ using StakingRewards for StakingRewards.Layout;
38
+
39
+ bytes32 internal constant STAKE_TYPEHASH =
40
+ keccak256(
41
+ "Stake(uint96 amount,address delegatee,address beneficiary,address owner,uint256 nonce,uint256 deadline)"
42
+ );
43
+
44
+ /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
45
+ /* ADMIN FUNCTIONS */
46
+ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
47
+
48
+ function __RewardsDistribution_init(
49
+ address stakeToken,
50
+ address rewardToken,
51
+ uint256 rewardDuration
52
+ ) external onlyInitializing {
53
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
54
+ StakingRewards.Layout storage staking = ds.staking;
55
+ (staking.stakeToken, staking.rewardToken, staking.rewardDuration) = (
56
+ stakeToken,
57
+ rewardToken,
58
+ rewardDuration
59
+ );
60
+ __UpgradeableBeacon_init_unchained(address(new DelegationProxy()));
61
+
62
+ uint256 nextDepositId = staking.nextDepositId;
63
+ for (uint256 i; i < nextDepositId; ++i) {
64
+ address proxy = ds.proxyById[i];
65
+ if (proxy != address(0)) DelegationProxy(proxy).reinitialize(stakeToken);
66
+ }
67
+
68
+ emit RewardsDistributionInitialized(stakeToken, rewardToken, rewardDuration);
69
+ }
70
+
71
+ /// @inheritdoc IRewardsDistribution
72
+ function upgradeDelegationProxy(address newImplementation) external onlyOwner {
73
+ _setImplementation(newImplementation);
74
+ }
75
+
76
+ /// @inheritdoc IRewardsDistribution
77
+ function setRewardNotifier(address notifier, bool enabled) external onlyOwner {
78
+ RewardsDistributionStorage.layout().isRewardNotifier[notifier] = enabled;
79
+
80
+ emit RewardNotifierSet(notifier, enabled);
81
+ }
82
+
83
+ /// @inheritdoc IRewardsDistribution
84
+ function setPeriodRewardAmount(uint256 amount) external onlyOwner {
85
+ RewardsDistributionStorage.layout().periodRewardAmount = amount;
86
+
87
+ emit PeriodRewardAmountSet(amount);
88
+ }
89
+
90
+ /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
91
+ /* STATE MUTATING */
92
+ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
93
+
94
+ /// @inheritdoc IRewardsDistribution
95
+ function stake(
96
+ uint96 amount,
97
+ address delegatee,
98
+ address beneficiary
99
+ ) external returns (uint256 depositId) {
100
+ depositId = _stake(amount, delegatee, beneficiary, msg.sender, false);
101
+ }
102
+
103
+ /// @inheritdoc IRewardsDistribution
104
+ function permitAndStake(
105
+ uint96 amount,
106
+ address delegatee,
107
+ address beneficiary,
108
+ uint256 nonce,
109
+ uint256 deadline,
110
+ bytes calldata signature
111
+ ) external returns (uint256 depositId) {
112
+ _permitStakeToken(amount, nonce, deadline, signature);
113
+ depositId = _stake(amount, delegatee, beneficiary, msg.sender, true);
114
+ }
115
+
116
+ /// @inheritdoc IRewardsDistribution
117
+ function stakeOnBehalf(
118
+ uint96 amount,
119
+ address delegatee,
120
+ address beneficiary,
121
+ address owner,
122
+ uint256,
123
+ bytes calldata
124
+ ) external returns (uint256 depositId) {
125
+ depositId = _stake(amount, delegatee, beneficiary, owner, false);
126
+ }
127
+
128
+ /// @inheritdoc IRewardsDistribution
129
+ function increaseStake(uint256 depositId, uint96 amount) external {
130
+ _increaseStake(depositId, amount, false);
131
+ }
132
+
133
+ /// @inheritdoc IRewardsDistribution
134
+ function permitAndIncreaseStake(
135
+ uint256 depositId,
136
+ uint96 amount,
137
+ uint256 nonce,
138
+ uint256 deadline,
139
+ bytes calldata signature
140
+ ) external {
141
+ _permitStakeToken(amount, nonce, deadline, signature);
142
+ _increaseStake(depositId, amount, true);
143
+ }
144
+
145
+ /// @inheritdoc IRewardsDistribution
146
+ function redelegate(uint256 depositId, address delegatee) external {
147
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
148
+ StakingRewards.Deposit storage deposit = ds.staking.depositById[depositId];
149
+ address owner = deposit.owner;
150
+
151
+ _revertIfNotDepositOwner(owner);
152
+ _revertIfNotOperatorOrSpace(delegatee);
153
+
154
+ uint96 pendingWithdrawal = deposit.pendingWithdrawal;
155
+ uint256 commissionRate = _getCommissionRate(delegatee);
156
+
157
+ if (pendingWithdrawal == 0) {
158
+ ds.staking.redelegate(deposit, delegatee, commissionRate);
159
+ } else {
160
+ ds.staking.increaseStake(
161
+ deposit,
162
+ owner,
163
+ pendingWithdrawal,
164
+ delegatee,
165
+ deposit.beneficiary,
166
+ commissionRate
167
+ );
168
+ deposit.delegatee = delegatee;
169
+ deposit.pendingWithdrawal = 0;
170
+ }
171
+
172
+ _sweepSpaceRewardsIfNecessary(delegatee);
173
+
174
+ if (owner != address(this)) {
175
+ address proxy = ds.proxyById[depositId];
176
+ DelegationProxy(proxy).redelegate(delegatee);
177
+ }
178
+
179
+ emit Redelegate(depositId, delegatee);
180
+ }
181
+
182
+ /// @inheritdoc IRewardsDistribution
183
+ function changeBeneficiary(uint256 depositId, address newBeneficiary) external {
184
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
185
+ StakingRewards.Deposit storage deposit = ds.staking.depositById[depositId];
186
+ _revertIfNotDepositOwner(deposit.owner);
187
+
188
+ address delegatee = deposit.delegatee;
189
+ _revertIfNotOperatorOrSpace(delegatee);
190
+
191
+ ds.staking.changeBeneficiary(deposit, newBeneficiary, _getCommissionRate(delegatee));
192
+
193
+ _sweepSpaceRewardsIfNecessary(delegatee);
194
+
195
+ emit ChangeBeneficiary(depositId, newBeneficiary);
196
+ }
197
+
198
+ /// @inheritdoc IRewardsDistribution
199
+ function initiateWithdraw(uint256 depositId) external returns (uint96 amount) {
200
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
201
+ StakingRewards.Deposit storage deposit = ds.staking.depositById[depositId];
202
+ address owner = deposit.owner;
203
+ _revertIfNotDepositOwner(owner);
204
+
205
+ // cache the delegatee before it's set to address(0)
206
+ address delegatee = deposit.delegatee;
207
+
208
+ amount = ds.staking.withdraw(deposit);
209
+
210
+ if (owner != address(this)) {
211
+ address proxy = ds.proxyById[depositId];
212
+ DelegationProxy(proxy).redelegate(address(0));
213
+ } else {
214
+ deposit.pendingWithdrawal = 0;
215
+ }
216
+
217
+ _sweepSpaceRewardsIfNecessary(delegatee);
218
+
219
+ emit InitiateWithdraw(owner, depositId, amount);
220
+ }
221
+
222
+ /// @inheritdoc IRewardsDistribution
223
+ function withdraw(uint256 depositId) external returns (uint96 amount) {
224
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
225
+ StakingRewards.Deposit storage deposit = ds.staking.depositById[depositId];
226
+ address owner = deposit.owner;
227
+ _revertIfNotDepositOwner(owner);
228
+
229
+ if (owner == address(this)) {
230
+ RewardsDistribution__CannotWithdrawFromSelf.selector.revertWith();
231
+ }
232
+
233
+ amount = deposit.pendingWithdrawal;
234
+ if (amount == 0) RewardsDistribution__NoPendingWithdrawal.selector.revertWith();
235
+ else {
236
+ deposit.pendingWithdrawal = 0;
237
+ address proxy = ds.proxyById[depositId];
238
+ ds.staking.stakeToken.safeTransferFrom(proxy, owner, amount);
239
+ }
240
+
241
+ emit Withdraw(depositId, amount);
242
+ }
243
+
244
+ /// @inheritdoc IRewardsDistribution
245
+ function claimReward(address beneficiary, address recipient) external returns (uint256 reward) {
246
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
247
+ // If the beneficiary is the caller (user or operator), they can claim the reward
248
+ if (msg.sender == beneficiary) {}
249
+ // If the caller is the authorized claimer, they can claim the reward
250
+ else if (msg.sender == _getAuthorizedClaimer(beneficiary)) {}
251
+ // If the beneficiary is a space, only the operator can claim the reward
252
+ else if (_isSpace(beneficiary)) {
253
+ // the operator may not be active but is still allowed to claim the reward
254
+ address operator = _getOperatorBySpace(beneficiary);
255
+ _revertIfNotOperatorClaimer(operator);
256
+ }
257
+ // If the beneficiary is an operator, only the claimer can claim the reward
258
+ else if (_isOperator(beneficiary)) _revertIfNotOperatorClaimer(beneficiary);
259
+ else RewardsDistribution__NotBeneficiary.selector.revertWith();
260
+
261
+ reward = ds.staking.claimReward(beneficiary);
262
+ if (reward != 0) {
263
+ ds.staking.rewardToken.safeTransfer(recipient, reward);
264
+ }
265
+
266
+ emit ClaimReward(beneficiary, recipient, reward);
267
+ }
268
+
269
+ /// @inheritdoc IRewardsDistribution
270
+ function notifyRewardAmount(uint256 reward) external {
271
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
272
+ if (!ds.isRewardNotifier[msg.sender]) {
273
+ RewardsDistribution__NotRewardNotifier.selector.revertWith();
274
+ }
275
+
276
+ ds.staking.notifyRewardAmount(reward);
277
+
278
+ emit NotifyRewardAmount(msg.sender, reward);
279
+ }
280
+
281
+ /*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
282
+ /* GETTERS */
283
+ /*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
284
+
285
+ /// @inheritdoc IRewardsDistribution
286
+ function stakingState() external view returns (StakingState memory state) {
287
+ StakingRewards.Layout storage staking = RewardsDistributionStorage.layout().staking;
288
+ assembly ("memory-safe") {
289
+ // By default, memory has been implicitly allocated for `state`.
290
+ // But we don't need this implicitly allocated memory.
291
+ // So we just set the free memory pointer to what it was before `state` has been
292
+ // allocated.
293
+ mstore(0x40, state)
294
+ }
295
+ state = StakingState(
296
+ staking.stakeToken,
297
+ staking.totalStaked,
298
+ staking.rewardDuration,
299
+ staking.rewardEndTime,
300
+ staking.lastUpdateTime,
301
+ staking.rewardRate,
302
+ staking.rewardPerTokenAccumulated,
303
+ staking.nextDepositId
304
+ );
305
+ }
306
+
307
+ /// @inheritdoc IRewardsDistribution
308
+ function stakedByDepositor(address depositor) external view returns (uint96 amount) {
309
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
310
+ amount = ds.staking.stakedByDepositor[depositor];
311
+ }
312
+
313
+ /// @inheritdoc IRewardsDistribution
314
+ function getDepositsByDepositor(address depositor) external view returns (uint256[] memory) {
315
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
316
+ return ds.depositsByDepositor[depositor].values();
317
+ }
318
+
319
+ /// @inheritdoc IRewardsDistribution
320
+ function treasureByBeneficiary(
321
+ address beneficiary
322
+ ) external view returns (StakingRewards.Treasure memory treasure) {
323
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
324
+ assembly ("memory-safe") {
325
+ mstore(0x40, treasure)
326
+ }
327
+ treasure = ds.staking.treasureByBeneficiary[beneficiary];
328
+ }
329
+
330
+ /// @inheritdoc IRewardsDistribution
331
+ function depositById(
332
+ uint256 depositId
333
+ ) external view returns (StakingRewards.Deposit memory deposit) {
334
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
335
+ assembly ("memory-safe") {
336
+ mstore(0x40, deposit)
337
+ }
338
+ deposit = ds.staking.depositById[depositId];
339
+ }
340
+
341
+ /// @inheritdoc IRewardsDistribution
342
+ function delegationProxyById(uint256 depositId) external view returns (address) {
343
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
344
+ return ds.proxyById[depositId];
345
+ }
346
+
347
+ /// @inheritdoc IRewardsDistribution
348
+ function isRewardNotifier(address notifier) external view returns (bool) {
349
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
350
+ return ds.isRewardNotifier[notifier];
351
+ }
352
+
353
+ /// @inheritdoc IRewardsDistribution
354
+ function lastTimeRewardDistributed() external view returns (uint256) {
355
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
356
+ return ds.staking.lastTimeRewardDistributed();
357
+ }
358
+
359
+ /// @inheritdoc IRewardsDistribution
360
+ function currentRewardPerTokenAccumulated() external view returns (uint256) {
361
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
362
+ return ds.staking.currentRewardPerTokenAccumulated();
363
+ }
364
+
365
+ /// @inheritdoc IRewardsDistribution
366
+ function currentReward(address beneficiary) external view returns (uint256) {
367
+ RewardsDistributionStorage.Layout storage ds = RewardsDistributionStorage.layout();
368
+ return
369
+ ds.staking.currentRewardScaled(ds.staking.treasureByBeneficiary[beneficiary]) /
370
+ StakingRewards.SCALE_FACTOR;
371
+ }
372
+
373
+ /// @inheritdoc IRewardsDistribution
374
+ function currentSpaceDelegationReward(address operator) external view returns (uint256) {
375
+ return _currentSpaceDelegationReward(operator);
376
+ }
377
+
378
+ /// @inheritdoc IRewardsDistribution
379
+ /// @dev Returns the implementation stored in the beacon
380
+ /// See: https://eips.ethereum.org/EIPS/eip-1967#beacon-contract-address
381
+ function implementation() external view returns (address result) {
382
+ /// @solidity memory-safe-assembly
383
+ assembly {
384
+ result := sload(_UPGRADEABLE_BEACON_IMPLEMENTATION_SLOT)
385
+ }
386
+ }
387
+
388
+ /// @inheritdoc IRewardsDistribution
389
+ function getPeriodRewardAmount() external view returns (uint256) {
390
+ return RewardsDistributionStorage.layout().periodRewardAmount;
391
+ }
392
+ }