@evergonlabs/tmi-protocol-staking-sdk 0.2.1 → 0.7.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common/chains.ts","../src/common/roles.ts","../src/common/facets/slots.ts","../src/common/facets/options.ts","../src/common/facets/facetsInitDictionary.ts","../src/common/facets/slices/erc721.ts","../src/common/facets/slices/campaignCreationSkeleton.ts","../src/common/facets/slices/creatorsEligibility.ts","../src/common/facets/slices/lock.ts","../src/internal/errors.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/erc1155Input.ts","../src/internal/utils.ts","../src/common/facets/slices/erc20Reward.ts","../src/common/facets/slices/erc1155Reward.ts","../src/common/facets/slices/lockMult.ts","../src/common/facets/slices/stakersEligibility.ts","../src/common/facets/slices/time.ts","../src/common/facets/slices/rewardsDistribution.ts","../src/actions/createPlatform/createPlatform.ts","../src/internal/stakingSdkTypechain.ts","../src/actions/createPlatform/createPlatformUtils.ts","../src/actions/createPool/createPool.ts","../src/actions/createPool/createPoolUtils.ts","../src/common/facets/stakeCreation.ts","../src/actions/stake/stake.ts","../src/actions/stake/stakeUtils.ts","../src/actions/restake/restake.ts","../src/actions/grantRole/grantRole.ts","../src/actions/unstake/unstake.ts","../src/actions/notifyRewards/notifyRewards.ts","../src/actions/getReward/getReward.ts","../src/actions/partialUnstake/partialUnstake.ts","../src/actions/revokeRole/revokeRole.ts","../src/templates/rwa.ts","../src/templates/reputation.ts","../src/templates/reputationLock.ts","../src/templates/index.ts","../src/index.ts"],"sourcesContent":["import { extractChain } from \"viem\";\nimport { anvil, sepolia } from \"viem/chains\";\nimport { stringIntToNumber } from \"@evergonlabs/tmi-protocol-types/common\";\n\nconst supportedChainsList = [sepolia, anvil] as const;\n\nexport type SupportedChain = (typeof supportedChainsList)[number];\n\nexport const supportedChains = supportedChainsList.map((x) => `${x.id}` as const);\n\nexport type SupportedChainId = (typeof supportedChains)[number];\n\nexport function getChain<TChainId extends SupportedChainId>(chainId: TChainId) {\n return extractChain({\n chains: supportedChainsList,\n id: stringIntToNumber(chainId),\n });\n}\n\nexport function isSupportedChainId(chainId: string): chainId is SupportedChainId {\n return supportedChains.includes(chainId as SupportedChainId);\n}\n\nexport type InferChainById<T extends SupportedChainId> = ReturnType<typeof getChain<T>>;\n","import { Hex } from \"viem\";\nimport { DEFAULT_ROLES, GENERIC_ROLES } from \"@evergonlabs/tmi-contracts-staking-sdk\";\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","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 { FacetType } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { Hex } from \"viem\";\nimport { InitSelectors } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { FacetOptionEnum } from \"./options.js\";\nimport { IPlatformConfig, IPlatformConfigParam } from \"./platformConfig.js\";\nimport { IPlatformTemplate } from \"./template.js\";\nimport { getErc721InitData } from \"./slices/erc721.js\";\nimport { getPoolCreationDefaultInitData } from \"./slices/campaignCreationSkeleton.js\";\nimport { getCreatorEligibilityByRoleInitData } from \"./slices/creatorsEligibility.js\";\nimport { getLockStaticPeriodInitData } from \"./slices/lock.js\";\nimport { FacetOptionNotSupportedYetError } from \"../../internal/errors.js\";\nimport { StakingRole } from \"../roles.js\";\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.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.CreatorsEligibility as Hex,\n data: getCreatorEligibilityByRoleInitData(params.role),\n },\n };\n },\n [FacetOptionEnum.CreatorsEligibilityDefault]: () => {\n return {\n targetFacet: \"WhitelistedCampaignCreatorsFacet\",\n data: {\n selector: InitSelectors.Eligibility.CreatorsEligibility 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 { z } from \"zod\";\nimport { encodeAbiParameters } from \"viem\";\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, Hex } from \"viem\";\nimport { IPlatformTemplate } from \"../template.js\";\nimport { FacetOptionEnum } from \"../options.js\";\nimport { SetterSelectors } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { facetSlots } from \"../slots.js\";\n\n// Indicate facets that REQUIRES setter function\nexport const setterSelectorsByFacetOption = {\n // Amount\n [FacetOptionEnum.AmountHardCap]: SetterSelectors.CampaignAmounts as Hex,\n [FacetOptionEnum.AmountTwoBorder]: SetterSelectors.CampaignAmounts as Hex,\n\n // Time\n [FacetOptionEnum.TimeOnlyStarting]: SetterSelectors.CampaignTimes as Hex,\n [FacetOptionEnum.TimeTwoBorder]: SetterSelectors.CampaignTimes as Hex,\n\n // Lock variation\n [FacetOptionEnum.LockTwoBorder]: SetterSelectors.LockVariations as Hex,\n [FacetOptionEnum.LockStaticPeriod]: SetterSelectors.LockVariations as Hex,\n [FacetOptionEnum.LockAutoComplex]: SetterSelectors.LockVariations as Hex,\n [FacetOptionEnum.LockAutoPreStake]: SetterSelectors.LockVariations as Hex,\n [FacetOptionEnum.LockAutoRateBasedOpen]: SetterSelectors.LockVariations as Hex,\n\n // Reward distribution\n [FacetOptionEnum.RewardDistributionComplex]: SetterSelectors.RewardsDistribution as Hex,\n [FacetOptionEnum.RewardDistributionPreStake]: SetterSelectors.RewardsDistribution as Hex,\n [FacetOptionEnum.RewardDistributionRateBasedLock]: SetterSelectors.RewardsDistribution as Hex,\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: SetterSelectors.RewardsDistribution as Hex,\n\n // Stakers eligibility\n [FacetOptionEnum.StakersEligibilityDefault]: SetterSelectors.StakersEligibility as Hex,\n\n // Input\n [FacetOptionEnum.InputErc20]: SetterSelectors.TransferInput as Hex,\n [FacetOptionEnum.InputErc1155]: SetterSelectors.TransferInput as Hex,\n\n // Reward\n [FacetOptionEnum.RewardErc1155Transfer]: SetterSelectors.TransferReward as Hex,\n [FacetOptionEnum.RewardErc1155Minter]: SetterSelectors.TransferReward as Hex,\n [FacetOptionEnum.RewardErc20Transfer]: SetterSelectors.TransferReward as Hex,\n [FacetOptionEnum.RewardErc20Minter]: SetterSelectors.TransferReward as Hex,\n\n // Amount multiplier\n [FacetOptionEnum.AmountMultInterval]: SetterSelectors.VirtualAmountMultiplier as Hex,\n [FacetOptionEnum.AmountMultContinuous]: SetterSelectors.VirtualAmountMultiplier as Hex,\n\n // Lock multiplier\n [FacetOptionEnum.LockMultContinuous]: SetterSelectors.VirtualLockMultiplier as Hex,\n [FacetOptionEnum.LockMultInterval]: SetterSelectors.VirtualLockMultiplier 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","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 { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { encodeAbiParameters } from \"viem\";\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 { 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 { CustomError } from \"@evergonlabs/tmi-utils/errors\";\nimport { FacetOptionEnum } from \"./options.js\";\nimport { IPlatformTemplate } from \"./template.js\";\nimport { getLockStaticPeriodSetData, getLockTwoBorderSetData } from \"./slices/lock.js\";\nimport { IPoolConfig, IPoolConfigParam } from \"./poolConfig.js\";\nimport { getAmountHardcapOnlySetData, getAmountTwoBorderSetData } from \"./slices/amount.js\";\nimport { getAmountMultContinuousSetData, getAmountMultIntervalSetData } from \"./slices/amountMult.js\";\nimport { getErc20InputSetterData } from \"./slices/erc20Input.js\";\nimport { getErc1155InputSetterData } from \"./slices/erc1155Input.js\";\nimport { getErc20RewardSetterData } from \"./slices/erc20Reward.js\";\nimport { getErc1155RewardSetterData } from \"./slices/erc1155Reward.js\";\nimport { getLockMultContinuousSetData, getLockMultStaticPeriodSetData } from \"./slices/lockMult.js\";\nimport { getStakersEligibilitySetData } from \"./slices/stakersEligibility.js\";\nimport { FacetOptionNotSupportedYetError } from \"../../internal/errors.js\";\nimport { getTimeOnlyStartingSetData, getTimeTwoBorderSetData } from \"./slices/time.js\";\nimport {\n getRewardsDistributionComplexSetData,\n getRewardsDistributionPreStakeSetData,\n getRewardsDistributionRateBasedLockSetData,\n getRewardsDistributionRateBasedOpenSetData,\n} from \"./slices/rewardsDistribution.js\";\nimport { FacetSlot } from \"./slots.js\";\nimport { StakingRole } from \"../roles.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 { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { encodeAbiParameters } from \"viem\";\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 { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { encodeAbiParameters, parseUnits } from \"viem\";\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 { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { Address, encodeAbiParameters } from \"viem\";\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 { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { Address, encodeAbiParameters } from \"viem\";\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\nexport function serializeApi(obj: Record<string, unknown>): string {\n const sorted = sortObjectEntries(obj);\n return JSON.stringify(sorted, functionReplacer, 2);\n}\n\nfunction sortObjectEntries<T extends Record<string, unknown>>(obj: T): [string, T[keyof T]][] {\n const entries = Object.entries(obj) as [string, T[keyof T]][];\n entries.sort((a, b) => a[0].localeCompare(b[0]));\n return entries;\n}\n\nfunction functionReplacer(_key: string, value: unknown): unknown {\n if (typeof value === \"function\") {\n const fnName = value.name || \"anonymous\";\n return `[Function: ${fnName}]`;\n }\n return value;\n}\n","import { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { Address, encodeAbiParameters } from \"viem\";\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 { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { Address, encodeAbiParameters } from \"viem\";\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 { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { encodeAbiParameters, parseUnits } from \"viem\";\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 { 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 { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { Address, encodeAbiParameters } from \"viem\";\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 { Address, Hex } from \"viem\";\nimport { diamondFactoryAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { FacetType } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { getFacetCutsWithAddAction } from \"../../internal/stakingSdkTypechain.js\";\nimport { SupportedChainId } from \"../../common/chains.js\";\nimport { getDiamondFactoryAddress } from \"../../internal/stakingSdkTypechain.js\";\nimport { AnyPlatformTemplate, IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { IPlatformConfig } from \"../../common/facets/platformConfig.js\";\nimport { createFacetInitDictionary } from \"../../common/facets/facetsInitDictionary.js\";\nimport { FacetSlot, facetSlots } from \"../../common/index.js\";\n\nexport type ICreatePlatformRequest<TChainId extends SupportedChainId, TTemplate extends IPlatformTemplate> = {\n chainId: TChainId;\n admin: Address;\n data: ExcludeVoidProperties<IPlatformConfig<TTemplate>>;\n};\n\nexport function createPlatform<TChainId extends SupportedChainId, 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 { Address, Hex } from \"viem\";\nimport { anvil, sepolia } from \"viem/chains\";\nimport { SupportedChainId } from \"../common/chains.js\";\nimport {\n FacetType,\n getStakingFacetFactory,\n contractAddresses,\n ChainId as StakingChainId,\n getFacetCutsAdd,\n diamondFactoryAddresses,\n} from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { IFacetCut, FACET_CUT_ACTION } from \"@evergonlabs/tmi-protocol-types/diamond\";\n\n/**\n * @returns the FacetCuts objects (with ADD FacetCutAction) for the provided contracts\n */\n\nexport function getFacetCutsWithAddAction<T extends SupportedChainId>(chainId: T, 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 */\n\nexport function getFacetAddress<TType extends FacetType>(type: TType, chainId: SupportedChainId) {\n return contractAddresses[toStakingSdkChainId(chainId)][type];\n}\n\nconst stakingChainIdDictionary = {\n \"11155111\": 11155111,\n \"31337\": 11155111, // we are using our anvil instance as sepolia fork here\n} as const satisfies Record<SupportedChainId, StakingChainId>;\n\n/**\n * @returns mapped chain id to the low-level staking sdk.\n */\n\nexport function toStakingSdkChainId<TChainId extends SupportedChainId>(chainId: TChainId): StakingChainId {\n return stakingChainIdDictionary[chainId];\n}\n\nconst stakingDiamondFactoryByChain = {\n [sepolia.id]: diamondFactoryAddresses[sepolia.id] as Address,\n [anvil.id]: diamondFactoryAddresses[sepolia.id] as Address,\n} satisfies Record<SupportedChainId, Address>;\n\n/**\n * @returns diamond factory for of corresponding chain id\n * Must one of supported chain ids provided.\n */\n\nexport function getDiamondFactoryAddress(chainId: SupportedChainId) {\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 { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { IPoolConfig } from \"../../common/facets/poolConfig.js\";\nimport { FacetOptionEnum } from \"../../common/facets/options.js\";\nimport { createFacetSettersDictionary } from \"../../common/facets/facetsSetterDictionary.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 {\n campaignCreationSkeletonAbi,\n campaignCreationSkeletonNidAbi,\n} from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { FacetOptionEnum, FacetOptionsBySlot, FacetSlot, IPlatformTemplate } from \"../../common/index.js\";\nimport { Abi, Log, parseEventLogs } from \"viem\";\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 { 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 { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetOptionEnum } from \"../../common/facets/options.js\";\nimport { FacetSlot } from \"../../common/index.js\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.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 { IPlatformTemplate } from \"../../common/index.js\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.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 { ExcludeVoidProperties } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetOptionEnum, FacetSlot } from \"../../common/index.js\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.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 { isNonEmptyArray } from \"@evergonlabs/tmi-protocol-utils/typeUtils\";\nimport { accessControlStakingFacetAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\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 { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.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 { Address } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { complexRewardDistributionFacetAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { CustomError } from \"@evergonlabs/tmi-utils/errors\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { FacetOptionEnum } from \"../../common/facets/options.js\";\nimport { FacetSlot } from \"../../common/index.js\";\n\nexport type INotifyRewardsRequest = {\n platform: Address;\n data: INotifyRewardsData;\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 notifyRewards<TTemplate extends IPlatformTemplate>(\n template: TTemplate,\n request: INotifyRewardsRequest,\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 NotifyRewardsError(template[FacetSlot.RewardsDistribution]);\n }\n}\n\nexport class NotifyRewardsError extends CustomError<{ option: FacetOptionEnum }> {\n constructor(option: FacetOptionEnum) {\n super({\n message: `Reward distribution ${option} is not eligible for notifyRewards action`,\n name: \"NotifyRewardsError\",\n data: {\n option: option,\n },\n });\n }\n}\n\nexport type INotifyRewardsData = {\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 { Address } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { IPlatformTemplate } from \"../../common/index.js\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.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 } from \"viem\";\nimport { INumberish } from \"@evergonlabs/tmi-utils/models\";\nimport { IPlatformTemplate } from \"../../common/facets/template.js\";\nimport { getStakeCreationAbi } from \"../../common/facets/stakeCreation.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, 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 { 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 { 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 { RWATemplate } from \"./rwa.js\";\nimport { ReputationTemplate } from \"./reputation.js\";\nimport { ReputationLockTemplate } from \"./reputationLock.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","export * from \"./common/index.js\";\nexport * from \"./actions/index.js\";\nexport * from \"./templates/index.js\";\n\nexport { createMiddlewares } from \"@evergonlabs/tmi-protocol-utils/common\";\nexport { viemClientAsMiddleware } from \"@evergonlabs/tmi-protocol-utils/viem\";\n"],"mappings":"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","names":["extractChain","anvil","sepolia","stringIntToNumber","supportedChainsList","supportedChains","x","getChain","chainId","isSupportedChainId","DEFAULT_ROLES","GENERIC_ROLES","StakingRole","stakingRoleDictionary","getStakingRole","role","isStakingRole","x","getStakingRoleHex","FacetSlot","facetSlots","FacetOptionEnum","facetOptionsBySlot","InitSelectors","encodeAbiParameters","getErc721InitData","token","isSoulbound","encodeAbiParameters","SetterSelectors","setterSelectorsByFacetOption","SetterSelectors","getPoolCreationDefaultInitData","template","selectors","facetSlots","curr","option","selector","encodeAbiParameters","x","encodeAbiParameters","getCreatorEligibilityByRoleInitData","role","encodeAbiParameters","getStakingRoleHex","encodeAbiParameters","getLockStaticPeriodInitData","maxLockPeriodInSeconds","getLockStaticPeriodSetData","periodsInSeconds","x","getLockTwoBorderSetData","minAcceptedLockPeriodSeconds","maxAcceptedLockPeriodSeconds","CustomError","FacetOptionNotSupportedYetError","option","createFacetInitDictionary","template","params","InitSelectors","getErc721InitData","getPoolCreationDefaultInitData","FacetOptionNotSupportedYetError","getLockStaticPeriodInitData","getCreatorEligibilityByRoleInitData","CustomError","encodeAbiParameters","getAmountTwoBorderSetData","minAmountOfPackets","maxAmountOfPackets","getAmountHardcapOnlySetData","hardCapPackets","encodeAbiParameters","parseUnits","getAmountMultIntervalSetData","packetsAndMultipliers","x","getAmountMultContinuousSetData","encodeAbiParameters","getErc20InputSetterData","entries","x","encodeAbiParameters","parseErc1155TokenId","tokenId","parsed","getErc1155InputSetterData","entries","encodeAbiParameters","x","parseErc1155TokenId","encodeAbiParameters","getErc20RewardSetterData","entries","x","encodeAbiParameters","getErc1155RewardSetterData","entries","encodeAbiParameters","x","parseErc1155TokenId","encodeAbiParameters","parseUnits","getLockMultStaticPeriodSetData","entries","x","getLockMultContinuousSetData","encodeAbiParameters","getStakersEligibilitySetData","eligibleForStakingRoles","isCampaignScoped","encodeAbiParameters","x","getStakingRoleHex","encodeAbiParameters","msToSeconds","getTimeTwoBorderSetData","startDate","endDate","rewardsDate","getTimeOnlyStartingSetData","campaignStartingTimestamp","encodeAbiParameters","getRewardsDistributionRateBasedLockSetData","campaignRate","isVirtualLockMultiplierSupported","getRewardsDistributionRateBasedOpenSetData","getRewardsDistributionComplexSetData","durationSeconds","campaignRewardDistributor","getRewardsDistributionPreStakeSetData","totalReward","isInstaRewards","rewardsProvider","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","CustomError","targetOption","requiredOption","diamondFactoryAbi","anvil","sepolia","getStakingFacetFactory","contractAddresses","getFacetCutsAdd","diamondFactoryAddresses","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","diamondFactoryAbi","parseEventLogs","diamondFactoryAbi","parseDeployDiamondEvent","logs","result","encodeAbiParameters","campaignCreationSkeletonAbi","campaignCreationSkeletonNidAbi","parseEventLogs","poolCreationFacetByOption","campaignCreationSkeletonAbi","campaignCreationSkeletonNidAbi","getPoolCreationAbi","template","parseCreatePoolEvent","logs","abi","result","parseAssetManagersDeployEvent","createPool","template","request","setDictionary","createFacetSettersDictionary","poolConfig","requiredData","facetSlots","slot","option","handler","result","encodedData","encodeAbiParameters","x","getPoolCreationAbi","stakingSkeletonAbi","stakingSkeletonNidAbi","contractByFacetOption","stakingSkeletonAbi","stakingSkeletonNidAbi","getStakeCreationAbi","template","stake","template","request","abi","getStakeCreationAbi","functionName","args","createStakeData","_template","data","parseEventLogs","parseStakeEvent","template","logs","result","parseEventLogs","getStakeCreationAbi","restake","template","request","abi","functionName","args","createRetakeData","getStakeCreationAbi","_template","data","isNonEmptyArray","accessControlStakingFacetAbi","grantRole","request","abi","functionName","args","generateData","isNonEmptyArray","accessControlStakingFacetAbi","getStakingRoleHex","unstake","template","request","abi","getStakeCreationAbi","complexRewardDistributionFacetAbi","CustomError","notifyRewards","template","request","complexRewardDistributionFacetAbi","NotifyRewardsError","CustomError","option","getReward","template","request","abi","getStakeCreationAbi","partialUnstake","template","request","abi","getStakeCreationAbi","accessControlStakingFacetAbi","isNonEmptyArray","revokeRole","request","abi","functionName","args","generateData","isNonEmptyArray","accessControlStakingFacetAbi","getStakingRoleHex","RWATemplate","ReputationTemplate","ReputationLockTemplate","TemplateEnum","templates","RWATemplate","ReputationTemplate","ReputationLockTemplate","getTemplate","type","createMiddlewares","viemClientAsMiddleware"]}
1
+ {"version":3,"sources":["../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","../src/index.ts"],"sourcesContent":["import { Address, Hex } from \"viem\";\nimport { FacetType } 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\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 { FacetType } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { InitSelectors } 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\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.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.CreatorsEligibility as Hex,\n data: getCreatorEligibilityByRoleInitData(params.role),\n },\n };\n },\n [FacetOptionEnum.CreatorsEligibilityDefault]: () => {\n return {\n targetFacet: \"WhitelistedCampaignCreatorsFacet\",\n data: {\n selector: InitSelectors.Eligibility.CreatorsEligibility 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 { DEFAULT_ROLES, GENERIC_ROLES } from \"@evergonlabs/tmi-contracts-staking-sdk\";\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 { SetterSelectors } from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { FacetOptionEnum } from \"../options.js\";\nimport { facetSlots } from \"../slots.js\";\nimport { IPlatformTemplate } from \"../template.js\";\n\n// Indicate facets that REQUIRES setter function\nexport const setterSelectorsByFacetOption = {\n // Amount\n [FacetOptionEnum.AmountHardCap]: SetterSelectors.CampaignAmounts as Hex,\n [FacetOptionEnum.AmountTwoBorder]: SetterSelectors.CampaignAmounts as Hex,\n\n // Time\n [FacetOptionEnum.TimeOnlyStarting]: SetterSelectors.CampaignTimes as Hex,\n [FacetOptionEnum.TimeTwoBorder]: SetterSelectors.CampaignTimes as Hex,\n\n // Lock variation\n [FacetOptionEnum.LockTwoBorder]: SetterSelectors.LockVariations as Hex,\n [FacetOptionEnum.LockStaticPeriod]: SetterSelectors.LockVariations as Hex,\n [FacetOptionEnum.LockAutoComplex]: SetterSelectors.LockVariations as Hex,\n [FacetOptionEnum.LockAutoPreStake]: SetterSelectors.LockVariations as Hex,\n [FacetOptionEnum.LockAutoRateBasedOpen]: SetterSelectors.LockVariations as Hex,\n\n // Reward distribution\n [FacetOptionEnum.RewardDistributionComplex]: SetterSelectors.RewardsDistribution as Hex,\n [FacetOptionEnum.RewardDistributionPreStake]: SetterSelectors.RewardsDistribution as Hex,\n [FacetOptionEnum.RewardDistributionRateBasedLock]: SetterSelectors.RewardsDistribution as Hex,\n [FacetOptionEnum.RewardDistributionRateBasedOpen]: SetterSelectors.RewardsDistribution as Hex,\n\n // Stakers eligibility\n [FacetOptionEnum.StakersEligibilityDefault]: SetterSelectors.StakersEligibility as Hex,\n\n // Input\n [FacetOptionEnum.InputErc20]: SetterSelectors.TransferInput as Hex,\n [FacetOptionEnum.InputErc1155]: SetterSelectors.TransferInput as Hex,\n\n // Reward\n [FacetOptionEnum.RewardErc1155Transfer]: SetterSelectors.TransferReward as Hex,\n [FacetOptionEnum.RewardErc1155Minter]: SetterSelectors.TransferReward as Hex,\n [FacetOptionEnum.RewardErc20Transfer]: SetterSelectors.TransferReward as Hex,\n [FacetOptionEnum.RewardErc20Minter]: SetterSelectors.TransferReward as Hex,\n\n // Amount multiplier\n [FacetOptionEnum.AmountMultInterval]: SetterSelectors.VirtualAmountMultiplier as Hex,\n [FacetOptionEnum.AmountMultContinuous]: SetterSelectors.VirtualAmountMultiplier as Hex,\n\n // Lock multiplier\n [FacetOptionEnum.LockMultContinuous]: SetterSelectors.VirtualLockMultiplier as Hex,\n [FacetOptionEnum.LockMultInterval]: SetterSelectors.VirtualLockMultiplier 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, sepolia } from \"viem/chains\";\nimport { createSupportedChains } from \"@evergonlabs/tmi-utils/models\";\n\nexport const StakingChains = createSupportedChains([sepolia, anvil]);\n\nexport type IStakingChainId = (typeof StakingChains)[\"chainIds\"][number];\n\nexport const getStakingChain = StakingChains.get.bind(StakingChains);\n\nexport type InferChainById<T extends IStakingChainId> = 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, sepolia } from \"viem/chains\";\nimport {\n ChainId as StakingChainId,\n contractAddresses,\n diamondFactoryAddresses,\n FacetType,\n getFacetCutsAdd,\n getStakingFacetFactory,\n} from \"@evergonlabs/tmi-contracts-staking-sdk\";\nimport { FACET_CUT_ACTION, IFacetCut } from \"@evergonlabs/tmi-protocol-types/diamond\";\nimport { IStakingChainId } from \"../common/chains.js\";\n\n/**\n * @returns the FacetCuts objects (with ADD FacetCutAction) for the provided contracts\n */\n\nexport function getFacetCutsWithAddAction<TChainId extends IStakingChainId>(\n chainId: TChainId,\n facets: FacetType[],\n): 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 */\n\nexport function getFacetAddress<TType extends FacetType, TChainId extends IStakingChainId>(\n type: TType,\n chainId: TChainId,\n) {\n return contractAddresses[toStakingSdkChainId(chainId)][type];\n}\n\nconst stakingChainIdDictionary = {\n [sepolia.id]: sepolia.id,\n [anvil.id]: sepolia.id, // we are using our anvil instance as sepolia fork here\n} as const satisfies Record<IStakingChainId, StakingChainId>;\n\n/**\n * @returns mapped chain id to the low-level staking sdk.\n */\n\nexport function toStakingSdkChainId<TChainId extends IStakingChainId>(chainId: TChainId): StakingChainId {\n return stakingChainIdDictionary[chainId];\n}\n\nconst stakingDiamondFactoryByChain = {\n [sepolia.id]: diamondFactoryAddresses[sepolia.id],\n [anvil.id]: diamondFactoryAddresses[sepolia.id],\n} satisfies Record<IStakingChainId, Address>;\n\n/**\n * @returns diamond factory for of corresponding chain id\n * Must one of supported chain ids provided.\n */\n\nexport function getDiamondFactoryAddress<TChainId extends IStakingChainId>(chainId: TChainId) {\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","export * 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"],"mappings":"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","names":["diamondFactoryAbi","InitSelectors","CustomError","FacetOptionNotSupportedYetError","option","DEFAULT_ROLES","GENERIC_ROLES","StakingRole","stakingRoleDictionary","getStakingRole","role","isStakingRole","x","getStakingRoleHex","encodeAbiParameters","SetterSelectors","FacetSlot","facetSlots","FacetOptionEnum","facetOptionsBySlot","setterSelectorsByFacetOption","SetterSelectors","getPoolCreationDefaultInitData","template","selectors","facetSlots","curr","option","selector","encodeAbiParameters","x","encodeAbiParameters","getCreatorEligibilityByRoleInitData","role","encodeAbiParameters","getStakingRoleHex","encodeAbiParameters","getErc721InitData","token","isSoulbound","encodeAbiParameters","getLockStaticPeriodInitData","maxLockPeriodInSeconds","getLockStaticPeriodSetData","periodsInSeconds","x","getLockTwoBorderSetData","minAcceptedLockPeriodSeconds","maxAcceptedLockPeriodSeconds","createFacetInitDictionary","template","params","InitSelectors","getErc721InitData","getPoolCreationDefaultInitData","FacetOptionNotSupportedYetError","getLockStaticPeriodInitData","getCreatorEligibilityByRoleInitData","anvil","sepolia","createSupportedChains","StakingChains","getStakingChain","CustomError","encodeAbiParameters","getAmountTwoBorderSetData","minAmountOfPackets","maxAmountOfPackets","getAmountHardcapOnlySetData","hardCapPackets","encodeAbiParameters","parseUnits","getAmountMultIntervalSetData","packetsAndMultipliers","x","getAmountMultContinuousSetData","encodeAbiParameters","getErc20InputSetterData","entries","x","encodeAbiParameters","getErc20RewardSetterData","entries","x","encodeAbiParameters","parseErc1155TokenId","tokenId","parsed","getErc1155InputSetterData","entries","encodeAbiParameters","x","parseErc1155TokenId","encodeAbiParameters","getErc1155RewardSetterData","entries","encodeAbiParameters","x","parseErc1155TokenId","encodeAbiParameters","parseUnits","getLockMultStaticPeriodSetData","entries","x","getLockMultContinuousSetData","encodeAbiParameters","getRewardsDistributionRateBasedLockSetData","campaignRate","isVirtualLockMultiplierSupported","getRewardsDistributionRateBasedOpenSetData","getRewardsDistributionComplexSetData","durationSeconds","campaignRewardDistributor","getRewardsDistributionPreStakeSetData","totalReward","isInstaRewards","rewardsProvider","encodeAbiParameters","getStakersEligibilitySetData","eligibleForStakingRoles","isCampaignScoped","encodeAbiParameters","x","getStakingRoleHex","encodeAbiParameters","msToSeconds","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","CustomError","targetOption","requiredOption","anvil","sepolia","contractAddresses","diamondFactoryAddresses","getFacetCutsAdd","getStakingFacetFactory","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","diamondFactoryAbi","parseEventLogs","diamondFactoryAbi","parseDeployDiamondEvent","logs","result","encodeAbiParameters","parseEventLogs","campaignCreationSkeletonAbi","campaignCreationSkeletonNidAbi","poolCreationFacetByOption","campaignCreationSkeletonAbi","campaignCreationSkeletonNidAbi","getPoolCreationAbi","template","parseCreatePoolEvent","logs","abi","result","parseEventLogs","parseAssetManagersDeployEvent","createPool","template","request","setDictionary","createFacetSettersDictionary","poolConfig","requiredData","facetSlots","slot","option","handler","result","encodedData","encodeAbiParameters","x","getPoolCreationAbi","complexRewardDistributionFacetAbi","CustomError","distributeRewards","template","request","complexRewardDistributionFacetAbi","DistributeRewardsError","CustomError","option","stakingSkeletonAbi","stakingSkeletonNidAbi","contractByFacetOption","stakingSkeletonAbi","stakingSkeletonNidAbi","getStakeCreationAbi","template","getReward","template","request","abi","getStakeCreationAbi","accessControlStakingFacetAbi","isNonEmptyArray","grantRole","request","abi","functionName","args","generateData","isNonEmptyArray","accessControlStakingFacetAbi","getStakingRoleHex","partialUnstake","template","request","abi","getStakeCreationAbi","restake","template","request","abi","functionName","args","createRetakeData","getStakeCreationAbi","_template","data","accessControlStakingFacetAbi","isNonEmptyArray","revokeRole","request","abi","functionName","args","generateData","isNonEmptyArray","accessControlStakingFacetAbi","getStakingRoleHex","stake","template","request","abi","getStakeCreationAbi","functionName","args","createStakeData","_template","data","parseEventLogs","parseStakeEvent","template","logs","result","parseEventLogs","getStakeCreationAbi","unstake","template","request","abi","getStakeCreationAbi","ReputationTemplate","ReputationLockTemplate","RWATemplate","TemplateEnum","templates","RWATemplate","ReputationTemplate","ReputationLockTemplate","getTemplate","type","createMiddlewares","viemClientAsMiddleware"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evergonlabs/tmi-protocol-staking-sdk",
3
- "version": "0.2.1",
3
+ "version": "0.7.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "exports": {
@@ -19,19 +19,19 @@
19
19
  ],
20
20
  "dependencies": {
21
21
  "@evergonlabs/tmi-contracts-staking-sdk": "^0.1.0",
22
- "@evergonlabs/tmi-utils": "^0.2.0",
23
- "type-fest": "^4.33.0",
24
- "@evergonlabs/tmi-protocol-types": "0.2.1",
25
- "@evergonlabs/tmi-protocol-utils": "0.2.1"
22
+ "@evergonlabs/tmi-utils": "0.6.0",
23
+ "type-fest": "^5.0.0",
24
+ "@evergonlabs/tmi-protocol-types": "0.7.0",
25
+ "@evergonlabs/tmi-protocol-utils": "0.7.0"
26
26
  },
27
27
  "devDependencies": {
28
- "@evergonlabs/tmi-eslint-config": "^0.1.3",
29
- "@evergonlabs/tmi-evm-test": "^0.2.1",
30
- "@evergonlabs/tmi-typescript-config": "^0.2.0",
28
+ "@evergonlabs/tmi-eslint-config": "0.3.0",
29
+ "@evergonlabs/tmi-evm-test": "0.4.3",
30
+ "@evergonlabs/tmi-typescript-config": "0.2.1",
31
31
  "@topcli/prompts": "^2.1.0",
32
32
  "@wagmi/cli": "^2.2.0",
33
33
  "dotenv": "^17.2.2",
34
- "eslint": "^9.21.0",
34
+ "eslint": "^9.39.2",
35
35
  "jiti": "^2.4.2",
36
36
  "kleur": "^4.1.5",
37
37
  "npm-run-all": "^4.1.5",
@@ -40,12 +40,12 @@
40
40
  "typescript": "5.7.3",
41
41
  "viem": "^2.23.2",
42
42
  "vitest": "^3.1.3",
43
- "zod": "^3.25.0",
43
+ "zod": "^4.3.6",
44
44
  "@evergonlabs/internal": "0.0.0"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "viem": "^2.0.0",
48
- "zod": "^3.25.0"
48
+ "zod": "^4.0.0"
49
49
  },
50
50
  "publishConfig": {
51
51
  "access": "public",
@@ -57,10 +57,11 @@
57
57
  "check-types": "tsc -b --noEmit",
58
58
  "clean": "rimraf ./dist ./out ./cache ./generated",
59
59
  "dev": "tsx ./scripts/compile-dev.ts",
60
- "forge": "forge build",
61
60
  "lint": "eslint .",
62
- "scripts": "tsx -r dotenv/config ./scripts/bin.ts",
63
- "test": "vitest run",
64
- "wagmi": "npx wagmi generate"
61
+ "lint:fix": "eslint . --fix",
62
+ "scripts": "pnpm run env -- tsx ./scripts/bin.ts",
63
+ "test": "pnpm run env -- vitest run",
64
+ "wagmi": "npx wagmi generate",
65
+ "env": "dotenv -e ../../.env"
65
66
  }
66
67
  }