@evergonlabs/tmi-protocol-staking-sdk 0.11.0-rc.3 → 0.11.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/actions/createPlatform/createPlatform.ts","../src/common/facets/facetsInitDictionary.ts","../src/internal/errors.ts","../src/common/roles.ts","../src/common/facets/slices/campaignCreationSkeleton.ts","../src/common/facets/slots.ts","../src/common/facets/options.ts","../src/common/facets/slices/creatorsEligibility.ts","../src/common/facets/slices/erc721.ts","../src/common/facets/slices/lock.ts","../src/common/chains.ts","../src/common/facets/facetsSetterDictionary.ts","../src/common/facets/slices/amount.ts","../src/common/facets/slices/amountMult.ts","../src/common/facets/slices/erc20Input.ts","../src/common/facets/slices/erc20Reward.ts","../src/common/facets/slices/erc1155Input.ts","../src/internal/utils.ts","../src/common/facets/slices/erc1155Reward.ts","../src/common/facets/slices/lockMult.ts","../src/common/facets/slices/rewardsDistribution.ts","../src/common/facets/slices/stakersEligibility.ts","../src/common/facets/slices/time.ts","../src/internal/stakingSdkTypechain.ts","../src/actions/createPlatform/createPlatformUtils.ts","../src/actions/createPool/createPool.ts","../src/actions/createPool/createPoolUtils.ts","../src/actions/distributeRewards/distributeRewards.ts","../src/common/facets/stakeCreation.ts","../src/actions/getReward/getReward.ts","../src/actions/grantRole/grantRole.ts","../src/actions/partialUnstake/partialUnstake.ts","../src/actions/restake/restake.ts","../src/actions/revokeRole/revokeRole.ts","../src/actions/stake/stake.ts","../src/actions/stake/stakeUtils.ts","../src/actions/unstake/unstake.ts","../src/templates/reputation.ts","../src/templates/reputationLock.ts","../src/templates/rwa.ts","../src/templates/index.ts"],"sourcesContent":["import \"@hono/zod-openapi\";\n\nexport * from \"./actions/index.js\";\nexport * from \"./common/index.js\";\nexport * from \"./templates/index.js\";\nexport { createMiddlewares } from \"@evergonlabs/tmi-protocol-utils/common\";\nexport { viemClientAsMiddleware } from \"@evergonlabs/tmi-protocol-utils/viem\";\n","import { Address, Hex } from \"viem\";\nimport { types } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { diamondFactoryAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { createFacetInitDictionary } from \"../../common/facets/facetsInitDictionary.js\";\nimport { IPlatformConfig } from \"../../common/facets/platformConfig.js\";\nimport { AnyPlatformTemplate, IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetSlot, facetSlots, IStakingChainId } from \"../../common/index.js\";\nimport { getFacetCutsWithAddAction } from \"../../internal/stakingSdkTypechain.js\";\nimport { getDiamondFactoryAddress } from \"../../internal/stakingSdkTypechain.js\";\n\ntype FacetType = types.FacetType;\n\nexport type ICreatePlatformRequest<TChainId extends IStakingChainId, TTemplate extends IPlatformTemplate> = {\n chainId: TChainId;\n admin: Address;\n data: ExcludeVoidProperties<IPlatformConfig<TTemplate>>;\n};\n\nexport function createPlatform<TChainId extends IStakingChainId, TTemplate extends AnyPlatformTemplate>(\n template: TTemplate,\n request: ICreatePlatformRequest<TChainId, TTemplate>,\n) {\n const initDictionary = createFacetInitDictionary(template);\n const facets: FacetType[] = [];\n const initSelectors: Hex[] = [];\n const initData: Hex[] = [];\n const platformConfig = request.data as IPlatformConfig<TTemplate>;\n\n facetSlots.forEach(<TSlot extends FacetSlot>(slot: TSlot) => {\n const option = template[slot];\n const handler = initDictionary[option];\n\n const val = handler(platformConfig[slot], platformConfig);\n if (val.targetFacet) {\n facets.push(val.targetFacet);\n }\n if (val.data) {\n initSelectors.push(val.data.selector);\n initData.push(val.data.data);\n }\n });\n\n const facetCuts = getFacetCutsWithAddAction(request.chainId, facets);\n return {\n address: getDiamondFactoryAddress(request.chainId),\n abi: diamondFactoryAbi,\n functionName: \"deployAndInitializeDiamond\",\n args: [facetCuts, initSelectors, initData, request.admin],\n } as const;\n}\n","import { Hex } from \"viem\";\nimport { constants, types } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { FacetOptionNotSupportedYetError } from \"../../internal/errors.js\";\nimport { StakingRole } from \"../roles.js\";\nimport { getPoolCreationDefaultInitData } from \"./slices/campaignCreationSkeleton.js\";\nimport { getCreatorEligibilityByRoleInitData } from \"./slices/creatorsEligibility.js\";\nimport { getErc721InitData } from \"./slices/erc721.js\";\nimport { getLockStaticPeriodInitData } from \"./slices/lock.js\";\nimport { FacetOptionEnum } from \"./options.js\";\nimport { IPlatformConfig, IPlatformConfigParam } from \"./platformConfig.js\";\nimport { IPlatformTemplate } from \"./template.js\";\n\ntype FacetType = types.FacetType;\nconst { InitSelectors } = constants;\n\nexport type IFacetInitData = {\n selector: Hex;\n data: Hex;\n};\n\nexport type IFacetInit = {\n targetFacet: FacetType | undefined;\n data: IFacetInitData | undefined;\n};\n\nexport type IFacetInitDictionary<TTemplate extends IPlatformTemplate> = {\n [TOption in FacetOptionEnum]: (\n params: IPlatformConfigParam<TOption>,\n config: IPlatformConfig<TTemplate>,\n ) => IFacetInit;\n};\n\nexport function createFacetInitDictionary<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n): IFacetInitDictionary<TTemplate> {\n return {\n // Access Control\n [FacetOptionEnum.AccessControlDefault]: () => {\n return {\n targetFacet: \"AccessControlStakingFacet\",\n data: undefined,\n };\n },\n\n // Erc 721\n [FacetOptionEnum.Erc721Default]: (params) => {\n return {\n targetFacet: \"ERC721Facet\",\n data: {\n selector: InitSelectors.Generic.Erc721 as Hex,\n data: getErc721InitData(params.erc721, params.isSoulbound),\n },\n };\n },\n\n // Pool creation\n [FacetOptionEnum.PoolCreationDefault]: () => {\n return {\n targetFacet: \"CampaignCreationSkeleton\",\n data: {\n selector: InitSelectors.Skeletons.CampaignCreation as Hex,\n data: getPoolCreationDefaultInitData(template),\n },\n };\n },\n [FacetOptionEnum.PoolCreationNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.PoolCreationNID);\n // return {\n // targetFacet: FacetEnum.CampaignCreationSkeletonNID,\n // data: undefined,\n // };\n },\n\n // Lock\n [FacetOptionEnum.LockStaticPeriod]: (params) => {\n return {\n targetFacet: \"StaticPeriodLockFacet\",\n data: {\n selector: InitSelectors.LockVariations.Static as Hex,\n data: getLockStaticPeriodInitData(params.maxLockPeriod),\n },\n };\n },\n [FacetOptionEnum.LockTwoBorder]: () => {\n return {\n targetFacet: \"TwoBorderTimeLockFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.LockAutoComplex]: () => {\n return {\n targetFacet: \"StaticPeriodLockFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.LockAutoPreStake]: () => {\n return {\n targetFacet: \"StaticPeriodLockFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.LockAutoRateBasedOpen]: () => {\n return {\n targetFacet: \"StaticPeriodLockFacet\",\n data: undefined,\n };\n },\n\n // Amount\n [FacetOptionEnum.AmountHardCap]: () => {\n return {\n targetFacet: \"HardcapAmountFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.AmountTwoBorder]: () => {\n return {\n targetFacet: \"TwoBorderAmountFacet\",\n data: undefined,\n };\n },\n\n // Amount mult\n [FacetOptionEnum.AmountMultContinuous]: () => {\n return {\n targetFacet: \"ContinuousVirtualAmountMultiplierFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.AmountMultInterval]: () => {\n return {\n targetFacet: \"IntervalVirtualAmountMultiplierFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.AmountMultNoMultiplier]: () => {\n return {\n targetFacet: \"NoVirtualAmountMultiplierFacet\",\n data: undefined,\n };\n },\n\n // Creators Eligibility\n [FacetOptionEnum.CreatorsEligibilityByRole]: (params) => {\n return {\n targetFacet: \"WhitelistedCampaignCreatorsFacet\",\n data: {\n selector: InitSelectors.Eligibility.Creators as Hex,\n data: getCreatorEligibilityByRoleInitData(params.role),\n },\n };\n },\n [FacetOptionEnum.CreatorsEligibilityDefault]: () => {\n return {\n targetFacet: \"WhitelistedCampaignCreatorsFacet\",\n data: {\n selector: InitSelectors.Eligibility.Creators as Hex,\n data: getCreatorEligibilityByRoleInitData(StakingRole.Creator),\n },\n };\n },\n [FacetOptionEnum.CreatorsEligibilityNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.CreatorsEligibilityNID);\n // return {\n // targetFacet: undefined,\n // data: undefined,\n // };\n },\n\n // Input\n [FacetOptionEnum.InputErc20]: () => {\n return {\n targetFacet: \"Erc20InputFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.InputErc1155]: () => {\n return {\n targetFacet: \"Erc1155InputFacet\",\n data: undefined,\n };\n },\n\n // Rewards\n [FacetOptionEnum.RewardErc1155Transfer]: () => {\n return {\n targetFacet: \"Erc1155RewardTransferFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardErc1155Minter]: () => {\n return {\n targetFacet: \"Erc1155RewardMinterFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardErc20Transfer]: () => {\n return {\n targetFacet: \"Erc20RewardTransferFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardErc20Minter]: () => {\n return {\n targetFacet: \"Erc20RewardMinterFacet\",\n data: undefined,\n };\n },\n\n // Lock mult\n [FacetOptionEnum.LockMultContinuous]: () => {\n return {\n targetFacet: \"ContinuousVirtualLockMultiplierFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.LockMultInterval]: () => {\n return {\n targetFacet: \"IntervalVirtualLockMultiplierFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.LockMultNoMultiplier]: () => {\n return {\n targetFacet: \"NoVirtualLockMultiplierFacet\",\n data: undefined,\n };\n },\n\n // Stake creation\n [FacetOptionEnum.StakeCreationDefault]: () => {\n return {\n targetFacet: \"StakingSkeleton\",\n data: undefined,\n };\n },\n [FacetOptionEnum.StakeCreationNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.StakeCreationNID);\n // return {\n // targetFacet: \"StakingSkeletonNID\",\n // data: undefined,\n // };\n },\n\n // Stakers Eligibility\n [FacetOptionEnum.StakersEligibilityDefault]: () => {\n return {\n targetFacet: \"WhitelistedStakersFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.StakersEligibilityByRole]: () => {\n return {\n targetFacet: \"WhitelistedStakersFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.StakersEligibilityNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.StakersEligibilityNID);\n // return {\n // targetFacet: undefined,\n // data: undefined,\n // };\n },\n\n // Time\n [FacetOptionEnum.TimeOnlyStarting]: () => {\n return {\n targetFacet: \"OnlyStartingTimestampCampaign\",\n data: undefined,\n };\n },\n [FacetOptionEnum.TimeTwoBorder]: () => {\n return {\n targetFacet: \"TwoBorderTimestampCampaign\",\n data: undefined,\n };\n },\n\n // Withdrawal\n [FacetOptionEnum.WithdrawalLockChecker]: () => {\n return {\n targetFacet: \"LockCheckerWithdrawalVariationFacet\",\n data: undefined,\n };\n },\n\n // Rewards Distribution\n [FacetOptionEnum.RewardDistributionComplex]: () => {\n return {\n targetFacet: \"ComplexRewardDistributionFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardDistributionPreStake]: () => {\n return {\n targetFacet: \"PreStakeRewardDistributionFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardDistributionRateBasedLock]: () => {\n return {\n targetFacet: \"RateBasedLockRewardDistributionFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: () => {\n return {\n targetFacet: \"RateBasedOpenRewardDistributionFacet\",\n data: undefined,\n };\n },\n };\n}\n","import { CustomError } from \"@evergonlabs/tmi-utils/errors\";\nimport { FacetOptionEnum } from \"../common/facets/options.js\";\n\nexport class FacetOptionNotSupportedYetError extends CustomError<{ option: FacetOptionEnum }> {\n constructor(option: FacetOptionEnum) {\n super({\n message: `Option ${option} is not supported or implemented yet`,\n name: \"FacetNotSupportedYetError\",\n data: {\n option: option,\n },\n });\n }\n}\n","import { Hex } from \"viem\";\nimport { constants } from \"@evergonlabs/tmi-contracts-staking-sdk\";\n\nconst { DEFAULT_ROLES, GENERIC_ROLES } = constants;\n\nexport enum StakingRole {\n Admin = \"Admin\",\n Open = \"Open\",\n Creator = \"Creator\",\n Staker = \"Staker\",\n}\n\nconst stakingRoleDictionary = {\n [StakingRole.Admin]: DEFAULT_ROLES.adminRole as Hex,\n [StakingRole.Open]: DEFAULT_ROLES.openRole as Hex,\n [StakingRole.Creator]: GENERIC_ROLES.creatorRole as Hex,\n [StakingRole.Staker]: GENERIC_ROLES.stakerRole as Hex,\n} satisfies Record<StakingRole, Hex>;\n\n/**\n * @returns hex-encoded role selector of certain role\n */\n\nexport function getStakingRole(role: StakingRole) {\n return stakingRoleDictionary[role];\n}\n\nexport function isStakingRole(x: unknown): x is StakingRole {\n return Object.values(StakingRole).includes(x as StakingRole);\n}\n\nexport function getStakingRoleHex(x: Hex | StakingRole): Hex {\n return isStakingRole(x) ? getStakingRole(x) : x;\n}\n","import { encodeAbiParameters, Hex } from \"viem\";\nimport { constants } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { FacetOptionEnum } from \"../options.js\";\nimport { facetSlots } from \"../slots.js\";\nimport { IPlatformTemplate } from \"../template.js\";\n\nconst { SetterSelectors } = constants;\n\n// Indicate facets that REQUIRES setter function\nexport const setterSelectorsByFacetOption = {\n // Amount\n [FacetOptionEnum.AmountHardCap]: SetterSelectors.CampaignAmounts.Hardcap as Hex,\n [FacetOptionEnum.AmountTwoBorder]: SetterSelectors.CampaignAmounts.TwoBorder as Hex,\n\n // Time\n [FacetOptionEnum.TimeOnlyStarting]: SetterSelectors.CampaignTimes.OnlyStarting as Hex,\n [FacetOptionEnum.TimeTwoBorder]: SetterSelectors.CampaignTimes.TwoBorder as Hex,\n\n // Lock variation\n [FacetOptionEnum.LockTwoBorder]: SetterSelectors.LockVariations.TwoBorder as Hex,\n [FacetOptionEnum.LockStaticPeriod]: SetterSelectors.LockVariations.Static as Hex,\n // LockAuto* options co-exist with a RewardDistribution* option. They use the\n // LockVariations setter (not the shared RewardsDistribution selector) so that\n // both the lock and reward distribution setters remain independent required\n // selectors in the campaign creation skeleton.\n [FacetOptionEnum.LockAutoComplex]: SetterSelectors.LockVariations.Static as Hex,\n [FacetOptionEnum.LockAutoPreStake]: SetterSelectors.LockVariations.Static as Hex,\n [FacetOptionEnum.LockAutoRateBasedOpen]: SetterSelectors.LockVariations.Static as Hex,\n\n // Reward distribution\n [FacetOptionEnum.RewardDistributionComplex]: SetterSelectors.RewardsDistribution.Complex as Hex,\n [FacetOptionEnum.RewardDistributionPreStake]: SetterSelectors.RewardsDistribution.PreStake as Hex,\n [FacetOptionEnum.RewardDistributionRateBasedLock]: SetterSelectors.RewardsDistribution.RateBasedLock as Hex,\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: SetterSelectors.RewardsDistribution.RateBasedOpen as Hex,\n\n // Stakers eligibility\n [FacetOptionEnum.StakersEligibilityDefault]: SetterSelectors.Eligibility.Stakers as Hex,\n [FacetOptionEnum.StakersEligibilityByRole]: SetterSelectors.Eligibility.Stakers as Hex,\n\n // Input\n [FacetOptionEnum.InputErc20]: SetterSelectors.TransferInput.Erc20 as Hex,\n [FacetOptionEnum.InputErc1155]: SetterSelectors.TransferInput.Erc1155 as Hex,\n\n // Reward\n [FacetOptionEnum.RewardErc1155Transfer]: SetterSelectors.TransferReward.Erc1155Transfer as Hex,\n [FacetOptionEnum.RewardErc1155Minter]: SetterSelectors.TransferReward.Erc1155Minter as Hex,\n [FacetOptionEnum.RewardErc20Transfer]: SetterSelectors.TransferReward.Erc20Transfer as Hex,\n [FacetOptionEnum.RewardErc20Minter]: SetterSelectors.TransferReward.Erc20Minter as Hex,\n\n // Amount multiplier\n [FacetOptionEnum.AmountMultInterval]: SetterSelectors.VirtualAmountMultiplier.Interval as Hex,\n [FacetOptionEnum.AmountMultContinuous]: SetterSelectors.VirtualAmountMultiplier.Continuous as Hex,\n\n // Lock multiplier\n [FacetOptionEnum.LockMultContinuous]: SetterSelectors.VirtualLockMultiplier.Continuous as Hex,\n [FacetOptionEnum.LockMultInterval]: SetterSelectors.VirtualLockMultiplier.Interval as Hex,\n} as const satisfies Partial<Record<FacetOptionEnum, Hex>>;\n\nexport type FacetOptionsWithSetter = keyof typeof setterSelectorsByFacetOption;\n\nexport function getPoolCreationDefaultInitData(template: IPlatformTemplate) {\n const selectors: { selector: Hex; option: FacetOptionEnum }[] = [];\n\n facetSlots.forEach((curr) => {\n const option = template[curr] as keyof typeof setterSelectorsByFacetOption;\n const selector = setterSelectorsByFacetOption[option];\n if (selector) {\n selectors.push({\n option: option,\n selector: selector,\n });\n }\n });\n\n return encodeAbiParameters(\n [\n { name: \"requiredSelectors\", type: \"bytes4[]\" },\n { name: \"optionalSelectors\", type: \"bytes4[]\" },\n ],\n [selectors.map((x) => x.selector), []],\n );\n}\n","export enum FacetSlot {\n Erc721 = \"Erc721\",\n Amount = \"Amount\",\n Time = \"Time\",\n PoolCreation = \"PoolCreation\",\n StakeCreation = \"StakeCreation\",\n CreatorsEligibility = \"CreatorsEligibility\",\n StakersEligibility = \"StakersEligibility\",\n Lock = \"Lock\",\n RewardsDistribution = \"RewardsDistribution\",\n Input = \"Input\",\n Reward = \"Reward\",\n AmountMult = \"AmountMult\",\n LockMult = \"LockMult\",\n Withdrawal = \"Withdrawal\",\n AccessControl = \"AccessControl\",\n}\n\n// IMPORTANT: don't change the order it could affect users\n// if you need to add new slot add it to the bottom\nexport const facetSlots = [\n FacetSlot.AccessControl,\n FacetSlot.Erc721,\n FacetSlot.Amount,\n FacetSlot.Time,\n FacetSlot.PoolCreation,\n FacetSlot.StakeCreation,\n FacetSlot.CreatorsEligibility,\n FacetSlot.StakersEligibility,\n FacetSlot.Lock,\n FacetSlot.RewardsDistribution,\n FacetSlot.Input,\n FacetSlot.Reward,\n FacetSlot.AmountMult,\n FacetSlot.LockMult,\n FacetSlot.Withdrawal,\n] as const;\n","import { FacetSlot } from \"./slots.js\";\n\nexport enum FacetOptionEnum {\n // Access Control\n AccessControlDefault = \"AccessControlDefault\",\n\n // Amount\n AmountHardCap = \"AmountHardCap\",\n AmountTwoBorder = \"AmountTwoBorder\",\n\n // Time\n TimeOnlyStarting = \"TimeOnlyStarting\",\n TimeTwoBorder = \"TimeTwoBorder\",\n\n // Lock\n LockStaticPeriod = \"LockStaticPeriod\",\n LockTwoBorder = \"LockTwoBorder\",\n LockAutoComplex = \"LockAutoComplex\",\n LockAutoRateBasedOpen = \"LockAutoRateBasedOpen\",\n LockAutoPreStake = \"LockAutoPreStake\",\n\n // Reward Distribution\n RewardDistributionComplex = \"RewardDistributionComplex\",\n RewardDistributionPreStake = \"RewardDistributionPreStake\",\n RewardDistributionRateBasedOpen = \"RewardDistributionRateBasedOpen\",\n RewardDistributionRateBasedLock = \"RewardDistributionRateBasedLock\",\n\n // Input\n InputErc20 = \"InputErc20\",\n InputErc1155 = \"InputErc1155\",\n\n // Reward\n RewardErc20Transfer = \"RewardErc20Transfer\",\n RewardErc20Minter = \"RewardErc20Minter\",\n RewardErc1155Transfer = \"RewardErc1155Transfer\",\n RewardErc1155Minter = \"RewardErc1155Minter\",\n\n // Lock Multiplier\n LockMultContinuous = \"LockMultContinuous\",\n LockMultInterval = \"LockMultInterval\",\n LockMultNoMultiplier = \"LockMultNoMultiplier\",\n\n // Amount Multiplier\n AmountMultContinuous = \"AmountMultContinuous\",\n AmountMultInterval = \"AmountMultInterval\",\n AmountMultNoMultiplier = \"AmountMultNoMultiplier\",\n\n // Erc721 (Position handler)\n Erc721Default = \"Erc721Default\",\n\n // Creators Eligibility\n CreatorsEligibilityByRole = \"CreatorsEligibilityByRole\",\n CreatorsEligibilityDefault = \"CreatorsEligibilityDefault\",\n CreatorsEligibilityNID = \"CreatorsEligibilityNID\",\n\n // Stakers Eligibility\n StakersEligibilityByRole = \"StakersEligibilityByRole\",\n StakersEligibilityDefault = \"StakersEligibilityDefault\",\n StakersEligibilityNID = \"StakersEligibilityNID\",\n\n // Withdrawal\n WithdrawalLockChecker = \"WithdrawalLockChecker\",\n\n // Pool creation (skeleton)\n PoolCreationDefault = \"PoolCreationDefault\",\n PoolCreationNID = \"PoolCreationNID\",\n\n // Pool creation (skeleton)\n StakeCreationDefault = \"StakeCreationDefault\",\n StakeCreationNID = \"StakeCreationNID\",\n}\n\nexport const facetOptionsBySlot = {\n [FacetSlot.Amount]: [FacetOptionEnum.AmountHardCap, FacetOptionEnum.AmountTwoBorder],\n [FacetSlot.Time]: [FacetOptionEnum.TimeOnlyStarting, FacetOptionEnum.TimeTwoBorder],\n [FacetSlot.CreatorsEligibility]: [\n FacetOptionEnum.CreatorsEligibilityDefault,\n FacetOptionEnum.CreatorsEligibilityByRole,\n FacetOptionEnum.CreatorsEligibilityNID,\n ],\n [FacetSlot.Erc721]: [FacetOptionEnum.Erc721Default],\n [FacetSlot.Input]: [FacetOptionEnum.InputErc1155, FacetOptionEnum.InputErc20],\n [FacetSlot.Reward]: [\n FacetOptionEnum.RewardErc20Transfer,\n FacetOptionEnum.RewardErc20Minter,\n FacetOptionEnum.RewardErc1155Transfer,\n FacetOptionEnum.RewardErc1155Minter,\n ],\n [FacetSlot.RewardsDistribution]: [\n FacetOptionEnum.RewardDistributionComplex,\n FacetOptionEnum.RewardDistributionPreStake,\n FacetOptionEnum.RewardDistributionRateBasedLock,\n FacetOptionEnum.RewardDistributionRateBasedOpen,\n ],\n [FacetSlot.Lock]: [\n FacetOptionEnum.LockAutoComplex,\n FacetOptionEnum.LockAutoPreStake,\n FacetOptionEnum.LockAutoRateBasedOpen,\n FacetOptionEnum.LockStaticPeriod,\n FacetOptionEnum.LockTwoBorder,\n ],\n [FacetSlot.LockMult]: [\n FacetOptionEnum.LockMultContinuous,\n FacetOptionEnum.LockMultInterval,\n FacetOptionEnum.LockMultNoMultiplier,\n ],\n [FacetSlot.Withdrawal]: [FacetOptionEnum.WithdrawalLockChecker],\n [FacetSlot.StakersEligibility]: [\n FacetOptionEnum.StakersEligibilityDefault,\n FacetOptionEnum.StakersEligibilityByRole,\n FacetOptionEnum.StakersEligibilityNID,\n ],\n [FacetSlot.PoolCreation]: [FacetOptionEnum.PoolCreationDefault, FacetOptionEnum.PoolCreationNID],\n [FacetSlot.AmountMult]: [\n FacetOptionEnum.AmountMultContinuous,\n FacetOptionEnum.AmountMultInterval,\n FacetOptionEnum.AmountMultNoMultiplier,\n ],\n [FacetSlot.StakeCreation]: [FacetOptionEnum.StakeCreationDefault, FacetOptionEnum.StakeCreationNID],\n [FacetSlot.AccessControl]: [FacetOptionEnum.AccessControlDefault],\n} as const satisfies Record<FacetSlot, FacetOptionEnum[]>;\n\nexport type FacetOptionsBySlot<TSlot extends FacetSlot> = (typeof facetOptionsBySlot)[TSlot][number];\n","import { encodeAbiParameters, Hex } from \"viem\";\nimport { getStakingRoleHex, StakingRole } from \"../../roles.js\";\n\nexport function getCreatorEligibilityByRoleInitData(role: Hex | StakingRole) {\n return encodeAbiParameters(\n [\n {\n name: \"roles\",\n type: \"bytes32[]\",\n },\n ],\n [[getStakingRoleHex(role)]],\n );\n}\n","import { encodeAbiParameters } from \"viem\";\nimport { z } from \"zod\";\nimport { Erc721MetaSchema } from \"@evergonlabs/tmi-protocol-types/evm\";\n\nexport function getErc721InitData(token: z.output<typeof Erc721MetaSchema>, isSoulbound: boolean) {\n return encodeAbiParameters(\n [\n { name: \"name\", type: \"string\" },\n { name: \"symbol\", type: \"string\" },\n { name: \"baseUri\", type: \"string\" },\n { name: \"isTransferrable\", type: \"bool\" },\n ],\n [token.name, token.symbol, token.baseUri, isSoulbound],\n );\n}\n","import { encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport function getLockStaticPeriodInitData(maxLockPeriodInSeconds: INumberish) {\n return encodeAbiParameters(\n [\n {\n name: \"maxLockPeriodInSeconds\",\n type: \"uint256\",\n },\n ],\n [BigInt(maxLockPeriodInSeconds)],\n );\n}\n\nexport function getLockStaticPeriodSetData(periodsInSeconds: INumberish[]) {\n return encodeAbiParameters(\n [\n {\n name: \"lockPeriods\",\n type: \"uint256[]\",\n },\n ],\n [periodsInSeconds.map((x) => BigInt(x))],\n );\n}\n\nexport function getLockTwoBorderSetData(\n minAcceptedLockPeriodSeconds: INumberish,\n maxAcceptedLockPeriodSeconds: INumberish,\n) {\n return encodeAbiParameters(\n [\n { name: \"minAcceptedLockPeriodSeconds\", type: \"uint256\" },\n { name: \"maxAcceptedLockPeriodSeconds\", type: \"uint256\" },\n ],\n [BigInt(minAcceptedLockPeriodSeconds), BigInt(maxAcceptedLockPeriodSeconds)],\n );\n}\n","import { anvil, baseSepolia, sepolia } from \"viem/chains\";\nimport { z } from \"@evergonlabs/tmi-protocol-utils/zod\";\nimport { createSupportedChains } from \"@evergonlabs/tmi-utils/models\";\n\nexport const StakingChains = createSupportedChains([sepolia, baseSepolia, anvil]);\n\nconst stakingChainLiterals = StakingChains.chainIds.map((id) => z.literal(id));\nexport const StakingChainId = z.union(stakingChainLiterals).openapi({\n enum: StakingChains.chainIds,\n description: \"Supported chain id\",\n example: `${sepolia.id}`,\n});\n\nexport type IStakingChainId = z.input<typeof StakingChainId>;\n\ntype SupportedStakingChainId = (typeof StakingChains)[\"chainIds\"][number];\n\nexport const getStakingChain = StakingChains.get.bind(StakingChains);\n\nexport type InferChainById<T extends SupportedStakingChainId> = ReturnType<typeof getStakingChain<T>>;\n","import { Hex } from \"viem\";\nimport { CustomError } from \"@evergonlabs/tmi-utils/errors\";\nimport { FacetOptionNotSupportedYetError } from \"../../internal/errors.js\";\nimport { StakingRole } from \"../roles.js\";\nimport { getAmountHardcapOnlySetData, getAmountTwoBorderSetData } from \"./slices/amount.js\";\nimport { getAmountMultContinuousSetData, getAmountMultIntervalSetData } from \"./slices/amountMult.js\";\nimport { getErc20InputSetterData } from \"./slices/erc20Input.js\";\nimport { getErc20RewardSetterData } from \"./slices/erc20Reward.js\";\nimport { getErc1155InputSetterData } from \"./slices/erc1155Input.js\";\nimport { getErc1155RewardSetterData } from \"./slices/erc1155Reward.js\";\nimport { getLockStaticPeriodSetData, getLockTwoBorderSetData } from \"./slices/lock.js\";\nimport { getLockMultContinuousSetData, getLockMultStaticPeriodSetData } from \"./slices/lockMult.js\";\nimport {\n getRewardsDistributionComplexSetData,\n getRewardsDistributionPreStakeSetData,\n getRewardsDistributionRateBasedLockSetData,\n getRewardsDistributionRateBasedOpenSetData,\n} from \"./slices/rewardsDistribution.js\";\nimport { getStakersEligibilitySetData } from \"./slices/stakersEligibility.js\";\nimport { getTimeOnlyStartingSetData, getTimeTwoBorderSetData } from \"./slices/time.js\";\nimport { FacetOptionEnum } from \"./options.js\";\nimport { IPoolConfig, IPoolConfigParam } from \"./poolConfig.js\";\nimport { FacetSlot } from \"./slots.js\";\nimport { IPlatformTemplate } from \"./template.js\";\n\nexport type IFacetSetterData = {\n data: Hex;\n};\n\nexport type IFacetSettersDictionary<TTemplate extends IPlatformTemplate> = {\n [TOption in FacetOptionEnum]: (\n params: IPoolConfigParam<TOption>,\n config: IPoolConfig<TTemplate>,\n ) => IFacetSetterData | undefined;\n};\n\nexport function createFacetSettersDictionary<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n): IFacetSettersDictionary<TTemplate> {\n return {\n // Access Control\n [FacetOptionEnum.AccessControlDefault]: () => undefined,\n\n // Erc 721\n [FacetOptionEnum.Erc721Default]: () => undefined,\n\n // Pool creation\n [FacetOptionEnum.PoolCreationDefault]: () => undefined,\n [FacetOptionEnum.PoolCreationNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.PoolCreationNID);\n },\n\n // Lock variations\n [FacetOptionEnum.LockStaticPeriod]: (params) => ({\n data: getLockStaticPeriodSetData(params.lockPeriods),\n }),\n [FacetOptionEnum.LockTwoBorder]: (params) => ({\n data: getLockTwoBorderSetData(params.minAcceptedLockPeriod, params.maxAcceptedLockPeriod),\n }),\n\n // Automatic lock variations\n // Must be in align with the FacetSlot.RewardsDistribution\n [FacetOptionEnum.LockAutoComplex]: (_params, config) => {\n if (config[FacetSlot.RewardsDistribution].type !== FacetOptionEnum.RewardDistributionComplex) {\n throw new CombinationError(FacetOptionEnum.LockAutoComplex, FacetOptionEnum.RewardDistributionComplex);\n }\n return {\n data: getLockStaticPeriodSetData([0]),\n };\n },\n [FacetOptionEnum.LockAutoPreStake]: (_params, config) => {\n if (config[FacetSlot.RewardsDistribution].type !== FacetOptionEnum.RewardDistributionPreStake) {\n throw new CombinationError(FacetOptionEnum.LockAutoPreStake, FacetOptionEnum.RewardDistributionPreStake);\n }\n const time = config[FacetSlot.Time];\n if (time.type !== FacetOptionEnum.TimeTwoBorder) {\n throw new CombinationError(FacetOptionEnum.LockAutoPreStake, FacetOptionEnum.TimeTwoBorder);\n }\n const ms = time.rewardsEndDate.getTime() - time.endDate.getTime();\n return {\n data: getLockStaticPeriodSetData([ms / 1000]),\n };\n },\n [FacetOptionEnum.LockAutoRateBasedOpen]: (_params, config) => {\n if (config[FacetSlot.RewardsDistribution].type !== FacetOptionEnum.RewardDistributionRateBasedOpen) {\n throw new CombinationError(\n FacetOptionEnum.LockAutoRateBasedOpen,\n FacetOptionEnum.RewardDistributionRateBasedOpen,\n );\n }\n return {\n data: getLockStaticPeriodSetData([0]),\n };\n },\n\n // Amount\n [FacetOptionEnum.AmountHardCap]: (params) => {\n return {\n data: getAmountHardcapOnlySetData(params.hardCap),\n };\n },\n [FacetOptionEnum.AmountTwoBorder]: (params) => {\n return {\n data: getAmountTwoBorderSetData(params.minAmount, params.maxAmount),\n };\n },\n\n // Amount mult\n [FacetOptionEnum.AmountMultNoMultiplier]: () => undefined,\n [FacetOptionEnum.AmountMultContinuous]: (params) => {\n return {\n data: getAmountMultContinuousSetData(params.packetsAndMultipliers),\n };\n },\n [FacetOptionEnum.AmountMultInterval]: (params) => {\n return {\n data: getAmountMultIntervalSetData(params.packetsAndMultipliers),\n };\n },\n\n // Creators Eligibility\n [FacetOptionEnum.CreatorsEligibilityByRole]: () => undefined,\n [FacetOptionEnum.CreatorsEligibilityDefault]: () => undefined,\n [FacetOptionEnum.CreatorsEligibilityNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.CreatorsEligibilityNID);\n },\n\n // Input\n [FacetOptionEnum.InputErc20]: (params) => {\n return {\n data: getErc20InputSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n [FacetOptionEnum.InputErc1155]: (params) => {\n return {\n data: getErc1155InputSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n tokenId: x.tokenId,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n\n // Reward\n [FacetOptionEnum.RewardErc1155Transfer]: (params) => {\n return {\n data: getErc1155RewardSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n tokenId: x.tokenId,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n [FacetOptionEnum.RewardErc1155Minter]: (params) => {\n return {\n data: getErc1155RewardSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n tokenId: x.tokenId,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n [FacetOptionEnum.RewardErc20Transfer]: (params) => {\n return {\n data: getErc20RewardSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n [FacetOptionEnum.RewardErc20Minter]: (params) => {\n return {\n data: getErc20RewardSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n\n // Lock mult\n [FacetOptionEnum.LockMultNoMultiplier]: () => undefined,\n [FacetOptionEnum.LockMultContinuous]: (params) => {\n return {\n data: getLockMultContinuousSetData(\n params.lockPeriods.map((x) => ({\n lockPeriodSeconds: x[0],\n multiplier: x[1],\n })),\n ),\n };\n },\n [FacetOptionEnum.LockMultInterval]: (params) => {\n return {\n data: getLockMultStaticPeriodSetData(\n params.lockPeriods.map((x) => ({\n lockPeriodSeconds: x[0],\n multiplier: x[1],\n })),\n ),\n };\n },\n\n // Stake creation\n [FacetOptionEnum.StakeCreationDefault]: () => undefined,\n [FacetOptionEnum.StakeCreationNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.StakeCreationNID);\n },\n\n // Stakers eligibility\n [FacetOptionEnum.StakersEligibilityDefault]: (params) => {\n return {\n data: getStakersEligibilitySetData([StakingRole.Staker], params.isCampaignScoped),\n };\n },\n [FacetOptionEnum.StakersEligibilityByRole]: (params) => {\n return {\n data: getStakersEligibilitySetData(params.eligibleRoles, params.isCampaignScoped),\n };\n },\n [FacetOptionEnum.StakersEligibilityNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.StakersEligibilityNID);\n },\n\n // Time\n [FacetOptionEnum.TimeOnlyStarting]: (params) => {\n return {\n data: getTimeOnlyStartingSetData(params.startDate),\n };\n },\n [FacetOptionEnum.TimeTwoBorder]: (params) => {\n return {\n data: getTimeTwoBorderSetData(params.startDate, params.endDate, params.rewardsEndDate),\n };\n },\n\n // Withdrawal\n [FacetOptionEnum.WithdrawalLockChecker]: () => undefined,\n\n // Rewards Distribution\n [FacetOptionEnum.RewardDistributionComplex]: (params) => {\n return {\n data: getRewardsDistributionComplexSetData(params.duration, params.distributor),\n };\n },\n [FacetOptionEnum.RewardDistributionPreStake]: (params) => {\n return {\n data: getRewardsDistributionPreStakeSetData(params.totalPackets, params.isInstaRewards, params.rewardsProvider),\n };\n },\n [FacetOptionEnum.RewardDistributionRateBasedLock]: (params) => {\n return {\n data: getRewardsDistributionRateBasedLockSetData(\n params.campaignRate,\n template[FacetSlot.LockMult] !== FacetOptionEnum.LockMultNoMultiplier,\n ),\n };\n },\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: (params) => {\n return {\n data: getRewardsDistributionRateBasedOpenSetData(params.campaignRate),\n };\n },\n };\n}\n\nclass CombinationError extends CustomError<{\n targetOption: FacetOptionEnum;\n requiredOption: FacetOptionEnum;\n}> {\n constructor(targetOption: FacetOptionEnum, requiredOption: FacetOptionEnum) {\n super({\n message: `Option ${targetOption} can be used only in combination with ${requiredOption}`,\n name: \"CombinationError\",\n data: {\n requiredOption,\n targetOption,\n },\n });\n }\n}\n","import { encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport function getAmountTwoBorderSetData(minAmountOfPackets: INumberish, maxAmountOfPackets: INumberish) {\n return encodeAbiParameters(\n [\n { name: \"minAmountOfPackets\", type: \"uint256\" },\n { name: \"maxAmountOfPackets\", type: \"uint256\" },\n ],\n [BigInt(minAmountOfPackets), BigInt(maxAmountOfPackets)],\n );\n}\n\nexport function getAmountHardcapOnlySetData(hardCapPackets: INumberish) {\n return encodeAbiParameters(\n [\n {\n name: \"hardCapPackets\",\n type: \"uint256\",\n },\n ],\n [BigInt(hardCapPackets)],\n );\n}\n","import { encodeAbiParameters, parseUnits } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport function getAmountMultIntervalSetData(packetsAndMultipliers: [INumberish, INumberish][]) {\n return encodeAbiParameters(\n [\n { name: \"packetsStaked\", type: \"uint256[]\" },\n { name: \"packetsStakedMultipliers\", type: \"uint256[]\" },\n ],\n [\n packetsAndMultipliers.map((x) => BigInt(x[0])),\n // According to doc of `IntervalVirtualAmountMultiplierFacet`\n // Multipliers should be scaled by 1e18, allowing for calculations with up to 18 decimal precision.\n packetsAndMultipliers.map((x) => parseUnits(x[1].toString(), 18)),\n ],\n );\n}\n\nexport function getAmountMultContinuousSetData(packetsAndMultipliers: [INumberish, INumberish][]) {\n return encodeAbiParameters(\n [\n { name: \"packetsStaked\", type: \"uint256[]\" },\n { name: \"packetsStakedMultipliers\", type: \"uint256[]\" },\n ],\n [\n packetsAndMultipliers.map((x) => BigInt(x[0])),\n // According to doc of `ContinuousVirtualAmountMultiplierFacet`\n // Multipliers should be scaled by 1e18, allowing for calculations with up to 18 decimal precision.\n packetsAndMultipliers.map((x) => parseUnits(x[1].toString(), 18)),\n ],\n );\n}\n","import { Address, encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport type IErc20InputEntry = {\n tokenAddress: Address;\n amountOfTokensPerPacket: INumberish;\n};\n\nexport function getErc20InputSetterData(entries: IErc20InputEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"tokenAddresses\", type: \"address[]\" },\n { name: \"amountOfTokensPerPacket\", type: \"uint256[]\" },\n ],\n [entries.map((x) => x.tokenAddress), entries.map((x) => BigInt(x.amountOfTokensPerPacket))],\n );\n}\n","import { Address, encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport type IErc20RewardEntry = {\n tokenAddress: Address;\n amountOfTokensPerPacket: INumberish;\n};\n\nexport function getErc20RewardSetterData(entries: IErc20RewardEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"tokenAddresses\", type: \"address[]\" },\n { name: \"amountOfTokensPerPacket\", type: \"uint256[]\" },\n ],\n [entries.map((x) => x.tokenAddress), entries.map((x) => BigInt(x.amountOfTokensPerPacket))],\n );\n}\n","import { Address, encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { parseErc1155TokenId } from \"../../../internal/utils.js\";\n\nexport type IErc1155InputEntry = {\n tokenAddress: Address;\n tokenId: string;\n amountOfTokensPerPacket: INumberish;\n};\n\nexport function getErc1155InputSetterData(entries: IErc1155InputEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"tokenAddresses\", type: \"address[]\" },\n { name: \"tokenIds\", type: \"uint256[]\" },\n { name: \"amountOfTokensPerPacket\", type: \"uint256[]\" },\n ],\n [\n entries.map((x) => x.tokenAddress),\n entries.map((x) => parseErc1155TokenId(x.tokenId)),\n entries.map((x) => BigInt(x.amountOfTokensPerPacket)),\n ],\n );\n}\n","export function parseErc1155TokenId(tokenId: string): bigint {\n const parsed = parseInt(tokenId);\n if (isNaN(parsed)) {\n throw new Error(`Invalid token id: ${tokenId}`);\n }\n return BigInt(parsed);\n}\n","import { Address, encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { parseErc1155TokenId } from \"../../../internal/utils.js\";\n\nexport type IErc1155RewardEntry = {\n tokenAddress: Address;\n tokenId: string;\n amountOfTokensPerPacket: INumberish;\n};\n\nexport function getErc1155RewardSetterData(entries: IErc1155RewardEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"tokenAddresses\", type: \"address[]\" },\n { name: \"tokenIds\", type: \"uint256[]\" },\n { name: \"amountOfTokensPerPacket\", type: \"uint256[]\" },\n ],\n [\n entries.map((x) => x.tokenAddress),\n entries.map((x) => parseErc1155TokenId(x.tokenId)),\n entries.map((x) => BigInt(x.amountOfTokensPerPacket)),\n ],\n );\n}\n","import { encodeAbiParameters, parseUnits } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport type ILockMultIntervalEntry = {\n lockPeriodSeconds: INumberish;\n multiplier: INumberish;\n};\n\nexport function getLockMultStaticPeriodSetData(entries: ILockMultIntervalEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"timeLockPeriods\", type: \"uint256[]\" },\n { name: \"timeLockMultipliers\", type: \"uint256[]\" },\n ],\n [entries.map((x) => BigInt(x.lockPeriodSeconds)), entries.map((x) => parseUnits(x.multiplier.toString(), 18))],\n );\n}\n\nexport function getLockMultContinuousSetData(entries: ILockMultIntervalEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"timeLockPeriods\", type: \"uint256[]\" },\n { name: \"timeLockMultipliers\", type: \"uint256[]\" },\n ],\n [entries.map((x) => BigInt(x.lockPeriodSeconds)), entries.map((x) => parseUnits(x.multiplier.toString(), 18))],\n );\n}\n","import { Address, encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport function getRewardsDistributionRateBasedLockSetData(\n campaignRate: INumberish,\n isVirtualLockMultiplierSupported: boolean,\n) {\n return encodeAbiParameters(\n [\n { name: \"campaignRate\", type: \"uint256\" },\n { name: \"isVirtualLockMultiplierSupported\", type: \"bool\" },\n ],\n [BigInt(campaignRate), isVirtualLockMultiplierSupported],\n );\n}\n\nexport function getRewardsDistributionRateBasedOpenSetData(campaignRate: INumberish) {\n return encodeAbiParameters(\n [\n {\n name: \"campaignRate\",\n type: \"uint256\",\n },\n ],\n [BigInt(campaignRate)],\n );\n}\n\nexport function getRewardsDistributionComplexSetData(durationSeconds: INumberish, campaignRewardDistributor: Address) {\n return encodeAbiParameters(\n [\n { name: \"interval\", type: \"uint256\" },\n { name: \"campaignRewardDistributor\", type: \"address\" },\n ],\n [BigInt(durationSeconds), campaignRewardDistributor],\n );\n}\n\nexport function getRewardsDistributionPreStakeSetData(\n totalReward: INumberish,\n isInstaRewards: boolean,\n rewardsProvider: Address,\n) {\n return encodeAbiParameters(\n [\n { name: \"totalReward\", type: \"uint256\" },\n { name: \"isInstaRewards\", type: \"bool\" },\n { name: \"rewardsProvider\", type: \"address\" },\n ],\n [BigInt(totalReward), isInstaRewards, rewardsProvider],\n );\n}\n","import { encodeAbiParameters, Hex } from \"viem\";\nimport { getStakingRoleHex, StakingRole } from \"../../roles.js\";\n\nexport function getStakersEligibilitySetData(\n eligibleForStakingRoles: (Hex | StakingRole)[],\n isCampaignScoped: boolean,\n) {\n return encodeAbiParameters(\n [\n { name: \"eligibleForStakingRoles\", type: \"bytes32[]\" },\n { name: \"isCampaignScoped\", type: \"bool\" },\n ],\n [eligibleForStakingRoles.map((x) => getStakingRoleHex(x)), isCampaignScoped],\n );\n}\n","import { encodeAbiParameters } from \"viem\";\nimport { msToSeconds } from \"@evergonlabs/tmi-protocol-utils/date\";\n\nexport function getTimeTwoBorderSetData(startDate: Date, endDate: Date, rewardsDate: Date) {\n return encodeAbiParameters(\n [\n { name: \"campaignStartingTimestamp\", type: \"uint256\" },\n { name: \"campaignEndingTimestamp\", type: \"uint256\" },\n { name: \"campaignRewardsEndingTimestamp\", type: \"uint256\" },\n ],\n [\n msToSeconds(BigInt(startDate.getTime())),\n msToSeconds(BigInt(endDate.getTime())),\n msToSeconds(BigInt(rewardsDate.getTime())),\n ],\n );\n}\n\nexport function getTimeOnlyStartingSetData(campaignStartingTimestamp: Date) {\n return encodeAbiParameters(\n [\n {\n name: \"campaignStartingTimestamp\",\n type: \"uint256\",\n },\n ],\n [msToSeconds(BigInt(campaignStartingTimestamp.getTime()))],\n );\n}\n","import { Address, Hex } from \"viem\";\nimport { anvil, baseSepolia, sepolia } from \"viem/chains\";\nimport { constants, getFacetCutsAdd, getStakingFacetFactory, types } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { FACET_CUT_ACTION, IFacetCut } from \"@evergonlabs/tmi-protocol-types/diamond\";\nimport { IStakingChainId } from \"../common/chains.js\";\n\ntype StakingChainId = types.ChainId;\ntype FacetType = types.FacetType;\n\n/**\n * @returns the FacetCuts objects (with ADD FacetCutAction) for the provided contracts\n */\nexport function getFacetCutsWithAddAction(chainId: IStakingChainId, facets: FacetType[]): IFacetCut[] {\n const contracts = facets.map((facet) => {\n const Contract = getStakingFacetFactory(facet);\n return Contract.getContract(getFacetAddress(facet, chainId), Contract.createInterface());\n });\n return getFacetCutsAdd(contracts).map((x) => ({\n target: x.target as Hex,\n action: x.action as FACET_CUT_ACTION,\n selectors: x.selectors as Hex[],\n }));\n}\n\n/**\n * @returns the contract address of deployed Facet by it's name\n * it accepts only supported chain id\n */\nexport function getFacetAddress<TType extends FacetType>(type: TType, chainId: IStakingChainId) {\n return constants.contractAddresses[toStakingSdkChainId(chainId)][type];\n}\n\nconst stakingChainIdDictionary: Record<IStakingChainId, StakingChainId> = {\n [`${sepolia.id}` as const]: sepolia.id,\n [`${baseSepolia.id}` as const]: baseSepolia.id,\n [`${anvil.id}` as const]: sepolia.id, // we are using our anvil instance as sepolia fork here\n};\n\n/**\n * @returns mapped chain id to the low-level staking sdk.\n */\nexport function toStakingSdkChainId(chainId: IStakingChainId): StakingChainId {\n return stakingChainIdDictionary[chainId];\n}\n\nconst stakingDiamondFactoryByChain: Record<IStakingChainId, Address> = {\n [`${sepolia.id}` as const]: constants.diamondFactoryAddresses[sepolia.id],\n [`${baseSepolia.id}` as const]: constants.diamondFactoryAddresses[baseSepolia.id],\n [`${anvil.id}` as const]: constants.diamondFactoryAddresses[sepolia.id],\n};\n\n/**\n * @returns diamond factory for of corresponding chain id\n * Must one of supported chain ids provided.\n */\nexport function getDiamondFactoryAddress(chainId: IStakingChainId) {\n return stakingDiamondFactoryByChain[chainId];\n}\n","import { Log, parseEventLogs } from \"viem\";\nimport { diamondFactoryAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\n\nexport function parseDeployDiamondEvent(logs: Log[]) {\n const result = parseEventLogs({\n eventName: \"DiamondDeployedAndInitialized\" as const,\n abi: diamondFactoryAbi,\n logs: logs,\n })[0];\n if (result) {\n return {\n diamondAddress: result.args.diamondAddress,\n admin: result.args.admin,\n };\n }\n return null;\n}\n","import { Address, encodeAbiParameters, Hex } from \"viem\";\nimport { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { createFacetSettersDictionary } from \"../../common/facets/facetsSetterDictionary.js\";\nimport { FacetOptionEnum } from \"../../common/facets/options.js\";\nimport { IPoolConfig } from \"../../common/facets/poolConfig.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetSlot, facetSlots } from \"../../common/index.js\";\nimport { getPoolCreationAbi } from \"./createPoolUtils.js\";\n\nexport type ICreatePoolRequest<TTemplate extends IPlatformTemplate> = {\n platform: Address;\n data: ExcludeVoidProperties<IPoolConfig<TTemplate>>;\n};\n\nexport function createPool<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n request: ICreatePoolRequest<TTemplate>,\n) {\n const setDictionary = createFacetSettersDictionary(template);\n const poolConfig = request.data as IPoolConfig<TTemplate>;\n const requiredData: { option: FacetOptionEnum; data: Hex }[] = [];\n\n facetSlots.forEach(<TSlot extends FacetSlot>(slot: TSlot) => {\n const option = template[slot];\n const handler = setDictionary[option];\n const result = handler(poolConfig[slot], poolConfig);\n if (result) {\n requiredData.push({\n data: result.data,\n option: option,\n });\n }\n });\n\n const encodedData = encodeAbiParameters(\n [\n { name: \"optionalParams\", type: \"bytes4[]\" },\n { name: \"params\", type: \"bytes[]\" },\n ],\n [[], requiredData.map((x) => x.data)],\n );\n\n return {\n address: request.platform,\n abi: getPoolCreationAbi(template),\n functionName: \"createCampaign\",\n args: [encodedData],\n };\n}\n","import { Abi, Log, parseEventLogs } from \"viem\";\nimport {\n campaignCreationSkeletonAbi,\n campaignCreationSkeletonNidAbi,\n} from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { FacetOptionEnum, FacetOptionsBySlot, FacetSlot, IPlatformTemplate } from \"../../common/index.js\";\n\nconst poolCreationFacetByOption = {\n [FacetOptionEnum.PoolCreationDefault]: campaignCreationSkeletonAbi,\n [FacetOptionEnum.PoolCreationNID]: campaignCreationSkeletonNidAbi,\n} satisfies Record<FacetOptionsBySlot<FacetSlot.PoolCreation>, Abi>;\n\nexport function getPoolCreationAbi<TTemplate extends IPlatformTemplate>(template: TTemplate) {\n return poolCreationFacetByOption[template[FacetSlot.PoolCreation]];\n}\n\nexport function parseCreatePoolEvent<TTemplate extends IPlatformTemplate>(template: TTemplate, logs: Log[]) {\n const abi = getPoolCreationAbi(template);\n const result = parseEventLogs({\n eventName: \"StakingCampaignCreated\" as const,\n abi: abi,\n logs: logs,\n })[0];\n if (result) {\n return {\n poolId: result.args.campaignId,\n creator: result.args.creator,\n };\n }\n return null;\n}\n\nexport function parseAssetManagersDeployEvent<TTemplate extends IPlatformTemplate>(template: TTemplate, logs: Log[]) {\n const abi = getPoolCreationAbi(template);\n const result = parseEventLogs({\n eventName: \"CampaignAssetManagersDeployed\" as const,\n abi: abi,\n logs: logs,\n })[0];\n if (result) {\n return {\n poolId: result.args.campaignId,\n inputAssetKeeper: result.args.inputAssetKeeper,\n rewardAssetHandler: result.args.rewardAssetHandler,\n };\n }\n return null;\n}\n","import { Address } from \"viem\";\nimport { complexRewardDistributionFacetAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { CustomError } from \"@evergonlabs/tmi-utils/errors\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { FacetOptionEnum } from \"../../common/facets/options.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetSlot } from \"../../common/index.js\";\n\nexport type IDistributeRewardsRequest = {\n platform: Address;\n data: IDistributeRewardsData;\n};\n\n/**\n * @description This action is called by the Reward Distributor of the specified\n * Pool to provide additional rewards.\n *\n * @notes\n * - Only for Complex Distribution Reward algorithm\n * - Before notification there must be at least 1 Staker within the Pool\n */\n\nexport function distributeRewards<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n request: IDistributeRewardsRequest,\n) {\n switch (template[FacetSlot.RewardsDistribution]) {\n case FacetOptionEnum.RewardDistributionComplex: {\n return {\n address: request.platform,\n abi: complexRewardDistributionFacetAbi,\n functionName: \"notifyRewardAmount\",\n args: [BigInt(request.data.poolId), BigInt(request.data.packets)],\n };\n }\n default:\n throw new DistributeRewardsError(template[FacetSlot.RewardsDistribution]);\n }\n}\n\nexport class DistributeRewardsError extends CustomError<{ option: FacetOptionEnum }> {\n constructor(option: FacetOptionEnum) {\n super({\n message: `Reward distribution ${option} is not eligible for distributeRewards action`,\n name: \"DistributeRewardsError\",\n data: {\n option: option,\n },\n });\n }\n}\n\nexport type IDistributeRewardsData = {\n /**\n * The unique identifier of the targeted Pool in which the user is participating.\n */\n poolId: INumberish;\n /**\n * The number of Input Packets to add to Pool\n */\n packets: INumberish;\n};\n","import { Abi } from \"viem\";\nimport { stakingSkeletonAbi, stakingSkeletonNidAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { FacetOptionEnum, FacetOptionsBySlot } from \"./options.js\";\nimport { FacetSlot } from \"./slots.js\";\nimport { IPlatformTemplate } from \"./template.js\";\n\nconst contractByFacetOption = {\n [FacetOptionEnum.StakeCreationDefault]: stakingSkeletonAbi,\n [FacetOptionEnum.StakeCreationNID]: stakingSkeletonNidAbi,\n} as const satisfies Record<FacetOptionsBySlot<FacetSlot.StakeCreation>, Abi>;\n\nexport function getStakeCreationAbi<TTemplate extends IPlatformTemplate>(template: TTemplate) {\n return contractByFacetOption[template[FacetSlot.StakeCreation]];\n}\n","import { Address } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/index.js\";\n\nexport type IGetRewardRequest = {\n platform: Address;\n data: IGetRewardData;\n};\n\n/**\n * @notice Allows users to receive any accrued rewards associated with their position specified by `stakeId`.\n * This does NOT affect the total staked assets of the position.\n *\n * @notes\n * - User must own the NFT representing the position to claim rewards.\n * - User must meet eligibility criteria.\n * - If reward is positive number emits a {RewardsReceived} event\n */\n\nexport function getReward<TTemplate extends IPlatformTemplate>(template: TTemplate, request: IGetRewardRequest) {\n const abi = getStakeCreationAbi(template);\n return {\n address: request.platform,\n abi: abi,\n functionName: \"getReward\",\n args: [BigInt(request.data.stakeId)],\n };\n}\n\nexport type IGetRewardData = {\n /**\n * The unique identifier of the targeted Stake Position (nft id).\n */\n stakeId: INumberish;\n};\n","import { Address, Hex } from \"viem\";\nimport { accessControlStakingFacetAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { isNonEmptyArray } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { getStakingRoleHex, StakingRole } from \"../../common/roles.js\";\n\nexport type IGrantRoleRequest = {\n platform: Address;\n role: Hex | StakingRole;\n addresses: Address[];\n};\n\nexport function grantRole(request: IGrantRoleRequest) {\n const { abi, functionName, args } = generateData(request);\n return {\n address: request.platform,\n abi: abi,\n functionName: functionName,\n args: args,\n };\n}\n\nfunction generateData(request: IGrantRoleRequest) {\n if (!isNonEmptyArray(request.addresses)) {\n throw new Error(`Addresses array must have at least 1 address`);\n }\n if (request.addresses.length === 1) {\n return {\n abi: accessControlStakingFacetAbi,\n functionName: \"grantRole\",\n args: [getStakingRoleHex(request.role), request.addresses[0]!],\n };\n }\n return {\n abi: accessControlStakingFacetAbi,\n functionName: \"grantRoleMultiple\",\n args: [getStakingRoleHex(request.role), request.addresses],\n };\n}\n","import { Address } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\n\nexport type IPartialUnstakeRequest = {\n platform: Address;\n data: IPartialUnstakeData;\n};\n\n/**\n * @description This action is called by Stake position holder to\n * withdraw a portion of the staked assets and all accumulated rewards from an expired position.\n *\n * @notes\n * - Only possible after the position's lock period *(if any)* has expired.\n * - The amount withdrawn must be less than the position's total staked assets.\n * - Claimable accrued rewards (if any) associated with the position are calculated and transferred to the owner of the position upon partial unstaking.\n * - Emits a {StakingPositionDecreased} and {PositionBalanceUpdate} event.\n * - Also emits a {RewardsReceived} event on condition.\n */\n\nexport function partialUnstake<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n request: IPartialUnstakeRequest,\n) {\n const abi = getStakeCreationAbi(template);\n return {\n address: request.platform,\n abi: abi,\n functionName: \"partialUnstake\",\n args: [BigInt(request.data.stakeId), BigInt(request.data.amount)],\n };\n}\n\nexport type IPartialUnstakeData = {\n /**\n * The unique identifier of the targeted Stake Position (nft id).\n */\n stakeId: INumberish;\n /**\n * The number of input packets to withdraw from the position,\n * thereby decreasing it.\n */\n amount: INumberish;\n};\n","import { Address } from \"viem\";\nimport { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetOptionEnum, FacetSlot } from \"../../common/index.js\";\n\nexport type IRetakeRequest<TTemplate extends IPlatformTemplate> = {\n platform: Address;\n data: ExcludeVoidProperties<IRestakeData<TTemplate>>;\n};\n\n/**\n * @description Allows users to increase their position specified by `nftId` by allocating or locking\n * additional amounts of staked assets defined in the associated Pool's input packet.\n *\n * @note\n * - Restake is not supported when instant staking rewards are featured.\n * - The new lock period must not shorten the existing lock duration.\n * - Users must own the NFT representing the position.\n */\n\nexport function restake<TTemplate extends IPlatformTemplate>(template: TTemplate, request: IRetakeRequest<TTemplate>) {\n const { abi, functionName, args } = createRetakeData(\n template,\n getStakeCreationAbi(template),\n request.data as IRestakeData<TTemplate>,\n );\n return {\n abi: abi,\n args: args,\n functionName: functionName,\n address: request.platform,\n };\n}\n\nfunction createRetakeData<TTemplate extends IPlatformTemplate>(\n _template: TTemplate,\n abi: ReturnType<typeof getStakeCreationAbi>,\n data: IRestakeData<TTemplate>,\n) {\n return {\n abi: abi,\n functionName: \"restake\",\n args: [BigInt(data.stakeId), BigInt(data.packets), BigInt(data.lockPeriod ?? 0)],\n };\n}\n\nexport type IRestakeData<TTemplate extends IPlatformTemplate> = {\n /**\n * The unique identifier of the targeted Stake Position (nft id).\n */\n stakeId: INumberish;\n /**\n * The number of input packets to add to the existing Stake.\n */\n packets: INumberish;\n /**\n * The duration, in seconds, during which the position's staked assets will be locked.\n *\n * @note The recalculated `unlockTimestamp` (`stakeActiveStartingTimestamp` + `timeLockPeriod`)\n * must be greater than or equal to the current position's `unlockTimestamp`.\n */\n lockPeriod: {\n [FacetOptionEnum.RewardDistributionComplex]: void;\n [FacetOptionEnum.RewardDistributionPreStake]: INumberish;\n [FacetOptionEnum.RewardDistributionRateBasedLock]: INumberish;\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: INumberish;\n }[TTemplate[FacetSlot.RewardsDistribution]];\n};\n","import { Address, Hex } from \"viem\";\nimport { accessControlStakingFacetAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { isNonEmptyArray } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { getStakingRoleHex, StakingRole } from \"../../common/roles.js\";\n\nexport type IRevokeRoleRequest = {\n platform: Address;\n role: Hex | StakingRole;\n addresses: Address[];\n};\n\nexport function revokeRole(request: IRevokeRoleRequest) {\n const { abi, functionName, args } = generateData(request);\n return {\n address: request.platform,\n abi: abi,\n args: args,\n functionName: functionName,\n };\n}\n\nfunction generateData(request: IRevokeRoleRequest) {\n if (!isNonEmptyArray(request.addresses)) {\n throw new Error(`Addresses array must have at least 1 address`);\n }\n if (request.addresses.length === 1) {\n return {\n abi: accessControlStakingFacetAbi,\n functionName: \"revokeRole\",\n args: [getStakingRoleHex(request.role), request.addresses[0]!],\n };\n }\n return {\n abi: accessControlStakingFacetAbi,\n functionName: \"revokeRoleMultiple\",\n args: [getStakingRoleHex(request.role), request.addresses],\n };\n}\n","import { Address } from \"viem\";\nimport { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { FacetOptionEnum } from \"../../common/facets/options.js\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetSlot } from \"../../common/index.js\";\n\nexport type IStakeRequest<TTemplate extends IPlatformTemplate> = {\n platform: Address;\n data: ExcludeVoidProperties<IStakeData<TTemplate>>;\n};\n\n/**\n * @description Allows users to create a position within a specified Pool by allocating or locking assets that are\n * predefined by the Pool's input configuration. The position is represented and tracked by an\n * ERC721 NFT token, which is minted to the user upon staking.\n *\n * @dev Instant stake rewards may or may not be featured, depending on the Pool's\n * rewards distribution configuration.\n *\n * @notes\n * - A unique ERC721 NFT is minted to the user to represent the position.\n * - Campaign-dependent; rewards may be provided instantly upon staking.\n */\n\nexport function stake<TTemplate extends IPlatformTemplate>(template: TTemplate, request: IStakeRequest<TTemplate>) {\n const abi = getStakeCreationAbi(template);\n const { functionName, args } = createStakeData(template, abi, request.data as IStakeData<TTemplate>);\n return {\n address: request.platform,\n abi: abi,\n functionName: functionName,\n args: args,\n };\n}\n\nfunction createStakeData<TTemplate extends IPlatformTemplate>(\n _template: TTemplate,\n abi: ReturnType<typeof getStakeCreationAbi>,\n data: IStakeData<TTemplate>,\n) {\n return {\n abi: abi,\n functionName: \"stake\",\n args: [BigInt(data.poolId), BigInt(data.packets), BigInt(data.lockPeriod ?? 0)],\n };\n}\n\nexport type IStakeData<TTemplate extends IPlatformTemplate> = {\n /**\n * The unique identifier of the targeted Pool in which the user is participating.\n */\n poolId: INumberish;\n /**\n * The number of input Packets to Stake.\n */\n packets: INumberish;\n /**\n * The duration, in seconds, during which the position's staked Packets will be locked.\n */\n lockPeriod: {\n [FacetOptionEnum.RewardDistributionComplex]: void;\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: void;\n [FacetOptionEnum.RewardDistributionPreStake]: INumberish;\n [FacetOptionEnum.RewardDistributionRateBasedLock]: INumberish;\n }[TTemplate[FacetSlot.RewardsDistribution]];\n};\n","import { Log, parseEventLogs } from \"viem\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/index.js\";\n\nexport function parseStakeEvent(template: IPlatformTemplate, logs: Log[]) {\n const result = parseEventLogs({\n eventName: \"StakingPositionCreated\",\n abi: getStakeCreationAbi(template),\n logs: logs,\n })[0];\n if (result) {\n return {\n poolId: result.args.campaignId,\n stakeId: result.args.nftId,\n operator: result.args.operator,\n owner: result.args.owner,\n inputPacketsStaked: result.args.inputPacketsStaked,\n stakeStartActiveTimestamp: result.args.stakeStartActiveTimestamp,\n unlockTimestamp: result.args.unlockTimestamp,\n };\n }\n return null;\n}\n","import { Address } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\n\nexport type IUnstakeRequest = {\n platform: Address;\n data: IUnstakeData;\n};\n\n/**\n * @description This action is called by Stake position holder to\n * withdraw all Staked assets from a position, closing it completely.\n *\n * @notes\n * - Only possible after the position's lock period *(if any)* has expired.\n * - Any accrued rewards are calculated and transferred during the unstake process.\n * - The NFT representing the position is burned upon successful completion.\n * - Users must own the NFT representing the position.\n */\n\nexport function unstake<TTemplate extends IPlatformTemplate>(template: TTemplate, request: IUnstakeRequest) {\n const abi = getStakeCreationAbi(template);\n return {\n address: request.platform,\n abi: abi,\n functionName: \"fullyUnstake\",\n args: [BigInt(request.data.stakeId)],\n };\n}\n\nexport type IUnstakeData = {\n /**\n * The unique identifier of the targeted Stake Position (nft id).\n */\n stakeId: INumberish;\n};\n","import { FacetOptionEnum, FacetSlot, IPlatformTemplate } from \"../common/index.js\";\n\nexport const ReputationTemplate = {\n [FacetSlot.RewardsDistribution]: FacetOptionEnum.RewardDistributionRateBasedOpen,\n [FacetSlot.StakeCreation]: FacetOptionEnum.StakeCreationDefault,\n [FacetSlot.PoolCreation]: FacetOptionEnum.PoolCreationDefault,\n [FacetSlot.Time]: FacetOptionEnum.TimeOnlyStarting,\n [FacetSlot.Amount]: FacetOptionEnum.AmountTwoBorder,\n [FacetSlot.CreatorsEligibility]: FacetOptionEnum.CreatorsEligibilityDefault,\n [FacetSlot.Erc721]: FacetOptionEnum.Erc721Default,\n [FacetSlot.Input]: FacetOptionEnum.InputErc20,\n [FacetSlot.Lock]: FacetOptionEnum.LockAutoRateBasedOpen,\n [FacetSlot.LockMult]: FacetOptionEnum.LockMultNoMultiplier,\n [FacetSlot.Reward]: FacetOptionEnum.RewardErc20Minter,\n [FacetSlot.StakersEligibility]: FacetOptionEnum.StakersEligibilityDefault,\n [FacetSlot.Withdrawal]: FacetOptionEnum.WithdrawalLockChecker,\n [FacetSlot.AmountMult]: FacetOptionEnum.AmountMultInterval,\n [FacetSlot.AccessControl]: FacetOptionEnum.AccessControlDefault,\n} as const satisfies IPlatformTemplate<\n FacetOptionEnum.RewardDistributionRateBasedOpen,\n FacetOptionEnum.StakeCreationDefault,\n FacetOptionEnum.PoolCreationDefault\n>;\n","import { FacetOptionEnum, FacetSlot, IPlatformTemplate } from \"../common/index.js\";\n\nexport const ReputationLockTemplate = {\n [FacetSlot.RewardsDistribution]: FacetOptionEnum.RewardDistributionRateBasedLock,\n [FacetSlot.StakeCreation]: FacetOptionEnum.StakeCreationDefault,\n [FacetSlot.PoolCreation]: FacetOptionEnum.PoolCreationDefault,\n [FacetSlot.Time]: FacetOptionEnum.TimeOnlyStarting,\n [FacetSlot.Amount]: FacetOptionEnum.AmountTwoBorder,\n [FacetSlot.CreatorsEligibility]: FacetOptionEnum.CreatorsEligibilityDefault,\n [FacetSlot.Erc721]: FacetOptionEnum.Erc721Default,\n [FacetSlot.Input]: FacetOptionEnum.InputErc20,\n [FacetSlot.Lock]: FacetOptionEnum.LockTwoBorder,\n [FacetSlot.LockMult]: FacetOptionEnum.LockMultInterval,\n [FacetSlot.Reward]: FacetOptionEnum.RewardErc20Minter,\n [FacetSlot.StakersEligibility]: FacetOptionEnum.StakersEligibilityDefault,\n [FacetSlot.Withdrawal]: FacetOptionEnum.WithdrawalLockChecker,\n [FacetSlot.AmountMult]: FacetOptionEnum.AmountMultInterval,\n [FacetSlot.AccessControl]: FacetOptionEnum.AccessControlDefault,\n} as const satisfies IPlatformTemplate<\n FacetOptionEnum.RewardDistributionRateBasedLock,\n FacetOptionEnum.StakeCreationDefault,\n FacetOptionEnum.PoolCreationDefault\n>;\n","import { FacetOptionEnum } from \"../common/facets/options.js\";\nimport { IPlatformTemplate } from \"../common/facets/template.js\";\nimport { FacetSlot } from \"../common/index.js\";\n\nexport const RWATemplate = {\n [FacetSlot.RewardsDistribution]: FacetOptionEnum.RewardDistributionComplex,\n [FacetSlot.StakeCreation]: FacetOptionEnum.StakeCreationDefault,\n [FacetSlot.PoolCreation]: FacetOptionEnum.PoolCreationDefault,\n [FacetSlot.Time]: FacetOptionEnum.TimeOnlyStarting,\n [FacetSlot.Amount]: FacetOptionEnum.AmountHardCap,\n [FacetSlot.CreatorsEligibility]: FacetOptionEnum.CreatorsEligibilityDefault,\n [FacetSlot.Erc721]: FacetOptionEnum.Erc721Default,\n [FacetSlot.Input]: FacetOptionEnum.InputErc20,\n [FacetSlot.Lock]: FacetOptionEnum.LockAutoComplex,\n [FacetSlot.LockMult]: FacetOptionEnum.LockMultNoMultiplier,\n [FacetSlot.Reward]: FacetOptionEnum.RewardErc20Transfer,\n [FacetSlot.StakersEligibility]: FacetOptionEnum.StakersEligibilityDefault,\n [FacetSlot.Withdrawal]: FacetOptionEnum.WithdrawalLockChecker,\n [FacetSlot.AmountMult]: FacetOptionEnum.AmountMultNoMultiplier,\n [FacetSlot.AccessControl]: FacetOptionEnum.AccessControlDefault,\n} satisfies IPlatformTemplate<\n FacetOptionEnum.RewardDistributionComplex,\n FacetOptionEnum.StakeCreationDefault,\n FacetOptionEnum.PoolCreationDefault\n>;\n","import { ReputationTemplate } from \"./reputation.js\";\nimport { ReputationLockTemplate } from \"./reputationLock.js\";\nimport { RWATemplate } from \"./rwa.js\";\n\nexport enum TemplateEnum {\n RWA = \"RWA\",\n Reputation = \"Reputation\",\n ReputationLock = \"ReputationLock\",\n}\n\nconst templates = {\n [TemplateEnum.RWA]: RWATemplate,\n [TemplateEnum.Reputation]: ReputationTemplate,\n [TemplateEnum.ReputationLock]: ReputationLockTemplate,\n} as const;\n\nexport function getTemplate<T extends TemplateEnum>(type: T) {\n return templates[type];\n}\n"],"mappings":"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","names":["index_exports","__export","DistributeRewardsError","FacetOptionEnum","FacetSlot","StakingChainId","StakingChains","StakingRole","TemplateEnum","createFacetInitDictionary","createFacetSettersDictionary","createPlatform","createPool","distributeRewards","facetOptionsBySlot","facetSlots","getPoolCreationAbi","getReward","getStakingChain","getStakingRole","getStakingRoleHex","getTemplate","grantRole","isStakingRole","parseAssetManagersDeployEvent","parseCreatePoolEvent","parseDeployDiamondEvent","parseStakeEvent","partialUnstake","restake","revokeRole","stake","unstake","__toCommonJS","import_zod_openapi","import_abis","import_tmi_contracts_staking_sdk","import_errors","FacetOptionNotSupportedYetError","option","import_tmi_contracts_staking_sdk","DEFAULT_ROLES","GENERIC_ROLES","StakingRole","stakingRoleDictionary","getStakingRole","role","isStakingRole","x","getStakingRoleHex","import_viem","import_tmi_contracts_staking_sdk","FacetSlot","facetSlots","FacetOptionEnum","facetOptionsBySlot","SetterSelectors","setterSelectorsByFacetOption","getPoolCreationDefaultInitData","template","selectors","facetSlots","curr","option","selector","x","import_viem","getCreatorEligibilityByRoleInitData","role","getStakingRoleHex","import_viem","getErc721InitData","token","isSoulbound","import_viem","getLockStaticPeriodInitData","maxLockPeriodInSeconds","getLockStaticPeriodSetData","periodsInSeconds","x","getLockTwoBorderSetData","minAcceptedLockPeriodSeconds","maxAcceptedLockPeriodSeconds","InitSelectors","createFacetInitDictionary","template","params","getErc721InitData","getPoolCreationDefaultInitData","FacetOptionNotSupportedYetError","getLockStaticPeriodInitData","getCreatorEligibilityByRoleInitData","import_chains","import_zod","import_models","StakingChains","stakingChainLiterals","id","StakingChainId","getStakingChain","import_errors","import_viem","getAmountTwoBorderSetData","minAmountOfPackets","maxAmountOfPackets","getAmountHardcapOnlySetData","hardCapPackets","import_viem","getAmountMultIntervalSetData","packetsAndMultipliers","x","getAmountMultContinuousSetData","import_viem","getErc20InputSetterData","entries","x","import_viem","getErc20RewardSetterData","entries","x","import_viem","parseErc1155TokenId","tokenId","parsed","getErc1155InputSetterData","entries","x","parseErc1155TokenId","import_viem","getErc1155RewardSetterData","entries","x","parseErc1155TokenId","import_viem","getLockMultStaticPeriodSetData","entries","x","getLockMultContinuousSetData","import_viem","getRewardsDistributionRateBasedLockSetData","campaignRate","isVirtualLockMultiplierSupported","getRewardsDistributionRateBasedOpenSetData","getRewardsDistributionComplexSetData","durationSeconds","campaignRewardDistributor","getRewardsDistributionPreStakeSetData","totalReward","isInstaRewards","rewardsProvider","import_viem","getStakersEligibilitySetData","eligibleForStakingRoles","isCampaignScoped","x","getStakingRoleHex","import_viem","import_date","getTimeTwoBorderSetData","startDate","endDate","rewardsDate","getTimeOnlyStartingSetData","campaignStartingTimestamp","createFacetSettersDictionary","template","FacetOptionNotSupportedYetError","params","getLockStaticPeriodSetData","getLockTwoBorderSetData","_params","config","CombinationError","time","ms","getAmountHardcapOnlySetData","getAmountTwoBorderSetData","getAmountMultContinuousSetData","getAmountMultIntervalSetData","getErc20InputSetterData","x","getErc1155InputSetterData","getErc1155RewardSetterData","getErc20RewardSetterData","getLockMultContinuousSetData","getLockMultStaticPeriodSetData","getStakersEligibilitySetData","getTimeOnlyStartingSetData","getTimeTwoBorderSetData","getRewardsDistributionComplexSetData","getRewardsDistributionPreStakeSetData","getRewardsDistributionRateBasedLockSetData","getRewardsDistributionRateBasedOpenSetData","targetOption","requiredOption","import_chains","import_tmi_contracts_staking_sdk","getFacetCutsWithAddAction","chainId","facets","contracts","facet","Contract","getFacetAddress","x","type","toStakingSdkChainId","stakingChainIdDictionary","stakingDiamondFactoryByChain","getDiamondFactoryAddress","createPlatform","template","request","initDictionary","createFacetInitDictionary","facets","initSelectors","initData","platformConfig","facetSlots","slot","option","handler","val","facetCuts","getFacetCutsWithAddAction","getDiamondFactoryAddress","import_viem","import_abis","parseDeployDiamondEvent","logs","result","import_viem","import_viem","import_abis","poolCreationFacetByOption","getPoolCreationAbi","template","parseCreatePoolEvent","logs","abi","result","parseAssetManagersDeployEvent","createPool","template","request","setDictionary","createFacetSettersDictionary","poolConfig","requiredData","facetSlots","slot","option","handler","result","encodedData","x","getPoolCreationAbi","import_abis","import_errors","distributeRewards","template","request","DistributeRewardsError","option","import_abis","contractByFacetOption","getStakeCreationAbi","template","getReward","template","request","abi","getStakeCreationAbi","import_abis","import_typeUtils","grantRole","request","abi","functionName","args","generateData","getStakingRoleHex","partialUnstake","template","request","abi","getStakeCreationAbi","restake","template","request","abi","functionName","args","createRetakeData","getStakeCreationAbi","_template","data","import_abis","import_typeUtils","revokeRole","request","abi","functionName","args","generateData","getStakingRoleHex","stake","template","request","abi","getStakeCreationAbi","functionName","args","createStakeData","_template","data","import_viem","parseStakeEvent","template","logs","result","getStakeCreationAbi","unstake","template","request","abi","getStakeCreationAbi","ReputationTemplate","ReputationLockTemplate","RWATemplate","TemplateEnum","templates","RWATemplate","ReputationTemplate","ReputationLockTemplate","getTemplate","type","import_common","import_viem"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/actions/createPlatform/createPlatform.ts","../src/common/facets/facetsInitDictionary.ts","../src/internal/errors.ts","../src/common/roles.ts","../src/common/facets/slices/campaignCreationSkeleton.ts","../src/common/facets/slots.ts","../src/common/facets/options.ts","../src/common/facets/slices/creatorsEligibility.ts","../src/common/facets/slices/erc721.ts","../src/common/facets/slices/lock.ts","../src/common/chains.ts","../src/common/facets/facetsSetterDictionary.ts","../src/common/facets/slices/amount.ts","../src/common/facets/slices/amountMult.ts","../src/common/facets/slices/erc20Input.ts","../src/common/facets/slices/erc20Reward.ts","../src/common/facets/slices/erc1155Input.ts","../src/internal/utils.ts","../src/common/facets/slices/erc1155Reward.ts","../src/common/facets/slices/lockMult.ts","../src/common/facets/slices/rewardsDistribution.ts","../src/common/facets/slices/stakersEligibility.ts","../src/common/facets/slices/time.ts","../src/internal/stakingSdkTypechain.ts","../src/actions/createPlatform/createPlatformUtils.ts","../src/actions/createPool/createPool.ts","../src/actions/createPool/createPoolUtils.ts","../src/actions/distributeRewards/distributeRewards.ts","../src/common/facets/stakeCreation.ts","../src/actions/getReward/getReward.ts","../src/actions/grantRole/grantRole.ts","../src/actions/partialUnstake/partialUnstake.ts","../src/actions/restake/restake.ts","../src/actions/revokeRole/revokeRole.ts","../src/actions/stake/stake.ts","../src/actions/stake/stakeUtils.ts","../src/actions/unstake/unstake.ts","../src/templates/reputation.ts","../src/templates/reputationLock.ts","../src/templates/rwa.ts","../src/templates/index.ts"],"sourcesContent":["import \"@hono/zod-openapi\";\n\nexport * from \"./actions/index.js\";\nexport * from \"./common/index.js\";\nexport * from \"./templates/index.js\";\nexport { viemClientAsMiddleware } from \"@evergonlabs/tmi-protocol-utils/viem\";\nexport { createMiddlewares } from \"@evergonlabs/tmi-utils/typeUtils\";\n","import { Address, Hex } from \"viem\";\nimport { types } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { diamondFactoryAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { createFacetInitDictionary } from \"../../common/facets/facetsInitDictionary.js\";\nimport { IPlatformConfig } from \"../../common/facets/platformConfig.js\";\nimport { AnyPlatformTemplate, IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetSlot, facetSlots, IStakingChainId } from \"../../common/index.js\";\nimport { getFacetCutsWithAddAction } from \"../../internal/stakingSdkTypechain.js\";\nimport { getDiamondFactoryAddress } from \"../../internal/stakingSdkTypechain.js\";\n\ntype FacetType = types.FacetType;\n\nexport type ICreatePlatformRequest<TChainId extends IStakingChainId, TTemplate extends IPlatformTemplate> = {\n chainId: TChainId;\n admin: Address;\n data: ExcludeVoidProperties<IPlatformConfig<TTemplate>>;\n};\n\nexport function createPlatform<TChainId extends IStakingChainId, TTemplate extends AnyPlatformTemplate>(\n template: TTemplate,\n request: ICreatePlatformRequest<TChainId, TTemplate>,\n) {\n const initDictionary = createFacetInitDictionary(template);\n const facets: FacetType[] = [];\n const initSelectors: Hex[] = [];\n const initData: Hex[] = [];\n const platformConfig = request.data as IPlatformConfig<TTemplate>;\n\n facetSlots.forEach(<TSlot extends FacetSlot>(slot: TSlot) => {\n const option = template[slot];\n const handler = initDictionary[option];\n\n const val = handler(platformConfig[slot], platformConfig);\n if (val.targetFacet) {\n facets.push(val.targetFacet);\n }\n if (val.data) {\n initSelectors.push(val.data.selector);\n initData.push(val.data.data);\n }\n });\n\n const facetCuts = getFacetCutsWithAddAction(request.chainId, facets);\n return {\n address: getDiamondFactoryAddress(request.chainId),\n abi: diamondFactoryAbi,\n functionName: \"deployAndInitializeDiamond\",\n args: [facetCuts, initSelectors, initData, request.admin],\n } as const;\n}\n","import { Hex } from \"viem\";\nimport { constants, types } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { FacetOptionNotSupportedYetError } from \"../../internal/errors.js\";\nimport { StakingRole } from \"../roles.js\";\nimport { getPoolCreationDefaultInitData } from \"./slices/campaignCreationSkeleton.js\";\nimport { getCreatorEligibilityByRoleInitData } from \"./slices/creatorsEligibility.js\";\nimport { getErc721InitData } from \"./slices/erc721.js\";\nimport { getLockStaticPeriodInitData } from \"./slices/lock.js\";\nimport { FacetOptionEnum } from \"./options.js\";\nimport { IPlatformConfig, IPlatformConfigParam } from \"./platformConfig.js\";\nimport { IPlatformTemplate } from \"./template.js\";\n\ntype FacetType = types.FacetType;\nconst { InitSelectors } = constants;\n\nexport type IFacetInitData = {\n selector: Hex;\n data: Hex;\n};\n\nexport type IFacetInit = {\n targetFacet: FacetType | undefined;\n data: IFacetInitData | undefined;\n};\n\nexport type IFacetInitDictionary<TTemplate extends IPlatformTemplate> = {\n [TOption in FacetOptionEnum]: (\n params: IPlatformConfigParam<TOption>,\n config: IPlatformConfig<TTemplate>,\n ) => IFacetInit;\n};\n\nexport function createFacetInitDictionary<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n): IFacetInitDictionary<TTemplate> {\n return {\n // Access Control\n [FacetOptionEnum.AccessControlDefault]: () => {\n return {\n targetFacet: \"AccessControlStakingFacet\",\n data: undefined,\n };\n },\n\n // Erc 721\n [FacetOptionEnum.Erc721Default]: (params) => {\n return {\n targetFacet: \"ERC721Facet\",\n data: {\n selector: InitSelectors.Generic.Erc721 as Hex,\n data: getErc721InitData(params.erc721, params.isSoulbound),\n },\n };\n },\n\n // Pool creation\n [FacetOptionEnum.PoolCreationDefault]: () => {\n return {\n targetFacet: \"CampaignCreationSkeleton\",\n data: {\n selector: InitSelectors.Skeletons.CampaignCreation as Hex,\n data: getPoolCreationDefaultInitData(template),\n },\n };\n },\n [FacetOptionEnum.PoolCreationNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.PoolCreationNID);\n // return {\n // targetFacet: FacetEnum.CampaignCreationSkeletonNID,\n // data: undefined,\n // };\n },\n\n // Lock\n [FacetOptionEnum.LockStaticPeriod]: (params) => {\n return {\n targetFacet: \"StaticPeriodLockFacet\",\n data: {\n selector: InitSelectors.LockVariations.Static as Hex,\n data: getLockStaticPeriodInitData(params.maxLockPeriod),\n },\n };\n },\n [FacetOptionEnum.LockTwoBorder]: () => {\n return {\n targetFacet: \"TwoBorderTimeLockFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.LockAutoComplex]: () => {\n return {\n targetFacet: \"StaticPeriodLockFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.LockAutoPreStake]: () => {\n return {\n targetFacet: \"StaticPeriodLockFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.LockAutoRateBasedOpen]: () => {\n return {\n targetFacet: \"StaticPeriodLockFacet\",\n data: undefined,\n };\n },\n\n // Amount\n [FacetOptionEnum.AmountHardCap]: () => {\n return {\n targetFacet: \"HardcapAmountFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.AmountTwoBorder]: () => {\n return {\n targetFacet: \"TwoBorderAmountFacet\",\n data: undefined,\n };\n },\n\n // Amount mult\n [FacetOptionEnum.AmountMultContinuous]: () => {\n return {\n targetFacet: \"ContinuousVirtualAmountMultiplierFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.AmountMultInterval]: () => {\n return {\n targetFacet: \"IntervalVirtualAmountMultiplierFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.AmountMultNoMultiplier]: () => {\n return {\n targetFacet: \"NoVirtualAmountMultiplierFacet\",\n data: undefined,\n };\n },\n\n // Creators Eligibility\n [FacetOptionEnum.CreatorsEligibilityByRole]: (params) => {\n return {\n targetFacet: \"WhitelistedCampaignCreatorsFacet\",\n data: {\n selector: InitSelectors.Eligibility.Creators as Hex,\n data: getCreatorEligibilityByRoleInitData(params.role),\n },\n };\n },\n [FacetOptionEnum.CreatorsEligibilityDefault]: () => {\n return {\n targetFacet: \"WhitelistedCampaignCreatorsFacet\",\n data: {\n selector: InitSelectors.Eligibility.Creators as Hex,\n data: getCreatorEligibilityByRoleInitData(StakingRole.Creator),\n },\n };\n },\n [FacetOptionEnum.CreatorsEligibilityNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.CreatorsEligibilityNID);\n // return {\n // targetFacet: undefined,\n // data: undefined,\n // };\n },\n\n // Input\n [FacetOptionEnum.InputErc20]: () => {\n return {\n targetFacet: \"Erc20InputFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.InputErc1155]: () => {\n return {\n targetFacet: \"Erc1155InputFacet\",\n data: undefined,\n };\n },\n\n // Rewards\n [FacetOptionEnum.RewardErc1155Transfer]: () => {\n return {\n targetFacet: \"Erc1155RewardTransferFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardErc1155Minter]: () => {\n return {\n targetFacet: \"Erc1155RewardMinterFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardErc20Transfer]: () => {\n return {\n targetFacet: \"Erc20RewardTransferFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardErc20Minter]: () => {\n return {\n targetFacet: \"Erc20RewardMinterFacet\",\n data: undefined,\n };\n },\n\n // Lock mult\n [FacetOptionEnum.LockMultContinuous]: () => {\n return {\n targetFacet: \"ContinuousVirtualLockMultiplierFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.LockMultInterval]: () => {\n return {\n targetFacet: \"IntervalVirtualLockMultiplierFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.LockMultNoMultiplier]: () => {\n return {\n targetFacet: \"NoVirtualLockMultiplierFacet\",\n data: undefined,\n };\n },\n\n // Stake creation\n [FacetOptionEnum.StakeCreationDefault]: () => {\n return {\n targetFacet: \"StakingSkeleton\",\n data: undefined,\n };\n },\n [FacetOptionEnum.StakeCreationNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.StakeCreationNID);\n // return {\n // targetFacet: \"StakingSkeletonNID\",\n // data: undefined,\n // };\n },\n\n // Stakers Eligibility\n [FacetOptionEnum.StakersEligibilityDefault]: () => {\n return {\n targetFacet: \"WhitelistedStakersFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.StakersEligibilityByRole]: () => {\n return {\n targetFacet: \"WhitelistedStakersFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.StakersEligibilityNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.StakersEligibilityNID);\n // return {\n // targetFacet: undefined,\n // data: undefined,\n // };\n },\n\n // Time\n [FacetOptionEnum.TimeOnlyStarting]: () => {\n return {\n targetFacet: \"OnlyStartingTimestampCampaign\",\n data: undefined,\n };\n },\n [FacetOptionEnum.TimeTwoBorder]: () => {\n return {\n targetFacet: \"TwoBorderTimestampCampaign\",\n data: undefined,\n };\n },\n\n // Withdrawal\n [FacetOptionEnum.WithdrawalLockChecker]: () => {\n return {\n targetFacet: \"LockCheckerWithdrawalVariationFacet\",\n data: undefined,\n };\n },\n\n // Rewards Distribution\n [FacetOptionEnum.RewardDistributionComplex]: () => {\n return {\n targetFacet: \"ComplexRewardDistributionFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardDistributionPreStake]: () => {\n return {\n targetFacet: \"PreStakeRewardDistributionFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardDistributionRateBasedLock]: () => {\n return {\n targetFacet: \"RateBasedLockRewardDistributionFacet\",\n data: undefined,\n };\n },\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: () => {\n return {\n targetFacet: \"RateBasedOpenRewardDistributionFacet\",\n data: undefined,\n };\n },\n };\n}\n","import { CustomError } from \"@evergonlabs/tmi-utils/errors\";\nimport { FacetOptionEnum } from \"../common/facets/options.js\";\n\nexport class FacetOptionNotSupportedYetError extends CustomError<{ option: FacetOptionEnum }> {\n constructor(option: FacetOptionEnum) {\n super({\n message: `Option ${option} is not supported or implemented yet`,\n name: \"FacetNotSupportedYetError\",\n data: {\n option: option,\n },\n });\n }\n}\n","import { Hex } from \"viem\";\nimport { constants } from \"@evergonlabs/tmi-contracts-staking-sdk\";\n\nconst { DEFAULT_ROLES, GENERIC_ROLES } = constants;\n\nexport enum StakingRole {\n Admin = \"Admin\",\n Open = \"Open\",\n Creator = \"Creator\",\n Staker = \"Staker\",\n}\n\nconst stakingRoleDictionary = {\n [StakingRole.Admin]: DEFAULT_ROLES.adminRole as Hex,\n [StakingRole.Open]: DEFAULT_ROLES.openRole as Hex,\n [StakingRole.Creator]: GENERIC_ROLES.creatorRole as Hex,\n [StakingRole.Staker]: GENERIC_ROLES.stakerRole as Hex,\n} satisfies Record<StakingRole, Hex>;\n\n/**\n * @returns hex-encoded role selector of certain role\n */\n\nexport function getStakingRole(role: StakingRole) {\n return stakingRoleDictionary[role];\n}\n\nexport function isStakingRole(x: unknown): x is StakingRole {\n return Object.values(StakingRole).includes(x as StakingRole);\n}\n\nexport function getStakingRoleHex(x: Hex | StakingRole): Hex {\n return isStakingRole(x) ? getStakingRole(x) : x;\n}\n","import { encodeAbiParameters, Hex } from \"viem\";\nimport { constants } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { FacetOptionEnum } from \"../options.js\";\nimport { facetSlots } from \"../slots.js\";\nimport { IPlatformTemplate } from \"../template.js\";\n\nconst { SetterSelectors } = constants;\n\n// Indicate facets that REQUIRES setter function\nexport const setterSelectorsByFacetOption = {\n // Amount\n [FacetOptionEnum.AmountHardCap]: SetterSelectors.CampaignAmounts.Hardcap as Hex,\n [FacetOptionEnum.AmountTwoBorder]: SetterSelectors.CampaignAmounts.TwoBorder as Hex,\n\n // Time\n [FacetOptionEnum.TimeOnlyStarting]: SetterSelectors.CampaignTimes.OnlyStarting as Hex,\n [FacetOptionEnum.TimeTwoBorder]: SetterSelectors.CampaignTimes.TwoBorder as Hex,\n\n // Lock variation\n [FacetOptionEnum.LockTwoBorder]: SetterSelectors.LockVariations.TwoBorder as Hex,\n [FacetOptionEnum.LockStaticPeriod]: SetterSelectors.LockVariations.Static as Hex,\n // LockAuto* options co-exist with a RewardDistribution* option. They use the\n // LockVariations setter (not the shared RewardsDistribution selector) so that\n // both the lock and reward distribution setters remain independent required\n // selectors in the campaign creation skeleton.\n [FacetOptionEnum.LockAutoComplex]: SetterSelectors.LockVariations.Static as Hex,\n [FacetOptionEnum.LockAutoPreStake]: SetterSelectors.LockVariations.Static as Hex,\n [FacetOptionEnum.LockAutoRateBasedOpen]: SetterSelectors.LockVariations.Static as Hex,\n\n // Reward distribution\n [FacetOptionEnum.RewardDistributionComplex]: SetterSelectors.RewardsDistribution.Complex as Hex,\n [FacetOptionEnum.RewardDistributionPreStake]: SetterSelectors.RewardsDistribution.PreStake as Hex,\n [FacetOptionEnum.RewardDistributionRateBasedLock]: SetterSelectors.RewardsDistribution.RateBasedLock as Hex,\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: SetterSelectors.RewardsDistribution.RateBasedOpen as Hex,\n\n // Stakers eligibility\n [FacetOptionEnum.StakersEligibilityDefault]: SetterSelectors.Eligibility.Stakers as Hex,\n [FacetOptionEnum.StakersEligibilityByRole]: SetterSelectors.Eligibility.Stakers as Hex,\n\n // Input\n [FacetOptionEnum.InputErc20]: SetterSelectors.TransferInput.Erc20 as Hex,\n [FacetOptionEnum.InputErc1155]: SetterSelectors.TransferInput.Erc1155 as Hex,\n\n // Reward\n [FacetOptionEnum.RewardErc1155Transfer]: SetterSelectors.TransferReward.Erc1155Transfer as Hex,\n [FacetOptionEnum.RewardErc1155Minter]: SetterSelectors.TransferReward.Erc1155Minter as Hex,\n [FacetOptionEnum.RewardErc20Transfer]: SetterSelectors.TransferReward.Erc20Transfer as Hex,\n [FacetOptionEnum.RewardErc20Minter]: SetterSelectors.TransferReward.Erc20Minter as Hex,\n\n // Amount multiplier\n [FacetOptionEnum.AmountMultInterval]: SetterSelectors.VirtualAmountMultiplier.Interval as Hex,\n [FacetOptionEnum.AmountMultContinuous]: SetterSelectors.VirtualAmountMultiplier.Continuous as Hex,\n\n // Lock multiplier\n [FacetOptionEnum.LockMultContinuous]: SetterSelectors.VirtualLockMultiplier.Continuous as Hex,\n [FacetOptionEnum.LockMultInterval]: SetterSelectors.VirtualLockMultiplier.Interval as Hex,\n} as const satisfies Partial<Record<FacetOptionEnum, Hex>>;\n\nexport type FacetOptionsWithSetter = keyof typeof setterSelectorsByFacetOption;\n\nexport function getPoolCreationDefaultInitData(template: IPlatformTemplate) {\n const selectors: { selector: Hex; option: FacetOptionEnum }[] = [];\n\n facetSlots.forEach((curr) => {\n const option = template[curr] as keyof typeof setterSelectorsByFacetOption;\n const selector = setterSelectorsByFacetOption[option];\n if (selector) {\n selectors.push({\n option: option,\n selector: selector,\n });\n }\n });\n\n return encodeAbiParameters(\n [\n { name: \"requiredSelectors\", type: \"bytes4[]\" },\n { name: \"optionalSelectors\", type: \"bytes4[]\" },\n ],\n [selectors.map((x) => x.selector), []],\n );\n}\n","export enum FacetSlot {\n Erc721 = \"Erc721\",\n Amount = \"Amount\",\n Time = \"Time\",\n PoolCreation = \"PoolCreation\",\n StakeCreation = \"StakeCreation\",\n CreatorsEligibility = \"CreatorsEligibility\",\n StakersEligibility = \"StakersEligibility\",\n Lock = \"Lock\",\n RewardsDistribution = \"RewardsDistribution\",\n Input = \"Input\",\n Reward = \"Reward\",\n AmountMult = \"AmountMult\",\n LockMult = \"LockMult\",\n Withdrawal = \"Withdrawal\",\n AccessControl = \"AccessControl\",\n}\n\n// IMPORTANT: don't change the order it could affect users\n// if you need to add new slot add it to the bottom\nexport const facetSlots = [\n FacetSlot.AccessControl,\n FacetSlot.Erc721,\n FacetSlot.Amount,\n FacetSlot.Time,\n FacetSlot.PoolCreation,\n FacetSlot.StakeCreation,\n FacetSlot.CreatorsEligibility,\n FacetSlot.StakersEligibility,\n FacetSlot.Lock,\n FacetSlot.RewardsDistribution,\n FacetSlot.Input,\n FacetSlot.Reward,\n FacetSlot.AmountMult,\n FacetSlot.LockMult,\n FacetSlot.Withdrawal,\n] as const;\n","import { FacetSlot } from \"./slots.js\";\n\nexport enum FacetOptionEnum {\n // Access Control\n AccessControlDefault = \"AccessControlDefault\",\n\n // Amount\n AmountHardCap = \"AmountHardCap\",\n AmountTwoBorder = \"AmountTwoBorder\",\n\n // Time\n TimeOnlyStarting = \"TimeOnlyStarting\",\n TimeTwoBorder = \"TimeTwoBorder\",\n\n // Lock\n LockStaticPeriod = \"LockStaticPeriod\",\n LockTwoBorder = \"LockTwoBorder\",\n LockAutoComplex = \"LockAutoComplex\",\n LockAutoRateBasedOpen = \"LockAutoRateBasedOpen\",\n LockAutoPreStake = \"LockAutoPreStake\",\n\n // Reward Distribution\n RewardDistributionComplex = \"RewardDistributionComplex\",\n RewardDistributionPreStake = \"RewardDistributionPreStake\",\n RewardDistributionRateBasedOpen = \"RewardDistributionRateBasedOpen\",\n RewardDistributionRateBasedLock = \"RewardDistributionRateBasedLock\",\n\n // Input\n InputErc20 = \"InputErc20\",\n InputErc1155 = \"InputErc1155\",\n\n // Reward\n RewardErc20Transfer = \"RewardErc20Transfer\",\n RewardErc20Minter = \"RewardErc20Minter\",\n RewardErc1155Transfer = \"RewardErc1155Transfer\",\n RewardErc1155Minter = \"RewardErc1155Minter\",\n\n // Lock Multiplier\n LockMultContinuous = \"LockMultContinuous\",\n LockMultInterval = \"LockMultInterval\",\n LockMultNoMultiplier = \"LockMultNoMultiplier\",\n\n // Amount Multiplier\n AmountMultContinuous = \"AmountMultContinuous\",\n AmountMultInterval = \"AmountMultInterval\",\n AmountMultNoMultiplier = \"AmountMultNoMultiplier\",\n\n // Erc721 (Position handler)\n Erc721Default = \"Erc721Default\",\n\n // Creators Eligibility\n CreatorsEligibilityByRole = \"CreatorsEligibilityByRole\",\n CreatorsEligibilityDefault = \"CreatorsEligibilityDefault\",\n CreatorsEligibilityNID = \"CreatorsEligibilityNID\",\n\n // Stakers Eligibility\n StakersEligibilityByRole = \"StakersEligibilityByRole\",\n StakersEligibilityDefault = \"StakersEligibilityDefault\",\n StakersEligibilityNID = \"StakersEligibilityNID\",\n\n // Withdrawal\n WithdrawalLockChecker = \"WithdrawalLockChecker\",\n\n // Pool creation (skeleton)\n PoolCreationDefault = \"PoolCreationDefault\",\n PoolCreationNID = \"PoolCreationNID\",\n\n // Pool creation (skeleton)\n StakeCreationDefault = \"StakeCreationDefault\",\n StakeCreationNID = \"StakeCreationNID\",\n}\n\nexport const facetOptionsBySlot = {\n [FacetSlot.Amount]: [FacetOptionEnum.AmountHardCap, FacetOptionEnum.AmountTwoBorder],\n [FacetSlot.Time]: [FacetOptionEnum.TimeOnlyStarting, FacetOptionEnum.TimeTwoBorder],\n [FacetSlot.CreatorsEligibility]: [\n FacetOptionEnum.CreatorsEligibilityDefault,\n FacetOptionEnum.CreatorsEligibilityByRole,\n FacetOptionEnum.CreatorsEligibilityNID,\n ],\n [FacetSlot.Erc721]: [FacetOptionEnum.Erc721Default],\n [FacetSlot.Input]: [FacetOptionEnum.InputErc1155, FacetOptionEnum.InputErc20],\n [FacetSlot.Reward]: [\n FacetOptionEnum.RewardErc20Transfer,\n FacetOptionEnum.RewardErc20Minter,\n FacetOptionEnum.RewardErc1155Transfer,\n FacetOptionEnum.RewardErc1155Minter,\n ],\n [FacetSlot.RewardsDistribution]: [\n FacetOptionEnum.RewardDistributionComplex,\n FacetOptionEnum.RewardDistributionPreStake,\n FacetOptionEnum.RewardDistributionRateBasedLock,\n FacetOptionEnum.RewardDistributionRateBasedOpen,\n ],\n [FacetSlot.Lock]: [\n FacetOptionEnum.LockAutoComplex,\n FacetOptionEnum.LockAutoPreStake,\n FacetOptionEnum.LockAutoRateBasedOpen,\n FacetOptionEnum.LockStaticPeriod,\n FacetOptionEnum.LockTwoBorder,\n ],\n [FacetSlot.LockMult]: [\n FacetOptionEnum.LockMultContinuous,\n FacetOptionEnum.LockMultInterval,\n FacetOptionEnum.LockMultNoMultiplier,\n ],\n [FacetSlot.Withdrawal]: [FacetOptionEnum.WithdrawalLockChecker],\n [FacetSlot.StakersEligibility]: [\n FacetOptionEnum.StakersEligibilityDefault,\n FacetOptionEnum.StakersEligibilityByRole,\n FacetOptionEnum.StakersEligibilityNID,\n ],\n [FacetSlot.PoolCreation]: [FacetOptionEnum.PoolCreationDefault, FacetOptionEnum.PoolCreationNID],\n [FacetSlot.AmountMult]: [\n FacetOptionEnum.AmountMultContinuous,\n FacetOptionEnum.AmountMultInterval,\n FacetOptionEnum.AmountMultNoMultiplier,\n ],\n [FacetSlot.StakeCreation]: [FacetOptionEnum.StakeCreationDefault, FacetOptionEnum.StakeCreationNID],\n [FacetSlot.AccessControl]: [FacetOptionEnum.AccessControlDefault],\n} as const satisfies Record<FacetSlot, FacetOptionEnum[]>;\n\nexport type FacetOptionsBySlot<TSlot extends FacetSlot> = (typeof facetOptionsBySlot)[TSlot][number];\n","import { encodeAbiParameters, Hex } from \"viem\";\nimport { getStakingRoleHex, StakingRole } from \"../../roles.js\";\n\nexport function getCreatorEligibilityByRoleInitData(role: Hex | StakingRole) {\n return encodeAbiParameters(\n [\n {\n name: \"roles\",\n type: \"bytes32[]\",\n },\n ],\n [[getStakingRoleHex(role)]],\n );\n}\n","import { encodeAbiParameters } from \"viem\";\nimport { z } from \"zod\";\nimport { Erc721MetaSchema } from \"@evergonlabs/tmi-protocol-types/evm\";\n\nexport function getErc721InitData(token: z.output<typeof Erc721MetaSchema>, isSoulbound: boolean) {\n return encodeAbiParameters(\n [\n { name: \"name\", type: \"string\" },\n { name: \"symbol\", type: \"string\" },\n { name: \"baseUri\", type: \"string\" },\n { name: \"isTransferrable\", type: \"bool\" },\n ],\n [token.name, token.symbol, token.baseUri, isSoulbound],\n );\n}\n","import { encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport function getLockStaticPeriodInitData(maxLockPeriodInSeconds: INumberish) {\n return encodeAbiParameters(\n [\n {\n name: \"maxLockPeriodInSeconds\",\n type: \"uint256\",\n },\n ],\n [BigInt(maxLockPeriodInSeconds)],\n );\n}\n\nexport function getLockStaticPeriodSetData(periodsInSeconds: INumberish[]) {\n return encodeAbiParameters(\n [\n {\n name: \"lockPeriods\",\n type: \"uint256[]\",\n },\n ],\n [periodsInSeconds.map((x) => BigInt(x))],\n );\n}\n\nexport function getLockTwoBorderSetData(\n minAcceptedLockPeriodSeconds: INumberish,\n maxAcceptedLockPeriodSeconds: INumberish,\n) {\n return encodeAbiParameters(\n [\n { name: \"minAcceptedLockPeriodSeconds\", type: \"uint256\" },\n { name: \"maxAcceptedLockPeriodSeconds\", type: \"uint256\" },\n ],\n [BigInt(minAcceptedLockPeriodSeconds), BigInt(maxAcceptedLockPeriodSeconds)],\n );\n}\n","import { anvil, baseSepolia, sepolia } from \"viem/chains\";\nimport { z } from \"@evergonlabs/tmi-protocol-utils/zod\";\nimport { createSupportedChains } from \"@evergonlabs/tmi-utils/models\";\n\nexport const StakingChains = createSupportedChains([sepolia, baseSepolia, anvil]);\n\nconst stakingChainLiterals = StakingChains.chainIds.map((id) => z.literal(id));\nexport const StakingChainId = z.union(stakingChainLiterals).openapi({\n enum: StakingChains.chainIds,\n description: \"Supported chain id\",\n example: `${sepolia.id}`,\n});\n\nexport type IStakingChainId = z.input<typeof StakingChainId>;\n\ntype SupportedStakingChainId = (typeof StakingChains)[\"chainIds\"][number];\n\nexport const getStakingChain = StakingChains.get.bind(StakingChains);\n\nexport type InferChainById<T extends SupportedStakingChainId> = ReturnType<typeof getStakingChain<T>>;\n","import { Hex } from \"viem\";\nimport { CustomError } from \"@evergonlabs/tmi-utils/errors\";\nimport { FacetOptionNotSupportedYetError } from \"../../internal/errors.js\";\nimport { StakingRole } from \"../roles.js\";\nimport { getAmountHardcapOnlySetData, getAmountTwoBorderSetData } from \"./slices/amount.js\";\nimport { getAmountMultContinuousSetData, getAmountMultIntervalSetData } from \"./slices/amountMult.js\";\nimport { getErc20InputSetterData } from \"./slices/erc20Input.js\";\nimport { getErc20RewardSetterData } from \"./slices/erc20Reward.js\";\nimport { getErc1155InputSetterData } from \"./slices/erc1155Input.js\";\nimport { getErc1155RewardSetterData } from \"./slices/erc1155Reward.js\";\nimport { getLockStaticPeriodSetData, getLockTwoBorderSetData } from \"./slices/lock.js\";\nimport { getLockMultContinuousSetData, getLockMultStaticPeriodSetData } from \"./slices/lockMult.js\";\nimport {\n getRewardsDistributionComplexSetData,\n getRewardsDistributionPreStakeSetData,\n getRewardsDistributionRateBasedLockSetData,\n getRewardsDistributionRateBasedOpenSetData,\n} from \"./slices/rewardsDistribution.js\";\nimport { getStakersEligibilitySetData } from \"./slices/stakersEligibility.js\";\nimport { getTimeOnlyStartingSetData, getTimeTwoBorderSetData } from \"./slices/time.js\";\nimport { FacetOptionEnum } from \"./options.js\";\nimport { IPoolConfig, IPoolConfigParam } from \"./poolConfig.js\";\nimport { FacetSlot } from \"./slots.js\";\nimport { IPlatformTemplate } from \"./template.js\";\n\nexport type IFacetSetterData = {\n data: Hex;\n};\n\nexport type IFacetSettersDictionary<TTemplate extends IPlatformTemplate> = {\n [TOption in FacetOptionEnum]: (\n params: IPoolConfigParam<TOption>,\n config: IPoolConfig<TTemplate>,\n ) => IFacetSetterData | undefined;\n};\n\nexport function createFacetSettersDictionary<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n): IFacetSettersDictionary<TTemplate> {\n return {\n // Access Control\n [FacetOptionEnum.AccessControlDefault]: () => undefined,\n\n // Erc 721\n [FacetOptionEnum.Erc721Default]: () => undefined,\n\n // Pool creation\n [FacetOptionEnum.PoolCreationDefault]: () => undefined,\n [FacetOptionEnum.PoolCreationNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.PoolCreationNID);\n },\n\n // Lock variations\n [FacetOptionEnum.LockStaticPeriod]: (params) => ({\n data: getLockStaticPeriodSetData(params.lockPeriods),\n }),\n [FacetOptionEnum.LockTwoBorder]: (params) => ({\n data: getLockTwoBorderSetData(params.minAcceptedLockPeriod, params.maxAcceptedLockPeriod),\n }),\n\n // Automatic lock variations\n // Must be in align with the FacetSlot.RewardsDistribution\n [FacetOptionEnum.LockAutoComplex]: (_params, config) => {\n if (config[FacetSlot.RewardsDistribution].type !== FacetOptionEnum.RewardDistributionComplex) {\n throw new CombinationError(FacetOptionEnum.LockAutoComplex, FacetOptionEnum.RewardDistributionComplex);\n }\n return {\n data: getLockStaticPeriodSetData([0]),\n };\n },\n [FacetOptionEnum.LockAutoPreStake]: (_params, config) => {\n if (config[FacetSlot.RewardsDistribution].type !== FacetOptionEnum.RewardDistributionPreStake) {\n throw new CombinationError(FacetOptionEnum.LockAutoPreStake, FacetOptionEnum.RewardDistributionPreStake);\n }\n const time = config[FacetSlot.Time];\n if (time.type !== FacetOptionEnum.TimeTwoBorder) {\n throw new CombinationError(FacetOptionEnum.LockAutoPreStake, FacetOptionEnum.TimeTwoBorder);\n }\n const ms = time.rewardsEndDate.getTime() - time.endDate.getTime();\n return {\n data: getLockStaticPeriodSetData([ms / 1000]),\n };\n },\n [FacetOptionEnum.LockAutoRateBasedOpen]: (_params, config) => {\n if (config[FacetSlot.RewardsDistribution].type !== FacetOptionEnum.RewardDistributionRateBasedOpen) {\n throw new CombinationError(\n FacetOptionEnum.LockAutoRateBasedOpen,\n FacetOptionEnum.RewardDistributionRateBasedOpen,\n );\n }\n return {\n data: getLockStaticPeriodSetData([0]),\n };\n },\n\n // Amount\n [FacetOptionEnum.AmountHardCap]: (params) => {\n return {\n data: getAmountHardcapOnlySetData(params.hardCap),\n };\n },\n [FacetOptionEnum.AmountTwoBorder]: (params) => {\n return {\n data: getAmountTwoBorderSetData(params.minAmount, params.maxAmount),\n };\n },\n\n // Amount mult\n [FacetOptionEnum.AmountMultNoMultiplier]: () => undefined,\n [FacetOptionEnum.AmountMultContinuous]: (params) => {\n return {\n data: getAmountMultContinuousSetData(params.packetsAndMultipliers),\n };\n },\n [FacetOptionEnum.AmountMultInterval]: (params) => {\n return {\n data: getAmountMultIntervalSetData(params.packetsAndMultipliers),\n };\n },\n\n // Creators Eligibility\n [FacetOptionEnum.CreatorsEligibilityByRole]: () => undefined,\n [FacetOptionEnum.CreatorsEligibilityDefault]: () => undefined,\n [FacetOptionEnum.CreatorsEligibilityNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.CreatorsEligibilityNID);\n },\n\n // Input\n [FacetOptionEnum.InputErc20]: (params) => {\n return {\n data: getErc20InputSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n [FacetOptionEnum.InputErc1155]: (params) => {\n return {\n data: getErc1155InputSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n tokenId: x.tokenId,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n\n // Reward\n [FacetOptionEnum.RewardErc1155Transfer]: (params) => {\n return {\n data: getErc1155RewardSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n tokenId: x.tokenId,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n [FacetOptionEnum.RewardErc1155Minter]: (params) => {\n return {\n data: getErc1155RewardSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n tokenId: x.tokenId,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n [FacetOptionEnum.RewardErc20Transfer]: (params) => {\n return {\n data: getErc20RewardSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n [FacetOptionEnum.RewardErc20Minter]: (params) => {\n return {\n data: getErc20RewardSetterData(\n params.entries.map((x) => ({\n tokenAddress: x.tokenAddress,\n amountOfTokensPerPacket: x.amountOfTokensPerPacket,\n })),\n ),\n };\n },\n\n // Lock mult\n [FacetOptionEnum.LockMultNoMultiplier]: () => undefined,\n [FacetOptionEnum.LockMultContinuous]: (params) => {\n return {\n data: getLockMultContinuousSetData(\n params.lockPeriods.map((x) => ({\n lockPeriodSeconds: x[0],\n multiplier: x[1],\n })),\n ),\n };\n },\n [FacetOptionEnum.LockMultInterval]: (params) => {\n return {\n data: getLockMultStaticPeriodSetData(\n params.lockPeriods.map((x) => ({\n lockPeriodSeconds: x[0],\n multiplier: x[1],\n })),\n ),\n };\n },\n\n // Stake creation\n [FacetOptionEnum.StakeCreationDefault]: () => undefined,\n [FacetOptionEnum.StakeCreationNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.StakeCreationNID);\n },\n\n // Stakers eligibility\n [FacetOptionEnum.StakersEligibilityDefault]: (params) => {\n return {\n data: getStakersEligibilitySetData([StakingRole.Staker], params.isCampaignScoped),\n };\n },\n [FacetOptionEnum.StakersEligibilityByRole]: (params) => {\n return {\n data: getStakersEligibilitySetData(params.eligibleRoles, params.isCampaignScoped),\n };\n },\n [FacetOptionEnum.StakersEligibilityNID]: () => {\n throw new FacetOptionNotSupportedYetError(FacetOptionEnum.StakersEligibilityNID);\n },\n\n // Time\n [FacetOptionEnum.TimeOnlyStarting]: (params) => {\n return {\n data: getTimeOnlyStartingSetData(params.startDate),\n };\n },\n [FacetOptionEnum.TimeTwoBorder]: (params) => {\n return {\n data: getTimeTwoBorderSetData(params.startDate, params.endDate, params.rewardsEndDate),\n };\n },\n\n // Withdrawal\n [FacetOptionEnum.WithdrawalLockChecker]: () => undefined,\n\n // Rewards Distribution\n [FacetOptionEnum.RewardDistributionComplex]: (params) => {\n return {\n data: getRewardsDistributionComplexSetData(params.duration, params.distributor),\n };\n },\n [FacetOptionEnum.RewardDistributionPreStake]: (params) => {\n return {\n data: getRewardsDistributionPreStakeSetData(params.totalPackets, params.isInstaRewards, params.rewardsProvider),\n };\n },\n [FacetOptionEnum.RewardDistributionRateBasedLock]: (params) => {\n return {\n data: getRewardsDistributionRateBasedLockSetData(\n params.campaignRate,\n template[FacetSlot.LockMult] !== FacetOptionEnum.LockMultNoMultiplier,\n ),\n };\n },\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: (params) => {\n return {\n data: getRewardsDistributionRateBasedOpenSetData(params.campaignRate),\n };\n },\n };\n}\n\nclass CombinationError extends CustomError<{\n targetOption: FacetOptionEnum;\n requiredOption: FacetOptionEnum;\n}> {\n constructor(targetOption: FacetOptionEnum, requiredOption: FacetOptionEnum) {\n super({\n message: `Option ${targetOption} can be used only in combination with ${requiredOption}`,\n name: \"CombinationError\",\n data: {\n requiredOption,\n targetOption,\n },\n });\n }\n}\n","import { encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport function getAmountTwoBorderSetData(minAmountOfPackets: INumberish, maxAmountOfPackets: INumberish) {\n return encodeAbiParameters(\n [\n { name: \"minAmountOfPackets\", type: \"uint256\" },\n { name: \"maxAmountOfPackets\", type: \"uint256\" },\n ],\n [BigInt(minAmountOfPackets), BigInt(maxAmountOfPackets)],\n );\n}\n\nexport function getAmountHardcapOnlySetData(hardCapPackets: INumberish) {\n return encodeAbiParameters(\n [\n {\n name: \"hardCapPackets\",\n type: \"uint256\",\n },\n ],\n [BigInt(hardCapPackets)],\n );\n}\n","import { encodeAbiParameters, parseUnits } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport function getAmountMultIntervalSetData(packetsAndMultipliers: [INumberish, INumberish][]) {\n return encodeAbiParameters(\n [\n { name: \"packetsStaked\", type: \"uint256[]\" },\n { name: \"packetsStakedMultipliers\", type: \"uint256[]\" },\n ],\n [\n packetsAndMultipliers.map((x) => BigInt(x[0])),\n // According to doc of `IntervalVirtualAmountMultiplierFacet`\n // Multipliers should be scaled by 1e18, allowing for calculations with up to 18 decimal precision.\n packetsAndMultipliers.map((x) => parseUnits(x[1].toString(), 18)),\n ],\n );\n}\n\nexport function getAmountMultContinuousSetData(packetsAndMultipliers: [INumberish, INumberish][]) {\n return encodeAbiParameters(\n [\n { name: \"packetsStaked\", type: \"uint256[]\" },\n { name: \"packetsStakedMultipliers\", type: \"uint256[]\" },\n ],\n [\n packetsAndMultipliers.map((x) => BigInt(x[0])),\n // According to doc of `ContinuousVirtualAmountMultiplierFacet`\n // Multipliers should be scaled by 1e18, allowing for calculations with up to 18 decimal precision.\n packetsAndMultipliers.map((x) => parseUnits(x[1].toString(), 18)),\n ],\n );\n}\n","import { Address, encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport type IErc20InputEntry = {\n tokenAddress: Address;\n amountOfTokensPerPacket: INumberish;\n};\n\nexport function getErc20InputSetterData(entries: IErc20InputEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"tokenAddresses\", type: \"address[]\" },\n { name: \"amountOfTokensPerPacket\", type: \"uint256[]\" },\n ],\n [entries.map((x) => x.tokenAddress), entries.map((x) => BigInt(x.amountOfTokensPerPacket))],\n );\n}\n","import { Address, encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport type IErc20RewardEntry = {\n tokenAddress: Address;\n amountOfTokensPerPacket: INumberish;\n};\n\nexport function getErc20RewardSetterData(entries: IErc20RewardEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"tokenAddresses\", type: \"address[]\" },\n { name: \"amountOfTokensPerPacket\", type: \"uint256[]\" },\n ],\n [entries.map((x) => x.tokenAddress), entries.map((x) => BigInt(x.amountOfTokensPerPacket))],\n );\n}\n","import { Address, encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { parseErc1155TokenId } from \"../../../internal/utils.js\";\n\nexport type IErc1155InputEntry = {\n tokenAddress: Address;\n tokenId: string;\n amountOfTokensPerPacket: INumberish;\n};\n\nexport function getErc1155InputSetterData(entries: IErc1155InputEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"tokenAddresses\", type: \"address[]\" },\n { name: \"tokenIds\", type: \"uint256[]\" },\n { name: \"amountOfTokensPerPacket\", type: \"uint256[]\" },\n ],\n [\n entries.map((x) => x.tokenAddress),\n entries.map((x) => parseErc1155TokenId(x.tokenId)),\n entries.map((x) => BigInt(x.amountOfTokensPerPacket)),\n ],\n );\n}\n","export function parseErc1155TokenId(tokenId: string): bigint {\n const parsed = parseInt(tokenId);\n if (isNaN(parsed)) {\n throw new Error(`Invalid token id: ${tokenId}`);\n }\n return BigInt(parsed);\n}\n","import { Address, encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { parseErc1155TokenId } from \"../../../internal/utils.js\";\n\nexport type IErc1155RewardEntry = {\n tokenAddress: Address;\n tokenId: string;\n amountOfTokensPerPacket: INumberish;\n};\n\nexport function getErc1155RewardSetterData(entries: IErc1155RewardEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"tokenAddresses\", type: \"address[]\" },\n { name: \"tokenIds\", type: \"uint256[]\" },\n { name: \"amountOfTokensPerPacket\", type: \"uint256[]\" },\n ],\n [\n entries.map((x) => x.tokenAddress),\n entries.map((x) => parseErc1155TokenId(x.tokenId)),\n entries.map((x) => BigInt(x.amountOfTokensPerPacket)),\n ],\n );\n}\n","import { encodeAbiParameters, parseUnits } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport type ILockMultIntervalEntry = {\n lockPeriodSeconds: INumberish;\n multiplier: INumberish;\n};\n\nexport function getLockMultStaticPeriodSetData(entries: ILockMultIntervalEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"timeLockPeriods\", type: \"uint256[]\" },\n { name: \"timeLockMultipliers\", type: \"uint256[]\" },\n ],\n [entries.map((x) => BigInt(x.lockPeriodSeconds)), entries.map((x) => parseUnits(x.multiplier.toString(), 18))],\n );\n}\n\nexport function getLockMultContinuousSetData(entries: ILockMultIntervalEntry[]) {\n return encodeAbiParameters(\n [\n { name: \"timeLockPeriods\", type: \"uint256[]\" },\n { name: \"timeLockMultipliers\", type: \"uint256[]\" },\n ],\n [entries.map((x) => BigInt(x.lockPeriodSeconds)), entries.map((x) => parseUnits(x.multiplier.toString(), 18))],\n );\n}\n","import { Address, encodeAbiParameters } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\n\nexport function getRewardsDistributionRateBasedLockSetData(\n campaignRate: INumberish,\n isVirtualLockMultiplierSupported: boolean,\n) {\n return encodeAbiParameters(\n [\n { name: \"campaignRate\", type: \"uint256\" },\n { name: \"isVirtualLockMultiplierSupported\", type: \"bool\" },\n ],\n [BigInt(campaignRate), isVirtualLockMultiplierSupported],\n );\n}\n\nexport function getRewardsDistributionRateBasedOpenSetData(campaignRate: INumberish) {\n return encodeAbiParameters(\n [\n {\n name: \"campaignRate\",\n type: \"uint256\",\n },\n ],\n [BigInt(campaignRate)],\n );\n}\n\nexport function getRewardsDistributionComplexSetData(durationSeconds: INumberish, campaignRewardDistributor: Address) {\n return encodeAbiParameters(\n [\n { name: \"interval\", type: \"uint256\" },\n { name: \"campaignRewardDistributor\", type: \"address\" },\n ],\n [BigInt(durationSeconds), campaignRewardDistributor],\n );\n}\n\nexport function getRewardsDistributionPreStakeSetData(\n totalReward: INumberish,\n isInstaRewards: boolean,\n rewardsProvider: Address,\n) {\n return encodeAbiParameters(\n [\n { name: \"totalReward\", type: \"uint256\" },\n { name: \"isInstaRewards\", type: \"bool\" },\n { name: \"rewardsProvider\", type: \"address\" },\n ],\n [BigInt(totalReward), isInstaRewards, rewardsProvider],\n );\n}\n","import { encodeAbiParameters, Hex } from \"viem\";\nimport { getStakingRoleHex, StakingRole } from \"../../roles.js\";\n\nexport function getStakersEligibilitySetData(\n eligibleForStakingRoles: (Hex | StakingRole)[],\n isCampaignScoped: boolean,\n) {\n return encodeAbiParameters(\n [\n { name: \"eligibleForStakingRoles\", type: \"bytes32[]\" },\n { name: \"isCampaignScoped\", type: \"bool\" },\n ],\n [eligibleForStakingRoles.map((x) => getStakingRoleHex(x)), isCampaignScoped],\n );\n}\n","import { encodeAbiParameters } from \"viem\";\nimport { msToSeconds } from \"@evergonlabs/tmi-protocol-utils/date\";\n\nexport function getTimeTwoBorderSetData(startDate: Date, endDate: Date, rewardsDate: Date) {\n return encodeAbiParameters(\n [\n { name: \"campaignStartingTimestamp\", type: \"uint256\" },\n { name: \"campaignEndingTimestamp\", type: \"uint256\" },\n { name: \"campaignRewardsEndingTimestamp\", type: \"uint256\" },\n ],\n [\n msToSeconds(BigInt(startDate.getTime())),\n msToSeconds(BigInt(endDate.getTime())),\n msToSeconds(BigInt(rewardsDate.getTime())),\n ],\n );\n}\n\nexport function getTimeOnlyStartingSetData(campaignStartingTimestamp: Date) {\n return encodeAbiParameters(\n [\n {\n name: \"campaignStartingTimestamp\",\n type: \"uint256\",\n },\n ],\n [msToSeconds(BigInt(campaignStartingTimestamp.getTime()))],\n );\n}\n","import { Address, Hex } from \"viem\";\nimport { anvil, baseSepolia, sepolia } from \"viem/chains\";\nimport { constants, getFacetCutsAdd, getStakingFacetFactory, types } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { FACET_CUT_ACTION, IFacetCut } from \"@evergonlabs/tmi-protocol-types/diamond\";\nimport { IStakingChainId } from \"../common/chains.js\";\n\ntype StakingChainId = types.ChainId;\ntype FacetType = types.FacetType;\n\n/**\n * @returns the FacetCuts objects (with ADD FacetCutAction) for the provided contracts\n */\nexport function getFacetCutsWithAddAction(chainId: IStakingChainId, facets: FacetType[]): IFacetCut[] {\n const contracts = facets.map((facet) => {\n const Contract = getStakingFacetFactory(facet);\n return Contract.getContract(getFacetAddress(facet, chainId), Contract.createInterface());\n });\n return getFacetCutsAdd(contracts).map((x) => ({\n target: x.target as Hex,\n action: x.action as FACET_CUT_ACTION,\n selectors: x.selectors as Hex[],\n }));\n}\n\n/**\n * @returns the contract address of deployed Facet by it's name\n * it accepts only supported chain id\n */\nexport function getFacetAddress<TType extends FacetType>(type: TType, chainId: IStakingChainId) {\n return constants.contractAddresses[toStakingSdkChainId(chainId)][type];\n}\n\nconst stakingChainIdDictionary: Record<IStakingChainId, StakingChainId> = {\n [`${sepolia.id}` as const]: sepolia.id,\n [`${baseSepolia.id}` as const]: baseSepolia.id,\n [`${anvil.id}` as const]: sepolia.id, // we are using our anvil instance as sepolia fork here\n};\n\n/**\n * @returns mapped chain id to the low-level staking sdk.\n */\nexport function toStakingSdkChainId(chainId: IStakingChainId): StakingChainId {\n return stakingChainIdDictionary[chainId];\n}\n\nconst stakingDiamondFactoryByChain: Record<IStakingChainId, Address> = {\n [`${sepolia.id}` as const]: constants.diamondFactoryAddresses[sepolia.id],\n [`${baseSepolia.id}` as const]: constants.diamondFactoryAddresses[baseSepolia.id],\n [`${anvil.id}` as const]: constants.diamondFactoryAddresses[sepolia.id],\n};\n\n/**\n * @returns diamond factory for of corresponding chain id\n * Must one of supported chain ids provided.\n */\nexport function getDiamondFactoryAddress(chainId: IStakingChainId) {\n return stakingDiamondFactoryByChain[chainId];\n}\n","import { Log, parseEventLogs } from \"viem\";\nimport { diamondFactoryAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\n\nexport function parseDeployDiamondEvent(logs: Log[]) {\n const result = parseEventLogs({\n eventName: \"DiamondDeployedAndInitialized\" as const,\n abi: diamondFactoryAbi,\n logs: logs,\n })[0];\n if (result) {\n return {\n diamondAddress: result.args.diamondAddress,\n admin: result.args.admin,\n };\n }\n return null;\n}\n","import { Address, encodeAbiParameters, Hex } from \"viem\";\nimport { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { createFacetSettersDictionary } from \"../../common/facets/facetsSetterDictionary.js\";\nimport { FacetOptionEnum } from \"../../common/facets/options.js\";\nimport { IPoolConfig } from \"../../common/facets/poolConfig.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetSlot, facetSlots } from \"../../common/index.js\";\nimport { getPoolCreationAbi } from \"./createPoolUtils.js\";\n\nexport type ICreatePoolRequest<TTemplate extends IPlatformTemplate> = {\n platform: Address;\n data: ExcludeVoidProperties<IPoolConfig<TTemplate>>;\n};\n\nexport function createPool<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n request: ICreatePoolRequest<TTemplate>,\n) {\n const setDictionary = createFacetSettersDictionary(template);\n const poolConfig = request.data as IPoolConfig<TTemplate>;\n const requiredData: { option: FacetOptionEnum; data: Hex }[] = [];\n\n facetSlots.forEach(<TSlot extends FacetSlot>(slot: TSlot) => {\n const option = template[slot];\n const handler = setDictionary[option];\n const result = handler(poolConfig[slot], poolConfig);\n if (result) {\n requiredData.push({\n data: result.data,\n option: option,\n });\n }\n });\n\n const encodedData = encodeAbiParameters(\n [\n { name: \"optionalParams\", type: \"bytes4[]\" },\n { name: \"params\", type: \"bytes[]\" },\n ],\n [[], requiredData.map((x) => x.data)],\n );\n\n return {\n address: request.platform,\n abi: getPoolCreationAbi(template),\n functionName: \"createCampaign\",\n args: [encodedData],\n };\n}\n","import { Abi, Log, parseEventLogs } from \"viem\";\nimport {\n campaignCreationSkeletonAbi,\n campaignCreationSkeletonNidAbi,\n} from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { FacetOptionEnum, FacetOptionsBySlot, FacetSlot, IPlatformTemplate } from \"../../common/index.js\";\n\nconst poolCreationFacetByOption = {\n [FacetOptionEnum.PoolCreationDefault]: campaignCreationSkeletonAbi,\n [FacetOptionEnum.PoolCreationNID]: campaignCreationSkeletonNidAbi,\n} satisfies Record<FacetOptionsBySlot<FacetSlot.PoolCreation>, Abi>;\n\nexport function getPoolCreationAbi<TTemplate extends IPlatformTemplate>(template: TTemplate) {\n return poolCreationFacetByOption[template[FacetSlot.PoolCreation]];\n}\n\nexport function parseCreatePoolEvent<TTemplate extends IPlatformTemplate>(template: TTemplate, logs: Log[]) {\n const abi = getPoolCreationAbi(template);\n const result = parseEventLogs({\n eventName: \"StakingCampaignCreated\" as const,\n abi: abi,\n logs: logs,\n })[0];\n if (result) {\n return {\n poolId: result.args.campaignId,\n creator: result.args.creator,\n };\n }\n return null;\n}\n\nexport function parseAssetManagersDeployEvent<TTemplate extends IPlatformTemplate>(template: TTemplate, logs: Log[]) {\n const abi = getPoolCreationAbi(template);\n const result = parseEventLogs({\n eventName: \"CampaignAssetManagersDeployed\" as const,\n abi: abi,\n logs: logs,\n })[0];\n if (result) {\n return {\n poolId: result.args.campaignId,\n inputAssetKeeper: result.args.inputAssetKeeper,\n rewardAssetHandler: result.args.rewardAssetHandler,\n };\n }\n return null;\n}\n","import { Address } from \"viem\";\nimport { complexRewardDistributionFacetAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { CustomError } from \"@evergonlabs/tmi-utils/errors\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { FacetOptionEnum } from \"../../common/facets/options.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetSlot } from \"../../common/index.js\";\n\nexport type IDistributeRewardsRequest = {\n platform: Address;\n data: IDistributeRewardsData;\n};\n\n/**\n * @description This action is called by the Reward Distributor of the specified\n * Pool to provide additional rewards.\n *\n * @notes\n * - Only for Complex Distribution Reward algorithm\n * - Before notification there must be at least 1 Staker within the Pool\n */\n\nexport function distributeRewards<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n request: IDistributeRewardsRequest,\n) {\n switch (template[FacetSlot.RewardsDistribution]) {\n case FacetOptionEnum.RewardDistributionComplex: {\n return {\n address: request.platform,\n abi: complexRewardDistributionFacetAbi,\n functionName: \"notifyRewardAmount\",\n args: [BigInt(request.data.poolId), BigInt(request.data.packets)],\n };\n }\n default:\n throw new DistributeRewardsError(template[FacetSlot.RewardsDistribution]);\n }\n}\n\nexport class DistributeRewardsError extends CustomError<{ option: FacetOptionEnum }> {\n constructor(option: FacetOptionEnum) {\n super({\n message: `Reward distribution ${option} is not eligible for distributeRewards action`,\n name: \"DistributeRewardsError\",\n data: {\n option: option,\n },\n });\n }\n}\n\nexport type IDistributeRewardsData = {\n /**\n * The unique identifier of the targeted Pool in which the user is participating.\n */\n poolId: INumberish;\n /**\n * The number of Input Packets to add to Pool\n */\n packets: INumberish;\n};\n","import { Abi } from \"viem\";\nimport { stakingSkeletonAbi, stakingSkeletonNidAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { FacetOptionEnum, FacetOptionsBySlot } from \"./options.js\";\nimport { FacetSlot } from \"./slots.js\";\nimport { IPlatformTemplate } from \"./template.js\";\n\nconst contractByFacetOption = {\n [FacetOptionEnum.StakeCreationDefault]: stakingSkeletonAbi,\n [FacetOptionEnum.StakeCreationNID]: stakingSkeletonNidAbi,\n} as const satisfies Record<FacetOptionsBySlot<FacetSlot.StakeCreation>, Abi>;\n\nexport function getStakeCreationAbi<TTemplate extends IPlatformTemplate>(template: TTemplate) {\n return contractByFacetOption[template[FacetSlot.StakeCreation]];\n}\n","import { Address } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/index.js\";\n\nexport type IGetRewardRequest = {\n platform: Address;\n data: IGetRewardData;\n};\n\n/**\n * @notice Allows users to receive any accrued rewards associated with their position specified by `stakeId`.\n * This does NOT affect the total staked assets of the position.\n *\n * @notes\n * - User must own the NFT representing the position to claim rewards.\n * - User must meet eligibility criteria.\n * - If reward is positive number emits a {RewardsReceived} event\n */\n\nexport function getReward<TTemplate extends IPlatformTemplate>(template: TTemplate, request: IGetRewardRequest) {\n const abi = getStakeCreationAbi(template);\n return {\n address: request.platform,\n abi: abi,\n functionName: \"getReward\",\n args: [BigInt(request.data.stakeId)],\n };\n}\n\nexport type IGetRewardData = {\n /**\n * The unique identifier of the targeted Stake Position (nft id).\n */\n stakeId: INumberish;\n};\n","import { Address, Hex } from \"viem\";\nimport { accessControlStakingFacetAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { isNonEmptyArray } from \"@evergonlabs/tmi-utils/typeUtils\";\nimport { getStakingRoleHex, StakingRole } from \"../../common/roles.js\";\n\nexport type IGrantRoleRequest = {\n platform: Address;\n role: Hex | StakingRole;\n addresses: Address[];\n};\n\nexport function grantRole(request: IGrantRoleRequest) {\n const { abi, functionName, args } = generateData(request);\n return {\n address: request.platform,\n abi: abi,\n functionName: functionName,\n args: args,\n };\n}\n\nfunction generateData(request: IGrantRoleRequest) {\n if (!isNonEmptyArray(request.addresses)) {\n throw new Error(`Addresses array must have at least 1 address`);\n }\n if (request.addresses.length === 1) {\n return {\n abi: accessControlStakingFacetAbi,\n functionName: \"grantRole\",\n args: [getStakingRoleHex(request.role), request.addresses[0]!],\n };\n }\n return {\n abi: accessControlStakingFacetAbi,\n functionName: \"grantRoleMultiple\",\n args: [getStakingRoleHex(request.role), request.addresses],\n };\n}\n","import { Address } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\n\nexport type IPartialUnstakeRequest = {\n platform: Address;\n data: IPartialUnstakeData;\n};\n\n/**\n * @description This action is called by Stake position holder to\n * withdraw a portion of the staked assets and all accumulated rewards from an expired position.\n *\n * @notes\n * - Only possible after the position's lock period *(if any)* has expired.\n * - The amount withdrawn must be less than the position's total staked assets.\n * - Claimable accrued rewards (if any) associated with the position are calculated and transferred to the owner of the position upon partial unstaking.\n * - Emits a {StakingPositionDecreased} and {PositionBalanceUpdate} event.\n * - Also emits a {RewardsReceived} event on condition.\n */\n\nexport function partialUnstake<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n request: IPartialUnstakeRequest,\n) {\n const abi = getStakeCreationAbi(template);\n return {\n address: request.platform,\n abi: abi,\n functionName: \"partialUnstake\",\n args: [BigInt(request.data.stakeId), BigInt(request.data.amount)],\n };\n}\n\nexport type IPartialUnstakeData = {\n /**\n * The unique identifier of the targeted Stake Position (nft id).\n */\n stakeId: INumberish;\n /**\n * The number of input packets to withdraw from the position,\n * thereby decreasing it.\n */\n amount: INumberish;\n};\n","import { Address } from \"viem\";\nimport { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetOptionEnum, FacetSlot } from \"../../common/index.js\";\n\nexport type IRetakeRequest<TTemplate extends IPlatformTemplate> = {\n platform: Address;\n data: ExcludeVoidProperties<IRestakeData<TTemplate>>;\n};\n\n/**\n * @description Allows users to increase their position specified by `nftId` by allocating or locking\n * additional amounts of staked assets defined in the associated Pool's input packet.\n *\n * @note\n * - Restake is not supported when instant staking rewards are featured.\n * - The new lock period must not shorten the existing lock duration.\n * - Users must own the NFT representing the position.\n */\n\nexport function restake<TTemplate extends IPlatformTemplate>(template: TTemplate, request: IRetakeRequest<TTemplate>) {\n const { abi, functionName, args } = createRetakeData(\n template,\n getStakeCreationAbi(template),\n request.data as IRestakeData<TTemplate>,\n );\n return {\n abi: abi,\n args: args,\n functionName: functionName,\n address: request.platform,\n };\n}\n\nfunction createRetakeData<TTemplate extends IPlatformTemplate>(\n _template: TTemplate,\n abi: ReturnType<typeof getStakeCreationAbi>,\n data: IRestakeData<TTemplate>,\n) {\n return {\n abi: abi,\n functionName: \"restake\",\n args: [BigInt(data.stakeId), BigInt(data.packets), BigInt(data.lockPeriod ?? 0)],\n };\n}\n\nexport type IRestakeData<TTemplate extends IPlatformTemplate> = {\n /**\n * The unique identifier of the targeted Stake Position (nft id).\n */\n stakeId: INumberish;\n /**\n * The number of input packets to add to the existing Stake.\n */\n packets: INumberish;\n /**\n * The duration, in seconds, during which the position's staked assets will be locked.\n *\n * @note The recalculated `unlockTimestamp` (`stakeActiveStartingTimestamp` + `timeLockPeriod`)\n * must be greater than or equal to the current position's `unlockTimestamp`.\n */\n lockPeriod: {\n [FacetOptionEnum.RewardDistributionComplex]: void;\n [FacetOptionEnum.RewardDistributionPreStake]: INumberish;\n [FacetOptionEnum.RewardDistributionRateBasedLock]: INumberish;\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: INumberish;\n }[TTemplate[FacetSlot.RewardsDistribution]];\n};\n","import { Address, Hex } from \"viem\";\nimport { accessControlStakingFacetAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { isNonEmptyArray } from \"@evergonlabs/tmi-utils/typeUtils\";\nimport { getStakingRoleHex, StakingRole } from \"../../common/roles.js\";\n\nexport type IRevokeRoleRequest = {\n platform: Address;\n role: Hex | StakingRole;\n addresses: Address[];\n};\n\nexport function revokeRole(request: IRevokeRoleRequest) {\n const { abi, functionName, args } = generateData(request);\n return {\n address: request.platform,\n abi: abi,\n args: args,\n functionName: functionName,\n };\n}\n\nfunction generateData(request: IRevokeRoleRequest) {\n if (!isNonEmptyArray(request.addresses)) {\n throw new Error(`Addresses array must have at least 1 address`);\n }\n if (request.addresses.length === 1) {\n return {\n abi: accessControlStakingFacetAbi,\n functionName: \"revokeRole\",\n args: [getStakingRoleHex(request.role), request.addresses[0]!],\n };\n }\n return {\n abi: accessControlStakingFacetAbi,\n functionName: \"revokeRoleMultiple\",\n args: [getStakingRoleHex(request.role), request.addresses],\n };\n}\n","import { Address } from \"viem\";\nimport { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { FacetOptionEnum } from \"../../common/facets/options.js\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetSlot } from \"../../common/index.js\";\n\nexport type IStakeRequest<TTemplate extends IPlatformTemplate> = {\n platform: Address;\n data: ExcludeVoidProperties<IStakeData<TTemplate>>;\n};\n\n/**\n * @description Allows users to create a position within a specified Pool by allocating or locking assets that are\n * predefined by the Pool's input configuration. The position is represented and tracked by an\n * ERC721 NFT token, which is minted to the user upon staking.\n *\n * @dev Instant stake rewards may or may not be featured, depending on the Pool's\n * rewards distribution configuration.\n *\n * @notes\n * - A unique ERC721 NFT is minted to the user to represent the position.\n * - Campaign-dependent; rewards may be provided instantly upon staking.\n */\n\nexport function stake<TTemplate extends IPlatformTemplate>(template: TTemplate, request: IStakeRequest<TTemplate>) {\n const abi = getStakeCreationAbi(template);\n const { functionName, args } = createStakeData(template, abi, request.data as IStakeData<TTemplate>);\n return {\n address: request.platform,\n abi: abi,\n functionName: functionName,\n args: args,\n };\n}\n\nfunction createStakeData<TTemplate extends IPlatformTemplate>(\n _template: TTemplate,\n abi: ReturnType<typeof getStakeCreationAbi>,\n data: IStakeData<TTemplate>,\n) {\n return {\n abi: abi,\n functionName: \"stake\",\n args: [BigInt(data.poolId), BigInt(data.packets), BigInt(data.lockPeriod ?? 0)],\n };\n}\n\nexport type IStakeData<TTemplate extends IPlatformTemplate> = {\n /**\n * The unique identifier of the targeted Pool in which the user is participating.\n */\n poolId: INumberish;\n /**\n * The number of input Packets to Stake.\n */\n packets: INumberish;\n /**\n * The duration, in seconds, during which the position's staked Packets will be locked.\n */\n lockPeriod: {\n [FacetOptionEnum.RewardDistributionComplex]: void;\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: void;\n [FacetOptionEnum.RewardDistributionPreStake]: INumberish;\n [FacetOptionEnum.RewardDistributionRateBasedLock]: INumberish;\n }[TTemplate[FacetSlot.RewardsDistribution]];\n};\n","import { Log, parseEventLogs } from \"viem\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/index.js\";\n\nexport function parseStakeEvent(template: IPlatformTemplate, logs: Log[]) {\n const result = parseEventLogs({\n eventName: \"StakingPositionCreated\",\n abi: getStakeCreationAbi(template),\n logs: logs,\n })[0];\n if (result) {\n return {\n poolId: result.args.campaignId,\n stakeId: result.args.nftId,\n operator: result.args.operator,\n owner: result.args.owner,\n inputPacketsStaked: result.args.inputPacketsStaked,\n stakeStartActiveTimestamp: result.args.stakeStartActiveTimestamp,\n unlockTimestamp: result.args.unlockTimestamp,\n };\n }\n return null;\n}\n","import { Address } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.js\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\n\nexport type IUnstakeRequest = {\n platform: Address;\n data: IUnstakeData;\n};\n\n/**\n * @description This action is called by Stake position holder to\n * withdraw all Staked assets from a position, closing it completely.\n *\n * @notes\n * - Only possible after the position's lock period *(if any)* has expired.\n * - Any accrued rewards are calculated and transferred during the unstake process.\n * - The NFT representing the position is burned upon successful completion.\n * - Users must own the NFT representing the position.\n */\n\nexport function unstake<TTemplate extends IPlatformTemplate>(template: TTemplate, request: IUnstakeRequest) {\n const abi = getStakeCreationAbi(template);\n return {\n address: request.platform,\n abi: abi,\n functionName: \"fullyUnstake\",\n args: [BigInt(request.data.stakeId)],\n };\n}\n\nexport type IUnstakeData = {\n /**\n * The unique identifier of the targeted Stake Position (nft id).\n */\n stakeId: INumberish;\n};\n","import { FacetOptionEnum, FacetSlot, IPlatformTemplate } from \"../common/index.js\";\n\nexport const ReputationTemplate = {\n [FacetSlot.RewardsDistribution]: FacetOptionEnum.RewardDistributionRateBasedOpen,\n [FacetSlot.StakeCreation]: FacetOptionEnum.StakeCreationDefault,\n [FacetSlot.PoolCreation]: FacetOptionEnum.PoolCreationDefault,\n [FacetSlot.Time]: FacetOptionEnum.TimeOnlyStarting,\n [FacetSlot.Amount]: FacetOptionEnum.AmountTwoBorder,\n [FacetSlot.CreatorsEligibility]: FacetOptionEnum.CreatorsEligibilityDefault,\n [FacetSlot.Erc721]: FacetOptionEnum.Erc721Default,\n [FacetSlot.Input]: FacetOptionEnum.InputErc20,\n [FacetSlot.Lock]: FacetOptionEnum.LockAutoRateBasedOpen,\n [FacetSlot.LockMult]: FacetOptionEnum.LockMultNoMultiplier,\n [FacetSlot.Reward]: FacetOptionEnum.RewardErc20Minter,\n [FacetSlot.StakersEligibility]: FacetOptionEnum.StakersEligibilityDefault,\n [FacetSlot.Withdrawal]: FacetOptionEnum.WithdrawalLockChecker,\n [FacetSlot.AmountMult]: FacetOptionEnum.AmountMultInterval,\n [FacetSlot.AccessControl]: FacetOptionEnum.AccessControlDefault,\n} as const satisfies IPlatformTemplate<\n FacetOptionEnum.RewardDistributionRateBasedOpen,\n FacetOptionEnum.StakeCreationDefault,\n FacetOptionEnum.PoolCreationDefault\n>;\n","import { FacetOptionEnum, FacetSlot, IPlatformTemplate } from \"../common/index.js\";\n\nexport const ReputationLockTemplate = {\n [FacetSlot.RewardsDistribution]: FacetOptionEnum.RewardDistributionRateBasedLock,\n [FacetSlot.StakeCreation]: FacetOptionEnum.StakeCreationDefault,\n [FacetSlot.PoolCreation]: FacetOptionEnum.PoolCreationDefault,\n [FacetSlot.Time]: FacetOptionEnum.TimeOnlyStarting,\n [FacetSlot.Amount]: FacetOptionEnum.AmountTwoBorder,\n [FacetSlot.CreatorsEligibility]: FacetOptionEnum.CreatorsEligibilityDefault,\n [FacetSlot.Erc721]: FacetOptionEnum.Erc721Default,\n [FacetSlot.Input]: FacetOptionEnum.InputErc20,\n [FacetSlot.Lock]: FacetOptionEnum.LockTwoBorder,\n [FacetSlot.LockMult]: FacetOptionEnum.LockMultInterval,\n [FacetSlot.Reward]: FacetOptionEnum.RewardErc20Minter,\n [FacetSlot.StakersEligibility]: FacetOptionEnum.StakersEligibilityDefault,\n [FacetSlot.Withdrawal]: FacetOptionEnum.WithdrawalLockChecker,\n [FacetSlot.AmountMult]: FacetOptionEnum.AmountMultInterval,\n [FacetSlot.AccessControl]: FacetOptionEnum.AccessControlDefault,\n} as const satisfies IPlatformTemplate<\n FacetOptionEnum.RewardDistributionRateBasedLock,\n FacetOptionEnum.StakeCreationDefault,\n FacetOptionEnum.PoolCreationDefault\n>;\n","import { FacetOptionEnum } from \"../common/facets/options.js\";\nimport { IPlatformTemplate } from \"../common/facets/template.js\";\nimport { FacetSlot } from \"../common/index.js\";\n\nexport const RWATemplate = {\n [FacetSlot.RewardsDistribution]: FacetOptionEnum.RewardDistributionComplex,\n [FacetSlot.StakeCreation]: FacetOptionEnum.StakeCreationDefault,\n [FacetSlot.PoolCreation]: FacetOptionEnum.PoolCreationDefault,\n [FacetSlot.Time]: FacetOptionEnum.TimeOnlyStarting,\n [FacetSlot.Amount]: FacetOptionEnum.AmountHardCap,\n [FacetSlot.CreatorsEligibility]: FacetOptionEnum.CreatorsEligibilityDefault,\n [FacetSlot.Erc721]: FacetOptionEnum.Erc721Default,\n [FacetSlot.Input]: FacetOptionEnum.InputErc20,\n [FacetSlot.Lock]: FacetOptionEnum.LockAutoComplex,\n [FacetSlot.LockMult]: FacetOptionEnum.LockMultNoMultiplier,\n [FacetSlot.Reward]: FacetOptionEnum.RewardErc20Transfer,\n [FacetSlot.StakersEligibility]: FacetOptionEnum.StakersEligibilityDefault,\n [FacetSlot.Withdrawal]: FacetOptionEnum.WithdrawalLockChecker,\n [FacetSlot.AmountMult]: FacetOptionEnum.AmountMultNoMultiplier,\n [FacetSlot.AccessControl]: FacetOptionEnum.AccessControlDefault,\n} satisfies IPlatformTemplate<\n FacetOptionEnum.RewardDistributionComplex,\n FacetOptionEnum.StakeCreationDefault,\n FacetOptionEnum.PoolCreationDefault\n>;\n","import { ReputationTemplate } from \"./reputation.js\";\nimport { ReputationLockTemplate } from \"./reputationLock.js\";\nimport { RWATemplate } from \"./rwa.js\";\n\nexport enum TemplateEnum {\n RWA = \"RWA\",\n Reputation = \"Reputation\",\n ReputationLock = \"ReputationLock\",\n}\n\nconst templates = {\n [TemplateEnum.RWA]: RWATemplate,\n [TemplateEnum.Reputation]: ReputationTemplate,\n [TemplateEnum.ReputationLock]: ReputationLockTemplate,\n} as const;\n\nexport function getTemplate<T extends TemplateEnum>(type: T) {\n return templates[type];\n}\n"],"mappings":"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","names":["index_exports","__export","DistributeRewardsError","FacetOptionEnum","FacetSlot","StakingChainId","StakingChains","StakingRole","TemplateEnum","createFacetInitDictionary","createFacetSettersDictionary","createPlatform","createPool","distributeRewards","facetOptionsBySlot","facetSlots","getPoolCreationAbi","getReward","getStakingChain","getStakingRole","getStakingRoleHex","getTemplate","grantRole","isStakingRole","parseAssetManagersDeployEvent","parseCreatePoolEvent","parseDeployDiamondEvent","parseStakeEvent","partialUnstake","restake","revokeRole","stake","unstake","__toCommonJS","import_zod_openapi","import_abis","import_tmi_contracts_staking_sdk","import_errors","FacetOptionNotSupportedYetError","option","import_tmi_contracts_staking_sdk","DEFAULT_ROLES","GENERIC_ROLES","StakingRole","stakingRoleDictionary","getStakingRole","role","isStakingRole","x","getStakingRoleHex","import_viem","import_tmi_contracts_staking_sdk","FacetSlot","facetSlots","FacetOptionEnum","facetOptionsBySlot","SetterSelectors","setterSelectorsByFacetOption","getPoolCreationDefaultInitData","template","selectors","facetSlots","curr","option","selector","x","import_viem","getCreatorEligibilityByRoleInitData","role","getStakingRoleHex","import_viem","getErc721InitData","token","isSoulbound","import_viem","getLockStaticPeriodInitData","maxLockPeriodInSeconds","getLockStaticPeriodSetData","periodsInSeconds","x","getLockTwoBorderSetData","minAcceptedLockPeriodSeconds","maxAcceptedLockPeriodSeconds","InitSelectors","createFacetInitDictionary","template","params","getErc721InitData","getPoolCreationDefaultInitData","FacetOptionNotSupportedYetError","getLockStaticPeriodInitData","getCreatorEligibilityByRoleInitData","import_chains","import_zod","import_models","StakingChains","stakingChainLiterals","id","StakingChainId","getStakingChain","import_errors","import_viem","getAmountTwoBorderSetData","minAmountOfPackets","maxAmountOfPackets","getAmountHardcapOnlySetData","hardCapPackets","import_viem","getAmountMultIntervalSetData","packetsAndMultipliers","x","getAmountMultContinuousSetData","import_viem","getErc20InputSetterData","entries","x","import_viem","getErc20RewardSetterData","entries","x","import_viem","parseErc1155TokenId","tokenId","parsed","getErc1155InputSetterData","entries","x","parseErc1155TokenId","import_viem","getErc1155RewardSetterData","entries","x","parseErc1155TokenId","import_viem","getLockMultStaticPeriodSetData","entries","x","getLockMultContinuousSetData","import_viem","getRewardsDistributionRateBasedLockSetData","campaignRate","isVirtualLockMultiplierSupported","getRewardsDistributionRateBasedOpenSetData","getRewardsDistributionComplexSetData","durationSeconds","campaignRewardDistributor","getRewardsDistributionPreStakeSetData","totalReward","isInstaRewards","rewardsProvider","import_viem","getStakersEligibilitySetData","eligibleForStakingRoles","isCampaignScoped","x","getStakingRoleHex","import_viem","import_date","getTimeTwoBorderSetData","startDate","endDate","rewardsDate","getTimeOnlyStartingSetData","campaignStartingTimestamp","createFacetSettersDictionary","template","FacetOptionNotSupportedYetError","params","getLockStaticPeriodSetData","getLockTwoBorderSetData","_params","config","CombinationError","time","ms","getAmountHardcapOnlySetData","getAmountTwoBorderSetData","getAmountMultContinuousSetData","getAmountMultIntervalSetData","getErc20InputSetterData","x","getErc1155InputSetterData","getErc1155RewardSetterData","getErc20RewardSetterData","getLockMultContinuousSetData","getLockMultStaticPeriodSetData","getStakersEligibilitySetData","getTimeOnlyStartingSetData","getTimeTwoBorderSetData","getRewardsDistributionComplexSetData","getRewardsDistributionPreStakeSetData","getRewardsDistributionRateBasedLockSetData","getRewardsDistributionRateBasedOpenSetData","targetOption","requiredOption","import_chains","import_tmi_contracts_staking_sdk","getFacetCutsWithAddAction","chainId","facets","contracts","facet","Contract","getFacetAddress","x","type","toStakingSdkChainId","stakingChainIdDictionary","stakingDiamondFactoryByChain","getDiamondFactoryAddress","createPlatform","template","request","initDictionary","createFacetInitDictionary","facets","initSelectors","initData","platformConfig","facetSlots","slot","option","handler","val","facetCuts","getFacetCutsWithAddAction","getDiamondFactoryAddress","import_viem","import_abis","parseDeployDiamondEvent","logs","result","import_viem","import_viem","import_abis","poolCreationFacetByOption","getPoolCreationAbi","template","parseCreatePoolEvent","logs","abi","result","parseAssetManagersDeployEvent","createPool","template","request","setDictionary","createFacetSettersDictionary","poolConfig","requiredData","facetSlots","slot","option","handler","result","encodedData","x","getPoolCreationAbi","import_abis","import_errors","distributeRewards","template","request","DistributeRewardsError","option","import_abis","contractByFacetOption","getStakeCreationAbi","template","getReward","template","request","abi","getStakeCreationAbi","import_abis","import_typeUtils","grantRole","request","abi","functionName","args","generateData","getStakingRoleHex","partialUnstake","template","request","abi","getStakeCreationAbi","restake","template","request","abi","functionName","args","createRetakeData","getStakeCreationAbi","_template","data","import_abis","import_typeUtils","revokeRole","request","abi","functionName","args","generateData","getStakingRoleHex","stake","template","request","abi","getStakeCreationAbi","functionName","args","createStakeData","_template","data","import_viem","parseStakeEvent","template","logs","result","getStakeCreationAbi","unstake","template","request","abi","getStakeCreationAbi","ReputationTemplate","ReputationLockTemplate","RWATemplate","TemplateEnum","templates","RWATemplate","ReputationTemplate","ReputationLockTemplate","getTemplate","type","import_viem","import_typeUtils"]}
package/dist/index.d.cts CHANGED
@@ -1,7 +1,6 @@
1
1
  import * as _evergonlabs_tmi_protocol_types_diamond from '@evergonlabs/tmi-protocol-types/diamond';
2
2
  import * as viem from 'viem';
3
3
  import { Hex, Address, Log } from 'viem';
4
- import * as _evergonlabs_tmi_protocol_utils_typeUtils from '@evergonlabs/tmi-protocol-utils/typeUtils';
5
4
  import { ExcludeVoidProperties } from '@evergonlabs/tmi-protocol-utils/typeUtils';
6
5
  import { z } from 'zod';
7
6
  import { Erc721MetaSchema } from '@evergonlabs/tmi-protocol-types/evm';
@@ -9,8 +8,9 @@ import * as viem_chains from 'viem/chains';
9
8
  import { z as z$1 } from '@evergonlabs/tmi-protocol-utils/zod';
10
9
  import { INumberish } from '@evergonlabs/tmi-utils/models';
11
10
  import { CustomError } from '@evergonlabs/tmi-utils/errors';
11
+ import * as _evergonlabs_tmi_utils_typeUtils from '@evergonlabs/tmi-utils/typeUtils';
12
+ export { createMiddlewares } from '@evergonlabs/tmi-utils/typeUtils';
12
13
  import { types } from '@evergonlabs/tmi-contracts-staking-sdk';
13
- export { createMiddlewares } from '@evergonlabs/tmi-protocol-utils/common';
14
14
  export { viemClientAsMiddleware } from '@evergonlabs/tmi-protocol-utils/viem';
15
15
 
16
16
  declare enum StakingRole {
@@ -4919,7 +4919,7 @@ declare function grantRole(request: IGrantRoleRequest): {
4919
4919
  readonly stateMutability: "nonpayable";
4920
4920
  }];
4921
4921
  functionName: string;
4922
- args: (`0x${string}` | _evergonlabs_tmi_protocol_utils_typeUtils.NonEmptyArray<`0x${string}`>)[];
4922
+ args: (`0x${string}` | _evergonlabs_tmi_utils_typeUtils.NonEmptyArray<`0x${string}`>)[];
4923
4923
  };
4924
4924
 
4925
4925
  type IPartialUnstakeRequest = {
@@ -7400,7 +7400,7 @@ declare function revokeRole(request: IRevokeRoleRequest): {
7400
7400
  readonly outputs: readonly [];
7401
7401
  readonly stateMutability: "nonpayable";
7402
7402
  }];
7403
- args: (`0x${string}` | _evergonlabs_tmi_protocol_utils_typeUtils.NonEmptyArray<`0x${string}`>)[];
7403
+ args: (`0x${string}` | _evergonlabs_tmi_utils_typeUtils.NonEmptyArray<`0x${string}`>)[];
7404
7404
  functionName: string;
7405
7405
  };
7406
7406
 
package/dist/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import * as _evergonlabs_tmi_protocol_types_diamond from '@evergonlabs/tmi-protocol-types/diamond';
2
2
  import * as viem from 'viem';
3
3
  import { Hex, Address, Log } from 'viem';
4
- import * as _evergonlabs_tmi_protocol_utils_typeUtils from '@evergonlabs/tmi-protocol-utils/typeUtils';
5
4
  import { ExcludeVoidProperties } from '@evergonlabs/tmi-protocol-utils/typeUtils';
6
5
  import { z } from 'zod';
7
6
  import { Erc721MetaSchema } from '@evergonlabs/tmi-protocol-types/evm';
@@ -9,8 +8,9 @@ import * as viem_chains from 'viem/chains';
9
8
  import { z as z$1 } from '@evergonlabs/tmi-protocol-utils/zod';
10
9
  import { INumberish } from '@evergonlabs/tmi-utils/models';
11
10
  import { CustomError } from '@evergonlabs/tmi-utils/errors';
11
+ import * as _evergonlabs_tmi_utils_typeUtils from '@evergonlabs/tmi-utils/typeUtils';
12
+ export { createMiddlewares } from '@evergonlabs/tmi-utils/typeUtils';
12
13
  import { types } from '@evergonlabs/tmi-contracts-staking-sdk';
13
- export { createMiddlewares } from '@evergonlabs/tmi-protocol-utils/common';
14
14
  export { viemClientAsMiddleware } from '@evergonlabs/tmi-protocol-utils/viem';
15
15
 
16
16
  declare enum StakingRole {
@@ -4919,7 +4919,7 @@ declare function grantRole(request: IGrantRoleRequest): {
4919
4919
  readonly stateMutability: "nonpayable";
4920
4920
  }];
4921
4921
  functionName: string;
4922
- args: (`0x${string}` | _evergonlabs_tmi_protocol_utils_typeUtils.NonEmptyArray<`0x${string}`>)[];
4922
+ args: (`0x${string}` | _evergonlabs_tmi_utils_typeUtils.NonEmptyArray<`0x${string}`>)[];
4923
4923
  };
4924
4924
 
4925
4925
  type IPartialUnstakeRequest = {
@@ -7400,7 +7400,7 @@ declare function revokeRole(request: IRevokeRoleRequest): {
7400
7400
  readonly outputs: readonly [];
7401
7401
  readonly stateMutability: "nonpayable";
7402
7402
  }];
7403
- args: (`0x${string}` | _evergonlabs_tmi_protocol_utils_typeUtils.NonEmptyArray<`0x${string}`>)[];
7403
+ args: (`0x${string}` | _evergonlabs_tmi_utils_typeUtils.NonEmptyArray<`0x${string}`>)[];
7404
7404
  functionName: string;
7405
7405
  };
7406
7406