abstract_add_on/
state.rs

1use cosmwasm_std::{Addr, StdResult, Storage};
2use cw2::{ContractVersion, CONTRACT};
3use cw_controllers::Admin;
4use cw_storage_plus::Item;
5use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7
8use abstract_sdk::{memory::Memory, ADMIN, BASE_STATE};
9
10/// The state variables for our AddOnContract.
11pub struct AddOnContract<'a> {
12    // Every DApp should use the provided memory contract for token/contract address resolution
13    pub base_state: Item<'a, AddOnState>,
14    pub version: Item<'a, ContractVersion>,
15    pub admin: Admin<'a>,
16}
17
18impl Default for AddOnContract<'static> {
19    fn default() -> Self {
20        Self::new(BASE_STATE, ADMIN)
21    }
22}
23
24/// Constructor
25impl<'a> AddOnContract<'a> {
26    fn new(base_state_key: &'a str, admin_key: &'a str) -> Self {
27        Self {
28            version: CONTRACT,
29            base_state: Item::new(base_state_key),
30            admin: Admin::new(admin_key),
31        }
32    }
33    pub fn state(&self, store: &dyn Storage) -> StdResult<AddOnState> {
34        self.base_state.load(store)
35    }
36
37    pub fn version(&self, store: &dyn Storage) -> StdResult<ContractVersion> {
38        self.version.load(store)
39    }
40}
41
42/// The BaseState contains the main addresses needed for sending and verifying messages
43#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
44pub struct AddOnState {
45    /// Proxy contract address for relaying transactions
46    pub proxy_address: Addr,
47    /// Memory contract struct (address)
48    pub memory: Memory,
49}