{"version":3,"sources":["/Users/paul-n/git/ston-fi/public/sdk-contracts/packages/sdk/dist/chunk-EOJHJMAB.cjs","../src/contracts/farm/v3/FarmNftItemV3.ts"],"names":[],"mappings":"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","file":"/Users/paul-n/git/ston-fi/public/sdk-contracts/packages/sdk/dist/chunk-EOJHJMAB.cjs","sourcesContent":[null,"import {\n  beginCell,\n  type Cell,\n  type ContractProvider,\n  Dictionary,\n  type Sender,\n  type SenderArguments,\n  toNano,\n} from \"@ton/ton\";\n\nimport type { AddressType, QueryIdType } from \"../../../types\";\nimport { createSbtDestroyMessage } from \"../../../utils/createSbtDestroyMessage\";\nimport { Contract, type ContractOptions } from \"../../core/Contract\";\nimport { FARM_OP_CODES, FARM_VERSION } from \"../constants\";\nimport { FarmNftMinterV3 } from \"./FarmNftMinterV3\";\n\nexport interface FarmNftItemV3Options extends ContractOptions {\n  gasConstants?: Partial<typeof FarmNftItemV3.gasConstants>;\n}\n\nexport class FarmNftItemV3 extends Contract {\n  public static readonly version = FARM_VERSION.v3;\n\n  public static readonly gasConstants = {\n    claimRewardsBase: toNano(\"0.35\"),\n    claimRewardsPerPool: toNano(\"0.13\"),\n    unstakeBase: toNano(\"0.45\"),\n    unstakePerPool: toNano(\"0.13\"),\n    destroy: toNano(\"0.05\"),\n  };\n\n  public readonly gasConstants;\n\n  constructor(\n    address: AddressType,\n    { gasConstants, ...options }: FarmNftItemV3Options = {},\n  ) {\n    super(address, options);\n\n    this.gasConstants = {\n      ...FarmNftItemV3.gasConstants,\n      ...gasConstants,\n    };\n  }\n\n  public async createClaimRewardsBody(\n    params: {\n      queryId?: QueryIdType;\n    } & (\n      | {\n          claimAll: true;\n        }\n      | {\n          claimAll: false;\n          poolIndex: number;\n        }\n    ),\n  ): Promise<Cell> {\n    const builder = beginCell();\n\n    builder.storeUint(FARM_OP_CODES.CLAIM_REWARDS, 32);\n    builder.storeUint(params.queryId ?? 0, 64);\n\n    if (params.claimAll) {\n      builder.storeUint(1, 1);\n      builder.storeUint(0, 8);\n    } else {\n      builder.storeUint(0, 1);\n      builder.storeUint(params.poolIndex, 8);\n    }\n\n    return builder.endCell();\n  }\n\n  /**\n   * Build all data required to execute a `claim_rewards` transaction.\n   *\n   * @param {number | undefined} params.poolCount - Optional; Number of deployed farm reward pools; If undefined value will get onchain\n   * @param {number | undefined} params.poolIndex - Optional; farm reward pool index used for claiming; If undefined claim rewards from all pools\n   * @param {bigint | number | undefined} params.queryId - Optional; query id\n   *\n   * @returns {SenderArguments} all data required to execute a `claim_rewards` transaction.\n   */\n  public async getClaimRewardsTxParams(\n    provider: ContractProvider,\n    params?: {\n      poolCount?: number;\n      queryId?: QueryIdType;\n      poolIndex?: number;\n    },\n  ): Promise<SenderArguments> {\n    const to = this.address;\n\n    const body = await this.createClaimRewardsBody({\n      queryId: params?.queryId,\n      claimAll: params?.poolIndex === undefined,\n      poolIndex: params?.poolIndex ?? 0,\n    });\n\n    const poolCount = params?.poolCount ?? (await this.getPoolCount(provider));\n\n    const value =\n      this.gasConstants.claimRewardsBase +\n      this.gasConstants.claimRewardsPerPool *\n        BigInt(Math.max(poolCount - 1, 0));\n\n    return { to, value, body };\n  }\n\n  public async sendClaimRewards(\n    provider: ContractProvider,\n    via: Sender,\n    params: Parameters<FarmNftItemV3[\"getClaimRewardsTxParams\"]>[1],\n  ) {\n    const txParams = await this.getClaimRewardsTxParams(provider, params);\n\n    return via.send(txParams);\n  }\n\n  public async createUnstakeBody(params?: {\n    queryId?: QueryIdType;\n  }): Promise<Cell> {\n    return beginCell()\n      .storeUint(FARM_OP_CODES.UNSTAKE, 32)\n      .storeUint(params?.queryId ?? 0, 64)\n      .endCell();\n  }\n\n  /**\n   * Build all data required to execute a `unstake` transaction.\n   *\n   * @param {number | undefined} params.poolCount -  Optional; Number of deployed farm reward pools; If undefined value will get onchain\n   * @param {bigint | number | undefined} params.queryId - Optional; query id\n   *\n   * @returns {SenderArguments} all data required to execute a `unstake` transaction.\n   */\n  public async getUnstakeTxParams(\n    provider: ContractProvider,\n    params?: {\n      poolCount?: number;\n      queryId?: QueryIdType;\n    },\n  ): Promise<SenderArguments> {\n    const to = this.address;\n\n    const body = await this.createUnstakeBody({\n      queryId: params?.queryId,\n    });\n\n    const poolCount = params?.poolCount ?? (await this.getPoolCount(provider));\n\n    const value =\n      this.gasConstants.unstakeBase +\n      this.gasConstants.unstakePerPool * BigInt(Math.max(poolCount - 1, 0));\n\n    return { to, value, body };\n  }\n\n  public async sendUnstake(\n    provider: ContractProvider,\n    via: Sender,\n    params: Parameters<FarmNftItemV3[\"getUnstakeTxParams\"]>[1],\n  ) {\n    const txParams = await this.getUnstakeTxParams(provider, params);\n\n    return via.send(txParams);\n  }\n\n  public async createDestroyBody(params?: {\n    queryId?: QueryIdType;\n  }): Promise<Cell> {\n    return createSbtDestroyMessage({\n      queryId: params?.queryId ?? 0,\n    });\n  }\n\n  /**\n   * Build all data required to execute a `destroy` transaction.\n   *\n   * @param {bigint | string | number | undefined} params.queryId - Optional; query id\n   *\n   * @returns {SenderArguments} all data required to execute a `destroy` transaction.\n   */\n  public async getDestroyTxParams(\n    provider: ContractProvider,\n    params?: {\n      queryId?: QueryIdType;\n    },\n  ): Promise<SenderArguments> {\n    const to = this.address;\n\n    const body = await this.createDestroyBody({\n      queryId: params?.queryId,\n    });\n\n    const value = this.gasConstants.destroy;\n\n    return { to, value, body };\n  }\n\n  public async sendDestroy(\n    provider: ContractProvider,\n    via: Sender,\n    params: Parameters<FarmNftItemV3[\"getDestroyTxParams\"]>[1],\n  ) {\n    const txParams = await this.getDestroyTxParams(provider, params);\n\n    return via.send(txParams);\n  }\n\n  /**\n   * @returns structure containing current state of the farm NFT\n   *\n   * @property {number} status Status of the contract: uninitialized (0), active (1), unstaked (2), claiming (3), unstaked_pending (4)\n   * @property {bigint} revokeTime Timestamp of unstake\n   * @property {bigint} stakedTokens Amount of staked tokens\n   * @property {bigint} stakeDate Timestamp in which the owner started staking\n   * @property {Map<number, bigint>} claimedPerUnit `accrued_per_unit_nanorewards amounts` for each pool at the time of last claim for this user\n   * @property {Address} ownerAddress Owner address of farm nft\n   */\n  public async getFarmingData(provider: ContractProvider) {\n    const result = await provider.get(\"get_farming_data\", []);\n\n    return {\n      status: result.stack.readNumber(),\n      revokeTime: result.stack.readBigNumber(),\n      stakedTokens: result.stack.readBigNumber(),\n      stakeDate: result.stack.readBigNumber(),\n      claimedPerUnit: (() => {\n        const dict = result.stack\n          .readCellOpt()\n          ?.asSlice()\n          .loadDictDirect(\n            Dictionary.Keys.Uint(8),\n            Dictionary.Values.BigUint(150),\n          );\n\n        const claimedPerUnit = new Map<number, bigint>();\n\n        if (dict) {\n          for (const poolIndex of dict.keys()) {\n            const accruedPerUnitNanorewards = dict.get(poolIndex);\n\n            if (accruedPerUnitNanorewards === undefined) {\n              throw new Error(\n                `Failed to parse claimedPerUnit from dict: ${dict}`,\n              );\n            }\n\n            claimedPerUnit.set(Number(poolIndex), accruedPerUnitNanorewards);\n          }\n        }\n\n        return claimedPerUnit;\n      })(),\n      ownerAddress: result.stack.readAddress(),\n    };\n  }\n\n  public async getPoolCount(provider: ContractProvider) {\n    const result = await provider.get(\"get_nft_data\", []);\n\n    const nftItemData = {\n      isInitialized: result.stack.readBoolean(),\n      index: result.stack.readNumber(),\n      minterAddress: result.stack.readAddress(),\n    };\n\n    const { poolCount } = await provider\n      .open(FarmNftMinterV3.create(nftItemData.minterAddress))\n      .getFarmingMinterData();\n\n    return poolCount;\n  }\n}\n"]}