Builder's staked allocations can vote with a Governance determined % of their voting power and receive normal revenue minus MBRN inflationary rewards. Staking revenue needs to be claimed for the contract before being able to distribute to the receiver. Voting and proposal creation by allocation receivers is also done through this contract.
InstantiateMsg
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct InstantiateMsg {
pub owner: Option<String>,
pub initial_allocation: Uint128,
pub pre_launch_contributors: String,
pub pre_launch_community: Vec<String>
pub mbrn_denom: String,
pub osmosis_proxy: String,
pub staking_contract: String,
}
Key Type Description Address receiving pre-launch contributors allocation
Address receiving pre-launch community allocation
Osmosis Proxy contract address
MBRN Staking contract address
* = optional
ExecuteMsg
AddRecipient
Add address eligible to receiver a MBRN allocation
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
AddRecipient {
recipient: String,
}
}
RemoveRecipient
Remove Receiver and any allocations
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
RemoveRecipient {
recipient: String,
}
}
AddAllocation
Add MBRN allocation to an eligible Recipient
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
AddAllocation {
recipient: String,
allocation: Uint128,
vesting_period: Option<VestingPeriod>,
}
}
pub struct VestingPeriod {
pub cliff: u64, //In days
pub linear: u64, //In days
}
Key Type Description VestingPeriod for receiver's allocation
* = optional
WithdrawUnlocked
Withdraw unlocked tokens for info.sender if address is a Receiver
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
WithdrawUnlocked { }
}
ClaimFeesForContract
Claim staking liquidation fee rewards for the contract which distributes it to Receivers with an allocation
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
ClaimFeesforContract { }
}
ClaimFeesForReceiver
If info.sender is a Receiver, claim allocated rewards
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
ClaimFeesforContract { }
}
SubmitProposal
Submit MBRN Governance proposal
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
SubmitProposal {
title: String,
description: String,
link: Option<String>,
messages: Option<Vec<ProposalMessage>>,
expedited: bool,
}
}
pub struct ProposalMessage {
/// Order of execution of the message
pub order: Uint64,
/// Execution message
pub msg: CosmosMsg,
}
Key Type Description Proposal executeable messages
Expedited Proposal toggle
* = optional
CastVote
Vote for MBRN proposal
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
CastVote {
proposal_id: u64,
vote: ProposalVoteOption,
}
}
pub enum ProposalVoteOption {
For,
Against,
}
UpdateConfig
Update Config if contract owner
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg {
UpdateConfig {
owner: Option<String>,
mbrn_denom: Option<String>,
osmosis_proxy: Option<String>,
staking_contract: Option<String>,
additional_allocation: Option<Uint128>,
}
}
Key Type Description Osmosis Proxy contract addr
MBRN staking contract addr
Increase contract's available allocation amount
* = optional
QueryMsg
Config
Returns Config
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Config {}
}
pub struct Config {
pub owner: Addr,
pub initial_allocation: Uint128,
pub mbrn_denom: String,
pub osmosis_proxy: Addr,
pub staking_contract: Addr,
}
Recipients
Returns list of Recipients
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Recipients {}
}
//Vec<ReceiverResponse>
pub struct ReceiverResponse {
pub recipient: String,
pub allocation: Option<Allocation>,
pub claimables: Vec<Asset>,
}
Allocation
Returns allocation for a Recipient
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Allocation {
recipient: String,
}
}
pub struct AllocationResponse {
pub amount: String,
pub amount_withdrawn: String,
pub start_time_of_allocation: String, //block time of allocation in seconds
pub vesting_period: VestingPeriod, //In days
}
UnlockedTokens
Returns a Receiver's unlocked allocation
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
UnlockedTokens {
recipient: String,
}
}
Recipient
Returns a Recipient
Copy #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg {
Recipient {
recipient: String,
}
}
pub struct ReceiverResponse {
pub recipient: String,
pub allocation: Option<Allocation>,
pub claimables: Vec<Asset>,
}