@towns-protocol/contracts 0.0.302
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +21 -0
- package/README.md +206 -0
- package/docs/permitAndStake_integration_guide.md +266 -0
- package/docs/swap_integration_guide.md +591 -0
- package/package.json +57 -0
- package/scripts/common/DeployBase.s.sol +26 -0
- package/scripts/common/DeployFacet.s.sol +7 -0
- package/scripts/common/Deployer.s.sol +33 -0
- package/scripts/common/Interaction.s.sol +51 -0
- package/scripts/deployments/diamonds/DeployAppRegistry.s.sol +168 -0
- package/scripts/deployments/diamonds/DeployBaseRegistry.s.sol +263 -0
- package/scripts/deployments/diamonds/DeployRiverAirdrop.s.sol +203 -0
- package/scripts/deployments/diamonds/DeployRiverMigration.s.sol +129 -0
- package/scripts/deployments/diamonds/DeployRiverRegistry.s.sol +175 -0
- package/scripts/deployments/diamonds/DeploySpace.s.sol +285 -0
- package/scripts/deployments/diamonds/DeploySpaceFactory.s.sol +416 -0
- package/scripts/deployments/diamonds/DeploySpaceOwner.s.sol +183 -0
- package/scripts/deployments/diamonds/DeploySwapRouter.s.sol +176 -0
- package/scripts/deployments/diamonds/IDiamondInitHelper.sol +11 -0
- package/scripts/deployments/facets/DeployAppAccount.s.sol +51 -0
- package/scripts/deployments/facets/DeployAppRegistryFacet.s.sol +69 -0
- package/scripts/deployments/facets/DeployArchitect.s.sol +51 -0
- package/scripts/deployments/facets/DeployAttestationRegistry.s.sol +36 -0
- package/scripts/deployments/facets/DeployBanning.s.sol +30 -0
- package/scripts/deployments/facets/DeployChannels.s.sol +35 -0
- package/scripts/deployments/facets/DeployCreateSpace.s.sol +42 -0
- package/scripts/deployments/facets/DeployDropFacet.s.sol +49 -0
- package/scripts/deployments/facets/DeployERC721A.s.sol +48 -0
- package/scripts/deployments/facets/DeployERC721ANonTransferable.s.sol +49 -0
- package/scripts/deployments/facets/DeployERC721AQueryable.s.sol +30 -0
- package/scripts/deployments/facets/DeployEntitlementChecker.s.sol +49 -0
- package/scripts/deployments/facets/DeployEntitlementDataQueryable.s.sol +29 -0
- package/scripts/deployments/facets/DeployEntitlementsManager.s.sol +33 -0
- package/scripts/deployments/facets/DeployExecutorFacet.s.sol +60 -0
- package/scripts/deployments/facets/DeployFeatureManager.s.sol +38 -0
- package/scripts/deployments/facets/DeployGuardianFacet.s.sol +39 -0
- package/scripts/deployments/facets/DeployImplementationRegistry.s.sol +36 -0
- package/scripts/deployments/facets/DeployMainnetDelegation.s.sol +43 -0
- package/scripts/deployments/facets/DeployMembership.s.sol +77 -0
- package/scripts/deployments/facets/DeployMembershipMetadata.s.sol +30 -0
- package/scripts/deployments/facets/DeployMembershipToken.s.sol +47 -0
- package/scripts/deployments/facets/DeployMerkleAirdrop.s.sol +37 -0
- package/scripts/deployments/facets/DeployMetadata.s.sol +39 -0
- package/scripts/deployments/facets/DeployMockLegacyArchitect.s.sol +33 -0
- package/scripts/deployments/facets/DeployNodeOperator.s.sol +49 -0
- package/scripts/deployments/facets/DeployNodeRegistry.s.sol +37 -0
- package/scripts/deployments/facets/DeployOperatorRegistry.s.sol +36 -0
- package/scripts/deployments/facets/DeployPartnerRegistry.s.sol +41 -0
- package/scripts/deployments/facets/DeployPlatformRequirements.s.sol +75 -0
- package/scripts/deployments/facets/DeployPrepayFacet.s.sol +31 -0
- package/scripts/deployments/facets/DeployPricingModules.s.sol +36 -0
- package/scripts/deployments/facets/DeployReferrals.s.sol +34 -0
- package/scripts/deployments/facets/DeployReviewFacet.s.sol +31 -0
- package/scripts/deployments/facets/DeployRewardsDistributionV2.s.sol +76 -0
- package/scripts/deployments/facets/DeployRiverConfig.s.sol +41 -0
- package/scripts/deployments/facets/DeployRoles.s.sol +48 -0
- package/scripts/deployments/facets/DeploySchemaRegistry.s.sol +35 -0
- package/scripts/deployments/facets/DeploySignerFacet.s.sol +47 -0
- package/scripts/deployments/facets/DeploySimpleApp.s.sol +10 -0
- package/scripts/deployments/facets/DeploySpaceDelegation.s.sol +43 -0
- package/scripts/deployments/facets/DeploySpaceEntitlementGated.s.sol +31 -0
- package/scripts/deployments/facets/DeploySpaceFactoryInit.s.sol +33 -0
- package/scripts/deployments/facets/DeploySpaceOwnerFacet.s.sol +71 -0
- package/scripts/deployments/facets/DeployStreamRegistry.s.sol +50 -0
- package/scripts/deployments/facets/DeploySwapFacet.s.sol +33 -0
- package/scripts/deployments/facets/DeploySwapRouterFacet.s.sol +38 -0
- package/scripts/deployments/facets/DeployTipping.s.sol +31 -0
- package/scripts/deployments/facets/DeployTokenMigration.s.sol +40 -0
- package/scripts/deployments/facets/DeployTownsPoints.s.sol +53 -0
- package/scripts/deployments/facets/DeployTreasury.s.sol +30 -0
- package/scripts/deployments/facets/DeployUpgradeableBeacon.s.sol +34 -0
- package/scripts/deployments/facets/DeployWalletLink.s.sol +56 -0
- package/scripts/deployments/facets/DeployXChain.s.sol +35 -0
- package/scripts/deployments/utils/DeployAccountFactory.s.sol +40 -0
- package/scripts/deployments/utils/DeployEntitlementGatedExample.s.sol +23 -0
- package/scripts/deployments/utils/DeployEntrypoint.s.sol +28 -0
- package/scripts/deployments/utils/DeployMember.s.sol +95 -0
- package/scripts/deployments/utils/DeployMockDiamond.s.sol +7 -0
- package/scripts/deployments/utils/DeployMockERC20.s.sol +24 -0
- package/scripts/deployments/utils/DeployMockERC721A.s.sol +45 -0
- package/scripts/deployments/utils/DeployMockLegacyMembership.s.sol +29 -0
- package/scripts/deployments/utils/DeployMockMessenger.s.sol +42 -0
- package/scripts/deployments/utils/DeployMockNFT.s.sol +86 -0
- package/scripts/deployments/utils/DeployPoapEntitlement.s.sol +16 -0
- package/scripts/deployments/utils/DeployProxyBatchDelegation.s.sol +112 -0
- package/scripts/deployments/utils/DeploySpaceProxyInitializer.s.sol +28 -0
- package/scripts/deployments/utils/DeployTieredLogPricingV2.s.sol +23 -0
- package/scripts/deployments/utils/DeployTieredLogPricingV3.s.sol +23 -0
- package/scripts/deployments/utils/DeployTownsBase.s.sol +95 -0
- package/scripts/deployments/utils/DeployTownsMainnet.s.sol +66 -0
- package/scripts/deployments/utils/DeployTownsMulti.s.sol +53 -0
- package/scripts/deployments/utils/DeployWrappedTowns.s.sol +52 -0
- package/scripts/deployments/utils/LibLayerZeroValues.sol +34 -0
- package/scripts/deployments/utils/pricing/TieredLogPricing.s.sol +45 -0
- package/scripts/interactions/InteractAirdrop.s.sol +57 -0
- package/scripts/interactions/InteractAlphaPost.s.sol +32 -0
- package/scripts/interactions/InteractAlphaSparse.s.sol +173 -0
- package/scripts/interactions/InteractBaseAlpha.s.sol +84 -0
- package/scripts/interactions/InteractBaseBridge.s.sol +48 -0
- package/scripts/interactions/InteractBridgeLayerZero.s.sol +102 -0
- package/scripts/interactions/InteractClaimCondition.s.sol +56 -0
- package/scripts/interactions/InteractCreateSpace.s.sol +50 -0
- package/scripts/interactions/InteractDiamondCut.s.sol +47 -0
- package/scripts/interactions/InteractDropFacet.s.sol +32 -0
- package/scripts/interactions/InteractEnableNewSnapshotFormat.s.sol +27 -0
- package/scripts/interactions/InteractEnableNode2NodeAuth.s.sol +27 -0
- package/scripts/interactions/InteractMembership.s.sol +42 -0
- package/scripts/interactions/InteractMockERC721A.s.sol +20 -0
- package/scripts/interactions/InteractNodeOperators.s.sol +41 -0
- package/scripts/interactions/InteractPostDeploy.s.sol +59 -0
- package/scripts/interactions/InteractPrepay.s.sol +30 -0
- package/scripts/interactions/InteractRegisterApp.s.sol +61 -0
- package/scripts/interactions/InteractRiverAlpha.s.sol +30 -0
- package/scripts/interactions/InteractRiverAlphaSparse.s.sol +117 -0
- package/scripts/interactions/InteractRiverMainnet.s.sol +27 -0
- package/scripts/interactions/InteractRiverRegistry.s.sol +36 -0
- package/scripts/interactions/InteractRiverRegistrySetBlocklist.s.sol +30 -0
- package/scripts/interactions/InteractRiverRegistrySetFreq.s.sol +27 -0
- package/scripts/interactions/InteractRiverRegistrySetRepl.s.sol +30 -0
- package/scripts/interactions/InteractSetDefaultUri.s.sol +20 -0
- package/scripts/interactions/InteractSetDefaultUriLocalhost.s.sol +19 -0
- package/scripts/interactions/InteractTransferOwnership.s.sol +21 -0
- package/scripts/interactions/InteractUpdateMbRecencyCheck.s.sol +27 -0
- package/scripts/interactions/InteractUpdateMediaChunkCount.s.sol +27 -0
- package/scripts/interactions/InteractUpdateMediaChunkSize.s.sol +27 -0
- package/scripts/interactions/helpers/AlphaHelper.sol +149 -0
- package/scripts/interactions/helpers/RiverConfigValues.sol +22 -0
- package/scripts/interactions/interfaces/IL1StandardBridge.sol +35 -0
- package/scripts/interactions/interfaces/IL2StandardBridge.sol +69 -0
- package/src/airdrop/drop/DropBase.sol +210 -0
- package/src/airdrop/drop/DropClaim.sol +55 -0
- package/src/airdrop/drop/DropFacet.sol +176 -0
- package/src/airdrop/drop/DropGroup.sol +111 -0
- package/src/airdrop/drop/DropStorage.sol +23 -0
- package/src/airdrop/drop/IDropFacet.sol +136 -0
- package/src/airdrop/points/CheckIn.sol +71 -0
- package/src/airdrop/points/ITownsPoints.sol +64 -0
- package/src/airdrop/points/TownsPoints.sol +196 -0
- package/src/airdrop/points/TownsPointsStorage.sol +22 -0
- package/src/apps/BaseApp.sol +62 -0
- package/src/apps/ITownsApp.sol +28 -0
- package/src/apps/SchemaResolver.sol +170 -0
- package/src/apps/facets/attest/AttestationBase.sol +335 -0
- package/src/apps/facets/attest/AttestationLib.sol +64 -0
- package/src/apps/facets/attest/AttestationRegistry.sol +39 -0
- package/src/apps/facets/attest/AttestationStorage.sol +35 -0
- package/src/apps/facets/attest/IAttestationRegistry.sol +43 -0
- package/src/apps/facets/registry/AppRegistryBase.sol +403 -0
- package/src/apps/facets/registry/AppRegistryFacet.sol +173 -0
- package/src/apps/facets/registry/AppRegistryStorage.sol +53 -0
- package/src/apps/facets/registry/IAppRegistry.sol +159 -0
- package/src/apps/facets/schema/ISchema.sol +14 -0
- package/src/apps/facets/schema/SchemaBase.sol +88 -0
- package/src/apps/facets/schema/SchemaLib.sol +14 -0
- package/src/apps/facets/schema/SchemaRegistry.sol +51 -0
- package/src/apps/facets/schema/SchemaStorage.sol +34 -0
- package/src/apps/helpers/ISimpleApp.sol +51 -0
- package/src/apps/helpers/SimpleApp.sol +97 -0
- package/src/apps/helpers/SimpleAppStorage.sol +27 -0
- package/src/base/registry/facets/checker/EntitlementChecker.sol +237 -0
- package/src/base/registry/facets/checker/EntitlementCheckerStorage.sol +28 -0
- package/src/base/registry/facets/checker/IEntitlementChecker.sol +95 -0
- package/src/base/registry/facets/delegation/ISpaceDelegation.sol +69 -0
- package/src/base/registry/facets/delegation/SpaceDelegationFacet.sol +250 -0
- package/src/base/registry/facets/delegation/SpaceDelegationStorage.sol +35 -0
- package/src/base/registry/facets/distribution/v1/IRewardsDistribution.sol +51 -0
- package/src/base/registry/facets/distribution/v1/RewardsDistribution.sol +439 -0
- package/src/base/registry/facets/distribution/v1/RewardsDistributionStorage.sol +32 -0
- package/src/base/registry/facets/distribution/v2/DelegationProxy.sol +53 -0
- package/src/base/registry/facets/distribution/v2/IRewardsDistribution.sol +372 -0
- package/src/base/registry/facets/distribution/v2/RewardsDistributionBase.sol +299 -0
- package/src/base/registry/facets/distribution/v2/RewardsDistributionStorage.sol +37 -0
- package/src/base/registry/facets/distribution/v2/RewardsDistributionV2.sol +392 -0
- package/src/base/registry/facets/distribution/v2/StakingRewards.sol +466 -0
- package/src/base/registry/facets/mainnet/ICrossDomainMessenger.sol +58 -0
- package/src/base/registry/facets/mainnet/IMainnetDelegation.sol +127 -0
- package/src/base/registry/facets/mainnet/MainnetDelegation.sol +119 -0
- package/src/base/registry/facets/mainnet/MainnetDelegationBase.sol +274 -0
- package/src/base/registry/facets/mainnet/MainnetDelegationStorage.sol +36 -0
- package/src/base/registry/facets/operator/INodeOperator.sol +91 -0
- package/src/base/registry/facets/operator/NodeOperatorFacet.sol +189 -0
- package/src/base/registry/facets/operator/NodeOperatorStorage.sol +39 -0
- package/src/base/registry/facets/xchain/IXChain.sol +54 -0
- package/src/base/registry/facets/xchain/XChain.sol +158 -0
- package/src/base/registry/facets/xchain/XChainCheckLib.sol +105 -0
- package/src/base/registry/facets/xchain/XChainLib.sol +46 -0
- package/src/diamond/facets/beacon/UpgradeableBeacon.sol +38 -0
- package/src/diamond/facets/beacon/UpgradeableBeaconFacet.sol +34 -0
- package/src/diamond/facets/governance/votes/Checkpoints.sol +642 -0
- package/src/diamond/facets/governance/votes/Votes.sol +63 -0
- package/src/diamond/facets/governance/votes/VotesBase.sol +274 -0
- package/src/diamond/facets/governance/votes/VotesStorage.sol +21 -0
- package/src/diamond/facets/governance/votes/enumerable/IVotesEnumerable.sol +38 -0
- package/src/diamond/facets/governance/votes/enumerable/VotesEnumerable.sol +39 -0
- package/src/diamond/facets/governance/votes/enumerable/VotesEnumerableLib.sol +102 -0
- package/src/diamond/facets/metadata/IMetadata.sol +27 -0
- package/src/diamond/facets/metadata/MetadataFacet.sol +71 -0
- package/src/diamond/facets/token/ERC5643/ERC5643.sol +51 -0
- package/src/diamond/facets/token/ERC5643/ERC5643Base.sol +48 -0
- package/src/diamond/facets/token/ERC5643/ERC5643Storage.sol +26 -0
- package/src/diamond/facets/token/ERC5643/IERC5643.sol +44 -0
- package/src/diamond/facets/token/ERC721A/ERC721A.sol +270 -0
- package/src/diamond/facets/token/ERC721A/ERC721ABase.sol +829 -0
- package/src/diamond/facets/token/ERC721A/ERC721ANonTransferable.sol +21 -0
- package/src/diamond/facets/token/ERC721A/ERC721AStorage.sol +115 -0
- package/src/diamond/facets/token/ERC721A/IERC721A.sol +283 -0
- package/src/diamond/facets/token/ERC721A/extensions/ERC721AQueryable.sol +134 -0
- package/src/diamond/facets/token/ERC721A/extensions/IERC721AQueryable.sol +83 -0
- package/src/diamond/utils/Context.sol +19 -0
- package/src/factory/SpaceFactoryInit.sol +17 -0
- package/src/factory/facets/architect/Architect.sol +98 -0
- package/src/factory/facets/architect/ArchitectBase.sol +95 -0
- package/src/factory/facets/architect/ArchitectStorage.sol +28 -0
- package/src/factory/facets/architect/IArchitect.sol +155 -0
- package/src/factory/facets/architect/ImplementationStorage.sol +42 -0
- package/src/factory/facets/architect/pricing/IPricingModules.sol +41 -0
- package/src/factory/facets/architect/pricing/PricingModulesBase.sol +89 -0
- package/src/factory/facets/architect/pricing/PricingModulesFacet.sol +40 -0
- package/src/factory/facets/architect/pricing/PricingModulesStorage.sol +30 -0
- package/src/factory/facets/create/CreateSpace.sol +107 -0
- package/src/factory/facets/create/CreateSpaceLib.sol +335 -0
- package/src/factory/facets/create/ICreateSpace.sol +70 -0
- package/src/factory/facets/feature/FeatureConditionLib.sol +53 -0
- package/src/factory/facets/feature/FeatureManagerFacet.sol +66 -0
- package/src/factory/facets/feature/FeatureManagerLib.sol +168 -0
- package/src/factory/facets/feature/IFeatureManagerFacet.sol +73 -0
- package/src/factory/facets/partner/IPartnerRegistry.sol +56 -0
- package/src/factory/facets/partner/PartnerRegistry.sol +57 -0
- package/src/factory/facets/partner/PartnerRegistryBase.sol +132 -0
- package/src/factory/facets/partner/PartnerRegistryStorage.sol +40 -0
- package/src/factory/facets/platform/requirements/IPlatformRequirements.sol +143 -0
- package/src/factory/facets/platform/requirements/PlatformRequirementsBase.sol +124 -0
- package/src/factory/facets/platform/requirements/PlatformRequirementsFacet.sol +122 -0
- package/src/factory/facets/platform/requirements/PlatformRequirementsStorage.sol +41 -0
- package/src/factory/facets/registry/IImplementationRegistry.sol +46 -0
- package/src/factory/facets/registry/ImplementationRegistry.sol +64 -0
- package/src/factory/facets/registry/ImplementationRegistryStorage.sol +28 -0
- package/src/factory/facets/wallet-link/IWalletLink.sol +218 -0
- package/src/factory/facets/wallet-link/WalletLink.sol +108 -0
- package/src/factory/facets/wallet-link/WalletLinkBase.sol +492 -0
- package/src/factory/facets/wallet-link/interfaces/IDelegateRegistry.sol +63 -0
- package/src/factory/facets/wallet-link/interfaces/IDelegateRegistryV1.sol +35 -0
- package/src/factory/facets/wallet-link/interfaces/ISCL_EIP6565.sol +24 -0
- package/src/factory/facets/wallet-link/libraries/SolanaUtils.sol +161 -0
- package/src/factory/facets/wallet-link/libraries/WalletLib.sol +62 -0
- package/src/river/registry/facets/config/IRiverConfig.sol +117 -0
- package/src/river/registry/facets/config/RiverConfig.sol +174 -0
- package/src/river/registry/facets/node/INodeRegistry.sol +69 -0
- package/src/river/registry/facets/node/NodeRegistry.sol +143 -0
- package/src/river/registry/facets/operator/IOperatorRegistry.sol +28 -0
- package/src/river/registry/facets/operator/OperatorRegistry.sol +86 -0
- package/src/river/registry/facets/stream/IStreamRegistry.sol +184 -0
- package/src/river/registry/facets/stream/StreamRegistry.sol +396 -0
- package/src/river/registry/libraries/RegistryErrors.sol +24 -0
- package/src/river/registry/libraries/RegistryStorage.sol +181 -0
- package/src/router/ISwapRouter.sol +226 -0
- package/src/router/Permit2Hash.sol +92 -0
- package/src/router/SwapRouter.sol +463 -0
- package/src/router/SwapRouterStorage.sol +21 -0
- package/src/spaces/entitlements/ICrossChainEntitlement.sol +22 -0
- package/src/spaces/entitlements/IEntitlement.sol +61 -0
- package/src/spaces/entitlements/PolymarketEntitlement.sol +79 -0
- package/src/spaces/entitlements/poap/IPOAP.sol +26 -0
- package/src/spaces/entitlements/poap/PoapEntitlement.sol +56 -0
- package/src/spaces/entitlements/rule/IRuleEntitlement.sol +174 -0
- package/src/spaces/entitlements/rule/RuleEntitlement.sol +183 -0
- package/src/spaces/entitlements/rule/RuleEntitlementV2.sol +219 -0
- package/src/spaces/entitlements/user/IUserEntitlement.sol +24 -0
- package/src/spaces/entitlements/user/UserEntitlement.sol +273 -0
- package/src/spaces/facets/DependencyLib.sol +60 -0
- package/src/spaces/facets/Entitled.sol +172 -0
- package/src/spaces/facets/Permissions.sol +21 -0
- package/src/spaces/facets/account/AppAccount.sol +93 -0
- package/src/spaces/facets/account/AppAccountBase.sol +275 -0
- package/src/spaces/facets/account/AppAccountStorage.sol +63 -0
- package/src/spaces/facets/account/IAppAccount.sol +71 -0
- package/src/spaces/facets/account/SignerFacet.sol +26 -0
- package/src/spaces/facets/banning/Banning.sol +41 -0
- package/src/spaces/facets/banning/BanningBase.sol +33 -0
- package/src/spaces/facets/banning/BanningStorage.sol +23 -0
- package/src/spaces/facets/banning/IBanning.sol +35 -0
- package/src/spaces/facets/channels/ChannelBase.sol +87 -0
- package/src/spaces/facets/channels/ChannelService.sol +177 -0
- package/src/spaces/facets/channels/ChannelStorage.sol +34 -0
- package/src/spaces/facets/channels/Channels.sol +80 -0
- package/src/spaces/facets/channels/IChannel.sol +98 -0
- package/src/spaces/facets/dispatcher/DispatcherBase.sol +86 -0
- package/src/spaces/facets/dispatcher/DispatcherStorage.sol +21 -0
- package/src/spaces/facets/dispatcher/IDispatcher.sol +6 -0
- package/src/spaces/facets/entitlements/EntitlementsManager.sol +49 -0
- package/src/spaces/facets/entitlements/EntitlementsManagerBase.sol +87 -0
- package/src/spaces/facets/entitlements/EntitlementsManagerService.sol +142 -0
- package/src/spaces/facets/entitlements/EntitlementsManagerStorage.sol +34 -0
- package/src/spaces/facets/entitlements/IEntitlementsManager.sol +67 -0
- package/src/spaces/facets/entitlements/extensions/EntitlementDataQueryable.sol +153 -0
- package/src/spaces/facets/entitlements/extensions/IEntitlementDataQueryable.sol +32 -0
- package/src/spaces/facets/executor/ExecutorBase.sol +564 -0
- package/src/spaces/facets/executor/ExecutorFacet.sol +178 -0
- package/src/spaces/facets/executor/ExecutorStorage.sol +99 -0
- package/src/spaces/facets/executor/GroupLib.sol +128 -0
- package/src/spaces/facets/executor/IExecutor.sol +287 -0
- package/src/spaces/facets/executor/hooks/HookBase.sol +172 -0
- package/src/spaces/facets/executor/hooks/HookLib.sol +38 -0
- package/src/spaces/facets/executor/hooks/IHookBase.sol +48 -0
- package/src/spaces/facets/gated/EntitlementGated.sol +59 -0
- package/src/spaces/facets/gated/EntitlementGatedBase.sol +324 -0
- package/src/spaces/facets/gated/EntitlementGatedStorage.sol +29 -0
- package/src/spaces/facets/gated/IEntitlementGated.sol +55 -0
- package/src/spaces/facets/guardian/GuardianBase.sol +80 -0
- package/src/spaces/facets/guardian/GuardianFacet.sol +43 -0
- package/src/spaces/facets/guardian/GuardianStorage.sol +27 -0
- package/src/spaces/facets/guardian/IGuardian.sol +54 -0
- package/src/spaces/facets/membership/IMembership.sol +216 -0
- package/src/spaces/facets/membership/MembershipBase.sol +272 -0
- package/src/spaces/facets/membership/MembershipFacet.sol +191 -0
- package/src/spaces/facets/membership/MembershipStorage.sol +40 -0
- package/src/spaces/facets/membership/join/MembershipJoin.sol +547 -0
- package/src/spaces/facets/membership/metadata/IMembershipMetadata.sol +9 -0
- package/src/spaces/facets/membership/metadata/MembershipMetadata.sol +32 -0
- package/src/spaces/facets/membership/pricing/IMembershipPricing.sol +18 -0
- package/src/spaces/facets/membership/pricing/fixed/FixedPricing.sol +29 -0
- package/src/spaces/facets/membership/pricing/fixed/FixedPricingStorage.sol +27 -0
- package/src/spaces/facets/membership/pricing/tiered/TieredLogPricingOracleV2.sol +148 -0
- package/src/spaces/facets/membership/pricing/tiered/TieredLogPricingOracleV3.sol +137 -0
- package/src/spaces/facets/membership/token/MembershipToken.sol +25 -0
- package/src/spaces/facets/owner/ISpaceOwner.sol +85 -0
- package/src/spaces/facets/owner/SpaceOwner.sol +174 -0
- package/src/spaces/facets/owner/SpaceOwnerBase.sol +121 -0
- package/src/spaces/facets/owner/SpaceOwnerStorage.sol +41 -0
- package/src/spaces/facets/owner/SpaceOwnerUriBase.sol +54 -0
- package/src/spaces/facets/points/PointsBase.sol +35 -0
- package/src/spaces/facets/prepay/IPrepay.sol +43 -0
- package/src/spaces/facets/prepay/PrepayBase.sol +27 -0
- package/src/spaces/facets/prepay/PrepayFacet.sol +59 -0
- package/src/spaces/facets/prepay/PrepayStorage.sol +26 -0
- package/src/spaces/facets/proxy/ISpaceProxyInitializer.sol +21 -0
- package/src/spaces/facets/proxy/SpaceProxy.sol +15 -0
- package/src/spaces/facets/proxy/SpaceProxyInitializer.sol +55 -0
- package/src/spaces/facets/referrals/IReferrals.sol +98 -0
- package/src/spaces/facets/referrals/ReferralsBase.sol +81 -0
- package/src/spaces/facets/referrals/ReferralsFacet.sol +65 -0
- package/src/spaces/facets/referrals/ReferralsStorage.sol +36 -0
- package/src/spaces/facets/review/IReview.sol +50 -0
- package/src/spaces/facets/review/ReviewFacet.sol +105 -0
- package/src/spaces/facets/review/ReviewStorage.sol +29 -0
- package/src/spaces/facets/roles/IRoles.sol +197 -0
- package/src/spaces/facets/roles/Roles.sol +123 -0
- package/src/spaces/facets/roles/RolesBase.sol +420 -0
- package/src/spaces/facets/roles/RolesStorage.sol +132 -0
- package/src/spaces/facets/swap/ISwapFacet.sol +91 -0
- package/src/spaces/facets/swap/SwapFacet.sol +290 -0
- package/src/spaces/facets/swap/SwapFacetStorage.sol +24 -0
- package/src/spaces/facets/tipping/ITipping.sol +80 -0
- package/src/spaces/facets/tipping/TippingBase.sol +73 -0
- package/src/spaces/facets/tipping/TippingFacet.sol +123 -0
- package/src/spaces/facets/treasury/ITreasury.sol +64 -0
- package/src/spaces/facets/treasury/Treasury.sol +82 -0
- package/src/spaces/facets/xchain/SpaceEntitlementGated.sol +62 -0
- package/src/tokens/Member.sol +246 -0
- package/src/tokens/lock/ILock.sol +42 -0
- package/src/tokens/lock/LockBase.sol +64 -0
- package/src/tokens/lock/LockFacet.sol +44 -0
- package/src/tokens/lock/LockStorage.sol +26 -0
- package/src/tokens/mainnet/claimer/AuthorizedClaimerStorage.sol +26 -0
- package/src/tokens/mainnet/claimer/AuthorizedClaimers.sol +84 -0
- package/src/tokens/mainnet/claimer/IAuthorizedClaimers.sol +36 -0
- package/src/tokens/mainnet/delegation/ProxyBatchDelegation.sol +86 -0
- package/src/tokens/migration/ITokenMigration.sol +35 -0
- package/src/tokens/migration/TokenMigrationFacet.sol +86 -0
- package/src/tokens/migration/TokenMigrationStorage.sol +27 -0
- package/src/tokens/towns/base/IERC7802.sol +30 -0
- package/src/tokens/towns/base/IOptimismMintableERC20.sol +31 -0
- package/src/tokens/towns/base/ISemver.sol +13 -0
- package/src/tokens/towns/base/Towns.sol +283 -0
- package/src/tokens/towns/base/TownsDeployer.sol +32 -0
- package/src/tokens/towns/base/TownsLib.sol +31 -0
- package/src/tokens/towns/base/versions/TownsV2.sol +15 -0
- package/src/tokens/towns/mainnet/ITowns.sol +56 -0
- package/src/tokens/towns/mainnet/Towns.sol +220 -0
- package/src/tokens/towns/mainnet/libs/TokenInflationLib.sol +89 -0
- package/src/tokens/towns/multichain/Towns.sol +19 -0
- package/src/tokens/towns/multichain/wTowns.sol +18 -0
- package/src/utils/Airdrop.sol +156 -0
- package/src/utils/airdrop/merkle/IMerkleAirdrop.sol +55 -0
- package/src/utils/airdrop/merkle/MerkleAirdrop.sol +118 -0
- package/src/utils/airdrop/merkle/MerkleAirdropStorage.sol +29 -0
- package/src/utils/interfaces/AggregatorV3Interface.sol +37 -0
- package/src/utils/interfaces/IMulticall.sol +10 -0
- package/src/utils/interfaces/IWETH.sol +10 -0
- package/src/utils/libraries/BasisPoints.sol +24 -0
- package/src/utils/libraries/Create2Utils.sol +74 -0
- package/src/utils/libraries/CurrencyTransfer.sol +99 -0
- package/src/utils/libraries/CustomRevert.sol +49 -0
- package/src/utils/libraries/Factory.sol +66 -0
- package/src/utils/libraries/StringSet.sol +190 -0
- package/src/utils/libraries/Validator.sol +31 -0
|
@@ -0,0 +1,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
|
+
}
|