{
  "version": "v4.2.5",
  "name": "GovernanceDemo",
  "bytecode": "090c40c9419741f54217422b426c42a642b44382438d439843a801000206004058d3926b380bb417021602ce00774513087b140a5f5f6d61705f5f305f5f16004744cbc54c403f0c0d0d140a5f5f6d61705f5f305f5f16004744cb1705160501010d0d0d1605010117041703000b7a4c041816030c304c180c0d0d140a5f5f6d61705f5f315f5f16034044cb010116012a0c0e0c140a5f5f6d61705f5f315f5f16034044cb0102a00016012aa100160416012a0d0e0c140a5f5f6d61705f5f305f5f16004744cb01024a09ca140a5f5f6d61705f5f305f5f16004744b10c1601d201020100020700405ed365b06caeb417021602ce00774513087b140a5f5f6d61705f5f305f5f16004744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1706160601010d0d0d1606010117041703160416012b170516050d0e0c140a5f5f6d61705f5f305f5f16004744cb0102000b7a4c041816030c304c180c0d0d140a5f5f6d61705f5f315f5f16034044cb010116012b0c0e0c140a5f5f6d61705f5f315f5f16034044cb0102a00016012ba10016050c2f4c09ca0d0c140a5f5f6d61705f5f305f5f16004744cb010301000002004033d3ecf99ab7b4ce054513077b000919107b000a19117b56a101ce01ce02ce03ce041017000c170116011600314c14ca140a5f5f6d61705f5f315f5f16017a10314d0d2acf4044b10cd2010116010d2a17014a2805a0015e010000000012d33919f580b4ce054513077b00090f7b000a19117b56a10207a0025e010000000406d3068539face01ce02ce03ce040201000102021ad344a25325140a5f5f6d61705f5f305f5f16004744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16004744cb1701160101010d0d0d1601010102010001010116d32e30a67700090f7b140a5f5f6d61705f5f315f5f16004044cbc50e7b0c0d0d140a5f5f6d61705f5f315f5f16004044cb010102010000000103d33cfd4f9ea000020100010300405cd376a80ea2b417011601480c7b00090f7b000a19117b140a5f5f6d61705f5f315f5f16004044cbc50e7b140a5f5f6d61705f5f305f5f16014744cbc50d7b0c0d0d140a5f5f6d61705f5f305f5f16014744cb01010c2f13067b0d0d0d140a5f5f6d61705f5f305f5f16014744cb01011702a00016022aa1000c0d0d140a5f5f6d61705f5f315f5f16004044cb010116022a0c0e0c140a5f5f6d61705f5f315f5f16004044cb010216000c0e0c140a5f5f6d61705f5f305f5f16014744cb01020616011600160260000000000104a0010c3002000000000104a0020c300200000000010700097a4c0318000a1902",
  "codeHash": "1d77f89642f8b3bd6364388e7b9b8ad9d58815365d4e7a02a932fe65ab913078",
  "fieldsSig": {
    "names": [
      "xalphStakeVault",
      "proposalOptions",
      "owner",
      "totalVotedAmount",
      "votingStartTime",
      "votingEndTime"
    ],
    "types": [
      "XAlphStakeVault",
      "[U256;4]",
      "Address",
      "U256",
      "U256",
      "U256"
    ],
    "isMutable": [
      false,
      false,
      false,
      true,
      true,
      true
    ]
  },
  "eventsSig": [
    {
      "name": "VotingStarted",
      "fieldNames": [
        "votingStartTime"
      ],
      "fieldTypes": [
        "U256"
      ]
    },
    {
      "name": "VoteCast",
      "fieldNames": [
        "voter",
        "proposalVoted",
        "amount"
      ],
      "fieldTypes": [
        "Address",
        "U256",
        "U256"
      ]
    },
    {
      "name": "VotingEnded",
      "fieldNames": [
        "votingEndTime"
      ],
      "fieldTypes": [
        "U256"
      ]
    }
  ],
  "functions": [
    {
      "name": "onStake",
      "paramNames": [
        "user",
        "addedAmount"
      ],
      "paramTypes": [
        "Address",
        "U256"
      ],
      "paramIsMutable": [
        false,
        false
      ],
      "returnTypes": []
    },
    {
      "name": "onUnstake",
      "paramNames": [
        "user",
        "removedAmount"
      ],
      "paramTypes": [
        "Address",
        "U256"
      ],
      "paramIsMutable": [
        false,
        false
      ],
      "returnTypes": []
    },
    {
      "name": "startVoting",
      "paramNames": [],
      "paramTypes": [],
      "paramIsMutable": [],
      "returnTypes": []
    },
    {
      "name": "endVoting",
      "paramNames": [],
      "paramTypes": [],
      "paramIsMutable": [],
      "returnTypes": []
    },
    {
      "name": "getProposalOptions",
      "paramNames": [],
      "paramTypes": [],
      "paramIsMutable": [],
      "returnTypes": [
        "[U256;4]"
      ]
    },
    {
      "name": "getUserVote",
      "paramNames": [
        "user"
      ],
      "paramTypes": [
        "Address"
      ],
      "paramIsMutable": [
        false
      ],
      "returnTypes": [
        "VoteInfo"
      ]
    },
    {
      "name": "getProposalVotes",
      "paramNames": [
        "proposal"
      ],
      "paramTypes": [
        "U256"
      ],
      "paramIsMutable": [
        false
      ],
      "returnTypes": [
        "U256"
      ]
    },
    {
      "name": "getTotalVotedAmount",
      "paramNames": [],
      "paramTypes": [],
      "paramIsMutable": [],
      "returnTypes": [
        "U256"
      ]
    },
    {
      "name": "vote",
      "paramNames": [
        "proposal"
      ],
      "paramTypes": [
        "U256"
      ],
      "paramIsMutable": [
        false
      ],
      "returnTypes": []
    },
    {
      "name": "isVotingStarted",
      "paramNames": [],
      "paramTypes": [],
      "paramIsMutable": [],
      "returnTypes": [
        "Bool"
      ]
    },
    {
      "name": "isVotingEnded",
      "paramNames": [],
      "paramTypes": [],
      "paramIsMutable": [],
      "returnTypes": [
        "Bool"
      ]
    },
    {
      "name": "isVotingActive",
      "paramNames": [],
      "paramTypes": [],
      "paramIsMutable": [],
      "returnTypes": [
        "Bool"
      ]
    }
  ],
  "constants": [],
  "enums": [
    {
      "name": "ErrorCodes",
      "fields": [
        {
          "name": "AssetAddressCallerOnly",
          "value": {
            "type": "U256",
            "value": "0"
          }
        },
        {
          "name": "UserNotStaked",
          "value": {
            "type": "U256",
            "value": "1"
          }
        },
        {
          "name": "InvalidVoteProposal",
          "value": {
            "type": "U256",
            "value": "2"
          }
        },
        {
          "name": "VotingNotStarted",
          "value": {
            "type": "U256",
            "value": "3"
          }
        },
        {
          "name": "VotingAlreadyStarted",
          "value": {
            "type": "U256",
            "value": "4"
          }
        },
        {
          "name": "VotingAlreadyEnded",
          "value": {
            "type": "U256",
            "value": "5"
          }
        },
        {
          "name": "AlreadyVoted",
          "value": {
            "type": "U256",
            "value": "6"
          }
        },
        {
          "name": "OwnerOnly",
          "value": {
            "type": "U256",
            "value": "7"
          }
        },
        {
          "name": "StakeVaultCallerOnly",
          "value": {
            "type": "U256",
            "value": "8"
          }
        }
      ]
    }
  ],
  "mapsSig": {
    "names": [
      "userVotes",
      "proposalVotes"
    ],
    "types": [
      "Map[Address,VoteInfo]",
      "Map[U256,U256]"
    ]
  }
}