[
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "epochId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "natTurnout",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "lowNatTurnoutThresholdBIPS",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "timestamp",
        "type": "uint256"
      }
    ],
    "name": "LowTurnout",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "epochId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "endTime",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "timestamp",
        "type": "uint256"
      }
    ],
    "name": "PriceEpochInitializedOnFtso",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "epochId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "price",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "rewardedFtso",
        "type": "bool"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "lowIQRRewardPrice",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "highIQRRewardPrice",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "lowElasticBandRewardPrice",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "highElasticBandRewardPrice",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "enum IFtso.PriceFinalizationType",
        "name": "finalizationType",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "timestamp",
        "type": "uint256"
      }
    ],
    "name": "PriceFinalized",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "voter",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "epochId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "price",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "timestamp",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "votePowerNat",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "votePowerAsset",
        "type": "uint256"
      }
    ],
    "name": "PriceRevealed",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_firstEpochStartTs",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_submitPeriodSeconds",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_revealPeriodSeconds",
        "type": "uint256"
      }
    ],
    "name": "activateFtso",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "active",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_maxVotePowerNatThresholdFraction",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_maxVotePowerAssetThresholdFraction",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_lowAssetUSDThreshold",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_highAssetUSDThreshold",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_highAssetTurnoutThresholdBIPS",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_lowNatTurnoutThresholdBIPS",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_elasticBandRewardBIPS",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_elasticBandWidthPPM",
        "type": "uint256"
      },
      {
        "internalType": "address[]",
        "name": "_trustedAddresses",
        "type": "address[]"
      }
    ],
    "name": "configureEpochs",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "deactivateFtso",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "epochsConfiguration",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_maxVotePowerNatThresholdFraction",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_maxVotePowerAssetThresholdFraction",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_lowAssetUSDThreshold",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_highAssetUSDThreshold",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_highAssetTurnoutThresholdBIPS",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_lowNatTurnoutThresholdBIPS",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_elasticBandRewardBIPS",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_elasticBandWidthPPM",
        "type": "uint256"
      },
      {
        "internalType": "address[]",
        "name": "_trustedAddresses",
        "type": "address[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_epochId",
        "type": "uint256"
      }
    ],
    "name": "fallbackFinalizePriceEpoch",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_epochId",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_returnRewardData",
        "type": "bool"
      }
    ],
    "name": "finalizePriceEpoch",
    "outputs": [
      {
        "internalType": "address[]",
        "name": "_eligibleAddresses",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "_natWeights",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256",
        "name": "_totalNatWeight",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_epochId",
        "type": "uint256"
      }
    ],
    "name": "forceFinalizePriceEpoch",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "ftsoManager",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getAsset",
    "outputs": [
      {
        "internalType": "contract IIVPToken",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getAssetFtsos",
    "outputs": [
      {
        "internalType": "contract IIFtso[]",
        "name": "",
        "type": "address[]"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getCurrentEpochId",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getCurrentPrice",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_price",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_timestamp",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getCurrentPriceDetails",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_price",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_priceTimestamp",
        "type": "uint256"
      },
      {
        "internalType": "enum IFtso.PriceFinalizationType",
        "name": "_priceFinalizationType",
        "type": "uint8"
      },
      {
        "internalType": "uint256",
        "name": "_lastPriceEpochFinalizationTimestamp",
        "type": "uint256"
      },
      {
        "internalType": "enum IFtso.PriceFinalizationType",
        "name": "_lastPriceEpochFinalizationType",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getCurrentPriceFromTrustedProviders",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_price",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_timestamp",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getCurrentPriceWithDecimals",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_price",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_timestamp",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_assetPriceUsdDecimals",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getCurrentPriceWithDecimalsFromTrustedProviders",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_price",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_timestamp",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_assetPriceUsdDecimals",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getCurrentRandom",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_timestamp",
        "type": "uint256"
      }
    ],
    "name": "getEpochId",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_epochId",
        "type": "uint256"
      }
    ],
    "name": "getEpochPrice",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_epochId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_voter",
        "type": "address"
      }
    ],
    "name": "getEpochPriceForVoter",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getPriceEpochConfiguration",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_firstEpochStartTs",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_submitPeriodSeconds",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_revealPeriodSeconds",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getPriceEpochData",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "_epochId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_epochSubmitEndTime",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_epochRevealEndTime",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_votePowerBlock",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_fallbackMode",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_epochId",
        "type": "uint256"
      }
    ],
    "name": "getRandom",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getVoteWeightingParameters",
    "outputs": [
      {
        "internalType": "contract IIVPToken[]",
        "name": "_assets",
        "type": "address[]"
      },
      {
        "internalType": "uint256[]",
        "name": "_assetMultipliers",
        "type": "uint256[]"
      },
      {
        "internalType": "uint256",
        "name": "_totalVotePowerNat",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_totalVotePowerAsset",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_assetWeightRatio",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_votePowerBlock",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_circulatingSupplyNat",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_fallbackMode",
        "type": "bool"
      }
    ],
    "name": "initializeCurrentEpochStateForReveal",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_voter",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_epochId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_price",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_wNatVP",
        "type": "uint256"
      }
    ],
    "name": "revealPriceSubmitter",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IIVPToken",
        "name": "_asset",
        "type": "address"
      }
    ],
    "name": "setAsset",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract IIFtso[]",
        "name": "_assetFtsos",
        "type": "address[]"
      }
    ],
    "name": "setAssetFtsos",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_blockNumber",
        "type": "uint256"
      }
    ],
    "name": "setVotePowerBlock",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_initialPriceUSD",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_initialPriceTimestamp",
        "type": "uint256"
      }
    ],
    "name": "updateInitialPrice",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "wNat",
    "outputs": [
      {
        "internalType": "contract IIVPToken",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_voter",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_epochId",
        "type": "uint256"
      }
    ],
    "name": "wNatVotePowerCached",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]
