@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,143 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {INodeRegistry} from "./INodeRegistry.sol";
|
|
6
|
+
import {Node, NodeStatus} from "src/river/registry/libraries/RegistryStorage.sol";
|
|
7
|
+
|
|
8
|
+
// libraries
|
|
9
|
+
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
|
10
|
+
|
|
11
|
+
import {RiverRegistryErrors} from "src/river/registry/libraries/RegistryErrors.sol";
|
|
12
|
+
import {CustomRevert} from "src/utils/libraries/CustomRevert.sol";
|
|
13
|
+
|
|
14
|
+
// contracts
|
|
15
|
+
import {RegistryModifiers} from "src/river/registry/libraries/RegistryStorage.sol";
|
|
16
|
+
|
|
17
|
+
contract NodeRegistry is INodeRegistry, RegistryModifiers {
|
|
18
|
+
using EnumerableSet for EnumerableSet.AddressSet;
|
|
19
|
+
using CustomRevert for string;
|
|
20
|
+
|
|
21
|
+
function isNode(address nodeAddress) public view returns (bool) {
|
|
22
|
+
return ds.nodeByAddress[nodeAddress].nodeAddress != address(0);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function registerNode(
|
|
26
|
+
address nodeAddress,
|
|
27
|
+
string memory url,
|
|
28
|
+
NodeStatus status
|
|
29
|
+
) external onlyOperator(msg.sender) {
|
|
30
|
+
// validate that the node is not already in the registry
|
|
31
|
+
if (ds.nodeByAddress[nodeAddress].nodeAddress != address(0)) {
|
|
32
|
+
RiverRegistryErrors.ALREADY_EXISTS.revertWith();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
Node memory newNode = Node({
|
|
36
|
+
nodeAddress: nodeAddress,
|
|
37
|
+
url: url,
|
|
38
|
+
status: status,
|
|
39
|
+
operator: msg.sender
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
ds.nodes.add(nodeAddress); // TODO: remove this line
|
|
43
|
+
ds.nodeByAddress[nodeAddress] = newNode;
|
|
44
|
+
|
|
45
|
+
emit NodeAdded(nodeAddress, msg.sender, url, status);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function removeNode(address nodeAddress) external onlyNodeOperator(nodeAddress, msg.sender) {
|
|
49
|
+
if (ds.nodeByAddress[nodeAddress].nodeAddress == address(0)) {
|
|
50
|
+
RiverRegistryErrors.NODE_NOT_FOUND.revertWith();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (ds.nodeByAddress[nodeAddress].status != NodeStatus.Deleted) {
|
|
54
|
+
RiverRegistryErrors.NODE_STATE_NOT_ALLOWED.revertWith();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
ds.nodes.remove(nodeAddress);
|
|
58
|
+
delete ds.nodeByAddress[nodeAddress];
|
|
59
|
+
|
|
60
|
+
emit NodeRemoved(nodeAddress);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function updateNodeStatus(
|
|
64
|
+
address nodeAddress,
|
|
65
|
+
NodeStatus status
|
|
66
|
+
)
|
|
67
|
+
external
|
|
68
|
+
onlyNode(nodeAddress)
|
|
69
|
+
onlyOperator(msg.sender)
|
|
70
|
+
onlyNodeOperator(nodeAddress, msg.sender)
|
|
71
|
+
{
|
|
72
|
+
Node storage node = ds.nodeByAddress[nodeAddress];
|
|
73
|
+
|
|
74
|
+
_checkNodeStatusTransionAllowed(node.status, status);
|
|
75
|
+
|
|
76
|
+
node.status = status;
|
|
77
|
+
emit NodeStatusUpdated(node.nodeAddress, status);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function updateNodeUrl(
|
|
81
|
+
address nodeAddress,
|
|
82
|
+
string memory url
|
|
83
|
+
)
|
|
84
|
+
external
|
|
85
|
+
onlyOperator(msg.sender)
|
|
86
|
+
onlyNode(nodeAddress)
|
|
87
|
+
onlyNodeOperator(nodeAddress, msg.sender)
|
|
88
|
+
{
|
|
89
|
+
Node storage node = ds.nodeByAddress[nodeAddress];
|
|
90
|
+
|
|
91
|
+
if (keccak256(abi.encodePacked(node.url)) == keccak256(abi.encodePacked(url))) {
|
|
92
|
+
RiverRegistryErrors.BAD_ARG.revertWith();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
node.url = url;
|
|
96
|
+
emit NodeUrlUpdated(node.nodeAddress, url);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function getNode(address nodeAddress) external view returns (Node memory) {
|
|
100
|
+
// validate that the node is in the registry
|
|
101
|
+
if (!ds.nodes.contains(nodeAddress)) {
|
|
102
|
+
RiverRegistryErrors.NODE_NOT_FOUND.revertWith();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return ds.nodeByAddress[nodeAddress];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function getNodeCount() external view returns (uint256) {
|
|
109
|
+
return ds.nodes.length();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function getAllNodeAddresses() external view returns (address[] memory) {
|
|
113
|
+
return ds.nodes.values();
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function getAllNodes() external view returns (Node[] memory) {
|
|
117
|
+
Node[] memory nodes = new Node[](ds.nodes.length());
|
|
118
|
+
|
|
119
|
+
for (uint256 i = 0; i < ds.nodes.length(); ++i) {
|
|
120
|
+
nodes[i] = ds.nodeByAddress[ds.nodes.at(i)];
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return nodes;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
function _checkNodeStatusTransionAllowed(NodeStatus from, NodeStatus to) internal pure {
|
|
127
|
+
if (
|
|
128
|
+
from == NodeStatus.NotInitialized ||
|
|
129
|
+
(from == NodeStatus.RemoteOnly &&
|
|
130
|
+
(to == NodeStatus.Failed ||
|
|
131
|
+
to == NodeStatus.Departing ||
|
|
132
|
+
to == NodeStatus.Operational)) ||
|
|
133
|
+
(from == NodeStatus.Operational &&
|
|
134
|
+
(to == NodeStatus.Failed || to == NodeStatus.Departing)) ||
|
|
135
|
+
(from == NodeStatus.Departing &&
|
|
136
|
+
(to == NodeStatus.Failed || to == NodeStatus.Deleted)) ||
|
|
137
|
+
(from == NodeStatus.Failed && to == NodeStatus.Deleted)
|
|
138
|
+
) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
RiverRegistryErrors.NODE_STATE_NOT_ALLOWED.revertWith();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -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
|
+
|
|
10
|
+
interface IOperatorRegistry {
|
|
11
|
+
// =============================================================
|
|
12
|
+
// Events
|
|
13
|
+
// =============================================================
|
|
14
|
+
event OperatorAdded(address indexed operatorAddress);
|
|
15
|
+
|
|
16
|
+
event OperatorRemoved(address indexed operatorAddress);
|
|
17
|
+
|
|
18
|
+
// =============================================================
|
|
19
|
+
// Operators
|
|
20
|
+
// =============================================================
|
|
21
|
+
function approveOperator(address operator) external;
|
|
22
|
+
|
|
23
|
+
function removeOperator(address operator) external;
|
|
24
|
+
|
|
25
|
+
function isOperator(address operator) external view returns (bool);
|
|
26
|
+
|
|
27
|
+
function getAllOperators() external view returns (address[] memory);
|
|
28
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {IOperatorRegistry} from "./IOperatorRegistry.sol";
|
|
6
|
+
|
|
7
|
+
// libraries
|
|
8
|
+
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
|
9
|
+
|
|
10
|
+
import {RiverRegistryErrors} from "src/river/registry/libraries/RegistryErrors.sol";
|
|
11
|
+
import {CustomRevert} from "src/utils/libraries/CustomRevert.sol";
|
|
12
|
+
|
|
13
|
+
// contracts
|
|
14
|
+
import {Facet} from "@towns-protocol/diamond/src/facets/Facet.sol";
|
|
15
|
+
import {OwnableBase} from "@towns-protocol/diamond/src/facets/ownable/OwnableBase.sol";
|
|
16
|
+
import {RegistryModifiers} from "src/river/registry/libraries/RegistryStorage.sol";
|
|
17
|
+
|
|
18
|
+
contract OperatorRegistry is IOperatorRegistry, RegistryModifiers, OwnableBase, Facet {
|
|
19
|
+
using EnumerableSet for EnumerableSet.AddressSet;
|
|
20
|
+
using CustomRevert for string;
|
|
21
|
+
|
|
22
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
23
|
+
/* ADMIN FUNCTIONS */
|
|
24
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
25
|
+
|
|
26
|
+
function __OperatorRegistry_init(
|
|
27
|
+
address[] calldata initialOperators
|
|
28
|
+
) external onlyInitializing {
|
|
29
|
+
for (uint256 i; i < initialOperators.length; ++i) {
|
|
30
|
+
_approveOperator(initialOperators[i]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/// @inheritdoc IOperatorRegistry
|
|
35
|
+
function approveOperator(address operator) external onlyOwner {
|
|
36
|
+
_approveOperator(operator);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// @inheritdoc IOperatorRegistry
|
|
40
|
+
function removeOperator(address operator) external onlyOwner {
|
|
41
|
+
if (!isOperator(operator)) {
|
|
42
|
+
RiverRegistryErrors.OPERATOR_NOT_FOUND.revertWith();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
uint256 length = ds.nodes.length();
|
|
46
|
+
// verify that the operator has no nodes attached
|
|
47
|
+
for (uint256 i; i < length; ++i) {
|
|
48
|
+
if (ds.nodeByAddress[ds.nodes.at(i)].operator == operator) {
|
|
49
|
+
RiverRegistryErrors.OUT_OF_BOUNDS.revertWith();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
ds.operators.remove(operator);
|
|
54
|
+
|
|
55
|
+
emit OperatorRemoved(operator);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
59
|
+
/* GETTERS */
|
|
60
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
61
|
+
|
|
62
|
+
/// @inheritdoc IOperatorRegistry
|
|
63
|
+
function isOperator(address operator) public view returns (bool) {
|
|
64
|
+
return ds.operators.contains(operator);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/// @inheritdoc IOperatorRegistry
|
|
68
|
+
function getAllOperators() external view returns (address[] memory) {
|
|
69
|
+
return ds.operators.values();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
73
|
+
/* INTERNAL */
|
|
74
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
75
|
+
|
|
76
|
+
function _approveOperator(address operator) internal {
|
|
77
|
+
// Validate operator address
|
|
78
|
+
if (operator == address(0)) RiverRegistryErrors.BAD_ARG.revertWith();
|
|
79
|
+
|
|
80
|
+
if (isOperator(operator)) RiverRegistryErrors.ALREADY_EXISTS.revertWith();
|
|
81
|
+
|
|
82
|
+
ds.operators.add(operator);
|
|
83
|
+
|
|
84
|
+
emit OperatorAdded(operator);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
// interfaces
|
|
5
|
+
import {SetMiniblock, SetStreamReplicationFactor, Stream, StreamWithId} from "src/river/registry/libraries/RegistryStorage.sol";
|
|
6
|
+
|
|
7
|
+
// libraries
|
|
8
|
+
|
|
9
|
+
// contracts
|
|
10
|
+
|
|
11
|
+
interface IStreamRegistryBase {
|
|
12
|
+
/// @notice The type of stream event
|
|
13
|
+
enum StreamEventType {
|
|
14
|
+
Allocate,
|
|
15
|
+
Create,
|
|
16
|
+
PlacementUpdated,
|
|
17
|
+
LastMiniblockBatchUpdated
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/// @notice The event emitted when a stream is updated
|
|
21
|
+
/// @dev One event to rule them all
|
|
22
|
+
/// To decode:
|
|
23
|
+
/// switch (eventType) {
|
|
24
|
+
/// case StreamEventType.Allocate:
|
|
25
|
+
/// case StreamEventType.Create:
|
|
26
|
+
/// case StreamEventType.PlacementUpdated:
|
|
27
|
+
/// (bytes32 streamId, Stream memory stream) = abi.decode(data, (bytes32, Stream));
|
|
28
|
+
/// case StreamEventType.LastMiniblockBatchUpdated:
|
|
29
|
+
/// (SetMiniblock[] memory miniBlockUpdates) = abi.decode(data, (SetMiniblock[]));
|
|
30
|
+
/// }
|
|
31
|
+
/// @param eventType The type of stream event
|
|
32
|
+
/// @param data The data of the stream event
|
|
33
|
+
event StreamUpdated(StreamEventType indexed eventType, bytes data);
|
|
34
|
+
|
|
35
|
+
event StreamLastMiniblockUpdateFailed(
|
|
36
|
+
bytes32 streamId,
|
|
37
|
+
bytes32 lastMiniblockHash,
|
|
38
|
+
uint64 lastMiniblockNum,
|
|
39
|
+
string reason
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
interface IStreamRegistry is IStreamRegistryBase {
|
|
44
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
45
|
+
/* STREAMS */
|
|
46
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @notice Allocate a new stream in the registry
|
|
50
|
+
* @param streamId The ID of the stream to allocate
|
|
51
|
+
* @param nodes The list of nodes to place the stream on
|
|
52
|
+
* @param genesisMiniblockHash The hash of the genesis miniblock
|
|
53
|
+
* @param genesisMiniblock The genesis miniblock data
|
|
54
|
+
* @dev Only callable by registered nodes
|
|
55
|
+
*/
|
|
56
|
+
function allocateStream(
|
|
57
|
+
bytes32 streamId,
|
|
58
|
+
address[] memory nodes,
|
|
59
|
+
bytes32 genesisMiniblockHash,
|
|
60
|
+
bytes memory genesisMiniblock
|
|
61
|
+
) external;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* @notice Create a new stream in the registry
|
|
65
|
+
* @param stream is the Stream object to be created
|
|
66
|
+
* @dev Only callable by registered nodes
|
|
67
|
+
*/
|
|
68
|
+
function addStream(
|
|
69
|
+
bytes32 streamId,
|
|
70
|
+
bytes32 genesisMiniblockHash,
|
|
71
|
+
Stream memory stream
|
|
72
|
+
) external;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @notice Sync node addresses for streams in a range to `streamIdsByNode` mapping
|
|
76
|
+
* @param start The starting index for pagination
|
|
77
|
+
* @param stop The ending index for pagination, exclusive
|
|
78
|
+
*/
|
|
79
|
+
function syncNodesOnStreams(uint256 start, uint256 stop) external;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @notice Set the last miniblock for multiple streams in a batch operation
|
|
83
|
+
* @param miniblocks Array of SetMiniblock structs containing stream IDs and their last
|
|
84
|
+
* miniblock
|
|
85
|
+
* information
|
|
86
|
+
* @dev Only callable by registered nodes
|
|
87
|
+
* @dev This function allows updating multiple streams' last miniblock data in a single
|
|
88
|
+
* transaction
|
|
89
|
+
*/
|
|
90
|
+
function setStreamLastMiniblockBatch(SetMiniblock[] calldata miniblocks) external;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @notice Place a stream on a specific node
|
|
94
|
+
* @param streamId The ID of the stream to place
|
|
95
|
+
* @param nodeAddress The address of the node to place the stream on
|
|
96
|
+
*/
|
|
97
|
+
function placeStreamOnNode(bytes32 streamId, address nodeAddress) external;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @notice Remove a stream from a specific node
|
|
101
|
+
* @param streamId The ID of the stream to remove
|
|
102
|
+
* @param nodeAddress The address of the node to remove the stream from
|
|
103
|
+
*/
|
|
104
|
+
function removeStreamFromNode(bytes32 streamId, address nodeAddress) external;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @notice Set the replication factor for existing streams
|
|
108
|
+
* @param requests list with streams to set replication factor for
|
|
109
|
+
* @dev Only callable by configuration managers
|
|
110
|
+
*
|
|
111
|
+
* @dev This function is to migrate existing non-replicated streams to replicated streams.
|
|
112
|
+
* If the replication factor is less than the number of nodes it indicates that only the first
|
|
113
|
+
* "replicationFactor"
|
|
114
|
+
* nodes participate in reaching quorum. The remaining nodes only sync the stream data.
|
|
115
|
+
*/
|
|
116
|
+
function setStreamReplicationFactor(SetStreamReplicationFactor[] calldata requests) external;
|
|
117
|
+
|
|
118
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
119
|
+
/* GETTERS */
|
|
120
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* @notice Check if a stream exists in the registry
|
|
124
|
+
* @param streamId The ID of the stream to check
|
|
125
|
+
* @return bool True if the stream exists, false otherwise
|
|
126
|
+
*/
|
|
127
|
+
function isStream(bytes32 streamId) external view returns (bool);
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* @notice Get a stream from the registry
|
|
131
|
+
* @param streamId The ID of the stream to get
|
|
132
|
+
* @return Stream The stream data
|
|
133
|
+
*/
|
|
134
|
+
function getStream(bytes32 streamId) external view returns (Stream memory);
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* @notice Get a stream and its genesis information from the registry
|
|
138
|
+
* @param streamId The ID of the stream to get
|
|
139
|
+
* @return Stream The stream data
|
|
140
|
+
* @return bytes32 The genesis miniblock hash
|
|
141
|
+
* @return bytes The genesis miniblock data
|
|
142
|
+
*/
|
|
143
|
+
function getStreamWithGenesis(
|
|
144
|
+
bytes32 streamId
|
|
145
|
+
) external view returns (Stream memory, bytes32, bytes memory);
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* @notice Get the total number of streams in the registry
|
|
149
|
+
* @return uint256 The total number of streams
|
|
150
|
+
*/
|
|
151
|
+
function getStreamCount() external view returns (uint256);
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @notice Get the number of streams placed on a specific node
|
|
155
|
+
* @param nodeAddress The address of the node to check
|
|
156
|
+
* @return uint256 The number of streams on the node
|
|
157
|
+
*/
|
|
158
|
+
function getStreamCountOnNode(address nodeAddress) external view returns (uint256);
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* @notice Get a paginated list of streams on a specific node
|
|
162
|
+
* @param nodeAddress The address of the node
|
|
163
|
+
* @param start The starting index for pagination
|
|
164
|
+
* @param stop The ending index for pagination, exclusive
|
|
165
|
+
* @return streams Array of streams with their IDs in the requested range for the specified node
|
|
166
|
+
*/
|
|
167
|
+
function getPaginatedStreamsOnNode(
|
|
168
|
+
address nodeAddress,
|
|
169
|
+
uint256 start,
|
|
170
|
+
uint256 stop
|
|
171
|
+
) external view returns (StreamWithId[] memory streams);
|
|
172
|
+
/**
|
|
173
|
+
* @notice Get a paginated list of streams from the registry
|
|
174
|
+
* @dev Recommended range is 5000 streams to avoid gas limits
|
|
175
|
+
* @param start The starting index for pagination
|
|
176
|
+
* @param stop The ending index for pagination, exclusive
|
|
177
|
+
* @return StreamWithId[] Array of streams with their IDs in the requested range
|
|
178
|
+
* @return bool True if this is the last page of results
|
|
179
|
+
*/
|
|
180
|
+
function getPaginatedStreams(
|
|
181
|
+
uint256 start,
|
|
182
|
+
uint256 stop
|
|
183
|
+
) external view returns (StreamWithId[] memory, bool);
|
|
184
|
+
}
|