The Gov Contract contains logic for holding polls and Mirror Token (MIR) staking, and allows the Mirror Protocol to be governed by its users in a decentralized manner. After the initial bootstrapping of Mirror Protocol contracts, the Gov Contract is assigned to be the owner of itself and Mirror Factory.
New proposals for change are submitted as polls, and are voted on by MIR stakers through the voting procedure. Polls can contain messages that can be executed directly without changing the Mirror Protocol code.
The Gov Contract keeps a balance of MIR tokens, which it uses to reward stakers with funds it receives from trading fees sent by the Mirror Collector and user deposits from creating new governance polls. This balance is separate from the Community Pool, which is held by the Community contract (owned by the Gov contract).
Key | Type | Description |
---|---|---|
mirror_token |
HumanAddr | Contract address of Mirror Token (MIR) |
quorum |
Decimal | Minimum percentage of participation required for a poll to pass |
threshold |
Decimal | Minimum percentage of yes votes required for a poll to pass |
voting_period |
u64 | Number of blocks during which votes can be cast |
proposal_deposit |
Uint128 | Minimum MIR deposit required for a new poll to be submitted |
effective_delay |
u64 | Number of blocks after a poll passes to apply changes |
expiration_period |
u64 | Number of blocks after a poll's voting period during which the poll can be executed. |
voter_weight |
Decimal | Ratio of protocol fee which will be distributed among the governance poll voters |
snapshot_period |
u64 | Minimum number of blocks before the end of voting period which snapshot could be taken to lock the current quorum for a poll |
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct InitMsg {
pub mirror_token: HumanAddr,
pub quorum: Decimal,
pub threshold: Decimal,
pub voting_period: u64,
pub effective_delay: u64,
pub expiration_period: u64,
pub proposal_deposit: Uint128,
pub voter_weight: Decimal,
pub snapshot_period: u64,
}
{% endtab %}
{% tab title="JSON" %}
{
"mirror_token": "terra1...",
"quorum": "0.1",
"threshold": "0.5",
"voting_period": 8,
"effective_delay": 8,
"expiration_period": 8,
"proposal_deposit": "100000",
"voter_weight": "0.5",
"snapshot_period": 8
}
{% endtab %} {% endtabs %}
Key | Type | Description |
---|---|---|
mirror_token |
HumanAddr | Contract address of Mirror Token (MIR) |
quorum |
Decimal | Minimum percentage of participation required for a poll to pass |
threshold |
Decimal | Minimum percentage of yes votes required for a poll to pass |
voting_period |
u64 | Number of blocks during which votes can be cast |
proposal_deposit |
Uint128 | Minimum MIR deposit required for a new poll to be submitted |
effective_delay |
u64 | Number of blocks after a poll passes to apply changes |
voter_weight |
Decimal | Ratio of protocol fee which will be distributed among the governance poll voters |
snapshot_period |
u64 | Minimum number of blocks before the end of voting period which snapshot could be taken to lock the current quorum for a poll |
Can be called during a CW20 token transfer when the Gov contract is the recipient. Allows the token transfer to execute a Receive Hook as a subsequent action within the same transaction.
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum HandleMsg {
Receive {
amount: Uint128,
sender: HumanAddr,
msg: Option<Binary>,
}
}
{% endtab %}
{% tab title="JSON" %}
{
"receive": {
"amount": "10000000",
"sender": "terra1...",
"msg": "eyAiZXhlY3V0ZV9tc2ciOiAiYmxhaCBibGFoIiB9"
}
}
{% endtab %} {% endtabs %}
Key | Type | Description |
---|---|---|
amount |
Uint128 | Amount of tokens received |
sender |
HumanAddr | Sender of token transfer |
msg * |
Binary | Base64-encoded JSON of Receive Hook |
* = optional
Updates the configuration for the Gov contract.
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum HandleMsg {
UpdateConfig {
owner: Option<HumanAddr>,
quorum: Option<Decimal>,
threshold: Option<Decimal>,
voting_period: Option<u64>,
effective_delay: Option<u64>,
expiration_period: Option<u64>,
proposal_deposit: Option<Uint128>,
voter_weight: Option<Decimal>,
snapshot_period: Option<u64>,
}
}
{% endtab %}
{% tab title="JSON" %}
{
"update_config": {
"owner": "terra...1",
"mirror_token": "terra1...",
"quorum": "0.1",
"threshold": "0.5",
"voting_period": 8,
"effective_delay": 8,
"expiration_period": 8,
"proposal_deposit": "100000",
"voter_weight": "0.5",
"snapshot_period": 8
}
}
{% endtab %} {% endtabs %}
Key | Type | Description |
---|---|---|
owner * |
HumanAddr | Address of owner of governance contract |
quorum * |
Decimal | Minimum percentage of participation required for a poll to pass |
threshold * |
Decimal | Minimum percentage of yes votes required for a poll to pass |
voting_period * |
u64 | Number of blocks during which votes can be cast |
effective_delay * |
u64 | Number of blocks after a poll passes to apply changes |
expiration_period * |
u64 | Number of blocks after a poll's voting period during which the poll can be executed |
proposal_deposit * |
Uint128 | Minimum MIR deposit required for a new poll to be submitted |
voter_weight * |
Decimal | Ratio of protocol fee which will be distributed among the governance poll voters |
snapshot_period * |
u64 | Minimum number of blocks before end of voting period which snapshot could be taken to lock the current quorum for a poll |
* = optional
Submits a user's vote for an active poll. Once a user has voted, they cannot change their vote with subsequent messages (increasing voting power, changing vote option, cancelling vote, etc.)
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum HandleMsg {
CastVote {
poll_id: u64,
vote: VoteOption,
amount: Uint128,
},
}
{% endtab %}
{% tab title="JSON" %}
{
"cast_vote": {
"amount": "1000000",
"poll_id": 8,
"vote": "yes/no/abstain"
}
}
{% endtab %} {% endtabs %}
Key | Type | Description |
---|---|---|
amount |
Uint128 | Amount of voting power (staked MIR) to allocate |
poll_id |
u64 | Poll ID |
vote |
VoteOption | Can be yes ,no or abstain |
Removes deposited MIR tokens from a staking position and returns them to a user's balance.
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum HandleMsg {
WithdrawVotingTokens {
amount: Option<Uint128>,
}
}
{% endtab %}
{% tab title="JSON" %}
{
"withdraw_voting_tokens": {
"amount": "10000000"
}
}
{% endtab %} {% endtabs %}
Key | Type | Description |
---|---|---|
amount * |
Uint128 | Amount of MIR tokens to withdraw. If empty, all staked MIR tokens are withdrawn. |
* = optional
Withdraws a user’s voting reward for user’s voted governance poll after end_poll
has happened.
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum HandleMsg {
WithdrawVotingRewards {},
}
{% endtab %}
{% tab title="JSON" %}
{
"withdraw_voting_rewards": {}
}
{% endtab %} {% endtabs %}
Immediately re-stakes user's voting rewards to Gov Contract.
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum HandleMsg {
StakeVotingRewards {},
}
{% endtab %}
{% tab title="JSON" %}
{
"stake_voting_rewards": {}
}
{% endtab %} {% endtabs %}
Can be issued by anyone to end the voting for an active poll. Triggers tally the results to determine whether the poll has passed. The current block height must exceed the end height of voting phase.
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum HandleMsg {
EndPoll {
poll_id: u64,
}
}
{% endtab %}
{% tab title="JSON" %}
{
"end_poll": {
"poll_id": 8
}
}
{% endtab %} {% endtabs %}
Key | Type | Description |
---|---|---|
poll_id |
u64 | Poll ID |
Can be issued by anyone to implement into action the contents of a passed poll. The current block height must exceed the end height of the poll's effective delay.
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum HandleMsg {
ExecutePoll {
poll_id: u64,
}
}
{% endtab %}
{% tab title="JSON" %}
{
"execute_poll": {
"poll_id": 8
}
}
{% endtab %} {% endtabs %}
Key | Type | Description |
---|---|---|
poll_id |
u64 | Poll ID |
Snapshot of poll’s current quorum
status is saved when the block height enters snapshot_period
.
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum HandleMsg {
SnapshotPoll {
poll_id: u64,
}
}
{% endtab %}
{% tab title="JSON" %}
{
"snapshot_poll": {
"poll_id": 8
}
}
{% endtab %} {% endtabs %}
Key | Type | Description |
---|---|---|
poll_id |
u64 | Poll ID |
{% hint style="danger" %} WARNING
If you send MIR tokens to the Gov contract without issuing this hook, they will not be staked and will be irrevocably donated to the reward pool for stakers. {% endhint %}
Issued when sending MIR tokens to the Gov contract to add them to their MIR staking position.
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum Cw20HookMsg {
StakeVotingTokens {}
}
{% endtab %}
{% tab title="JSON" %}
{
"stake_voting_tokens": {}
}
{% endtab %} {% endtabs %}
Issued when sending MIR tokens to the Gov contract to create a new poll. Will only succeed if the amount of tokens sent meets the configuredproposal_deposit
amount. Contains a generic message to be issued by the Gov contract if it passes (can invoke messages in other contracts it owns).
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum Cw20HookMsg {
CreatePoll {
description: String,
execute_msg: Option<ExecuteMsg>,
link: Option<String>,
title: String,
}
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct ExecuteMsg {
pub contract: HumanAddr,
pub msg: Binary,
}
{% endtab %}
{% tab title="JSON" %}
{
"create_poll": {
"description": "...",
"execute_msg": {
"contract": "terra1...",
"msg": "eyAiZXhlY3V0ZV9tc2ciOiAiYmxhaCBibGFoIiB9"
},
"link": "...",
"title": "..."
}
}
{% endtab %} {% endtabs %}
Key | Type | Description |
---|---|---|
description |
string | Poll description |
execute_msg * |
ExecuteMsg | Message to be executed by Gov contract |
link * |
string | URL to external post about poll (forum, PDF, etc.) |
title |
string | Poll title |
* = optional
Reward is distributed between MIR stakers and governance poll voters based on voter_weight
when rewards are sent from Mirror Collector.
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum Cw20HookMsg {
DepositReward {},
}
{% endtab %}
{% tab title="JSON" %}
{
"deposit_reward": {}
}
{% endtab %} {% endtabs %}
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Config {}
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema)]
pub struct ConfigResponse {
pub owner: HumanAddr,
pub mirror_token: HumanAddr,
pub quorum: Decimal,
pub threshold: Decimal,
pub voting_period: u64,
pub effective_delay: u64,
pub expiration_period: u64,
pub proposal_deposit: Uint128,
pub voter_weight: Decimal,
pub snapshot_period: u64,
}
Key | Type | Description |
---|---|---|
mirror_token |
HumanAddr | Contract address of Mirror Token (MIR) |
quorum |
Decimal | Minimum percentage of participation required for a poll to pass |
threshold |
Decimal | Minimum percentage of yes votes required for a poll to pass |
voting_period |
u64 | Number of blocks during which votes can be cast |
effective_delay |
u64 | Number of blocks after a poll passes to apply changes |
expiration_period |
u64 | Number of blocks after a poll's voting period during which the poll can be executed |
proposal_deposit |
Uint128 | Minimum MIR deposit required for a new poll to be submitted |
voter_weight |
Decimal | Ratio of protocol fee which will be distributed among the governance poll voters |
snapshot_period |
u64 | Minimum number of blocks before end of voting period which snapshot could be taken to lock the current quorum for a poll |
{% endtab %} |
{% tab title="JSON" %}
{
"config": {}
}
{
"config_response": {
"owner": "terra1...",
"mirror_token": "terra1...",
"quorum": "0.1",
"threshold": "0.5",
"voting_period": 100000,
"effective_delay": 13000,
"expiration_period": 13000,
"proposal_deposit": "1000000",
"voter_weight": "0.5",
"snapshot_period": 1000
}
}
Key | Type | Description |
---|---|---|
mirror_token |
HumanAddr | Contract address of Mirror Token (MIR) |
quorum |
Decimal | Minimum percentage of participation required for a poll to pass |
threshold |
Decimal | Minimum percentage of yes votes required for a poll to pass |
voting_period |
u64 | Number of blocks during which votes can be cast |
effective_delay |
u64 | Number of blocks after a poll passes to apply changes |
expiration_period |
u64 | Number of blocks after a poll's voting period during which the poll can be executed |
proposal_deposit |
Uint128 | Minimum MIR deposit required for a new poll to be submitted |
voter_weight |
Decimal | Ratio of protocol fee which will be distributed among the governance poll voters |
snapshot_period |
u64 | Minimum number of blocks before end of voting period which snapshot could be taken to lock the current quorum for a poll |
{% endtab %} | ||
{% endtabs %} |
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
State {}
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema)]
pub struct StateResponse {
pub poll_count: u64,
pub total_share: Uint128,
pub total_deposit: Uint128,
pub pending_voting_rewards: Uint128,
}
Key | Type | Description |
---|---|---|
poll_count |
u64 | Total number of polls that have been created on Mirror Protocol |
total_share |
Uint128 | Amount of staked MIR to governance contract |
total_deposit |
Uint128 | Amount of locked MIR to governance polls |
pending_voting_rewards |
Uint128 | Amount of voting rewards that are not claimed yet |
{% endtab %} |
{% tab title="JSON" %}
{
"state": {}
}
{
"state_response": {
"poll_count": 100,
"total_share": "1000000",
"total_deposit": "1000000",
"pending_voting_rewards": "1000000"
}
}
Key | Type | Description |
---|---|---|
poll_count |
u64 | Total number of polls that have been created on Mirror Protocol |
total_share |
Uint128 | Amount of staked MIR to governance contract |
total_deposit |
Uint128 | Amount of locked MIR to governance polls |
pending_voting_rewards |
Uint128 | Amount of voting rewards that are not claimed yet |
{% endtab %} | ||
{% endtabs %} |
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Staker {
address: HumanAddr,
}
}
Key | Type | Description |
---|---|---|
address |
HumanAddr | Address of staker |
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema)]
pub struct StakerResponse {
pub balance: Uint128,
pub share: Uint128,
pub locked_balance: Vec<(u64, VoterInfo)>,
pub pending_voting_rewards: Uint128,
}
Key | Type | Description |
---|---|---|
balance |
Uint128 | Amount of MIR staked by the user |
share |
Uint128 | Weight of the user's staked MIR |
locked_balance |
Vec<(u64, VoterInfo)> | Total number of staked MIR used as votes, and chosen vote option |
pending_voting_rewards |
u64 | Amount of voting rewards that are not claimed yet |
{% endtab %} |
{% tab title="JSON" %}
{
"staker": {
"address": "terra1..."
}
}
Key | Type | Description |
---|---|---|
address |
HumanAddr | Address of staker |
{
"staker_response": {
"balance": "1000000",
"share": "1000000",
"locked_balance": [
[100, yes, "1000000"],
[100, abstain, "1000000"]
]
"pending_voting_rewards": "1000000"
}
}
Key | Type | Description |
---|---|---|
balance |
Uint128 | Amount of MIR staked by the user |
share |
Uint128 | Weight of the user's staked MIR |
locked_balance |
Vec<(u64, VoterInfo)> | Total number of staked MIR used as votes, and chosen vote option |
pending_voting_rewards |
u64 | Amount of voting rewards that are not claimed yet |
{% endtab %} | ||
{% endtabs %} |
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Poll {
poll_id: u64,
}
}
Key | Type | Description |
---|---|---|
poll_id |
u64 | Poll ID |
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema)]
pub struct PollResponse {
pub id: u64,
pub creator: HumanAddr,
pub status: PollStatus,
pub end_height: u64,
pub title: String,
pub description: String,
pub link: Option<String>,
pub deposit_amount: Uint128,
pub execute_data: Option<ExecuteMsg>,
pub yes_votes: Uint128, // balance
pub no_votes: Uint128, // balance
pub abstain_votes: Uint128, // balance
pub total_balance_at_end_poll: Option<Uint128>,
pub voters_reward: Uint128,
pub staked_amount: Option<Uint128>,
}
Key | Type | Description |
---|---|---|
id | u64 | Poll ID |
creator | HumanAddr | Address of the poll creator |
status | PollStatus | Could be one of "in progress", "rejected", "passed", "executed", "expired" |
end_height | u64 | Amount of voting rewards that are not claimed yet |
title | String | Title of the poll |
description | String | Description submitted by the creator |
link* | Uint128 | URL link |
deposit_amount | binary | Initial MIR deposit at poll creation |
execute_data* | ExecuteMsg | Message to be executed by Gov contract |
yes_votes | Uint128 | Amount of yes votes |
no_votes | Uint128 | Amount of no votes |
abstain_votes | Uint128 | Amount of abstain votes |
total_balance_at_end_poll* | Uint128 | Total balanced used as yes, no, or abstain votes at the end of the poll |
voters_reward | Uint128 | Amount of MIR reward accumulated to be distributed to the voters |
staked_amount* | Uint128 | Total number of MIR staked on governance contract (used when Snapshot Poll has been taken) |
{% endtab %} |
{% tab title="JSON" %}
{
"poll": {
"poll_id": 8
}
}
Key | Type | Description |
---|---|---|
poll_id |
u64 | Poll ID |
{
"poll_response": {
"id": 8,
"creator": "terra1...",
"status": "in_progress",
"end_height": 1000000,
"title": "Register mCOIN Parameters",
"description": "mCOIN has been...",
"link": "https://mirror.finance",
"deposit_amount": "1000000",
"execute_data": "eyAiZXhlY3V0ZV9tc2ciOiAiYmxhaCBibGFoIiB9",
"yes_votes": "1000000",
"no_votes": "1000000",
"abstain_votes": "1000000",
"total_balance_at_end_poll": "1000000",
"voters_reward": "1000000",
"staked_amount": "1000000"
}
}
Key | Type | Description |
---|---|---|
id | u64 | Poll ID |
creator | HumanAddr | Address of the poll creator |
status | PollStatus | Could be one of "in progress", "rejected", "passed", "executed", "expired" |
end_height | u64 | Amount of voting rewards that are not claimed yet |
title | String | Title of the poll |
description | String | Description submitted by the creator |
link* | Uint128 | URL link |
deposit_amount | binary | Initial MIR deposit at poll creation |
execute_data* | ExecuteMsg | Message to be executed by Gov contract |
yes_votes | Uint128 | Amount of yes votes |
no_votes | Uint128 | Amount of no votes |
abstain_votes | Uint128 | Amount of abstain votes |
total_balance_at_end_poll* | Uint128 | Total balanced used as yes, no, or abstain votes at the end of the poll |
voters_reward | Uint128 | Amount of MIR reward accumulated to be distributed to the voters |
staked_amount* | Uint128 | Total number of MIR staked on governance contract (used when Snapshot Poll has been taken) |
{% endtab %} | ||
{% endtabs %} |
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Polls {
filter: Option<PollStatus>,
limit: Option<u32>,
start_after: Option<u64>,
}
}
Key | Type | Description |
---|---|---|
filter * |
PollStatus | Can be yes or no |
limit * |
u32 | Limit of results to fetch |
start_after * |
u64 | Begins search query at specific ID |
* = optional
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema)]
pub struct PollsResponse {
pub polls: Vec<PollResponse>,
}
Key | Type | Description |
---|---|---|
polls |
Vec<PollResponse> | Array of poll query responses |
{% endtab %} |
{% tab title="JSON" %}
{
"polls": {
"filter": "in_progress",
"limit": 8,
"start_after": 8
}
}
Key | Type | Description |
---|---|---|
filter * |
PollStatus | Can be yes or no |
limit * |
u32 | Limit of results to fetch |
start_after * |
u64 | Begins search query at specific ID |
* = optional
{
"polls_response": {
"polls": [
"poll_response": {
"id": 8,
"creator": "terra1...",
"status": "in_progress",
"end_height": 1000000,
"title": "Register mCOIN Parameters",
"description": "mCOIN has been...",
"link": "https://mirror.finance",
"deposit_amount": "1000000",
"execute_data": "eyAiZXhlY3V0ZV9tc2ciOiAiYmxhaCBibGFoIiB9",
"yes_votes": "1000000",
"no_votes": "1000000",
"abstain_votes": "1000000",
"total_balance_at_end_poll": "1000000",
"voters_reward": "1000000",
"staked_amount": "1000000"
}
...
]
}
}
Key | Type | Description |
---|---|---|
polls |
Vec<PollResponse> | Array of poll query responses |
{% endtab %} | ||
{% endtabs %} |
{% tabs %} {% tab title="Rust" %}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Voters {
limit: Option<u32>,
poll_id: u64,
start_after: Option<HumanAddr>,
}
}
Key | Type | Description |
---|---|---|
limit * |
u32 | Limit of results to fetch |
poll_id |
u64 | Poll ID |
start_after * |
HumanAddr | Begins search query with prefix |
* = optional
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema)]
pub struct VotersResponseItem {
pub voter: HumanAddr,
pub vote: VoteOption,
pub balance: Uint128,
}
Key | Type | Description |
---|---|---|
voter |
HumanAddr | Address of the voter |
vote |
VoteOption | Could be one of yes , no , abstain |
balance |
Uint128 | Amount of staked MIR used for voting |
{% endtab %} |
{% tab title="JSON" %}
{
"voters": {
"limit": 8,
"poll_id": 8,
"start_after": "terra1..."
}
}
Key | Type | Description |
---|---|---|
limit * |
u32 | Limit of results to fetch |
poll_id |
u64 | Poll ID |
start_after * |
HumanAddr | Begins search query with prefix |
* = optional
{
"voter_response": {
"voter": "terra1...",
"vote": "yes",
"balance": "1000000"
}
}
Key | Type | Description |
---|---|---|
voter |
HumanAddr | Address of the voter |
vote |
VoteOption | Could be one of yes , no , abstain |
balance |
Uint128 | Amount of staked MIR used for voting |
{% endtab %} | ||
{% endtabs %} |