[
  {
    "inputs": [
      {
        "internalType": "contract INXMMaster",
        "name": "_master",
        "type": "address"
      },
      {
        "internalType": "contract IStakingNFT",
        "name": "_stakingNFT",
        "type": "address"
      },
      {
        "internalType": "contract IStakingPoolFactory",
        "name": "_stakingPoolFactory",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "RevertedWithoutReason",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "MAX_ACTIVE_TRANCHES",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "MAX_UINT",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ONE_NXM",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "TRANCHE_DURATION",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "TRANCHE_ID_AT_DEPLOY",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "tokenIds",
        "type": "uint256[]"
      }
    ],
    "name": "getAggregatedTokens",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "totalActiveStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "totalExpiredStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "totalRewards",
            "type": "uint256"
          }
        ],
        "internalType": "struct IStakingViewer.AggregatedTokens",
        "name": "aggregated",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getAllPools",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "poolId",
            "type": "uint256"
          },
          {
            "internalType": "bool",
            "name": "isPrivatePool",
            "type": "bool"
          },
          {
            "internalType": "address",
            "name": "manager",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "poolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxPoolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "activeStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "currentAPY",
            "type": "uint256"
          },
          {
            "internalType": "string",
            "name": "metadataIpfsHash",
            "type": "string"
          }
        ],
        "internalType": "struct IStakingViewer.Pool[]",
        "name": "pools",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "manager",
        "type": "address"
      }
    ],
    "name": "getManagedStakingPools",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "poolId",
            "type": "uint256"
          },
          {
            "internalType": "bool",
            "name": "isPrivatePool",
            "type": "bool"
          },
          {
            "internalType": "address",
            "name": "manager",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "poolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxPoolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "activeStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "currentAPY",
            "type": "uint256"
          },
          {
            "internalType": "string",
            "name": "metadataIpfsHash",
            "type": "string"
          }
        ],
        "internalType": "struct IStakingViewer.Pool[]",
        "name": "",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "manager",
        "type": "address"
      }
    ],
    "name": "getManagerPoolsAndRewards",
    "outputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "poolId",
                "type": "uint256"
              },
              {
                "internalType": "bool",
                "name": "isPrivatePool",
                "type": "bool"
              },
              {
                "internalType": "address",
                "name": "manager",
                "type": "address"
              },
              {
                "internalType": "uint256",
                "name": "poolFee",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "maxPoolFee",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "activeStake",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "currentAPY",
                "type": "uint256"
              },
              {
                "internalType": "string",
                "name": "metadataIpfsHash",
                "type": "string"
              }
            ],
            "internalType": "struct IStakingViewer.Pool[]",
            "name": "pools",
            "type": "tuple[]"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "tokenId",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "poolId",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "activeStake",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "expiredStake",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "rewards",
                "type": "uint256"
              },
              {
                "components": [
                  {
                    "internalType": "uint256",
                    "name": "tokenId",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "trancheId",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "stake",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "stakeShares",
                    "type": "uint256"
                  },
                  {
                    "internalType": "uint256",
                    "name": "reward",
                    "type": "uint256"
                  }
                ],
                "internalType": "struct IStakingViewer.Deposit[]",
                "name": "deposits",
                "type": "tuple[]"
              }
            ],
            "internalType": "struct IStakingViewer.Token[]",
            "name": "rewards",
            "type": "tuple[]"
          },
          {
            "internalType": "uint256",
            "name": "totalRewards",
            "type": "uint256"
          }
        ],
        "internalType": "struct IStakingViewer.ManagerPoolsAndRewards",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "poolIds",
        "type": "uint256[]"
      }
    ],
    "name": "getManagerRewards",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "tokenId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "poolId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "activeStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "expiredStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "rewards",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "tokenId",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "trancheId",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "stake",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "stakeShares",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "reward",
                "type": "uint256"
              }
            ],
            "internalType": "struct IStakingViewer.Deposit[]",
            "name": "deposits",
            "type": "tuple[]"
          }
        ],
        "internalType": "struct IStakingViewer.Token[]",
        "name": "tokens",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "manager",
        "type": "address"
      }
    ],
    "name": "getManagerTokenRewardsByAddr",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "tokenId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "poolId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "activeStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "expiredStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "rewards",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "tokenId",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "trancheId",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "stake",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "stakeShares",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "reward",
                "type": "uint256"
              }
            ],
            "internalType": "struct IStakingViewer.Deposit[]",
            "name": "deposits",
            "type": "tuple[]"
          }
        ],
        "internalType": "struct IStakingViewer.Token[]",
        "name": "tokens",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "manager",
        "type": "address"
      }
    ],
    "name": "getManagerTotalRewards",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "managerTotalRewards",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolId",
        "type": "uint256"
      }
    ],
    "name": "getPool",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "poolId",
            "type": "uint256"
          },
          {
            "internalType": "bool",
            "name": "isPrivatePool",
            "type": "bool"
          },
          {
            "internalType": "address",
            "name": "manager",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "poolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxPoolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "activeStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "currentAPY",
            "type": "uint256"
          },
          {
            "internalType": "string",
            "name": "metadataIpfsHash",
            "type": "string"
          }
        ],
        "internalType": "struct IStakingViewer.Pool",
        "name": "pool",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolId",
        "type": "uint256"
      }
    ],
    "name": "getPoolProducts",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "productId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "lastEffectiveWeight",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "targetWeight",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "targetPrice",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "bumpedPrice",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "bumpedPriceUpdateTime",
            "type": "uint256"
          }
        ],
        "internalType": "struct IStakingViewer.StakingProduct[]",
        "name": "products",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "poolIds",
        "type": "uint256[]"
      }
    ],
    "name": "getPools",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "poolId",
            "type": "uint256"
          },
          {
            "internalType": "bool",
            "name": "isPrivatePool",
            "type": "bool"
          },
          {
            "internalType": "address",
            "name": "manager",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "poolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxPoolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "activeStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "currentAPY",
            "type": "uint256"
          },
          {
            "internalType": "string",
            "name": "metadataIpfsHash",
            "type": "string"
          }
        ],
        "internalType": "struct IStakingViewer.Pool[]",
        "name": "pools",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "productId",
        "type": "uint256"
      }
    ],
    "name": "getProductPools",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "poolId",
            "type": "uint256"
          },
          {
            "internalType": "bool",
            "name": "isPrivatePool",
            "type": "bool"
          },
          {
            "internalType": "address",
            "name": "manager",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "poolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "maxPoolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "activeStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "currentAPY",
            "type": "uint256"
          },
          {
            "internalType": "string",
            "name": "metadataIpfsHash",
            "type": "string"
          }
        ],
        "internalType": "struct IStakingViewer.Pool[]",
        "name": "pools",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "tokenIds",
        "type": "uint256[]"
      }
    ],
    "name": "getStakingPoolsOf",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "poolId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "tokenId",
            "type": "uint256"
          }
        ],
        "internalType": "struct IStakingViewer.TokenPoolMap[]",
        "name": "tokenPools",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getToken",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "tokenId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "poolId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "activeStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "expiredStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "rewards",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "tokenId",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "trancheId",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "stake",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "stakeShares",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "reward",
                "type": "uint256"
              }
            ],
            "internalType": "struct IStakingViewer.Deposit[]",
            "name": "deposits",
            "type": "tuple[]"
          }
        ],
        "internalType": "struct IStakingViewer.Token",
        "name": "token",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "tokenIds",
        "type": "uint256[]"
      }
    ],
    "name": "getTokens",
    "outputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "tokenId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "poolId",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "activeStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "expiredStake",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "rewards",
            "type": "uint256"
          },
          {
            "components": [
              {
                "internalType": "uint256",
                "name": "tokenId",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "trancheId",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "stake",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "stakeShares",
                "type": "uint256"
              },
              {
                "internalType": "uint256",
                "name": "reward",
                "type": "uint256"
              }
            ],
            "internalType": "struct IStakingViewer.Deposit[]",
            "name": "deposits",
            "type": "tuple[]"
          }
        ],
        "internalType": "struct IStakingViewer.Token[]",
        "name": "tokens",
        "type": "tuple[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "master",
    "outputs": [
      {
        "internalType": "contract INXMMaster",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes[]",
        "name": "data",
        "type": "bytes[]"
      }
    ],
    "name": "multicall",
    "outputs": [
      {
        "internalType": "bytes[]",
        "name": "results",
        "type": "bytes[]"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "poolIds",
        "type": "uint256[]"
      }
    ],
    "name": "processExpirations",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256[]",
        "name": "tokenIds",
        "type": "uint256[]"
      }
    ],
    "name": "processExpirationsFor",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "stakingNFT",
    "outputs": [
      {
        "internalType": "contract IStakingNFT",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "poolId",
        "type": "uint256"
      }
    ],
    "name": "stakingPool",
    "outputs": [
      {
        "internalType": "contract IStakingPool",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "stakingPoolFactory",
    "outputs": [
      {
        "internalType": "contract IStakingPoolFactory",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  }
]