1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use cosmwasm_std::{Addr, Decimal, Uint128};
use cw0::Duration;
use cw_controllers::Claims;
use cw_storage_plus::Item;
pub const CLAIMS: Claims = Claims::new("claims");
/// Investment info is fixed at instantiation, and is used to control the function of the contract
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct InvestmentInfo {
/// Owner created the contract and takes a cut
pub owner: Addr,
/// This is the denomination we can stake (and only one we accept for payments)
pub bond_denom: String,
/// This is the unbonding period of the native staking module
/// We need this to only allow claims to be redeemed after the money has arrived
pub unbonding_period: Duration,
/// This is how much the owner takes as a cut when someone unbonds
pub exit_tax: Decimal,
/// All tokens are bonded to this validator
/// FIXME: address validation doesn't work for validator addresses
pub validator: String,
/// This is the minimum amount we will pull out to reinvest, as well as a minimum
/// that can be unbonded (to avoid needless staking tx)
pub min_withdrawal: Uint128,
}
/// Supply is dynamic and tracks the current supply of staked and ERC20 tokens.
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema, Default)]
pub struct Supply {
/// issued is how many derivative tokens this contract has issued
pub issued: Uint128,
/// bonded is how many native tokens exist bonded to the validator
pub bonded: Uint128,
/// claims is how many tokens need to be reserved paying back those who unbonded
pub claims: Uint128,
}
pub const INVESTMENT: Item<InvestmentInfo> = Item::new("invest");
pub const TOTAL_SUPPLY: Item<Supply> = Item::new("total_supply");