@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,226 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
interface ISwapRouterBase {
|
|
5
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
6
|
+
/* STRUCTS */
|
|
7
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
8
|
+
|
|
9
|
+
/// @notice Parameters for an exact input swap
|
|
10
|
+
/// @param tokenIn The input token
|
|
11
|
+
/// @param tokenOut The output token
|
|
12
|
+
/// @param amountIn The amount of input tokens to swap
|
|
13
|
+
/// @param minAmountOut The minimum amount of output tokens to receive
|
|
14
|
+
/// @param recipient The address to receive the output tokens
|
|
15
|
+
struct ExactInputParams {
|
|
16
|
+
address tokenIn;
|
|
17
|
+
address tokenOut;
|
|
18
|
+
uint256 amountIn;
|
|
19
|
+
uint256 minAmountOut;
|
|
20
|
+
address recipient;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/// @notice Parameters for Permit2 signature transfer with witness
|
|
24
|
+
/// @dev Token and amount are derived from ExactInputParams
|
|
25
|
+
/// @param owner The owner of the tokens (who signed the permit)
|
|
26
|
+
/// @param nonce The permit nonce
|
|
27
|
+
/// @param deadline The permit deadline
|
|
28
|
+
/// @param signature The permit signature
|
|
29
|
+
struct Permit2Params {
|
|
30
|
+
address owner;
|
|
31
|
+
uint256 nonce;
|
|
32
|
+
uint256 deadline;
|
|
33
|
+
bytes signature;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/// @notice Parameters for external router interaction
|
|
37
|
+
/// @param router The address of the router to use
|
|
38
|
+
/// @param approveTarget The address to approve token transfers
|
|
39
|
+
/// @param swapData The calldata to execute on the router
|
|
40
|
+
struct RouterParams {
|
|
41
|
+
address router;
|
|
42
|
+
address approveTarget;
|
|
43
|
+
bytes swapData;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/// @notice Fee configuration for permit-based swaps
|
|
47
|
+
/// @param recipient The address that should receive the fee
|
|
48
|
+
/// @param feeBps The expected fee in basis points
|
|
49
|
+
struct FeeConfig {
|
|
50
|
+
address recipient;
|
|
51
|
+
uint16 feeBps;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
struct SwapWitness {
|
|
55
|
+
ExactInputParams exactInputParams;
|
|
56
|
+
RouterParams routerParams;
|
|
57
|
+
FeeConfig feeConfig;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
61
|
+
/* ERRORS */
|
|
62
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
63
|
+
|
|
64
|
+
/// @notice Error thrown when an invalid router is specified
|
|
65
|
+
error SwapRouter__InvalidRouter();
|
|
66
|
+
|
|
67
|
+
/// @notice Error thrown when an invalid amount is provided
|
|
68
|
+
error SwapRouter__InvalidAmount();
|
|
69
|
+
|
|
70
|
+
/// @notice Error thrown when the output amount is less than the minimum expected
|
|
71
|
+
error SwapRouter__InsufficientOutput();
|
|
72
|
+
|
|
73
|
+
/// @notice Error thrown when ETH is sent but not expected (tokenIn is not the native token)
|
|
74
|
+
error SwapRouter__UnexpectedETH();
|
|
75
|
+
|
|
76
|
+
/// @notice Error thrown when an invalid BPS value is provided
|
|
77
|
+
error SwapRouter__InvalidBps();
|
|
78
|
+
|
|
79
|
+
/// @notice Error thrown when native token is used with permit (not supported)
|
|
80
|
+
error SwapRouter__NativeTokenNotSupportedWithPermit();
|
|
81
|
+
|
|
82
|
+
/// @notice Error thrown when recipient is not specified (address(0))
|
|
83
|
+
error SwapRouter__RecipientRequired();
|
|
84
|
+
|
|
85
|
+
/// @notice Error thrown when tokenIn and tokenOut are the same
|
|
86
|
+
error SwapRouter__SameToken();
|
|
87
|
+
|
|
88
|
+
/// @notice Error thrown when the poster fee in permit doesn't match the actual configured fee
|
|
89
|
+
error SwapRouter__PosterFeeMismatch();
|
|
90
|
+
|
|
91
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
92
|
+
/* EVENTS */
|
|
93
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
94
|
+
|
|
95
|
+
/// @notice Emitted when the SwapRouter is initialized
|
|
96
|
+
/// @param spaceFactory The address of the space factory
|
|
97
|
+
event SwapRouterInitialized(address spaceFactory);
|
|
98
|
+
|
|
99
|
+
/// @notice Emitted when a swap is successfully executed
|
|
100
|
+
/// @param router The address of the router used
|
|
101
|
+
/// @param caller The address that initiated the swap
|
|
102
|
+
/// @param tokenIn The input token
|
|
103
|
+
/// @param tokenOut The output token
|
|
104
|
+
/// @param amountIn The amount of input tokens sold
|
|
105
|
+
/// @param amountOut The amount of output tokens received
|
|
106
|
+
/// @param recipient The address that received the output tokens
|
|
107
|
+
event Swap(
|
|
108
|
+
address indexed router,
|
|
109
|
+
address indexed caller,
|
|
110
|
+
address tokenIn,
|
|
111
|
+
address tokenOut,
|
|
112
|
+
uint256 amountIn,
|
|
113
|
+
uint256 amountOut,
|
|
114
|
+
address recipient
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
/// @notice Emitted when fees are distributed after a swap
|
|
118
|
+
/// @param token The token in which fees are paid
|
|
119
|
+
/// @param protocol The address receiving the protocol fee
|
|
120
|
+
/// @param poster The address receiving the poster fee (if any)
|
|
121
|
+
/// @param protocolAmount The amount of tokens sent as protocol fee
|
|
122
|
+
/// @param posterAmount The amount of tokens sent to the poster
|
|
123
|
+
event FeeDistribution(
|
|
124
|
+
address indexed token,
|
|
125
|
+
address indexed protocol,
|
|
126
|
+
address indexed poster,
|
|
127
|
+
uint256 protocolAmount,
|
|
128
|
+
uint256 posterAmount
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
interface ISwapRouter is ISwapRouterBase {
|
|
133
|
+
/// @notice Executes a swap through a whitelisted router
|
|
134
|
+
/// @param params The parameters for the swap
|
|
135
|
+
/// tokenIn The token being sold
|
|
136
|
+
/// tokenOut The token being bought
|
|
137
|
+
/// amountIn The amount of tokenIn to swap
|
|
138
|
+
/// minAmountOut The minimum amount of tokenOut to receive
|
|
139
|
+
/// recipient The address to receive the output tokens
|
|
140
|
+
/// @param routerParams The router parameters for the swap
|
|
141
|
+
/// router The address of the router to use
|
|
142
|
+
/// approveTarget The address to approve the token transfer
|
|
143
|
+
/// swapData The calldata to execute on the router
|
|
144
|
+
/// @param poster The address that posted this swap opportunity
|
|
145
|
+
/// @return amountOut The amount of tokenOut received
|
|
146
|
+
/// @return protocolFee The amount of protocol fee collected
|
|
147
|
+
function executeSwap(
|
|
148
|
+
ExactInputParams calldata params,
|
|
149
|
+
RouterParams calldata routerParams,
|
|
150
|
+
address poster
|
|
151
|
+
) external payable returns (uint256 amountOut, uint256 protocolFee);
|
|
152
|
+
|
|
153
|
+
/// @notice Executes a swap using Permit2 with witness data binding permit to swap intent
|
|
154
|
+
/// @dev Uses Uniswap's Permit2 protocol with witness binding for enhanced security.
|
|
155
|
+
/// Integration flow:
|
|
156
|
+
/// 1. User approves tokens to Permit2 contract (0x000000000022D473030F116dDEE9F6B43aC78BA3)
|
|
157
|
+
/// 2. Frontend generates permit signature using getPermit2MessageHash()
|
|
158
|
+
/// 3. Frontend calls this function with signed permit
|
|
159
|
+
/// @param params The exact input swap parameters that will be bound to the permit signature
|
|
160
|
+
/// @param routerParams The router interaction parameters that will be bound to the permit signature
|
|
161
|
+
/// @param permit The Permit2 data containing owner, nonce, deadline, and signature
|
|
162
|
+
/// @param posterFee The fee configuration including poster address and expected poster fee rate (included in witness)
|
|
163
|
+
/// @return amountOut The amount of output tokens received after fees
|
|
164
|
+
/// @return protocolFee The amount of protocol fee collected
|
|
165
|
+
function executeSwapWithPermit(
|
|
166
|
+
ExactInputParams calldata params,
|
|
167
|
+
RouterParams calldata routerParams,
|
|
168
|
+
FeeConfig calldata posterFee,
|
|
169
|
+
Permit2Params calldata permit
|
|
170
|
+
) external payable returns (uint256 amountOut, uint256 protocolFee);
|
|
171
|
+
|
|
172
|
+
/// @notice Calculate fees for ETH input swaps before execution
|
|
173
|
+
/// @dev This function helps integrators determine the actual amount that will be sent to external
|
|
174
|
+
/// routers after protocol and poster fees are deducted. Integration flow:
|
|
175
|
+
/// 1. Call this function to get `amountInAfterFees`
|
|
176
|
+
/// 2. Use `amountInAfterFees` to get quotes from aggregator
|
|
177
|
+
/// 3. Construct RouterParams with the aggregator quote
|
|
178
|
+
/// 4. Call executeSwap with original amountIn and the prepared RouterParams
|
|
179
|
+
/// @param amountIn The original ETH amount before fees
|
|
180
|
+
/// @param caller The address that will call executeSwap (to calculate correct fees based on space status)
|
|
181
|
+
/// @param poster The address that posted this swap opportunity
|
|
182
|
+
/// @return amountInAfterFees The ETH amount that will be sent to external router after fees
|
|
183
|
+
/// @return protocolFee The amount collected as protocol fee
|
|
184
|
+
/// @return posterFee The amount collected as poster fee
|
|
185
|
+
function getETHInputFees(
|
|
186
|
+
uint256 amountIn,
|
|
187
|
+
address caller,
|
|
188
|
+
address poster
|
|
189
|
+
) external view returns (uint256 amountInAfterFees, uint256 protocolFee, uint256 posterFee);
|
|
190
|
+
|
|
191
|
+
/*´:°•.°+.*•´.*:˚.°*.˚•´.°:°•.°•.*•´.*:˚.°*.˚•´.°:°•.°+.*•´.*:*/
|
|
192
|
+
/* PERMIT2 UTILS */
|
|
193
|
+
/*.•°:°.´+˚.*°.˚:*.´•*.+°.•°:´*.´•*.•°.•°:°.´:•˚°.*°.˚:*.´+°.•*/
|
|
194
|
+
|
|
195
|
+
/// @notice Get the next available Permit2 nonce for a user from Permit2's bitmap system
|
|
196
|
+
/// @dev Permit2 uses a bitmap system where each bit represents a nonce state (0=available, 1=used).
|
|
197
|
+
/// Nonces are organized in 256-nonce "words" (uint256 bitmaps). This function efficiently searches
|
|
198
|
+
/// through words starting from the one containing startNonce, using bit manipulation to find the
|
|
199
|
+
/// first available nonce. The search continues across word boundaries until an available nonce is
|
|
200
|
+
/// found or the maximum word position is reached.
|
|
201
|
+
/// @param owner The address to check nonce availability for
|
|
202
|
+
/// @param startNonce The nonce to start searching from (inclusive - will return this exact nonce if available)
|
|
203
|
+
/// @return nonce The next available nonce at or after startNonce, or type(uint256).max if no nonces are available (stop flag)
|
|
204
|
+
function getPermit2Nonce(
|
|
205
|
+
address owner,
|
|
206
|
+
uint256 startNonce
|
|
207
|
+
) external view returns (uint256 nonce);
|
|
208
|
+
|
|
209
|
+
/// @notice Generate the EIP-712 message hash for Permit2 signature
|
|
210
|
+
/// @dev Generates the exact hash that needs to be signed for permit-based swaps
|
|
211
|
+
/// @param params Swap parameters that will be bound to permit signature
|
|
212
|
+
/// @param routerParams Router parameters that will be bound to permit signature
|
|
213
|
+
/// @param posterFee Fee configuration including poster address and expected poster fee rate (included in witness)
|
|
214
|
+
/// @param amount Token amount to permit (should be >= params.amountIn)
|
|
215
|
+
/// @param nonce Permit nonce (use getPermit2Nonce to find available nonce)
|
|
216
|
+
/// @param deadline Permit deadline (unix timestamp)
|
|
217
|
+
/// @return messageHash The EIP-712 message hash ready for signing
|
|
218
|
+
function getPermit2MessageHash(
|
|
219
|
+
ExactInputParams calldata params,
|
|
220
|
+
RouterParams calldata routerParams,
|
|
221
|
+
FeeConfig calldata posterFee,
|
|
222
|
+
uint256 amount,
|
|
223
|
+
uint256 nonce,
|
|
224
|
+
uint256 deadline
|
|
225
|
+
) external view returns (bytes32 messageHash);
|
|
226
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
pragma solidity ^0.8.23;
|
|
3
|
+
|
|
4
|
+
import {PermitHash} from "@uniswap/permit2/src/libraries/PermitHash.sol";
|
|
5
|
+
import {ISwapRouterBase} from "./ISwapRouter.sol";
|
|
6
|
+
|
|
7
|
+
library Permit2Hash {
|
|
8
|
+
/// @notice EIP-712 type hash for ExactInputParams struct
|
|
9
|
+
bytes32 internal constant EXACT_INPUT_PARAMS_TYPE_HASH =
|
|
10
|
+
keccak256(
|
|
11
|
+
"ExactInputParams(address tokenIn,address tokenOut,uint256 amountIn,uint256 minAmountOut,address recipient)"
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
/// @notice EIP-712 type hash for RouterParams struct
|
|
15
|
+
bytes32 internal constant ROUTER_PARAMS_TYPE_HASH =
|
|
16
|
+
keccak256("RouterParams(address router,address approveTarget,bytes swapData)");
|
|
17
|
+
|
|
18
|
+
/// @notice EIP-712 type hash for FeeConfig struct
|
|
19
|
+
bytes32 internal constant FEE_CONFIG_TYPE_HASH =
|
|
20
|
+
keccak256("FeeConfig(address recipient,uint16 feeBps)");
|
|
21
|
+
|
|
22
|
+
/// @notice EIP-712 type string for SwapWitness struct used in permit signatures
|
|
23
|
+
/// @dev Defines the complete type definition including nested struct types for swap parameters
|
|
24
|
+
string internal constant WITNESS_TYPE =
|
|
25
|
+
"SwapWitness(ExactInputParams exactInputParams,RouterParams routerParams,FeeConfig feeConfig)ExactInputParams(address tokenIn,address tokenOut,uint256 amountIn,uint256 minAmountOut,address recipient)FeeConfig(address recipient,uint16 feeBps)RouterParams(address router,address approveTarget,bytes swapData)";
|
|
26
|
+
|
|
27
|
+
/// @notice Keccak256 hash of the WITNESS_TYPE string
|
|
28
|
+
/// @dev Pre-computed hash for gas efficiency in signature verification
|
|
29
|
+
bytes32 internal constant WITNESS_TYPE_HASH = keccak256(bytes(WITNESS_TYPE));
|
|
30
|
+
|
|
31
|
+
/// @notice EIP-712 witness type string for SwapWitness
|
|
32
|
+
/// @dev This string defines the structure of the witness data that binds permit signatures
|
|
33
|
+
/// to specific swap parameters, preventing front-running and parameter manipulation attacks
|
|
34
|
+
string internal constant WITNESS_TYPE_STRING =
|
|
35
|
+
"SwapWitness witness)ExactInputParams(address tokenIn,address tokenOut,uint256 amountIn,uint256 minAmountOut,address recipient)FeeConfig(address recipient,uint16 feeBps)RouterParams(address router,address approveTarget,bytes swapData)SwapWitness(ExactInputParams exactInputParams,RouterParams routerParams,FeeConfig feeConfig)TokenPermissions(address token,uint256 amount)";
|
|
36
|
+
|
|
37
|
+
/// @notice EIP-712 type hash for PermitWitnessTransferFrom with SwapWitness
|
|
38
|
+
/// @dev Combined type hash for Permit2 witness transfers with swap-specific witness data
|
|
39
|
+
/// Used to create structured hashes that bind permit signatures to exact swap parameters
|
|
40
|
+
bytes32 internal constant PERMIT_WITNESS_TRANSFER_FROM_TYPEHASH =
|
|
41
|
+
keccak256(
|
|
42
|
+
abi.encodePacked(
|
|
43
|
+
PermitHash._PERMIT_TRANSFER_FROM_WITNESS_TYPEHASH_STUB,
|
|
44
|
+
WITNESS_TYPE_STRING
|
|
45
|
+
)
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
/// @notice Hashes SwapWitness struct according to EIP-712
|
|
49
|
+
/// @param witness The SwapWitness struct to hash
|
|
50
|
+
/// @return bytes32 The EIP-712 hashStruct of SwapWitness
|
|
51
|
+
function hash(ISwapRouterBase.SwapWitness memory witness) internal pure returns (bytes32) {
|
|
52
|
+
return
|
|
53
|
+
keccak256(
|
|
54
|
+
abi.encode(
|
|
55
|
+
WITNESS_TYPE_HASH,
|
|
56
|
+
hash(witness.exactInputParams),
|
|
57
|
+
hash(witness.routerParams),
|
|
58
|
+
hash(witness.feeConfig)
|
|
59
|
+
)
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/// @notice Hashes ExactInputParams struct according to EIP-712
|
|
64
|
+
/// @param params The ExactInputParams struct to hash
|
|
65
|
+
/// @return bytes32 The EIP-712 hashStruct of ExactInputParams
|
|
66
|
+
function hash(ISwapRouterBase.ExactInputParams memory params) internal pure returns (bytes32) {
|
|
67
|
+
return keccak256(abi.encode(EXACT_INPUT_PARAMS_TYPE_HASH, params));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/// @notice Hashes RouterParams struct according to EIP-712
|
|
71
|
+
/// @param params The RouterParams struct to hash
|
|
72
|
+
/// @return bytes32 The EIP-712 hashStruct of RouterParams
|
|
73
|
+
function hash(ISwapRouterBase.RouterParams memory params) internal pure returns (bytes32) {
|
|
74
|
+
// RouterParams contains dynamic bytes, so we must encode fields individually per EIP-712
|
|
75
|
+
return
|
|
76
|
+
keccak256(
|
|
77
|
+
abi.encode(
|
|
78
|
+
ROUTER_PARAMS_TYPE_HASH,
|
|
79
|
+
params.router,
|
|
80
|
+
params.approveTarget,
|
|
81
|
+
keccak256(params.swapData) // Dynamic bytes must be hashed
|
|
82
|
+
)
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/// @notice Hashes FeeConfig struct according to EIP-712
|
|
87
|
+
/// @param feeConfig The FeeConfig struct to hash
|
|
88
|
+
/// @return bytes32 The EIP-712 hashStruct of FeeConfig
|
|
89
|
+
function hash(ISwapRouterBase.FeeConfig memory feeConfig) internal pure returns (bytes32) {
|
|
90
|
+
return keccak256(abi.encode(FEE_CONFIG_TYPE_HASH, feeConfig));
|
|
91
|
+
}
|
|
92
|
+
}
|