@evergonlabs/tmi-protocol-staking-sdk 0.1.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/README.md ADDED
@@ -0,0 +1,83 @@
1
+ ## Overview
2
+
3
+ Core-level SDK for staking platform of TMI Protocol. It wraps the low-level sdk of contracts and provides ready-to-be-used beautiful typescript interfaces with the accent on type-safety and developer experience.
4
+
5
+ _Note: This package is currently in the "alpha stage". Breaking changes are introduced without following semantic versioning._
6
+
7
+ ## Installation
8
+
9
+ You can install this package using any package manager: `pnpm`, `npm` or `yarn` but we would recommend to use `pnpm`
10
+
11
+ ```bash
12
+ pnpm add @evergonlabs/tmi-protocol-staking-sdk
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ This package has 1 class support for [viem](https://viem.sh/) so let's see how it can be used in such combination:
18
+
19
+ ```typescript
20
+ import { createClient, http } from "viem";
21
+ import { sepolia } from "viem/chains";
22
+ import { privateKeyToAccount } from "viem/accounts";
23
+ import {
24
+ createMiddlewares,
25
+ viemClientAsMiddleware,
26
+ parseDeployDiamondEvent,
27
+ createPlatform,
28
+ getTemplate,
29
+ TemplateEnum,
30
+ FacetSlot,
31
+ FacetOptionEnum,
32
+ } from "@evergonlabs/tmi-protocol-staking-sdk";
33
+
34
+ // 1. Define viem client
35
+ // @see https://viem.sh/docs/clients/intro to read more about clients
36
+ const viemClient = createClient({
37
+ account: privateKeyToAccount("0xYourPrivateKey"),
38
+ chain: sepolia,
39
+ transport: http(),
40
+ });
41
+
42
+ // 2. Define SDK-compatible sender
43
+ const sender = createMiddlewares(viemClientAsMiddleware(viemClient));
44
+
45
+ async function deployPlatform() {
46
+ // 3. Select your staking template
47
+ const template = getTemplate(TemplateEnum.RWA);
48
+
49
+ // 4. Send create platform transaction
50
+ const platform = await sender.run(
51
+ createPlatform(template, {
52
+ chainId: `${sepolia.id}`,
53
+ admin: viemClient.account.address,
54
+ data: {
55
+ [FacetSlot.Erc721]: {
56
+ type: FacetOptionEnum.Erc721Default,
57
+ erc721: {
58
+ symbol: "TT",
59
+ name: "Test",
60
+ baseUri: "ipfs://",
61
+ },
62
+ isSoulbound: true,
63
+ },
64
+ },
65
+ }),
66
+ );
67
+
68
+ // 5. Parse and return transaction logs
69
+ return parseDeployDiamondEvent(platform.logs);
70
+ }
71
+
72
+ deployPlatform()
73
+ .then((details) => {
74
+ // 6. Voila! Here's your result:
75
+ console.log("Platform is deployed with details:", details);
76
+ process.exit(0);
77
+ })
78
+ .catch((err) => {
79
+ // Don't forget to catch error in case of any
80
+ console.error(err);
81
+ process.exit(1);
82
+ });
83
+ ```
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";var v=Object.defineProperty;var Yt=Object.getOwnPropertyDescriptor;var Jt=Object.getOwnPropertyNames;var qt=Object.prototype.hasOwnProperty;var Qt=(e,t)=>{for(var r in t)v(e,r,{get:t[r],enumerable:!0})},Xt=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Jt(t))!qt.call(e,i)&&i!==r&&v(e,i,{get:()=>t[i],enumerable:!(a=Yt(t,i))||a.enumerable});return e};var Zt=e=>Xt(v({},"__esModule",{value:!0}),e);var he={};Qt(he,{FacetOptionEnum:()=>u,FacetSlot:()=>l,NotifyRewardsError:()=>H,StakingRole:()=>y,TemplateEnum:()=>$t,createFacetInitDictionary:()=>V,createFacetSettersDictionary:()=>j,createMiddlewares:()=>zt.createMiddlewares,createPlatform:()=>pe,createPool:()=>fe,facetOptionsBySlot:()=>ae,facetSlots:()=>k,getChain:()=>te,getPoolCreationAbi:()=>P,getReward:()=>xe,getStakingRole:()=>tt,getStakingRoleHex:()=>d,getTemplate:()=>Fe,grantRole:()=>be,isStakingRole:()=>et,isSupportedChainId:()=>ee,notifyRewards:()=>De,parseAssetManagersDeployEvent:()=>ce,parseCreatePoolEvent:()=>le,parseDeployDiamondEvent:()=>de,parseStakeEvent:()=>Te,partialUnstake:()=>Ae,restake:()=>Se,revokeRole:()=>Pe,stake:()=>ge,supportedChains:()=>Z,unstake:()=>ye,viemClientAsMiddleware:()=>jt.viemClientAsMiddleware});module.exports=Zt(he);var q=require("viem"),L=require("viem/chains"),Q=require("@evergonlabs/tmi-protocol-types/common"),X=[L.sepolia,L.anvil],Z=X.map(e=>`${e.id}`);function te(e){return(0,q.extractChain)({chains:X,id:(0,Q.stringIntToNumber)(e)})}function ee(e){return Z.includes(e)}var g=require("@evergonlabs/tmi-contracts-staking-sdk"),y=(i=>(i.Admin="Admin",i.Open="Open",i.Creator="Creator",i.Staker="Staker",i))(y||{}),re={Admin:g.DEFAULT_ROLES.adminRole,Open:g.DEFAULT_ROLES.openRole,Creator:g.GENERIC_ROLES.creatorRole,Staker:g.GENERIC_ROLES.stakerRole};function tt(e){return re[e]}function et(e){return Object.values(y).includes(e)}function d(e){return et(e)?tt(e):e}var l=(s=>(s.Erc721="Erc721",s.Amount="Amount",s.Time="Time",s.PoolCreation="PoolCreation",s.StakeCreation="StakeCreation",s.CreatorsEligibility="CreatorsEligibility",s.StakersEligibility="StakersEligibility",s.Lock="Lock",s.RewardsDistribution="RewardsDistribution",s.Input="Input",s.Reward="Reward",s.AmountMult="AmountMult",s.LockMult="LockMult",s.Withdrawal="Withdrawal",s.AccessControl="AccessControl",s))(l||{}),k=["AccessControl","Erc721","Amount","Time","PoolCreation","StakeCreation","CreatorsEligibility","StakersEligibility","Lock","RewardsDistribution","Input","Reward","AmountMult","LockMult","Withdrawal"];var u=(o=>(o.AccessControlDefault="AccessControlDefault",o.AmountHardCap="AmountHardCap",o.AmountTwoBorder="AmountTwoBorder",o.TimeOnlyStarting="TimeOnlyStarting",o.TimeTwoBorder="TimeTwoBorder",o.LockStaticPeriod="LockStaticPeriod",o.LockTwoBorder="LockTwoBorder",o.LockAutoComplex="LockAutoComplex",o.LockAutoRateBasedOpen="LockAutoRateBasedOpen",o.LockAutoPreStake="LockAutoPreStake",o.RewardDistributionComplex="RewardDistributionComplex",o.RewardDistributionPreStake="RewardDistributionPreStake",o.RewardDistributionRateBasedOpen="RewardDistributionRateBasedOpen",o.RewardDistributionRateBasedLock="RewardDistributionRateBasedLock",o.InputErc20="InputErc20",o.InputErc1155="InputErc1155",o.RewardErc20Transfer="RewardErc20Transfer",o.RewardErc20Minter="RewardErc20Minter",o.RewardErc1155Transfer="RewardErc1155Transfer",o.RewardErc1155Minter="RewardErc1155Minter",o.LockMultContinuous="LockMultContinuous",o.LockMultInterval="LockMultInterval",o.LockMultNoMultiplier="LockMultNoMultiplier",o.AmountMultContinuous="AmountMultContinuous",o.AmountMultInterval="AmountMultInterval",o.AmountMultNoMultiplier="AmountMultNoMultiplier",o.Erc721Default="Erc721Default",o.CreatorsEligibilityByRole="CreatorsEligibilityByRole",o.CreatorsEligibilityDefault="CreatorsEligibilityDefault",o.CreatorsEligibilityNID="CreatorsEligibilityNID",o.StakersEligibilityByRole="StakersEligibilityByRole",o.StakersEligibilityDefault="StakersEligibilityDefault",o.StakersEligibilityNID="StakersEligibilityNID",o.WithdrawalLockChecker="WithdrawalLockChecker",o.PoolCreationDefault="PoolCreationDefault",o.PoolCreationNID="PoolCreationNID",o.StakeCreationDefault="StakeCreationDefault",o.StakeCreationNID="StakeCreationNID",o))(u||{}),ae={Amount:["AmountHardCap","AmountTwoBorder"],Time:["TimeOnlyStarting","TimeTwoBorder"],CreatorsEligibility:["CreatorsEligibilityDefault","CreatorsEligibilityByRole","CreatorsEligibilityNID"],Erc721:["Erc721Default"],Input:["InputErc1155","InputErc20"],Reward:["RewardErc20Transfer","RewardErc20Minter","RewardErc1155Transfer","RewardErc1155Minter"],RewardsDistribution:["RewardDistributionComplex","RewardDistributionPreStake","RewardDistributionRateBasedLock","RewardDistributionRateBasedOpen"],Lock:["LockAutoComplex","LockAutoPreStake","LockAutoRateBasedOpen","LockStaticPeriod","LockTwoBorder"],LockMult:["LockMultContinuous","LockMultInterval","LockMultNoMultiplier"],Withdrawal:["WithdrawalLockChecker"],StakersEligibility:["StakersEligibilityDefault","StakersEligibilityByRole","StakersEligibilityNID"],PoolCreation:["PoolCreationDefault","PoolCreationNID"],AmountMult:["AmountMultContinuous","AmountMultInterval","AmountMultNoMultiplier"],StakeCreation:["StakeCreationDefault","StakeCreationNID"],AccessControl:["AccessControlDefault"]};var I=require("@evergonlabs/tmi-contracts-staking-sdk");var rt=require("viem");function at(e,t){return(0,rt.encodeAbiParameters)([{name:"name",type:"string"},{name:"symbol",type:"string"},{name:"baseUri",type:"string"},{name:"isTransferrable",type:"bool"}],[e.name,e.symbol,e.baseUri,t])}var ot=require("viem");var n=require("@evergonlabs/tmi-contracts-staking-sdk");var oe={AmountHardCap:n.SetterSelectors.CampaignAmounts,AmountTwoBorder:n.SetterSelectors.CampaignAmounts,TimeOnlyStarting:n.SetterSelectors.CampaignTimes,TimeTwoBorder:n.SetterSelectors.CampaignTimes,LockTwoBorder:n.SetterSelectors.LockVariations,LockStaticPeriod:n.SetterSelectors.LockVariations,LockAutoComplex:n.SetterSelectors.LockVariations,LockAutoPreStake:n.SetterSelectors.LockVariations,LockAutoRateBasedOpen:n.SetterSelectors.LockVariations,RewardDistributionComplex:n.SetterSelectors.RewardsDistribution,RewardDistributionPreStake:n.SetterSelectors.RewardsDistribution,RewardDistributionRateBasedLock:n.SetterSelectors.RewardsDistribution,RewardDistributionRateBasedOpen:n.SetterSelectors.RewardsDistribution,StakersEligibilityDefault:n.SetterSelectors.StakersEligibility,InputErc20:n.SetterSelectors.TransferInput,InputErc1155:n.SetterSelectors.TransferInput,RewardErc1155Transfer:n.SetterSelectors.TransferReward,RewardErc1155Minter:n.SetterSelectors.TransferReward,RewardErc20Transfer:n.SetterSelectors.TransferReward,RewardErc20Minter:n.SetterSelectors.TransferReward,AmountMultInterval:n.SetterSelectors.VirtualAmountMultiplier,AmountMultContinuous:n.SetterSelectors.VirtualAmountMultiplier,LockMultContinuous:n.SetterSelectors.VirtualLockMultiplier,LockMultInterval:n.SetterSelectors.VirtualLockMultiplier};function it(e){let t=[];return k.forEach(r=>{let a=e[r],i=oe[a];i&&t.push({option:a,selector:i})}),(0,ot.encodeAbiParameters)([{name:"requiredSelectors",type:"bytes4[]"},{name:"optionalSelectors",type:"bytes4[]"}],[t.map(r=>r.selector),[]])}var nt=require("viem");function W(e){return(0,nt.encodeAbiParameters)([{name:"roles",type:"bytes32[]"}],[[d(e)]])}var N=require("viem");function st(e){return(0,N.encodeAbiParameters)([{name:"maxLockPeriodInSeconds",type:"uint256"}],[BigInt(e)])}function D(e){return(0,N.encodeAbiParameters)([{name:"lockPeriods",type:"uint256[]"}],[e.map(t=>BigInt(t))])}function mt(e,t){return(0,N.encodeAbiParameters)([{name:"minAcceptedLockPeriodSeconds",type:"uint256"},{name:"maxAcceptedLockPeriodSeconds",type:"uint256"}],[BigInt(e),BigInt(t)])}var pt=require("@evergonlabs/tmi-protocol-utils/errors"),m=class extends pt.CustomError{constructor(t){super({message:`Option ${t} is not supported or implemented yet`,name:"FacetNotSupportedYetError",data:{option:t}})}};function V(e){return{AccessControlDefault:()=>({targetFacet:"AccessControlStakingFacet",data:void 0}),Erc721Default:t=>({targetFacet:"ERC721Facet",data:{selector:I.InitSelectors.Erc721,data:at(t.erc721,t.isSoulbound)}}),PoolCreationDefault:()=>({targetFacet:"CampaignCreationSkeleton",data:{selector:I.InitSelectors.Skeletons.CampaignCreation,data:it(e)}}),PoolCreationNID:()=>{throw new m("PoolCreationNID")},LockStaticPeriod:t=>({targetFacet:"StaticPeriodLockFacet",data:{selector:I.InitSelectors.LockVariations.Static,data:st(t.maxLockPeriod)}}),LockTwoBorder:()=>({targetFacet:"TwoBorderTimeLockFacet",data:void 0}),LockAutoComplex:()=>({targetFacet:"StaticPeriodLockFacet",data:void 0}),LockAutoPreStake:()=>({targetFacet:"StaticPeriodLockFacet",data:void 0}),LockAutoRateBasedOpen:()=>({targetFacet:"StaticPeriodLockFacet",data:void 0}),AmountHardCap:()=>({targetFacet:"HardcapAmountFacet",data:void 0}),AmountTwoBorder:()=>({targetFacet:"TwoBorderAmountFacet",data:void 0}),AmountMultContinuous:()=>({targetFacet:"ContinuousVirtualAmountMultiplierFacet",data:void 0}),AmountMultInterval:()=>({targetFacet:"IntervalVirtualAmountMultiplierFacet",data:void 0}),AmountMultNoMultiplier:()=>({targetFacet:"NoVirtualAmountMultiplierFacet",data:void 0}),CreatorsEligibilityByRole:t=>({targetFacet:"WhitelistedCampaignCreatorsFacet",data:{selector:I.InitSelectors.Eligibility.CreatorsEligibility,data:W(t.role)}}),CreatorsEligibilityDefault:()=>({targetFacet:"WhitelistedCampaignCreatorsFacet",data:{selector:I.InitSelectors.Eligibility.CreatorsEligibility,data:W("Creator")}}),CreatorsEligibilityNID:()=>{throw new m("CreatorsEligibilityNID")},InputErc20:()=>({targetFacet:"Erc20InputFacet",data:void 0}),InputErc1155:()=>({targetFacet:"Erc1155InputFacet",data:void 0}),RewardErc1155Transfer:()=>({targetFacet:"Erc1155RewardTransferFacet",data:void 0}),RewardErc1155Minter:()=>({targetFacet:"Erc1155RewardMinterFacet",data:void 0}),RewardErc20Transfer:()=>({targetFacet:"Erc20RewardTransferFacet",data:void 0}),RewardErc20Minter:()=>({targetFacet:"Erc20RewardMinterFacet",data:void 0}),LockMultContinuous:()=>({targetFacet:"ContinuousVirtualLockMultiplierFacet",data:void 0}),LockMultInterval:()=>({targetFacet:"IntervalVirtualLockMultiplierFacet",data:void 0}),LockMultNoMultiplier:()=>({targetFacet:"NoVirtualLockMultiplierFacet",data:void 0}),StakeCreationDefault:()=>({targetFacet:"StakingSkeleton",data:void 0}),StakeCreationNID:()=>{throw new m("StakeCreationNID")},StakersEligibilityDefault:()=>({targetFacet:"WhitelistedStakersFacet",data:void 0}),StakersEligibilityByRole:()=>({targetFacet:"WhitelistedStakersFacet",data:void 0}),StakersEligibilityNID:()=>{throw new m("StakersEligibilityNID")},TimeOnlyStarting:()=>({targetFacet:"OnlyStartingTimestampCampaign",data:void 0}),TimeTwoBorder:()=>({targetFacet:"TwoBorderTimestampCampaign",data:void 0}),WithdrawalLockChecker:()=>({targetFacet:"LockCheckerWithdrawalVariationFacet",data:void 0}),RewardDistributionComplex:()=>({targetFacet:"ComplexRewardDistributionFacet",data:void 0}),RewardDistributionPreStake:()=>({targetFacet:"PreStakeRewardDistributionFacet",data:void 0}),RewardDistributionRateBasedLock:()=>({targetFacet:"RateBasedLockRewardDistributionFacet",data:void 0}),RewardDistributionRateBasedOpen:()=>({targetFacet:"RateBasedOpenRewardDistributionFacet",data:void 0})}}var wt=require("@evergonlabs/tmi-protocol-utils/errors");var U=require("viem");function dt(e,t){return(0,U.encodeAbiParameters)([{name:"minAmountOfPackets",type:"uint256"},{name:"maxAmountOfPackets",type:"uint256"}],[BigInt(e),BigInt(t)])}function ut(e){return(0,U.encodeAbiParameters)([{name:"hardCapPackets",type:"uint256"}],[BigInt(e)])}var T=require("viem");function lt(e){return(0,T.encodeAbiParameters)([{name:"packetsStaked",type:"uint256[]"},{name:"packetsStakedMultipliers",type:"uint256[]"}],[e.map(t=>BigInt(t[0])),e.map(t=>(0,T.parseUnits)(t[1].toString(),18))])}function ct(e){return(0,T.encodeAbiParameters)([{name:"packetsStaked",type:"uint256[]"},{name:"packetsStakedMultipliers",type:"uint256[]"}],[e.map(t=>BigInt(t[0])),e.map(t=>(0,T.parseUnits)(t[1].toString(),18))])}var ft=require("viem");function kt(e){return(0,ft.encodeAbiParameters)([{name:"tokenAddresses",type:"address[]"},{name:"amountOfTokensPerPacket",type:"uint256[]"}],[e.map(t=>t.tokenAddress),e.map(t=>BigInt(t.amountOfTokensPerPacket))])}var gt=require("viem");function O(e){let t=parseInt(e);if(isNaN(t))throw new Error(`Invalid token id: ${e}`);return BigInt(t)}function It(e){return(0,gt.encodeAbiParameters)([{name:"tokenAddresses",type:"address[]"},{name:"tokenIds",type:"uint256[]"},{name:"amountOfTokensPerPacket",type:"uint256[]"}],[e.map(t=>t.tokenAddress),e.map(t=>O(t.tokenId)),e.map(t=>BigInt(t.amountOfTokensPerPacket))])}var Tt=require("viem");function _(e){return(0,Tt.encodeAbiParameters)([{name:"tokenAddresses",type:"address[]"},{name:"amountOfTokensPerPacket",type:"uint256[]"}],[e.map(t=>t.tokenAddress),e.map(t=>BigInt(t.amountOfTokensPerPacket))])}var St=require("viem");function G(e){return(0,St.encodeAbiParameters)([{name:"tokenAddresses",type:"address[]"},{name:"tokenIds",type:"uint256[]"},{name:"amountOfTokensPerPacket",type:"uint256[]"}],[e.map(t=>t.tokenAddress),e.map(t=>O(t.tokenId)),e.map(t=>BigInt(t.amountOfTokensPerPacket))])}var S=require("viem");function Rt(e){return(0,S.encodeAbiParameters)([{name:"timeLockPeriods",type:"uint256[]"},{name:"timeLockMultipliers",type:"uint256[]"}],[e.map(t=>BigInt(t.lockPeriodSeconds)),e.map(t=>(0,S.parseUnits)(t.multiplier.toString(),18))])}function bt(e){return(0,S.encodeAbiParameters)([{name:"timeLockPeriods",type:"uint256[]"},{name:"timeLockMultipliers",type:"uint256[]"}],[e.map(t=>BigInt(t.lockPeriodSeconds)),e.map(t=>(0,S.parseUnits)(t.multiplier.toString(),18))])}var Ct=require("viem");function $(e,t){return(0,Ct.encodeAbiParameters)([{name:"eligibleForStakingRoles",type:"bytes32[]"},{name:"isCampaignScoped",type:"bool"}],[e.map(r=>d(r)),t])}var z=require("viem"),x=require("@evergonlabs/tmi-protocol-utils/date");function yt(e,t,r){return(0,z.encodeAbiParameters)([{name:"campaignStartingTimestamp",type:"uint256"},{name:"campaignEndingTimestamp",type:"uint256"},{name:"campaignRewardsEndingTimestamp",type:"uint256"}],[(0,x.msToSeconds)(BigInt(e.getTime())),(0,x.msToSeconds)(BigInt(t.getTime())),(0,x.msToSeconds)(BigInt(r.getTime()))])}function Dt(e){return(0,z.encodeAbiParameters)([{name:"campaignStartingTimestamp",type:"uint256"}],[(0,x.msToSeconds)(BigInt(e.getTime()))])}var A=require("viem");function xt(e,t){return(0,A.encodeAbiParameters)([{name:"campaignRate",type:"uint256"},{name:"isVirtualLockMultiplierSupported",type:"bool"}],[BigInt(e),t])}function At(e){return(0,A.encodeAbiParameters)([{name:"campaignRate",type:"uint256"}],[BigInt(e)])}function Pt(e,t){return(0,A.encodeAbiParameters)([{name:"interval",type:"uint256"},{name:"campaignRewardDistributor",type:"address"}],[BigInt(e),t])}function Et(e,t,r){return(0,A.encodeAbiParameters)([{name:"totalReward",type:"uint256"},{name:"isInstaRewards",type:"bool"},{name:"rewardsProvider",type:"address"}],[BigInt(e),t,r])}function j(e){return{AccessControlDefault:()=>{},Erc721Default:()=>{},PoolCreationDefault:()=>{},PoolCreationNID:()=>{throw new m("PoolCreationNID")},LockStaticPeriod:t=>({data:D(t.lockPeriods)}),LockTwoBorder:t=>({data:mt(t.minAcceptedLockPeriod,t.maxAcceptedLockPeriod)}),LockAutoComplex:(t,r)=>{if(r.RewardsDistribution.type!=="RewardDistributionComplex")throw new R("LockAutoComplex","RewardDistributionComplex");return{data:D([0])}},LockAutoPreStake:(t,r)=>{if(r.RewardsDistribution.type!=="RewardDistributionPreStake")throw new R("LockAutoPreStake","RewardDistributionPreStake");let a=r.Time;if(a.type!=="TimeTwoBorder")throw new R("LockAutoPreStake","TimeTwoBorder");let i=a.rewardsEndDate.getTime()-a.endDate.getTime();return{data:D([i/1e3])}},LockAutoRateBasedOpen:(t,r)=>{if(r.RewardsDistribution.type!=="RewardDistributionRateBasedOpen")throw new R("LockAutoRateBasedOpen","RewardDistributionRateBasedOpen");return{data:D([0])}},AmountHardCap:t=>({data:ut(t.hardCap)}),AmountTwoBorder:t=>({data:dt(t.minAmount,t.maxAmount)}),AmountMultNoMultiplier:()=>{},AmountMultContinuous:t=>({data:ct(t.packetsAndMultipliers)}),AmountMultInterval:t=>({data:lt(t.packetsAndMultipliers)}),CreatorsEligibilityByRole:()=>{},CreatorsEligibilityDefault:()=>{},CreatorsEligibilityNID:()=>{throw new m("CreatorsEligibilityNID")},InputErc20:t=>({data:kt(t.entries.map(r=>({tokenAddress:r.tokenAddress,amountOfTokensPerPacket:r.amountOfTokensPerPacket})))}),InputErc1155:t=>({data:It(t.entries.map(r=>({tokenAddress:r.tokenAddress,tokenId:r.tokenId,amountOfTokensPerPacket:r.amountOfTokensPerPacket})))}),RewardErc1155Transfer:t=>({data:G(t.entries.map(r=>({tokenAddress:r.tokenAddress,tokenId:r.tokenId,amountOfTokensPerPacket:r.amountOfTokensPerPacket})))}),RewardErc1155Minter:t=>({data:G(t.entries.map(r=>({tokenAddress:r.tokenAddress,tokenId:r.tokenId,amountOfTokensPerPacket:r.amountOfTokensPerPacket})))}),RewardErc20Transfer:t=>({data:_(t.entries.map(r=>({tokenAddress:r.tokenAddress,amountOfTokensPerPacket:r.amountOfTokensPerPacket})))}),RewardErc20Minter:t=>({data:_(t.entries.map(r=>({tokenAddress:r.tokenAddress,amountOfTokensPerPacket:r.amountOfTokensPerPacket})))}),LockMultNoMultiplier:()=>{},LockMultContinuous:t=>({data:bt(t.lockPeriods.map(r=>({lockPeriodSeconds:r[0],multiplier:r[1]})))}),LockMultInterval:t=>({data:Rt(t.lockPeriods.map(r=>({lockPeriodSeconds:r[0],multiplier:r[1]})))}),StakeCreationDefault:()=>{},StakeCreationNID:()=>{throw new m("StakeCreationNID")},StakersEligibilityDefault:t=>({data:$(["Staker"],t.isCampaignScoped)}),StakersEligibilityByRole:t=>({data:$(t.eligibleRoles,t.isCampaignScoped)}),StakersEligibilityNID:()=>{throw new m("StakersEligibilityNID")},TimeOnlyStarting:t=>({data:Dt(t.startDate)}),TimeTwoBorder:t=>({data:yt(t.startDate,t.endDate,t.rewardsEndDate)}),WithdrawalLockChecker:()=>{},RewardDistributionComplex:t=>({data:Pt(t.duration,t.distributor)}),RewardDistributionPreStake:t=>({data:Et(t.totalPackets,t.isInstaRewards,t.rewardsProvider)}),RewardDistributionRateBasedLock:t=>({data:xt(t.campaignRate,e.LockMult!=="LockMultNoMultiplier")}),RewardDistributionRateBasedOpen:t=>({data:At(t.campaignRate)})}}var R=class extends wt.CustomError{constructor(t,r){super({message:`Option ${t} can be used only in combination with ${r}`,name:"CombinationError",data:{requiredOption:r,targetOption:t}})}};var Lt=require("@evergonlabs/tmi-contracts-staking-sdk/abis");var b=require("viem/chains"),c=require("@evergonlabs/tmi-contracts-staking-sdk");function Ft(e,t){let r=t.map(a=>{let i=(0,c.getStakingFacetFactory)(a);return i.getContract(ie(a,e),i.createInterface())});return(0,c.getFacetCutsAdd)(r).map(a=>({target:a.target,action:a.action,selectors:a.selectors}))}function ie(e,t){return c.contractAddresses[se(t)][e]}var ne={11155111:11155111,31337:11155111};function se(e){return ne[e]}var me={[b.sepolia.id]:c.diamondFactoryAddresses[b.sepolia.id],[b.anvil.id]:c.diamondFactoryAddresses[b.sepolia.id]};function ht(e){return me[e]}function pe(e,t){let r=V(e),a=[],i=[],E=[],f=t.data;k.forEach(F=>{let h=e[F],Kt=r[h],C=Kt(f[F],f);C.targetFacet&&a.push(C.targetFacet),C.data&&(i.push(C.data.selector),E.push(C.data.data))});let w=Ft(t.chainId,a);return{address:ht(t.chainId),abi:Lt.diamondFactoryAbi,functionName:"deployAndInitializeDiamond",args:[w,i,E,t.admin]}}var Nt=require("viem"),Ot=require("@evergonlabs/tmi-contracts-staking-sdk/abis");function de(e){let t=(0,Nt.parseEventLogs)({eventName:"DiamondDeployedAndInitialized",abi:Ot.diamondFactoryAbi,logs:e})[0];return t?{diamondAddress:t.args.diamondAddress,admin:t.args.admin}:null}var Bt=require("viem");var B=require("@evergonlabs/tmi-contracts-staking-sdk/abis");var K=require("viem"),ue={PoolCreationDefault:B.campaignCreationSkeletonAbi,PoolCreationNID:B.campaignCreationSkeletonNidAbi};function P(e){return ue[e.PoolCreation]}function le(e,t){let r=P(e),a=(0,K.parseEventLogs)({eventName:"StakingCampaignCreated",abi:r,logs:t})[0];return a?{poolId:a.args.campaignId,creator:a.args.creator}:null}function ce(e,t){let r=P(e),a=(0,K.parseEventLogs)({eventName:"CampaignAssetManagersDeployed",abi:r,logs:t})[0];return a?{poolId:a.args.campaignId,inputAssetKeeper:a.args.inputAssetKeeper,rewardAssetHandler:a.args.rewardAssetHandler}:null}function fe(e,t){let r=j(e),a=t.data,i=[];k.forEach(f=>{let w=e[f],F=r[w],h=F(a[f],a);h&&i.push({data:h.data,option:w})});let E=(0,Bt.encodeAbiParameters)([{name:"optionalParams",type:"bytes4[]"},{name:"params",type:"bytes[]"}],[[],i.map(f=>f.data)]);return{address:t.platform,abi:P(e),functionName:"createCampaign",args:[E]}}var M=require("@evergonlabs/tmi-contracts-staking-sdk/abis");var ke={StakeCreationDefault:M.stakingSkeletonAbi,StakeCreationNID:M.stakingSkeletonNidAbi};function p(e){return ke[e.StakeCreation]}function ge(e,t){let r=p(e),{functionName:a,args:i}=Ie(e,r,t.data);return{address:t.platform,abi:r,functionName:a,args:i}}function Ie(e,t,r){return{abi:t,functionName:"stake",args:[BigInt(r.poolId),BigInt(r.packets),BigInt(r.lockPeriod??0)]}}var Mt=require("viem");function Te(e,t){let r=(0,Mt.parseEventLogs)({eventName:"StakingPositionCreated",abi:p(e),logs:t})[0];return r?{poolId:r.args.campaignId,stakeId:r.args.nftId,operator:r.args.operator,owner:r.args.owner,inputPacketsStaked:r.args.inputPacketsStaked,stakeStartActiveTimestamp:r.args.stakeStartActiveTimestamp,unlockTimestamp:r.args.unlockTimestamp}:null}function Se(e,t){let{abi:r,functionName:a,args:i}=Re(e,p(e),t.data);return{abi:r,args:i,functionName:a,address:t.platform}}function Re(e,t,r){return{abi:t,functionName:"restake",args:[BigInt(r.stakeId),BigInt(r.packets),BigInt(r.lockPeriod??0)]}}var Ht=require("@evergonlabs/tmi-protocol-utils/typeUtils"),Y=require("@evergonlabs/tmi-contracts-staking-sdk/abis");function be(e){let{abi:t,functionName:r,args:a}=Ce(e);return{address:e.platform,abi:t,functionName:r,args:a}}function Ce(e){if(!(0,Ht.isNonEmptyArray)(e.addresses))throw new Error("Addresses array must have at least 1 address");return e.addresses.length===1?{abi:Y.accessControlStakingFacetAbi,functionName:"grantRole",args:[d(e.role),e.addresses[0]]}:{abi:Y.accessControlStakingFacetAbi,functionName:"grantRoleMultiple",args:[d(e.role),e.addresses]}}function ye(e,t){let r=p(e);return{address:t.platform,abi:r,functionName:"fullyUnstake",args:[BigInt(t.data.stakeId)]}}var vt=require("@evergonlabs/tmi-contracts-staking-sdk/abis"),Wt=require("@evergonlabs/tmi-protocol-utils/errors");function De(e,t){switch(e.RewardsDistribution){case"RewardDistributionComplex":return{address:t.platform,abi:vt.complexRewardDistributionFacetAbi,functionName:"notifyRewardAmount",args:[BigInt(t.data.poolId),BigInt(t.data.packets)]};default:throw new H(e.RewardsDistribution)}}var H=class extends Wt.CustomError{constructor(t){super({message:`Reward distribution ${t} is not eligible for notifyRewards action`,name:"NotifyRewardsError",data:{option:t}})}};function xe(e,t){let r=p(e);return{address:t.platform,abi:r,functionName:"getReward",args:[BigInt(t.data.stakeId)]}}function Ae(e,t){let r=p(e);return{address:t.platform,abi:r,functionName:"partialUnstake",args:[BigInt(t.data.stakeId),BigInt(t.data.amount)]}}var J=require("@evergonlabs/tmi-contracts-staking-sdk/abis"),Vt=require("@evergonlabs/tmi-protocol-utils/typeUtils");function Pe(e){let{abi:t,functionName:r,args:a}=Ee(e);return{address:e.platform,abi:t,args:a,functionName:r}}function Ee(e){if(!(0,Vt.isNonEmptyArray)(e.addresses))throw new Error("Addresses array must have at least 1 address");return e.addresses.length===1?{abi:J.accessControlStakingFacetAbi,functionName:"revokeRole",args:[d(e.role),e.addresses[0]]}:{abi:J.accessControlStakingFacetAbi,functionName:"revokeRoleMultiple",args:[d(e.role),e.addresses]}}var Ut={RewardsDistribution:"RewardDistributionComplex",StakeCreation:"StakeCreationDefault",PoolCreation:"PoolCreationDefault",Time:"TimeOnlyStarting",Amount:"AmountHardCap",CreatorsEligibility:"CreatorsEligibilityDefault",Erc721:"Erc721Default",Input:"InputErc20",Lock:"LockAutoComplex",LockMult:"LockMultNoMultiplier",Reward:"RewardErc20Transfer",StakersEligibility:"StakersEligibilityDefault",Withdrawal:"WithdrawalLockChecker",AmountMult:"AmountMultNoMultiplier",AccessControl:"AccessControlDefault"};var _t={RewardsDistribution:"RewardDistributionRateBasedOpen",StakeCreation:"StakeCreationDefault",PoolCreation:"PoolCreationDefault",Time:"TimeOnlyStarting",Amount:"AmountTwoBorder",CreatorsEligibility:"CreatorsEligibilityDefault",Erc721:"Erc721Default",Input:"InputErc20",Lock:"LockAutoRateBasedOpen",LockMult:"LockMultNoMultiplier",Reward:"RewardErc20Minter",StakersEligibility:"StakersEligibilityDefault",Withdrawal:"WithdrawalLockChecker",AmountMult:"AmountMultInterval",AccessControl:"AccessControlDefault"};var Gt={RewardsDistribution:"RewardDistributionRateBasedLock",StakeCreation:"StakeCreationDefault",PoolCreation:"PoolCreationDefault",Time:"TimeOnlyStarting",Amount:"AmountTwoBorder",CreatorsEligibility:"CreatorsEligibilityDefault",Erc721:"Erc721Default",Input:"InputErc20",Lock:"LockTwoBorder",LockMult:"LockMultInterval",Reward:"RewardErc20Minter",StakersEligibility:"StakersEligibilityDefault",Withdrawal:"WithdrawalLockChecker",AmountMult:"AmountMultInterval",AccessControl:"AccessControlDefault"};var $t=(a=>(a.RWA="RWA",a.Reputation="Reputation",a.ReputationLock="ReputationLock",a))($t||{}),we={RWA:Ut,Reputation:_t,ReputationLock:Gt};function Fe(e){return we[e]}var zt=require("@evergonlabs/tmi-protocol-utils/common"),jt=require("@evergonlabs/tmi-protocol-utils/viem");0&&(module.exports={FacetOptionEnum,FacetSlot,NotifyRewardsError,StakingRole,TemplateEnum,createFacetInitDictionary,createFacetSettersDictionary,createMiddlewares,createPlatform,createPool,facetOptionsBySlot,facetSlots,getChain,getPoolCreationAbi,getReward,getStakingRole,getStakingRoleHex,getTemplate,grantRole,isStakingRole,isSupportedChainId,notifyRewards,parseAssetManagersDeployEvent,parseCreatePoolEvent,parseDeployDiamondEvent,parseStakeEvent,partialUnstake,restake,revokeRole,stake,supportedChains,unstake,viemClientAsMiddleware});
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../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"],"sourcesContent":["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","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-protocol-types/common\";\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-protocol-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-protocol-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-protocol-types/common\";\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-protocol-types/common\";\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-protocol-types/common\";\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-protocol-types/common\";\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-protocol-types/common\";\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-protocol-types/common\";\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-protocol-types/common\";\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-protocol-types/common\";\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 FACET_CUT_ACTION,\n diamondFactoryAddresses,\n} from \"@evergonlabs/tmi-contracts-staking-sdk\";\n\nexport type IFacetCut = {\n target: Hex;\n action: FACET_CUT_ACTION;\n selectors: Hex[];\n};\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,\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-protocol-types/common\";\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-protocol-types/common\";\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-protocol-types/common\";\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-protocol-types/common\";\nimport { complexRewardDistributionFacetAbi } from \"@evergonlabs/tmi-contracts-staking-sdk/abis\";\nimport { CustomError } from \"@evergonlabs/tmi-protocol-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-protocol-types/common\";\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-protocol-types/common\";\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"],"mappings":"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","names":["index_exports","__export","FacetOptionEnum","FacetSlot","NotifyRewardsError","StakingRole","TemplateEnum","createFacetInitDictionary","createFacetSettersDictionary","createPlatform","createPool","facetOptionsBySlot","facetSlots","getChain","getPoolCreationAbi","getReward","getStakingRole","getStakingRoleHex","getTemplate","grantRole","isStakingRole","isSupportedChainId","notifyRewards","parseAssetManagersDeployEvent","parseCreatePoolEvent","parseDeployDiamondEvent","parseStakeEvent","partialUnstake","restake","revokeRole","stake","supportedChains","unstake","__toCommonJS","import_viem","import_chains","import_common","supportedChainsList","supportedChains","x","getChain","chainId","isSupportedChainId","import_tmi_contracts_staking_sdk","StakingRole","stakingRoleDictionary","getStakingRole","role","isStakingRole","x","getStakingRoleHex","FacetSlot","facetSlots","FacetOptionEnum","facetOptionsBySlot","import_tmi_contracts_staking_sdk","import_viem","getErc721InitData","token","isSoulbound","import_viem","import_tmi_contracts_staking_sdk","setterSelectorsByFacetOption","getPoolCreationDefaultInitData","template","selectors","facetSlots","curr","option","selector","x","import_viem","getCreatorEligibilityByRoleInitData","role","getStakingRoleHex","import_viem","getLockStaticPeriodInitData","maxLockPeriodInSeconds","getLockStaticPeriodSetData","periodsInSeconds","x","getLockTwoBorderSetData","minAcceptedLockPeriodSeconds","maxAcceptedLockPeriodSeconds","import_errors","FacetOptionNotSupportedYetError","option","createFacetInitDictionary","template","params","getErc721InitData","getPoolCreationDefaultInitData","FacetOptionNotSupportedYetError","getLockStaticPeriodInitData","getCreatorEligibilityByRoleInitData","import_errors","import_viem","getAmountTwoBorderSetData","minAmountOfPackets","maxAmountOfPackets","getAmountHardcapOnlySetData","hardCapPackets","import_viem","getAmountMultIntervalSetData","packetsAndMultipliers","x","getAmountMultContinuousSetData","import_viem","getErc20InputSetterData","entries","x","import_viem","parseErc1155TokenId","tokenId","parsed","getErc1155InputSetterData","entries","x","parseErc1155TokenId","import_viem","getErc20RewardSetterData","entries","x","import_viem","getErc1155RewardSetterData","entries","x","parseErc1155TokenId","import_viem","getLockMultStaticPeriodSetData","entries","x","getLockMultContinuousSetData","import_viem","getStakersEligibilitySetData","eligibleForStakingRoles","isCampaignScoped","x","getStakingRoleHex","import_viem","import_date","getTimeTwoBorderSetData","startDate","endDate","rewardsDate","getTimeOnlyStartingSetData","campaignStartingTimestamp","import_viem","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","targetOption","requiredOption","import_abis","import_chains","import_tmi_contracts_staking_sdk","getFacetCutsWithAddAction","chainId","facets","contracts","facet","Contract","getFacetAddress","x","type","toStakingSdkChainId","stakingChainIdDictionary","stakingDiamondFactoryByChain","getDiamondFactoryAddress","createPlatform","template","request","initDictionary","createFacetInitDictionary","facets","initSelectors","initData","platformConfig","facetSlots","slot","option","handler","val","facetCuts","getFacetCutsWithAddAction","getDiamondFactoryAddress","import_viem","import_abis","parseDeployDiamondEvent","logs","result","import_viem","import_abis","import_viem","poolCreationFacetByOption","getPoolCreationAbi","template","parseCreatePoolEvent","logs","abi","result","parseAssetManagersDeployEvent","createPool","template","request","setDictionary","createFacetSettersDictionary","poolConfig","requiredData","facetSlots","slot","option","handler","result","encodedData","x","getPoolCreationAbi","import_abis","contractByFacetOption","getStakeCreationAbi","template","stake","template","request","abi","getStakeCreationAbi","functionName","args","createStakeData","_template","data","import_viem","parseStakeEvent","template","logs","result","getStakeCreationAbi","restake","template","request","abi","functionName","args","createRetakeData","getStakeCreationAbi","_template","data","import_typeUtils","import_abis","grantRole","request","abi","functionName","args","generateData","getStakingRoleHex","unstake","template","request","abi","getStakeCreationAbi","import_abis","import_errors","notifyRewards","template","request","NotifyRewardsError","option","getReward","template","request","abi","getStakeCreationAbi","partialUnstake","template","request","abi","getStakeCreationAbi","import_abis","import_typeUtils","revokeRole","request","abi","functionName","args","generateData","getStakingRoleHex","RWATemplate","ReputationTemplate","ReputationLockTemplate","TemplateEnum","templates","RWATemplate","ReputationTemplate","ReputationLockTemplate","getTemplate","type","import_common","import_viem"]}