Contract 0xa84ab22571ed9578f47b24ecf94ee75bf037d955

Contract Overview

Balance:
0 BNB
Txn Hash
Block
From
To
Value [Txn Fee]
0xb1164ddca9292c456dcc3e9d61ae1d72a620d311e4bc7c1728a2247f9e68893d111231792021-08-02 8:17:244 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00066564
0x3723dc7c7cb251d6cf60a49c9091a6c054c5fc7b430be704d01c8790bce83490111229762021-08-02 8:07:1515 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00051839
0xf2f69ad3c8d2bc98c220c0c68b831ef574f966e0f2d5ee44a8345c22897e9493111228732021-08-02 8:02:0620 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00063743
0x764decdda438e26f0844a5d3d84e40d6edbfbddf565379b8056d9f4e64c576b7111227712021-08-02 7:57:0025 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00042266
0x97acca92f9c534496d53ab0b54c0d2b9c48994a0ab0c483ff5898661d8ff49d3111225702021-08-02 7:46:5735 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00066564
0xe7dd4320aa607bfc1e37f8315b8ea5f1d17330559f9d02444080c74c9c6792a3111223682021-08-02 7:36:5145 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00051839
0x2924853b684aa6e1c58498cd4d3108d817797a311bab27203e3c1f59ad09484e111222662021-08-02 7:31:4550 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00063743
0xfeec031f285b0ec08523cd7ba1f0aec683410966d924c83b9a8e1e873be5b671111221642021-08-02 7:26:3955 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00042266
0x48351dc26c944eb3cd3a6c19ac4c0af93ccac6186515234152903852ba904c67111219612021-08-02 7:16:301 hr 5 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00066564
0xd718b0530d33702e08f41b0efedddab7ceef6d56255035e63797267ce7ab041a111217592021-08-02 7:06:241 hr 15 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00051839
0x85ad97da956e1fdbbf3c8d4929d7fe7caec1b452d921e31a996c03f68564fec8111216572021-08-02 7:01:181 hr 20 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00063743
0x9874b20308226e1f7d237293618e24c31cacf15e90ef3662fcd998c7cdc87a20111215552021-08-02 6:56:121 hr 26 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00042266
0x9c8a05b4af07dd74ea62505367fc983f32554397b8c6cb80515a483f6b581768111213522021-08-02 6:46:031 hr 36 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00066564
0xb6eecdeef2afb37d0944506d69c458d0b6d5550126f08711048f184b908f61b1111211502021-08-02 6:35:571 hr 46 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00051839
0xeac9346fafb792367357e18f2815510d79cc3c001add4406fbcaffaa20ec3661111210482021-08-02 6:30:511 hr 51 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00063743
0x43945e2315971d5a0552d0078c220bae8aa53689af6f0c7d8432a5c878a94111111209462021-08-02 6:25:451 hr 56 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00042266
0x86246c06f436dc47688c46ecd6e944986ecc751e02466f27d36cb86457079e49111207432021-08-02 6:15:362 hrs 6 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00066564
0x859c197482687c7dc25cc531ea345852c1cbc676b45e490638bb948187332e2a111205402021-08-02 6:05:272 hrs 16 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00051839
0x8a9847d70f279ec3c4e4433b4e1ea5591c3aad1298ff933fb0ac8b532ba26771111204382021-08-02 6:00:212 hrs 21 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00063743
0x234868a81117ef7d69449e040f42020eb57456e20b71400396675720971feddd111203372021-08-02 5:55:182 hrs 26 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00042266
0x5d05e70e1c62c98d5922b71218a586cd6a5c6a1e7c236a8d8dde60e775613c46111201342021-08-02 5:45:092 hrs 37 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00066564
0xf2eea010bb93928ba50a5308a748a6cd4bd29bbf0f52b88c730d32a58db06264111199322021-08-02 5:35:032 hrs 47 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00051839
0xcef3447126d27e47166b38bee698028dcff5ca7fe7d860be9b12c1c98fef20b9111198302021-08-02 5:29:572 hrs 52 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00063743
0x068eb21a9d876793d9234a1cc683f05dacc2d7c1d530be8309c1aec87f867600111197282021-08-02 5:24:512 hrs 57 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00042266
0x6df937dbd92e828cef2dbc5167c0b69a8cc3617a7eb12240cebe2fbb20987067111195252021-08-02 5:14:423 hrs 7 mins ago0xc7971a291852e038e3b9021af3a8a0fcb9b86084 IN  0xa84ab22571ed9578f47b24ecf94ee75bf037d9550 BNB0.00066564
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xb1164ddca9292c456dcc3e9d61ae1d72a620d311e4bc7c1728a2247f9e68893d111231792021-08-02 8:17:244 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x3723dc7c7cb251d6cf60a49c9091a6c054c5fc7b430be704d01c8790bce83490111229762021-08-02 8:07:1515 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xf2f69ad3c8d2bc98c220c0c68b831ef574f966e0f2d5ee44a8345c22897e9493111228732021-08-02 8:02:0620 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x97acca92f9c534496d53ab0b54c0d2b9c48994a0ab0c483ff5898661d8ff49d3111225702021-08-02 7:46:5735 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xe7dd4320aa607bfc1e37f8315b8ea5f1d17330559f9d02444080c74c9c6792a3111223682021-08-02 7:36:5145 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x2924853b684aa6e1c58498cd4d3108d817797a311bab27203e3c1f59ad09484e111222662021-08-02 7:31:4550 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x48351dc26c944eb3cd3a6c19ac4c0af93ccac6186515234152903852ba904c67111219612021-08-02 7:16:301 hr 5 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xd718b0530d33702e08f41b0efedddab7ceef6d56255035e63797267ce7ab041a111217592021-08-02 7:06:241 hr 15 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x85ad97da956e1fdbbf3c8d4929d7fe7caec1b452d921e31a996c03f68564fec8111216572021-08-02 7:01:181 hr 20 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x9c8a05b4af07dd74ea62505367fc983f32554397b8c6cb80515a483f6b581768111213522021-08-02 6:46:031 hr 36 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xb6eecdeef2afb37d0944506d69c458d0b6d5550126f08711048f184b908f61b1111211502021-08-02 6:35:571 hr 46 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xeac9346fafb792367357e18f2815510d79cc3c001add4406fbcaffaa20ec3661111210482021-08-02 6:30:511 hr 51 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x86246c06f436dc47688c46ecd6e944986ecc751e02466f27d36cb86457079e49111207432021-08-02 6:15:362 hrs 6 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x859c197482687c7dc25cc531ea345852c1cbc676b45e490638bb948187332e2a111205402021-08-02 6:05:272 hrs 16 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x8a9847d70f279ec3c4e4433b4e1ea5591c3aad1298ff933fb0ac8b532ba26771111204382021-08-02 6:00:212 hrs 21 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x5d05e70e1c62c98d5922b71218a586cd6a5c6a1e7c236a8d8dde60e775613c46111201342021-08-02 5:45:092 hrs 37 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xf2eea010bb93928ba50a5308a748a6cd4bd29bbf0f52b88c730d32a58db06264111199322021-08-02 5:35:032 hrs 47 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xcef3447126d27e47166b38bee698028dcff5ca7fe7d860be9b12c1c98fef20b9111198302021-08-02 5:29:572 hrs 52 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x6df937dbd92e828cef2dbc5167c0b69a8cc3617a7eb12240cebe2fbb20987067111195252021-08-02 5:14:423 hrs 7 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xeec2141f4281889c17c525e732531b921da44bd9112fb3ca91c49d9eb6ba48db111193232021-08-02 5:04:363 hrs 17 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xfd6d66e84290bc0600f0c4ed0897d60c3866b3c3e4abbcfea0508ae93cf567f1111192212021-08-02 4:59:303 hrs 22 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xe3828ec1ae91883901e0cb02743d6a452011658567d1da3459891e6c32ef8d34111189162021-08-02 4:44:153 hrs 38 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x069fa97b053a45de3cf18bf6957aa642d3767376f7ea760f44a1c0040f1064e8111187142021-08-02 4:34:093 hrs 48 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0x9999e9d2729039245a94f9bfd05d001bf4ed19ba987d7f4479b9e59f89be1856111186122021-08-02 4:29:033 hrs 53 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
0xab0c934b99a8e269173141d3305839d140044972a36a99e7f0f7645b0ab78f34111183072021-08-02 4:13:484 hrs 8 mins ago 0xa84ab22571ed9578f47b24ecf94ee75bf037d955 0x5226c0d351541cc28798c3626d3dfcd6e78a81530 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RIS3Gov

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 7 : RIS3Gov.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.4;

import "./interfaces/IRIS3Store.sol";
import "./utils/Ownable.sol";
import "./utils/Presenter.sol";
import "./utils/Maintainable.sol";
import "./interfaces/IERC20.sol";

// BE is presenter of gov
contract RIS3Gov is Presenter, Maintainable {
  IRIS3Store public store;
  //---
  // - Case: staking day
  //+ Only allow: start staking by admin -> reset cycle info -> allow stake/unstake for citizen
  //- Case: production days
  //+ Only allow: start production by admin -> mint reward by time, calculate and collect reward
  //- Case: voting day
  //+ Only allow: start votingP1 (50% time) by admin -> collect reward, vote for next gov; start votingP2 (the rest 50% time) by admin -> Display result or in case dictator set law
  //---
  ///@dev Cycle config
  uint256 public stageDurationStaking = 10 minutes;
  uint256 public stageDurationProduction = 10 minutes;
  uint256 public stageDurationVoting1 = 5 minutes;
  uint256 public stageDurationVoting2 = 5 minutes;

  ///@dev Cycle state
  uint256 public stageIndex = 3; // 0: staking, 1: production, 2: voting1, 3: voting2
  uint256 public stageStartTime = 0; // Save start time of current stage
  uint256 public stageEndTime = 0; // Save end time of current stage

  event Restore(address oldGov, address newGov);

  /**
   * @dev get pending reward of user
   *
   * Requirements
   *
   * - `_type` type of stake, 0 is for farm, 1 for factory, 2 for citizen
   *
   * Access
   *
   * - User
   */
  function getPendingReward(address _user, uint _type) public view returns (uint256, uint256){
    if(store.getAlreadyCollectedReward(_user, _type, stageStartTime, stageEndTime)) {
      return (0, 0);
    }

    return store.getPendingReward(_user, _type);
  }

  /**
   * @dev restore a goverment to new government
   *
   * Emits a Restore event
   * Requirements
   *
   * - `_gov` old gov address
   *
   * Access
   *
   * - ADMIN
   */
  function restore(address _gov) external onlyOwner {
    ifMaintenance();
    RIS3Gov oldGov = RIS3Gov(_gov);
    stageDurationStaking = oldGov.stageDurationStaking();
    stageDurationProduction = oldGov.stageDurationProduction();
    stageDurationVoting1 = oldGov.stageDurationVoting1();
    stageDurationVoting2 = oldGov.stageDurationVoting2();

    stageIndex = oldGov.stageIndex();
    stageStartTime = oldGov.stageStartTime();
    stageEndTime = oldGov.stageEndTime();
    
    emit Restore((_gov), address(this));
  }

  /**
   * @dev set store token address
   *
   * Requirements
   *
   * - `_store` address of store.
   *
   * Access
   *
   * - Owner
   */
  function setStore(address _store) external onlyOwner {
    store = IRIS3Store(_store);
  }

  /**
   * @dev set ris3Token and lp token address
   *
   * Requirements
   *
   * - `_ris3Token` address of store.
   * - `_ris3BNBLP` address of lp token.
   *
   * Access
   *
   * - Owner
   */
  function setTokens(address _ris3Token, address _ris3BNBLP) external onlyOwner {
    store.setTokens(_ris3Token, _ris3BNBLP);
  }

  /**
   * @dev user can stake tokens by sending `_amount` and `type`
   *
   *
   * Requirements
   *
   * - `_amount` amount of tokens.
   * - `_type` type of stake, 0 is for farm, 1 for factory, 2 for citizen
   *
   * Access
   *
   * - User
   */
  function deposit(uint256 _amount, uint _type) external {
    ifNotMaintenance();
    require(_amount > 0, "Cannot stake 0");
    require(_isStageLive(0), "No staking");

    store.deposit(_amount, _type, msg.sender);
  }

  /**
   * @dev user can unstake tokens by sending `_amount` and only citizen can withdraw staking on during staking time
   *
   * Requirements
   *
   * - `_amount` amount of tokens.
   *
   * Access
   *
   * - User
   */
  function withdraw(uint256 _amount) external {
    ifNotMaintenance();
    require(_amount > 0, "> Zero");
    require(_isStageLive(0), "no staking");

    store.withdraw(_amount, msg.sender);
  } // citizen withdraw

  /**
   * @dev to start the staking
   * Access
   *
   * - Admin
   */
  function startStaking() external onlyAdmin {

    bool isIntialValue = stageIndex == 0 && stageStartTime == 0 && stageEndTime == 0;
    require(isIntialValue || _isStageFinished(3), "can't set staking");

    // reset cycle
    stageIndex = 0;
    stageStartTime = block.timestamp;
    stageEndTime = stageStartTime + stageDurationStaking;
    store.resetCycle();
  }

  ///@notice STAGE 2: PRODUCTION TIME
  /**
   * @dev to start production time
   *
   * Access
   *
   * - ADMIN
   */
  function startProduction() external onlyAdmin {
    ifNotMaintenance();
    require(_isStageFinished(0), "cant set production");

    stageIndex = 1;
    stageStartTime = block.timestamp;
    stageEndTime = stageStartTime + stageDurationProduction;

    //add factory and farm tokens
    store.setRewards();
  }

  /**
   * @dev user want to withdraw the rewards
   *
   * Requirements
   *
   * - `_type` type of stake, 0 is for farm, 1 for factory, 2 for citizen
   *
   * Access
   *
   * - User
   */
  function collectReward(uint _type) public {
    ifNotMaintenance();
    require(_isStageLive(1), "No production");
    require(store.getAlreadyCollectedReward(msg.sender, _type, stageStartTime, stageEndTime) == false, "already claimed");
    //claim Rewards from store
    store.claimRewards(msg.sender, _type);
  }

  /**
   * @dev STAGE 3: USER VOTING TIME
   *
   * Requirements
   *
   * Access
   *
   * - ADMIN
   */
  function startVoting1() external onlyAdmin {
    ifNotMaintenance();

    require(_isStageFinished(1), "can't set voting 1");

    stageIndex = 2;
    stageStartTime = block.timestamp;
    stageEndTime = stageStartTime + stageDurationVoting1;
  }

  /**
   * @dev user will cast the votes
   *
   * Requirements
   * - `_governmentIndex` type of government
   * - `_taxRates` tax rates law
   * - `_prodRates` prod rates law
   * - `_taxPoolUses` tax pool uses law
   * - `_dictatorAddress` dictatorAddresses in case dictatorship
   * Access
   *
   * - User
   */
  function castVote(uint256 _governmentIndex, uint256 _taxRates, uint256 _prodRates, uint256 _taxPoolUses, address _dictatorAddress) public {
    ifNotMaintenance();
    require(_isStageLive(2), "No voting 1");

    // 0 is for Socialism, 1 is for Democracy and 2 is for Dictatorship
    require(_governmentIndex < 3, "Wrong government type");
    require(_taxRates < 3, "Wrong tax rates");
    require(_prodRates < 3, "Wrong prod rates");
    require(_taxPoolUses < 3, "Wrong tax pool uses");

    store.saveUserVote(_governmentIndex, _taxRates, _prodRates, _taxPoolUses, _dictatorAddress, msg.sender);
  }

  /**
   * @dev this function will be call to finish the election and calculate voting result
   *
   * Access
   *
   * - ADMIN
   */
  function startVoting2() external onlyAdmin {
    ifNotMaintenance();
    require(_isStageFinished(2), "can't set voting 2");

    stageIndex = 3;
    stageStartTime = block.timestamp;
    stageEndTime = stageStartTime + stageDurationVoting2;

    store.saveElection();
  }

  /**
   * @dev set laws by dictator
   *
   * Requirements
   *
   * - `_taxRates` tax rates
   * - `_prodRates` prod rates
   * - `_taxPoolUses` tax pool uses
   *
   * Access
   *
   * - User
   */
  function dictatorVote(uint256 _taxRates, uint256 _prodRates, uint256 _taxPoolUses) public {
    require(_isStageLive(3), "only allow in voting 2");
    store.saveDictatorVote(_taxRates, _prodRates, _taxPoolUses, msg.sender);
  }

  /**
   * @dev set cycle durations
   *
   * Requirements
   *
   * - `_stageDurationStaking` set staking duration
   * - `_stageDurationProduction` set Production duration
   * - `_stageDurationVoting1` set VOTING 1 duration
   * - `_stageDurationVoting2` set VOTING 2 duration
   *
   * Access
   *
   * - ADMIN
   */
  function setStageDuration(uint256 _stageDurationStaking,
    uint256 _stageDurationProduction,
    uint256 _stageDurationVoting1,
    uint256 _stageDurationVoting2) external onlyAdmin {
    stageDurationStaking = _stageDurationStaking;
    stageDurationProduction = _stageDurationProduction;
    stageDurationVoting1 = _stageDurationVoting1;
    stageDurationVoting2 = _stageDurationVoting2;
  }

  /**
  * @dev check if stage is live
  *
  * Requirements
  *
  * - `_stage` current stage
  *
  * Access
  *
  * - INTERNAL
  */
  function _isStageLive(uint256 _stage) internal view returns (bool){
    return stageIndex == _stage && block.timestamp >= stageStartTime && block.timestamp <= stageEndTime;
  }

  /**
  * @dev check if stage is finished
  *
  * Requirements
  *
  * - `_stage` current stage
  *
  * Access
  *
  * - INTERNAL
  */
  function _isStageFinished(uint256 _stage) internal view returns (bool){
    return stageIndex == _stage && block.timestamp > stageEndTime;
  }
}

File 2 of 7 : IERC20.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.4;

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);


  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);

  // Calculate fee
  function calculateAmountsAfterFee(
    address sender,
    uint256 amount
  ) external view returns (uint256 transferToAmount, uint256 transferToFeeDistributorAmount);

  // Mint by only owner
  function mint(uint256 amount) external;

  // Burn
  function burn(uint256 amount) external;
}

File 3 of 7 : IRIS3Store.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.4;

interface IRIS3Store {
  function getRis3Address() external view returns (address);

  function getTotalTaxCollected() external view returns (uint256);

  function getAlreadyCollectedReward(address _user, uint _type, uint256 _startTime, uint256 _endTime) external view returns (bool);

  function getPendingReward(address _user, uint _type) external view returns(uint256, uint256);

  function addTax(uint256 _tax) external;

  function resetRewards() external;

  function setRewards() external;

  function claimRewards(address _user, uint _type) external;

  function setTokens(address _ris3, address _ris3BNBLP) external;

  function resetCycle() external;

  function deposit(uint256 _amount, uint _type, address sender) external;

  function withdraw(uint256 _amount, address _sender) external;

  function saveUserVote(uint256 _governmentIndex, uint256 _taxRates, uint256 _prodRates, uint256 _taxPoolUses, address _dictatorAddress, address _user) external;

  function saveElection() external;

  function saveDictatorVote(uint256 _taxRates, uint256 _prodRates, uint256 _taxPoolUses, address _user) external;

}

File 4 of 7 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.4;

abstract contract Context {
  function _msgSender() internal view virtual returns (address payable) {
    return payable(msg.sender);
  }

  function _msgData() internal view virtual returns (bytes memory) {
    this;
    // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
    return msg.data;
  }
}

File 5 of 7 : Maintainable.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.4;

import "./Ownable.sol";

contract Maintainable is Ownable {

  bool public isMaintenance;
  bool public isOutdated;

  // Check if contract is not in maintenance
  function ifNotMaintenance() internal view {
    require(!isMaintenance, "Maintenance");
    require(!isOutdated, "Outdated");
  }

  // Check if contract on maintenance for restore
  function ifMaintenance() internal view {
    require(isMaintenance, "!Maintenance");
  }

  // Enable maintenance
  function enableMaintenance(bool status) onlyOwner public {
    isMaintenance = status;
  }

  // Enable outdated
  function enableOutdated(bool status) onlyOwner public {
    isOutdated = status;
  }

}

File 6 of 7 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.4;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
  address private _owner;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor () {
    address msgSender = _msgSender();
    _owner = msgSender;
    emit OwnershipTransferred(address(0), msgSender);
  }

  /**
   * @dev Returns the address of the current owner.
   */
  function owner() public view returns (address) {
    return _owner;
  }

  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(_owner == _msgSender(), "Ownable: caller is not the owner");
    _;
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   * Can only be called by the current owner.
   */
  function transferOwnership(address newOwner) public virtual onlyOwner {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    _owner = newOwner;
  }
}

File 7 of 7 : Presenter.sol
// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.4;

import "./Context.sol";
import "./Ownable.sol";

contract Presenter is Ownable {

  address public presenter;

  function setPresenter(address _presenter) onlyOwner public {
    presenter = _presenter;
  }

  function isPresenter() public view returns (bool) {
    return presenter == _msgSender();
  }

  modifier onlyAdmin() {
    require(owner() == _msgSender() || isPresenter(), "Caller is not the admin");
    _;
  }
}

Settings
{
  "remappings": [],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "istanbul",
  "libraries": {},
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGov","type":"address"},{"indexed":false,"internalType":"address","name":"newGov","type":"address"}],"name":"Restore","type":"event"},{"inputs":[{"internalType":"uint256","name":"_governmentIndex","type":"uint256"},{"internalType":"uint256","name":"_taxRates","type":"uint256"},{"internalType":"uint256","name":"_prodRates","type":"uint256"},{"internalType":"uint256","name":"_taxPoolUses","type":"uint256"},{"internalType":"address","name":"_dictatorAddress","type":"address"}],"name":"castVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"collectReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxRates","type":"uint256"},{"internalType":"uint256","name":"_prodRates","type":"uint256"},{"internalType":"uint256","name":"_taxPoolUses","type":"uint256"}],"name":"dictatorVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"enableMaintenance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"enableOutdated","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"getPendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMaintenance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOutdated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresenter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presenter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_gov","type":"address"}],"name":"restore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presenter","type":"address"}],"name":"setPresenter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stageDurationStaking","type":"uint256"},{"internalType":"uint256","name":"_stageDurationProduction","type":"uint256"},{"internalType":"uint256","name":"_stageDurationVoting1","type":"uint256"},{"internalType":"uint256","name":"_stageDurationVoting2","type":"uint256"}],"name":"setStageDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_store","type":"address"}],"name":"setStore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ris3Token","type":"address"},{"internalType":"address","name":"_ris3BNBLP","type":"address"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stageDurationProduction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stageDurationStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stageDurationVoting1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stageDurationVoting2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stageEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stageIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stageStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startProduction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startVoting1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startVoting2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"store","outputs":[{"internalType":"contract IRIS3Store","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261025860035561025860045561012c60055561012c60065560036007556000600855600060095534801561003757600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061197c806100886000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c8063923947ce1161010f578063caeafe6a116100a2578063e2bbb15811610071578063e2bbb158146103cc578063eacfaa19146103df578063eed9184b146103f2578063f2fde38b1461040557600080fd5b8063caeafe6a1461039e578063cbc7854e146103a7578063cff4515c146103ba578063dc97e366146103c357600080fd5b8063999ffd97116100de578063999ffd971461033d578063ad55211414610365578063bc46619014610378578063bd3507da1461038b57600080fd5b8063923947ce146102f9578063973d8cff1461030d578063975057e714610321578063993c9e621461033457600080fd5b80633d17ff4f1161018757806374d3bae51161015657806374d3bae5146102b35780637ce60496146102d75780638419042c146102df5780638da5cb5b146102e857600080fd5b80633d17ff4f1461027d5780634f168c831461029057806357c1fec6146102a357806371b0cbfa146102ab57600080fd5b806318fc882a116101c357806318fc882a1461022e5780632c17e9aa146102595780632e1a7d4d1461026257806333d886101461027557600080fd5b8063080d2c75146101ea578063087cbd40146101ff578063178f285a14610212575b600080fd5b6101fd6101f83660046116d9565b610418565b005b6101fd61020d3660046116d9565b6107db565b61021b60055481565b6040519081526020015b60405180910390f35b600154610241906001600160a01b031681565b6040516001600160a01b039091168152602001610225565b61021b60065481565b6101fd61027036600461178d565b610827565b6101fd610911565b6101fd61028b366004611801565b610a22565b6101fd61029e366004611755565b610ae8565b6101fd610b30565b6101fd610c28565b6001546102c790600160a81b900460ff1681565b6040519015158152602001610225565b6101fd610d3f565b61021b60095481565b6000546001600160a01b0316610241565b6001546102c790600160a01b900460ff1681565b6102c76001546001600160a01b0316331490565b600254610241906001600160a01b031681565b61021b60045481565b61035061034b36600461172c565b610df2565b60408051928352602083019190915201610225565b6101fd61037336600461182c565b610f2e565b6101fd61038636600461185d565b610f86565b6101fd61039936600461178d565b61116d565b61021b60085481565b6101fd6103b53660046116fa565b6112c6565b61021b60035481565b61021b60075481565b6101fd6103da3660046117bd565b61135c565b6101fd6103ed3660046116d9565b611426565b6101fd610400366004611755565b611472565b6101fd6104133660046116d9565b6114ba565b6000546001600160a01b0316331461044b5760405162461bcd60e51b8152600401610442906118a5565b60405180910390fd5b6104536115a4565b6000819050806001600160a01b031663cff4515c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561049157600080fd5b505afa1580156104a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c991906117a5565b600381905550806001600160a01b031663993c9e626040518163ffffffff1660e01b815260040160206040518083038186803b15801561050857600080fd5b505afa15801561051c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054091906117a5565b600481905550806001600160a01b031663178f285a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561057f57600080fd5b505afa158015610593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b791906117a5565b600581905550806001600160a01b0316632c17e9aa6040518163ffffffff1660e01b815260040160206040518083038186803b1580156105f657600080fd5b505afa15801561060a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062e91906117a5565b600681905550806001600160a01b031663dc97e3666040518163ffffffff1660e01b815260040160206040518083038186803b15801561066d57600080fd5b505afa158015610681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a591906117a5565b600781905550806001600160a01b031663caeafe6a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106e457600080fd5b505afa1580156106f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071c91906117a5565b600881905550806001600160a01b0316638419042c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561075b57600080fd5b505afa15801561076f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079391906117a5565b600955604080516001600160a01b03841681523060208201527fb95ec3f41d24efb986cb4cd84a41a925e70418150f3f23ff889a3899278138e2910160405180910390a15050565b6000546001600160a01b031633146108055760405162461bcd60e51b8152600401610442906118a5565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b61082f6115ee565b600081116108685760405162461bcd60e51b81526020600482015260066024820152653e205a65726f60d01b6044820152606401610442565b610872600061167b565b6108ab5760405162461bcd60e51b815260206004820152600a6024820152696e6f207374616b696e6760b01b6044820152606401610442565b600254604051627b8a6760e11b8152600481018390523360248201526001600160a01b039091169062f714ce906044015b600060405180830381600087803b1580156108f657600080fd5b505af115801561090a573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633148061093957506109396001546001600160a01b0316331490565b6109555760405162461bcd60e51b8152600401610442906118da565b61095d6115ee565b61096760026116a4565b6109a85760405162461bcd60e51b815260206004820152601260248201527131b0b713ba1039b2ba103b37ba34b733901960711b6044820152606401610442565b60036007554260088190556006546109bf91611911565b600955600254604080516348ed287b60e01b815290516001600160a01b03909216916348ed287b9160048082019260009290919082900301818387803b158015610a0857600080fd5b505af1158015610a1c573d6000803e3d6000fd5b50505050565b610a2c600361167b565b610a715760405162461bcd60e51b815260206004820152601660248201527537b7363c9030b63637bb9034b7103b37ba34b733901960511b6044820152606401610442565b600254604051630977d04560e31b81526004810185905260248101849052604481018390523360648201526001600160a01b0390911690634bbe822890608401600060405180830381600087803b158015610acb57600080fd5b505af1158015610adf573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b03163314610b125760405162461bcd60e51b8152600401610442906118a5565b60018054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b0316331480610b585750610b586001546001600160a01b0316331490565b610b745760405162461bcd60e51b8152600401610442906118da565b610b7c6115ee565b610b8660006116a4565b610bc85760405162461bcd60e51b815260206004820152601360248201527231b0b73a1039b2ba10383937b23ab1ba34b7b760691b6044820152606401610442565b6001600755426008819055600454610bdf91611911565b600955600254604080516368ab8f9760e01b815290516001600160a01b03909216916368ab8f979160048082019260009290919082900301818387803b158015610a0857600080fd5b6000546001600160a01b0316331480610c505750610c506001546001600160a01b0316331490565b610c6c5760405162461bcd60e51b8152600401610442906118da565b60006007546000148015610c805750600854155b8015610c8c5750600954155b90508080610c9f5750610c9f60036116a4565b610cdf5760405162461bcd60e51b815260206004820152601160248201527063616e277420736574207374616b696e6760781b6044820152606401610442565b6000600755426008819055600354610cf691611911565b60095560025460408051639271c20360e01b815290516001600160a01b0390921691639271c2039160048082019260009290919082900301818387803b1580156108f657600080fd5b6000546001600160a01b0316331480610d675750610d676001546001600160a01b0316331490565b610d835760405162461bcd60e51b8152600401610442906118da565b610d8b6115ee565b610d9560016116a4565b610dd65760405162461bcd60e51b815260206004820152601260248201527163616e27742073657420766f74696e67203160701b6044820152606401610442565b6002600755426008819055600554610ded91611911565b600955565b600254600854600954604051639d1046c960e01b81526001600160a01b038681166004830152602482018690526044820193909352606481019190915260009283921690639d1046c99060840160206040518083038186803b158015610e5757600080fd5b505afa158015610e6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8f9190611771565b15610e9f57506000905080610f27565b60025460405163999ffd9760e01b81526001600160a01b038681166004830152602482018690529091169063999ffd9790604401604080518083038186803b158015610eea57600080fd5b505afa158015610efe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2291906117de565b915091505b9250929050565b6000546001600160a01b0316331480610f565750610f566001546001600160a01b0316331490565b610f725760405162461bcd60e51b8152600401610442906118da565b600393909355600491909155600555600655565b610f8e6115ee565b610f98600261167b565b610fd25760405162461bcd60e51b815260206004820152600b60248201526a4e6f20766f74696e67203160a81b6044820152606401610442565b6003851061101a5760405162461bcd60e51b815260206004820152601560248201527457726f6e6720676f7665726e6d656e74207479706560581b6044820152606401610442565b6003841061105c5760405162461bcd60e51b815260206004820152600f60248201526e57726f6e672074617820726174657360881b6044820152606401610442565b6003831061109f5760405162461bcd60e51b815260206004820152601060248201526f57726f6e672070726f6420726174657360801b6044820152606401610442565b600382106110e55760405162461bcd60e51b815260206004820152601360248201527257726f6e672074617820706f6f6c207573657360681b6044820152606401610442565b600254604051632f02536d60e11b8152600481018790526024810186905260448101859052606481018490526001600160a01b0383811660848301523360a483015290911690635e04a6da9060c401600060405180830381600087803b15801561114e57600080fd5b505af1158015611162573d6000803e3d6000fd5b505050505050505050565b6111756115ee565b61117f600161167b565b6111bb5760405162461bcd60e51b815260206004820152600d60248201526c273790383937b23ab1ba34b7b760991b6044820152606401610442565b600254600854600954604051639d1046c960e01b815233600482015260248101859052604481019290925260648201526001600160a01b0390911690639d1046c99060840160206040518083038186803b15801561121857600080fd5b505afa15801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190611771565b1561128f5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818db185a5b5959608a1b6044820152606401610442565b6002546040516309a99b4f60e41b8152336004820152602481018390526001600160a01b0390911690639a99b4f0906044016108dc565b6000546001600160a01b031633146112f05760405162461bcd60e51b8152600401610442906118a5565b6002546040516365e3c2a760e11b81526001600160a01b03848116600483015283811660248301529091169063cbc7854e906044015b600060405180830381600087803b15801561134057600080fd5b505af1158015611354573d6000803e3d6000fd5b505050505050565b6113646115ee565b600082116113a55760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b6044820152606401610442565b6113af600061167b565b6113e85760405162461bcd60e51b815260206004820152600a6024820152694e6f207374616b696e6760b01b6044820152606401610442565b600254604051638dbdbe6d60e01b815260048101849052602481018390523360448201526001600160a01b0390911690638dbdbe6d90606401611326565b6000546001600160a01b031633146114505760405162461bcd60e51b8152600401610442906118a5565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461149c5760405162461bcd60e51b8152600401610442906118a5565b60018054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b031633146114e45760405162461bcd60e51b8152600401610442906118a5565b6001600160a01b0381166115495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610442565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600154600160a01b900460ff166115ec5760405162461bcd60e51b815260206004820152600c60248201526b214d61696e74656e616e636560a01b6044820152606401610442565b565b600154600160a01b900460ff16156116365760405162461bcd60e51b815260206004820152600b60248201526a4d61696e74656e616e636560a81b6044820152606401610442565b600154600160a81b900460ff16156115ec5760405162461bcd60e51b815260206004820152600860248201526713dd5d19185d195960c21b6044820152606401610442565b60008160075414801561169057506008544210155b801561169e57506009544211155b92915050565b60008160075414801561169e5750600954421192915050565b80356001600160a01b03811681146116d457600080fd5b919050565b6000602082840312156116ea578081fd5b6116f3826116bd565b9392505050565b6000806040838503121561170c578081fd5b611715836116bd565b9150611723602084016116bd565b90509250929050565b6000806040838503121561173e578182fd5b611747836116bd565b946020939093013593505050565b600060208284031215611766578081fd5b81356116f381611935565b600060208284031215611782578081fd5b81516116f381611935565b60006020828403121561179e578081fd5b5035919050565b6000602082840312156117b6578081fd5b5051919050565b600080604083850312156117cf578182fd5b50508035926020909101359150565b600080604083850312156117f0578182fd5b505080516020909101519092909150565b600080600060608486031215611815578081fd5b505081359360208301359350604090920135919050565b60008060008060808587031215611841578081fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215611874578081fd5b85359450602086013593506040860135925060608601359150611899608087016116bd565b90509295509295909350565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f43616c6c6572206973206e6f74207468652061646d696e000000000000000000604082015260600190565b6000821982111561193057634e487b7160e01b81526011600452602481fd5b500190565b801515811461194357600080fd5b5056fea26469706673582212200867928b99e904d323f449b26ce9b4b4347f8a3a958aa5789280ab3bfb16a36564736f6c63430008040033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading